{"$schema":"https://json.schemastore.org/sarif-2.1.0.json","version":"2.1.0","runs":[{"tool":{"driver":{"name":"codehealth","informationUri":"https://codehealth.canine.dev","rules":[{"id":"D1","name":"Cyclomatic Complexity","shortDescription":{"text":"Cyclomatic Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D1"},{"id":"D2","name":"Cognitive Complexity","shortDescription":{"text":"Cognitive Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D2"},{"id":"D3","name":"God Classes","shortDescription":{"text":"God Classes"},"helpUri":"https://codehealth.canine.dev/dimensions/D3"},{"id":"D4","name":"Code Duplication","shortDescription":{"text":"Code Duplication"},"helpUri":"https://codehealth.canine.dev/dimensions/D4"},{"id":"D5","name":"Coupling","shortDescription":{"text":"Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D5"},{"id":"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":"D11","name":"Test Reliability","shortDescription":{"text":"Test Reliability"},"helpUri":"https://codehealth.canine.dev/dimensions/D11"},{"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":"D21","name":"Naming Consistency","shortDescription":{"text":"Naming Consistency"},"helpUri":"https://codehealth.canine.dev/dimensions/D21"},{"id":"D22","name":"Internal API Consistency","shortDescription":{"text":"Internal API Consistency"},"helpUri":"https://codehealth.canine.dev/dimensions/D22"},{"id":"D23","name":"Boundary Type-Coupling","shortDescription":{"text":"Boundary Type-Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D23"},{"id":"D24","name":"Comment Value","shortDescription":{"text":"Comment Value"},"helpUri":"https://codehealth.canine.dev/dimensions/D24"},{"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":"D34","name":"Knowledge Freshness","shortDescription":{"text":"Knowledge Freshness"},"helpUri":"https://codehealth.canine.dev/dimensions/D34"},{"id":"D35","name":"Change Coupling","shortDescription":{"text":"Change Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D35"},{"id":"D36","name":"Supply-chain Provenance \u0026 Signing","shortDescription":{"text":"Supply-chain Provenance \u0026 Signing"},"helpUri":"https://codehealth.canine.dev/dimensions/D36","relationships":[{"target":{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1357","CWE-494"]}},{"id":"D37","name":"Vulnerability-disclosure Policy","shortDescription":{"text":"Vulnerability-disclosure Policy"},"helpUri":"https://codehealth.canine.dev/dimensions/D37","relationships":[{"target":{"id":"CWE-1059","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1059"]}},{"id":"D40","name":"Network Egress Confinement","shortDescription":{"text":"Network Egress Confinement"},"helpUri":"https://codehealth.canine.dev/dimensions/D40"},{"id":"D41","name":"Kernel \u0026 Syscall Confinement","shortDescription":{"text":"Kernel \u0026 Syscall Confinement"},"helpUri":"https://codehealth.canine.dev/dimensions/D41"},{"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":"D44","name":"Platform End-of-Life","shortDescription":{"text":"Platform End-of-Life"},"helpUri":"https://codehealth.canine.dev/dimensions/D44"},{"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":"AX4","name":"Dependency direction","shortDescription":{"text":"Dependency direction"},"helpUri":"https://codehealth.canine.dev/dimensions/AX4"},{"id":"AX5","name":"Architecture \u0026 structure","shortDescription":{"text":"Architecture \u0026 structure"},"helpUri":"https://codehealth.canine.dev/dimensions/AX5"},{"id":"AX6","name":"Interface segregation","shortDescription":{"text":"Interface segregation"},"helpUri":"https://codehealth.canine.dev/dimensions/AX6"},{"id":"AX8","name":"Test isolation","shortDescription":{"text":"Test isolation"},"helpUri":"https://codehealth.canine.dev/dimensions/AX8"},{"id":"AX9","name":"CQS / query purity","shortDescription":{"text":"CQS / query purity"},"helpUri":"https://codehealth.canine.dev/dimensions/AX9"},{"id":"AXB2","name":"Runtime readiness","shortDescription":{"text":"Runtime readiness"},"helpUri":"https://codehealth.canine.dev/dimensions/AXB2"},{"id":"ED5","name":"Idempotency","shortDescription":{"text":"Idempotency"},"helpUri":"https://codehealth.canine.dev/dimensions/ED5"},{"id":"ES1","name":"Fold determinism","shortDescription":{"text":"Fold determinism"},"helpUri":"https://codehealth.canine.dev/dimensions/ES1"},{"id":"ES2","name":"Immutable events","shortDescription":{"text":"Immutable events"},"helpUri":"https://codehealth.canine.dev/dimensions/ES2"},{"id":"GD1","name":"Unfinished \u0026 placeholder code","shortDescription":{"text":"Unfinished \u0026 placeholder code"},"helpUri":"https://codehealth.canine.dev/dimensions/GD1"},{"id":"IC1","name":"Incompleteness \u0026 stubs","shortDescription":{"text":"Incompleteness \u0026 stubs"},"helpUri":"https://codehealth.canine.dev/dimensions/IC1"},{"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":"P10","name":"Library API \u0026 versioning","shortDescription":{"text":"Library API \u0026 versioning"},"helpUri":"https://codehealth.canine.dev/dimensions/P10"},{"id":"P11","name":"BDD / executable specs","shortDescription":{"text":"BDD / executable specs"},"helpUri":"https://codehealth.canine.dev/dimensions/P11"},{"id":"P12","name":"CI test-gate honesty","shortDescription":{"text":"CI test-gate honesty"},"helpUri":"https://codehealth.canine.dev/dimensions/P12"},{"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":"P5","name":"DR \u0026 Backup","shortDescription":{"text":"DR \u0026 Backup"},"helpUri":"https://codehealth.canine.dev/dimensions/P5"},{"id":"P6","name":"Release Hygiene","shortDescription":{"text":"Release Hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/P6"},{"id":"PF1","name":"Benchmark discipline","shortDescription":{"text":"Benchmark discipline"},"helpUri":"https://codehealth.canine.dev/dimensions/PF1"},{"id":"PF2","name":"Allocation hygiene","shortDescription":{"text":"Allocation hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/PF2"},{"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":"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":"SC1","name":"Supply-chain hygiene","shortDescription":{"text":"Supply-chain hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/SC1"},{"id":"X1","name":"Async correctness","shortDescription":{"text":"Async correctness"},"helpUri":"https://codehealth.canine.dev/dimensions/X1"},{"id":"X10","name":"Duplicated predicate","shortDescription":{"text":"Duplicated predicate"},"helpUri":"https://codehealth.canine.dev/dimensions/X10"},{"id":"X12","name":"Unreachable branch","shortDescription":{"text":"Unreachable branch"},"helpUri":"https://codehealth.canine.dev/dimensions/X12"},{"id":"X13","name":"Undrained process stream","shortDescription":{"text":"Undrained process stream"},"helpUri":"https://codehealth.canine.dev/dimensions/X13"},{"id":"X14","name":"Bypassable address classification","shortDescription":{"text":"Bypassable address classification"},"helpUri":"https://codehealth.canine.dev/dimensions/X14"},{"id":"X15","name":"Unvalidated length from an untrusted reader","shortDescription":{"text":"Unvalidated length from an untrusted reader"},"helpUri":"https://codehealth.canine.dev/dimensions/X15"},{"id":"X16","name":"Unfloored truncation loop","shortDescription":{"text":"Unfloored truncation loop"},"helpUri":"https://codehealth.canine.dev/dimensions/X16"},{"id":"X17","name":"Uncapped recursion over a caller-supplied document","shortDescription":{"text":"Uncapped recursion over a caller-supplied document"},"helpUri":"https://codehealth.canine.dev/dimensions/X17"},{"id":"X18","name":"Disposal-pattern correctness","shortDescription":{"text":"Disposal-pattern correctness"},"helpUri":"https://codehealth.canine.dev/dimensions/X18"},{"id":"X19","name":"Unrestored process-global state","shortDescription":{"text":"Unrestored process-global state"},"helpUri":"https://codehealth.canine.dev/dimensions/X19"},{"id":"X2","name":"Cancellation propagation","shortDescription":{"text":"Cancellation propagation"},"helpUri":"https://codehealth.canine.dev/dimensions/X2"},{"id":"X20","name":"Mistyped argument guard","shortDescription":{"text":"Mistyped argument guard"},"helpUri":"https://codehealth.canine.dev/dimensions/X20"},{"id":"X21","name":"Side-effecting pattern guard","shortDescription":{"text":"Side-effecting pattern guard"},"helpUri":"https://codehealth.canine.dev/dimensions/X21"},{"id":"X22","name":"Contradicted release guard","shortDescription":{"text":"Contradicted release guard"},"helpUri":"https://codehealth.canine.dev/dimensions/X22"},{"id":"X23","name":"Unguarded diagnostic materialisation","shortDescription":{"text":"Unguarded diagnostic materialisation"},"helpUri":"https://codehealth.canine.dev/dimensions/X23"},{"id":"X24","name":"Document value interpolated into markup unescaped","shortDescription":{"text":"Document value interpolated into markup unescaped"},"helpUri":"https://codehealth.canine.dev/dimensions/X24"},{"id":"X25","name":"Inert configuration knob","shortDescription":{"text":"Inert configuration knob"},"helpUri":"https://codehealth.canine.dev/dimensions/X25"},{"id":"X26","name":"Unsynchronised callback handoff","shortDescription":{"text":"Unsynchronised callback handoff"},"helpUri":"https://codehealth.canine.dev/dimensions/X26"},{"id":"X27","name":"Collection changed while being enumerated","shortDescription":{"text":"Collection changed while being enumerated"},"helpUri":"https://codehealth.canine.dev/dimensions/X27"},{"id":"X28","name":"Index access outside its own emptiness guard","shortDescription":{"text":"Index access outside its own emptiness guard"},"helpUri":"https://codehealth.canine.dev/dimensions/X28"},{"id":"X29","name":"Per-element action decided by a fixed element","shortDescription":{"text":"Per-element action decided by a fixed element"},"helpUri":"https://codehealth.canine.dev/dimensions/X29"},{"id":"X3","name":"Exception handling","shortDescription":{"text":"Exception handling"},"helpUri":"https://codehealth.canine.dev/dimensions/X3"},{"id":"X30","name":"Support guard that admits what it rejects","shortDescription":{"text":"Support guard that admits what it rejects"},"helpUri":"https://codehealth.canine.dev/dimensions/X30"},{"id":"X32","name":"Type resolved by simple name across every loaded assembly","shortDescription":{"text":"Type resolved by simple name across every loaded assembly"},"helpUri":"https://codehealth.canine.dev/dimensions/X32"},{"id":"X4","name":"Structured logging","shortDescription":{"text":"Structured logging"},"helpUri":"https://codehealth.canine.dev/dimensions/X4"},{"id":"X5","name":"Nullable reference types","shortDescription":{"text":"Nullable reference types"},"helpUri":"https://codehealth.canine.dev/dimensions/X5"},{"id":"X6","name":"Hand-rolled structured-format parsing","shortDescription":{"text":"Hand-rolled structured-format parsing"},"helpUri":"https://codehealth.canine.dev/dimensions/X6"},{"id":"X7","name":"Silent fallback defaults","shortDescription":{"text":"Silent fallback defaults"},"helpUri":"https://codehealth.canine.dev/dimensions/X7"},{"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":"IggyShard::tick_partitions (cyclomatic 66): IggyShard::tick_partitions has cyclomatic complexity 66 (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":"core/shard/src/lib.rs"},"region":{"startLine":7575}}}],"partialFingerprints":{"codehealthFindingId/v1":"de71344db4807afef45b440f1389d679e297905b29b0c896a19b29a740460fde"}},{"ruleId":"D1","level":"warning","message":{"text":"iggy_connector_clickhouse_sink::binary::serialize_value (cyclomatic 54): iggy_connector_clickhouse_sink::binary::serialize_value has cyclomatic complexity 54 (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":"core/connectors/sinks/clickhouse_sink/src/binary.rs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"83d8d1b74582033ce48b0fc7c25418b5c7faa54e0ea140a60139afe56fd2b6c9"}},{"ruleId":"D1","level":"warning","message":{"text":"iggy_cli::get_command (cyclomatic 50): iggy_cli::get_command has cyclomatic complexity 50 (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":"core/cli/src/main.rs"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe1113438dae26907feffb239dc91a5779c4607f7a3f1c8047fcb09c482f7413"}},{"ruleId":"D1","level":"warning","message":{"text":"ClusterConfig::validate (cyclomatic 49): ClusterConfig::validate has cyclomatic complexity 49 (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":"core/configs/src/server_config/cluster.rs"},"region":{"startLine":868}}}],"partialFingerprints":{"codehealthFindingId/v1":"03b79413c2067f47e24452a43dfa5e44870c6f503cfbc8670290a83fe8887217"}},{"ruleId":"D1","level":"warning","message":{"text":"QuicClient::send_raw_with_response (cyclomatic 44): QuicClient::send_raw_with_response has cyclomatic complexity 44 (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":"core/sdk/src/quic/quic_client.rs"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"5168d3d8bfdcf35ba3bf4892b3d460ca735d3e97dee22eac621eccf92af68e87"}},{"ruleId":"D1","level":"warning","message":{"text":"WebSocketClient::send_raw_with_response (cyclomatic 44): WebSocketClient::send_raw_with_response has cyclomatic complexity 44 (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":"core/sdk/src/websocket/websocket_client.rs"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bf5fbb2a5f7a15ec81349569b841ba67915622da1c41fe8e2e52c050328d3d4"}},{"ruleId":"D1","level":"warning","message":{"text":"iggy_connector_clickhouse_sink::schema::parse_type_inner (cyclomatic 41): iggy_connector_clickhouse_sink::schema::parse_type_inner has cyclomatic complexity 41 (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":"core/connectors/sinks/clickhouse_sink/src/schema.rs"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"65d55a112a587867c889f77ce89d9d8a6cd2c9141deb6be17b1600e891178ea1"}},{"ruleId":"D1","level":"warning","message":{"text":"CommandResponseStream._pollOnPrimary (cyclomatic 40): CommandResponseStream._pollOnPrimary has cyclomatic complexity 40 (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":"foreign/node/src/client/client.socket.ts"},"region":{"startLine":586}}}],"partialFingerprints":{"codehealthFindingId/v1":"35d95f9459968b52a261a5159c3eacba8b04f5435d7dbbf36e92fa6358900548"}},{"ruleId":"D1","level":"warning","message":{"text":"metadata::stm::authz::authorize (cyclomatic 39): metadata::stm::authz::authorize has cyclomatic complexity 39 (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":"core/metadata/src/stm/authz.rs"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce809b17d597318f9ddd71c5807a0ee023abf2bb82833d2efb5f7a93fe7699a4"}},{"ruleId":"D1","level":"warning","message":{"text":"ServerConfig::validate (cyclomatic 38): ServerConfig::validate has cyclomatic complexity 38 (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":"core/configs/src/server_config/validators.rs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"844e5254e8c8b5e03f3390382f3ff01e35a4413bc390b3af17186df99d88bac4"}},{"ruleId":"D1","level":"warning","message":{"text":"kafka_message_gen::build_payload (cyclomatic 37): kafka_message_gen::build_payload has cyclomatic complexity 37 (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":"gateways/kafka/tools/kafka-tool/src/main.rs"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec47188b35c5249b643a46ade7c4787f920ffdf2df99c28bfa79874e6f8a3166"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyPartition::on_replicate (cyclomatic 36): IggyPartition::on_replicate has cyclomatic complexity 36 (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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":4848}}}],"partialFingerprints":{"codehealthFindingId/v1":"db21574a0cc4e3bf682d1c856bc818345106df0c7531cab2e84594a33ee3bd06"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyPartition::commit_messages_inner (cyclomatic 36): IggyPartition::commit_messages_inner has cyclomatic complexity 36 (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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":5830}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c12c90ec357e2474dd363d65812e4c3dc5f8517cda722df911a9b7875278e20"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyShard::process_lifecycle (cyclomatic 36): IggyShard::process_lifecycle has cyclomatic complexity 36 (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":"core/shard/src/router.rs"},"region":{"startLine":674}}}],"partialFingerprints":{"codehealthFindingId/v1":"612d9dce6ff5d6320ee24bc52af8c9c2bfa45eb76faa1e03b69d511e465ccc72"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyPartition::install_state_transfer (cyclomatic 33): IggyPartition::install_state_transfer has cyclomatic complexity 33 (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":"core/partitions/src/state_transfer.rs"},"region":{"startLine":2558}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ff9fac3a42ae9df320ebb598eddcfcbb1e7aa2b378b0d63b5d5383ae8e07ede"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyShard::on_repair_range_reply (cyclomatic 33): IggyShard::on_repair_range_reply has cyclomatic complexity 33 (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":"core/shard/src/lib.rs"},"region":{"startLine":5405}}}],"partialFingerprints":{"codehealthFindingId/v1":"fdaf7f1f20004e4503291e3f118f558500a46db73eabd12a4db592a7bfdedfd8"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyShard::dispatch_message (cyclomatic 32): IggyShard::dispatch_message has cyclomatic complexity 32 (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":"core/shard/src/lib.rs"},"region":{"startLine":3128}}}],"partialFingerprints":{"codehealthFindingId/v1":"5eb1284669b4fe3a67015e6257bc2c7fc87e428dd3f2aec792aaec990164ced1"}},{"ruleId":"D1","level":"warning","message":{"text":"Args::from (cyclomatic 30): Args::from has cyclomatic complexity 30 (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":"core/common/src/types/args/mod.rs"},"region":{"startLine":424}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ef6a2889707c41aaf49f3e3d8f18ed54cd1c0c6ab9bafc8eb2f9add2256563b"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyPartition::apply_checked_install (cyclomatic 30): IggyPartition::apply_checked_install has cyclomatic complexity 30 (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":"core/partitions/src/state_transfer.rs"},"region":{"startLine":2859}}}],"partialFingerprints":{"codehealthFindingId/v1":"d015d30d2b3b8b063ac43e9d54fd3ef13a3d92596b1cbc1a2deb562ce6585d31"}},{"ruleId":"D1","level":"warning","message":{"text":"iggy_cpp::type_conversion::decode_field (cyclomatic 29): iggy_cpp::type_conversion::decode_field has cyclomatic complexity 29 (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":"foreign/cpp/src/type_conversion.rs"},"region":{"startLine":849}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab3c571ae16e2ace75611aab01d7f44a894491b628272e9a0e7f7c18dcaaee69"}},{"ruleId":"D1","level":"warning","message":{"text":"CommandResponseStream.sendCommand (cyclomatic 29): CommandResponseStream.sendCommand has cyclomatic complexity 29 (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":"foreign/node/src/client/client.socket.ts"},"region":{"startLine":305}}}],"partialFingerprints":{"codehealthFindingId/v1":"9bba324c573eac4a103e3db34298e22fa99730f8c5b8e29fca84ba46e9197cc7"}},{"ruleId":"D1","level":"warning","message":{"text":"CommandResponseStream._processVsr (cyclomatic 29): CommandResponseStream._processVsr has cyclomatic complexity 29 (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":"foreign/node/src/client/client.socket.ts"},"region":{"startLine":879}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca08c4348d86c873a96d4da8fa24656fed54dd179e699e9cf81576b9180fc7a5"}},{"ruleId":"D1","level":"warning","message":{"text":"TcpMessageStream.TryEstablishConnectionAsync (cyclomatic 28): TcpMessageStream.TryEstablishConnectionAsync has cyclomatic complexity 28 (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":"foreign/csharp/Iggy_SDK/IggyClient/Implementations/TcpMessageStream.cs"},"region":{"startLine":1049}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6e9d0d157f32753744313e49654eb1d7bc356e3b1d23c3dbbab786978eae215"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyPartition::on_request (cyclomatic 28): IggyPartition::on_request has cyclomatic complexity 28 (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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":4249}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f57aa95d0f8599502ab0b59dcf4443e6d1530dcba150e3809b0fe74bd72924d"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyConsumer::poll_next (cyclomatic 28): IggyConsumer::poll_next has cyclomatic complexity 28 (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":"core/sdk/src/clients/consumer.rs"},"region":{"startLine":1533}}}],"partialFingerprints":{"codehealthFindingId/v1":"820ddb838845b2d5f7e6cb01751ff7c6ba2948c5e74733d1eccd0be000df4f87"}},{"ruleId":"D1","level":"warning","message":{"text":"server::boot::shard_main (cyclomatic 27): server::boot::shard_main has cyclomatic complexity 27 (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":"core/server/src/boot/mod.rs"},"region":{"startLine":410}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b59407e74bfa85a44b8f3ec591aa461ac92642fae932a2c7e6779208e717bd8"}},{"ruleId":"D1","level":"warning","message":{"text":"kafka_message_gen::response::decode_body (cyclomatic 27): kafka_message_gen::response::decode_body has cyclomatic complexity 27 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"gateways/kafka/tools/kafka-tool/src/response.rs"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"32440a22551f4b5d6f7d20204ac3001ab4e0e13c6e81f561f2fb300c1e5cc511"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyTcpClient.Connect (cyclomatic 27): IggyTcpClient.Connect has cyclomatic complexity 27 (threshold 15). Of this number, 21 points are the body\u0027s own statements and 6 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":"foreign/go/client/tcp/tcp_core.go"},"region":{"startLine":1043}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b29b9542f814c6a637c062b654ff199a2b75a4f28baeb6c014741de078b736b"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyTcpClient.pollOnRoute (cyclomatic 27): IggyTcpClient.pollOnRoute has cyclomatic complexity 27 (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":"foreign/go/client/tcp/tcp_poll_routing.go"},"region":{"startLine":219}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7a9ccedea17fea005c4b7a13cbc0b44aac93ea792d93972c85cc68bda337c9c"}},{"ruleId":"D1","level":"warning","message":{"text":"HttpSourceConfig::validate (cyclomatic 26): HttpSourceConfig::validate has cyclomatic complexity 26 (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":"core/connectors/sources/http_source/src/lib.rs"},"region":{"startLine":610}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea1b3c333d138efded198cb2a572824fce164bfcfd4fef3fd0062484bf1f9c2f"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyShard::on_partition_transfer_progress (cyclomatic 26): IggyShard::on_partition_transfer_progress has cyclomatic complexity 26 (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":"core/shard/src/lib.rs"},"region":{"startLine":9505}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ec549dc26aee6c0ca7e6bfcb0d7251906d603b19656668317f4e74f39c19dcf"}},{"ruleId":"D1","level":"warning","message":{"text":"TcpMessageStream.SendRawAsync (cyclomatic 25): TcpMessageStream.SendRawAsync has cyclomatic complexity 25 (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":"foreign/csharp/Iggy_SDK/IggyClient/Implementations/TcpMessageStream.Vsr.cs"},"region":{"startLine":531}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7ce5ba4d54ce2117d498c5d1f8a7fcae326811997957544bf25399ca23c8a7e"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyPublisherBuilder.Validate (cyclomatic 25): IggyPublisherBuilder.Validate has cyclomatic complexity 25 (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":"foreign/csharp/Iggy_SDK/Publishers/IggyPublisherBuilder.cs"},"region":{"startLine":385}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf9ef912c6ae6b79a7281df0898d76e6c28ec6ac5446a3ee6dc1e6de8e94577b"}},{"ruleId":"D1","level":"warning","message":{"text":"QuicConnectionStringOptions::parse_options (cyclomatic 25): QuicConnectionStringOptions::parse_options 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":"core/common/src/types/configuration/quic_config/quic_connection_string_options.rs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"3627f7190c6e92c28b7558a5c6f4e1f38f74076502895c0f309db4814cc090e8"}},{"ruleId":"D1","level":"warning","message":{"text":"iggy_connectors::source::source_forwarding_loop (cyclomatic 25): iggy_connectors::source::source_forwarding_loop has cyclomatic complexity 25 (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":"core/connectors/runtime/src/source.rs"},"region":{"startLine":555}}}],"partialFingerprints":{"codehealthFindingId/v1":"10df92fecd65125fa6edfdbb60c9d037bcfd169e50bd5a80d4717e1131c3f1ce"}},{"ruleId":"D1","level":"warning","message":{"text":"TcpClient::send_raw (cyclomatic 25): TcpClient::send_raw has cyclomatic complexity 25 (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":"core/sdk/src/tcp/tcp_client.rs"},"region":{"startLine":1317}}}],"partialFingerprints":{"codehealthFindingId/v1":"5aefd3ad3913f1349e0cc3c82a6f9d3926127da4c10cded87cb21677a274df7c"}},{"ruleId":"D1","level":"warning","message":{"text":"InfluxDbSource::open (cyclomatic 24): InfluxDbSource::open has cyclomatic complexity 24 (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":"core/connectors/sources/influxdb_source/src/lib.rs"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"25c50ef13e022d1e2dcc445b822a6ed844a445ec12dc2dc274527204c22d6d8c"}},{"ruleId":"D1","level":"warning","message":{"text":"ConsumerGroup::rebalance_cooperative (cyclomatic 24): ConsumerGroup::rebalance_cooperative has cyclomatic complexity 24 (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":"core/metadata/src/stm/consumer_group.rs"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"7aa2b450586f46e0fe40825145717a09418d73ca0dd2e7d8b90ef8862fd64d1e"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyShard::run_message_pump (cyclomatic 24): IggyShard::run_message_pump has cyclomatic complexity 24 (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":"core/shard/src/router.rs"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"56314ed20ef02a82e30136c5e8b41261d030681b1709b38665d7a20b620f5a8c"}},{"ruleId":"D1","level":"warning","message":{"text":"shard::dispatch_vsr_actions (cyclomatic 24): shard::dispatch_vsr_actions has cyclomatic complexity 24 (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":"core/shard/src/lib.rs"},"region":{"startLine":11567}}}],"partialFingerprints":{"codehealthFindingId/v1":"aba2443fda99b1bb9e9f3d2fa9f6e25b9f3f5bcdeb7de5dc1dd631d47f6c7ffd"}},{"ruleId":"D1","level":"warning","message":{"text":"iggy_connectors::sink::process_messages (cyclomatic 23): iggy_connectors::sink::process_messages has cyclomatic complexity 23 (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":"core/connectors/runtime/src/sink.rs"},"region":{"startLine":548}}}],"partialFingerprints":{"codehealthFindingId/v1":"c915e4cf8f93f9e10f7fd1256d1ce6bf6a9b317de9a86bfd7561fcc23dac416c"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyPartition::handle_committed_entries (cyclomatic 23): IggyPartition::handle_committed_entries has cyclomatic complexity 23 (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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":6173}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2eb1e8d786d5a0129192eb50f2347c4e10b480220ff096276e899c8b533efdd"}},{"ruleId":"D1","level":"warning","message":{"text":"Shadow::apply (cyclomatic 23): Shadow::apply 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":"core/simulator/src/workload/shadow.rs"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"901d55073f2220b8938e5110cdba94c9a07b258516bf36083d53169fd0d30c54"}},{"ruleId":"D1","level":"warning","message":{"text":"iggy_gateway_kafka::protocol::bounds_guard::validate_fetch_shape (cyclomatic 23): iggy_gateway_kafka::protocol::bounds_guard::validate_fetch_shape has cyclomatic complexity 23 (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":"gateways/kafka/src/protocol/bounds_guard.rs"},"region":{"startLine":476}}}],"partialFingerprints":{"codehealthFindingId/v1":"aaae7d197dced2a0a430a7d248c275733c73b49c18cc53b19388fb5c5534645c"}},{"ruleId":"D1","level":"warning","message":{"text":"iggy_gateway_kafka::group::state::join_step (cyclomatic 23): iggy_gateway_kafka::group::state::join_step has cyclomatic complexity 23 (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":"gateways/kafka/src/group/state.rs"},"region":{"startLine":745}}}],"partialFingerprints":{"codehealthFindingId/v1":"80f78c7ed5efbb6332e2d10b317d399d6cd710fcda075977c08f67b4842d5008"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyPartition::persist_consumer_offset_commit (cyclomatic 22): IggyPartition::persist_consumer_offset_commit has cyclomatic complexity 22 (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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":2804}}}],"partialFingerprints":{"codehealthFindingId/v1":"044d6c371add4150c76d74afb91032cec286f120fbf2d8ddc1fd29b45544ab92"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyTcpClient.sendFrame (cyclomatic 22): IggyTcpClient.sendFrame has cyclomatic complexity 22 (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":"foreign/go/client/tcp/tcp_core.go"},"region":{"startLine":657}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fd9c50e6c031917f9d3060fea5230782c5207c8c217f0d8611297543a84d18e"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyTcpClient.pollPrimary (cyclomatic 22): IggyTcpClient.pollPrimary has cyclomatic complexity 22 (threshold 15). Of this number, 18 points are the body\u0027s own statements and 4 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":"foreign/go/client/tcp/tcp_poll_routing.go"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"399c2728209e7c9dd95bebda878ca1a727b072c3a6a75baf8c4f50808592128e"}},{"ruleId":"D1","level":"warning","message":{"text":"iggy_connectors::main (cyclomatic 21): iggy_connectors::main has cyclomatic complexity 21 (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":"core/connectors/runtime/src/main.rs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"c76b328306f40b4c07d5c2c62d0317935c2f719b88a83b4487ba5d56b3fb4a38"}},{"ruleId":"D1","level":"warning","message":{"text":"PrepareJournal::scan (cyclomatic 21): PrepareJournal::scan has cyclomatic complexity 21 (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":"core/journal/src/prepare_journal.rs"},"region":{"startLine":411}}}],"partialFingerprints":{"codehealthFindingId/v1":"7524920040e7af21839e0cf88608de4818afc89944e223b1ee317879174386ae"}},{"ruleId":"D1","level":"warning","message":{"text":"QuicTransportConn::run (cyclomatic 21): QuicTransportConn::run has cyclomatic complexity 21 (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":"core/message_bus/src/transports/quic.rs"},"region":{"startLine":379}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a6f2c18b3477ca70b7fbe27cb432d9bb6e5610ec8eca699ed4eba540cbf6cb1"}},{"ruleId":"D1","level":"warning","message":{"text":"message_bus::installer::replica::install_replica_conn (cyclomatic 21): message_bus::installer::replica::install_replica_conn has cyclomatic complexity 21 (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":"core/message_bus/src/installer/replica.rs"},"region":{"startLine":326}}}],"partialFingerprints":{"codehealthFindingId/v1":"31daed830ce57903a991f9313a8119cf8479d117a57c8406a0a111fe3fb958a7"}},{"ruleId":"D1","level":"warning","message":{"text":"metadata::impls::recovery::recover (cyclomatic 21): metadata::impls::recovery::recover has cyclomatic complexity 21 (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":"core/metadata/src/impls/recovery.rs"},"region":{"startLine":355}}}],"partialFingerprints":{"codehealthFindingId/v1":"410fcafcbe036c85bf6b9bcb9984b934f33db34797974e4b0a26e620b99b10a7"}},{"ruleId":"D1","level":"warning","message":{"text":"QuicClient::connect_inner (cyclomatic 21): QuicClient::connect_inner has cyclomatic complexity 21 (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":"core/sdk/src/quic/quic_client.rs"},"region":{"startLine":672}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4006ab8877fa932e19942a26667069dbc0d6e45d352e11e47d31a1e369c9066"}},{"ruleId":"D1","level":"warning","message":{"text":"TcpClient::connect_inner (cyclomatic 21): TcpClient::connect_inner has cyclomatic complexity 21 (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":"core/sdk/src/tcp/tcp_client.rs"},"region":{"startLine":617}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1265527641902959e97f9a54bd5d933982b55650c04f75ba37d213c263f6178"}},{"ruleId":"D1","level":"warning","message":{"text":"server::dispatch::reads::handle_non_replicated_request (cyclomatic 21): server::dispatch::reads::handle_non_replicated_request has cyclomatic complexity 21 (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":"core/server/src/dispatch/reads.rs"},"region":{"startLine":353}}}],"partialFingerprints":{"codehealthFindingId/v1":"65d2c96618468ebd4e459a63ef6399436847145f995ea0a0e16d91fa1c0be25e"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyShard::on_request_prepares (cyclomatic 21): IggyShard::on_request_prepares has cyclomatic complexity 21 (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":"core/shard/src/lib.rs"},"region":{"startLine":4964}}}],"partialFingerprints":{"codehealthFindingId/v1":"9830eb1ef185c6c781b37f6ae217cf10c2eb417f8e6fbc5b7212cdd059d2f379"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyTcpClient.exchangeLocked (cyclomatic 21): IggyTcpClient.exchangeLocked has cyclomatic complexity 21 (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":"foreign/go/client/tcp/tcp_core.go"},"region":{"startLine":854}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8418308b8cbeb566f44201a1d075a089f8fe8f77d24a789892f21efc0a76a27"}},{"ruleId":"D1","level":"warning","message":{"text":"client.connection-string.parseConnectionString (cyclomatic 21): client.connection-string.parseConnectionString has cyclomatic complexity 21 (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":"foreign/node/src/client/client.connection-string.ts"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"e214ba0b075d74546683fcf6cbd805c266646b4e4cbc2317437f0aa231011937"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyConsumerBuilder.Validate (cyclomatic 20): IggyConsumerBuilder.Validate 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":"foreign/csharp/Iggy_SDK/Consumers/IggyConsumerBuilder.cs"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"89f3926f3da421844308d1becbe824e86bac08cd36d37012a53c515919182038"}},{"ruleId":"D1","level":"warning","message":{"text":"iggy_connector_delta_sink::coercions::apply_coercion (cyclomatic 20): iggy_connector_delta_sink::coercions::apply_coercion has cyclomatic complexity 20 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sinks/delta_sink/src/coercions.rs"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"464dd86e54596e59042d4a8a0bb5a7fe5be9bf106a1f3e9224070fa330db5ca6"}},{"ruleId":"D1","level":"warning","message":{"text":"RabbitMQSink::publish_batch_with_retry (cyclomatic 20): RabbitMQSink::publish_batch_with_retry has cyclomatic complexity 20 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sinks/rabbitmq_sink/src/lib.rs"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc813659e83e10dd51e103c9e6eee018c5f1024234bb9d9fd75777240f6c5883"}},{"ruleId":"D1","level":"warning","message":{"text":"JournalState::decode (cyclomatic 20): JournalState::decode 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":"core/journal/src/partition_journal.rs"},"region":{"startLine":1600}}}],"partialFingerprints":{"codehealthFindingId/v1":"aae30a58d632f33f7754854217a599d3b586dc18653b8963cfdbeccc2a8f3b06"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyConsumer::create_poll_messages_future (cyclomatic 20): IggyConsumer::create_poll_messages_future 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":"core/sdk/src/clients/consumer.rs"},"region":{"startLine":1214}}}],"partialFingerprints":{"codehealthFindingId/v1":"a40dfa6ea34b06d841186aa4fc29e709ddce5ba5503efedfb8cee532f6595332"}},{"ruleId":"D1","level":"warning","message":{"text":"server::dispatch::handle_client_request (cyclomatic 20): server::dispatch::handle_client_request 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":"core/server/src/dispatch/mod.rs"},"region":{"startLine":408}}}],"partialFingerprints":{"codehealthFindingId/v1":"9bcf3aaf9636f05f010e0cb4f81f923aadea0c56f7d365416a67b46712f3a88d"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyTcpClient.attempt (cyclomatic 20): IggyTcpClient.attempt has cyclomatic complexity 20 (threshold 15). Of this number, 19 points are the body\u0027s own statements and 1 belongs 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":"foreign/go/client/tcp/tcp_core.go"},"region":{"startLine":758}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e15a5614d3a4628b2afd30ebc4d2ec3ea690271007c00181ff0cc40262d93c7"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyConsumer.PollRentedMessagesAsync (cyclomatic 19): IggyConsumer.PollRentedMessagesAsync 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":"foreign/csharp/Iggy_SDK/Consumers/IggyConsumer.Rented.cs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"7630c39eef9b07a20f3cdac4a71e65e5e5b7208ffc83e0d502138d33a59736d0"}},{"ruleId":"D1","level":"warning","message":{"text":"WebSocketConnectionStringOptions::parse_options (cyclomatic 19): WebSocketConnectionStringOptions::parse_options has cyclomatic complexity 19 (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":"core/common/src/types/configuration/websocket_config/websocket_connection_string_options.rs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"be60865090524f0cf3285fc6141c38478ed58c5ab264e1bbc82e7bde95f09258"}},{"ruleId":"D1","level":"warning","message":{"text":"AdvertisedAddress::from_str (cyclomatic 19): AdvertisedAddress::from_str has cyclomatic complexity 19 (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":"core/configs/src/server_config/cluster.rs"},"region":{"startLine":714}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0a3fbbf60ec5aacb6043cd873de36482e46401d36321aa854a7c5a825c566b9"}},{"ruleId":"D1","level":"warning","message":{"text":"PartitionConfig::validate (cyclomatic 19): PartitionConfig::validate has cyclomatic complexity 19 (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":"core/configs/src/server_config/partition.rs"},"region":{"startLine":283}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb180bcab2c44d59407a9be1667e0a0adbe6c0c32a60f2bb5d480a1e225c3d30"}},{"ruleId":"D1","level":"warning","message":{"text":"AvroStreamEncoder::serde_json_to_avro_value (cyclomatic 19): AvroStreamEncoder::serde_json_to_avro_value has cyclomatic complexity 19 (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":"core/connectors/sdk/src/encoders/avro.rs"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"574456ad1af4fde273b1220248593f617f846ca4e26d1463fa2bbae059cdbcda"}},{"ruleId":"D1","level":"warning","message":{"text":"InfluxDbSink::append_line (cyclomatic 19): InfluxDbSink::append_line has cyclomatic complexity 19 (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":"core/connectors/sinks/influxdb_sink/src/lib.rs"},"region":{"startLine":489}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8407dbb5223722932bb8285b4b25385feee1dca85feb2b161a19a2b2f2e79ef"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyPartition::open_persistence_with_recovered (cyclomatic 19): IggyPartition::open_persistence_with_recovered 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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":811}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2c9867dffba5ff684eca69e6fbe27d5adb6ec721510225ac75fec95493b8353"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyPartition::resynchronize_consumer_offset_reservations_inner (cyclomatic 19): IggyPartition::resynchronize_consumer_offset_reservations_inner 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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":3643}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8d332e8f512c9101616e115b782605817a9f26634748ea5f28da38858b756e0"}},{"ruleId":"D1","level":"warning","message":{"text":"partitions::segment_recovery::load_persisted_segments_with_checkpoint (cyclomatic 19): partitions::segment_recovery::load_persisted_segments_with_checkpoint 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":"core/partitions/src/segment_recovery.rs"},"region":{"startLine":570}}}],"partialFingerprints":{"codehealthFindingId/v1":"69835606ff5822a070f21f51b8cdde600ba6b48a10b0ccc6dabdd41b12541d7b"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyShard::on_start_view (cyclomatic 19): IggyShard::on_start_view 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":"core/shard/src/lib.rs"},"region":{"startLine":4606}}}],"partialFingerprints":{"codehealthFindingId/v1":"065f2b595d81e8d857dd5700c499c38e52eef63e616bfb875873f9b87655bac2"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyShard::on_transfer_progress (cyclomatic 19): IggyShard::on_transfer_progress 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":"core/shard/src/lib.rs"},"region":{"startLine":7347}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d42c2253e2a27efd522870465cd4aa4c7da7815c24cdfcee83994f56634e10d"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyShard::on_partition_state_transfer_target (cyclomatic 19): IggyShard::on_partition_state_transfer_target has cyclomatic complexity 19 (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":"core/shard/src/lib.rs"},"region":{"startLine":9231}}}],"partialFingerprints":{"codehealthFindingId/v1":"1abd2fe0198d322f3ddc8af8f40490b73fc39b7776483f74d4855ae47557566a"}},{"ruleId":"D1","level":"warning","message":{"text":"simulator::replica::new_shard (cyclomatic 19): simulator::replica::new_shard has cyclomatic complexity 19 (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":"core/simulator/src/replica.rs"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"43be5830fc52a1ba8bb05e016bba6cecf4b3d2b30fc0772900bffd9c1c7eca15"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyConnection._reconnectUntilConnected (cyclomatic 19): IggyConnection._reconnectUntilConnected 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":"foreign/node/src/client/client.connection.ts"},"region":{"startLine":408}}}],"partialFingerprints":{"codehealthFindingId/v1":"987e230932c7ae6c857890869dc436f94beab46828d0a49a56b9705eda182345"}},{"ruleId":"D1","level":"warning","message":{"text":"BackgroundMessageProcessor.SendWithRetry (cyclomatic 18): BackgroundMessageProcessor.SendWithRetry 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":"foreign/csharp/Iggy_SDK/Publishers/BackgroundMessageProcessor.cs"},"region":{"startLine":480}}}],"partialFingerprints":{"codehealthFindingId/v1":"01c4e1e8f466cee128a9176e1eef5fcb612d2d5355a8344dd84d240557336344"}},{"ruleId":"D1","level":"warning","message":{"text":"PartitionPrepareJournal::reset_with_segment_checkpoint (cyclomatic 18): PartitionPrepareJournal::reset_with_segment_checkpoint 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":"core/journal/src/partition_journal/segments.rs"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"c592131db3c65d60b47c15640f9049338fb62b0662454d65e78409965c70dd35"}},{"ruleId":"D1","level":"warning","message":{"text":"PartitionPrepareJournal::rewrite (cyclomatic 18): PartitionPrepareJournal::rewrite 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":"core/journal/src/partition_journal.rs"},"region":{"startLine":1353}}}],"partialFingerprints":{"codehealthFindingId/v1":"ccab87c862ef450f4aa0ac174179667af206baa98f52b27db9564f5d60b6c2c8"}},{"ruleId":"D1","level":"warning","message":{"text":"message_bus::transports::ws::run_pump (cyclomatic 18): message_bus::transports::ws::run_pump has cyclomatic complexity 18 (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":"core/message_bus/src/transports/ws.rs"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3ab101c0542f6d20fd9a25b838f2ddbcdfa01bea8cd5a20727dfc8ae97b9d57"}},{"ruleId":"D1","level":"warning","message":{"text":"message_bus::transports::wss::run_pump (cyclomatic 18): message_bus::transports::wss::run_pump has cyclomatic complexity 18 (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":"core/message_bus/src/transports/wss.rs"},"region":{"startLine":334}}}],"partialFingerprints":{"codehealthFindingId/v1":"26163ab475da963bd735f002ee4a736259828cee028d5b6c6eefc99e78bb9094"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyPartition::build_poll_plan (cyclomatic 18): IggyPartition::build_poll_plan 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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":3823}}}],"partialFingerprints":{"codehealthFindingId/v1":"d784e9f9a4c28c7aa2262172dfb4153fed4213e7d232a4e97b359a13e73a7476"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyPartition::apply_repaired_prepare (cyclomatic 18): IggyPartition::apply_repaired_prepare has cyclomatic complexity 18 (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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":8152}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7e06f9f07b078656d214c8f38aea7a3136cc532f210f010fbae5a41c5e4a6ef"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyPartition::state_transfer_offer (cyclomatic 18): IggyPartition::state_transfer_offer has cyclomatic complexity 18 (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":"core/partitions/src/state_transfer.rs"},"region":{"startLine":1902}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1689a3abbfa63e782750050e577f2e6cb3f16e31f3b41dda6f248b337ea9fb5"}},{"ruleId":"D1","level":"warning","message":{"text":"TcpClient::send_raw_with_response (cyclomatic 18): TcpClient::send_raw_with_response has cyclomatic complexity 18 (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":"core/sdk/src/tcp/tcp_client.rs"},"region":{"startLine":222}}}],"partialFingerprints":{"codehealthFindingId/v1":"142c00f70e43bdabb7fcb79e3a5e1ff8a9e11e96aa1ab081c5e5d026c37b3337"}},{"ruleId":"D1","level":"warning","message":{"text":"server::partition_reconciler::reconcile_additions (cyclomatic 18): server::partition_reconciler::reconcile_additions 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":"core/server/src/partition_reconciler.rs"},"region":{"startLine":573}}}],"partialFingerprints":{"codehealthFindingId/v1":"051829f274d03ab7dd7bda0ce52b3324175bf8e01b1b5a380b200fc02fc34a70"}},{"ruleId":"D1","level":"warning","message":{"text":"server_common::diagnostics::report_io_uring_environment (cyclomatic 18): server_common::diagnostics::report_io_uring_environment 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":"core/server_common/src/diagnostics.rs"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"75d13248023a7284e0414b2b85a9dc0d7c5c06a12836d6bfcf8081f034449250"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyShard::tick_metadata (cyclomatic 18): IggyShard::tick_metadata 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":"core/shard/src/lib.rs"},"region":{"startLine":10184}}}],"partialFingerprints":{"codehealthFindingId/v1":"d74c3d0fe8418073dd22bbf55ee8ad2df42c71699d3dfffb0a7f55a5ffb013c9"}},{"ruleId":"D1","level":"warning","message":{"text":"EndpointRegistry::restore (cyclomatic 17): EndpointRegistry::restore has cyclomatic complexity 17 (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":"core/connectors/sources/http_source/src/state.rs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"36863ac07d5fc0fcb074a37f1f6ad84a5368a3e9ddd3422ea7eca285b34998db"}},{"ruleId":"D1","level":"warning","message":{"text":"InfluxDbSource::poll (cyclomatic 17): InfluxDbSource::poll has cyclomatic complexity 17 (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":"core/connectors/sources/influxdb_source/src/lib.rs"},"region":{"startLine":469}}}],"partialFingerprints":{"codehealthFindingId/v1":"77f2993fd9e2db513156a7efcad807054bf947fc118c5b9e085a6816d02dbbab"}},{"ruleId":"D1","level":"warning","message":{"text":"harness_derive::codegen::generate_harness_setup (cyclomatic 17): harness_derive::codegen::generate_harness_setup 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":"core/harness_derive/src/codegen.rs"},"region":{"startLine":389}}}],"partialFingerprints":{"codehealthFindingId/v1":"09d9532e3b06db39bef83ecc2190d4fac3f959d08e074592f8474925e4d67dc6"}},{"ruleId":"D1","level":"warning","message":{"text":"PartitionPrepareJournal::append_batch_inner (cyclomatic 17): PartitionPrepareJournal::append_batch_inner has cyclomatic complexity 17 (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":"core/journal/src/partition_journal.rs"},"region":{"startLine":771}}}],"partialFingerprints":{"codehealthFindingId/v1":"891de97312f21c0993098a8e7bffcc0bff09071de31edbb13f9e60483085eeab"}},{"ruleId":"D1","level":"warning","message":{"text":"PrepareJournal::truncate_from (cyclomatic 17): PrepareJournal::truncate_from has cyclomatic complexity 17 (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":"core/journal/src/prepare_journal.rs"},"region":{"startLine":778}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0e88d42a2a13a60569baece3808bb0eb4b34b67c588a09367bd1db26a23a38d"}},{"ruleId":"D1","level":"warning","message":{"text":"PrepareJournal::drain (cyclomatic 17): PrepareJournal::drain has cyclomatic complexity 17 (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":"core/journal/src/prepare_journal.rs"},"region":{"startLine":930}}}],"partialFingerprints":{"codehealthFindingId/v1":"accfd5fcf2bb99aa1f7b279e73a1069453981ccfc57353e01ff958bd3ebf61e5"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyMetadata::install_state_transfer (cyclomatic 17): IggyMetadata::install_state_transfer has cyclomatic complexity 17 (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":"core/metadata/src/impls/metadata.rs"},"region":{"startLine":1733}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef2f2cdf8d0f3fbcc2f8fc91797e5ffdb691b50f48bcab3635cddd7c2c42f5fc"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyPartition::drain_request_queue_into_prepares (cyclomatic 17): IggyPartition::drain_request_queue_into_prepares has cyclomatic complexity 17 (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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":4649}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6a9e4763ea42fc12ad327e8cb4c8a9dfeac06f2e88d60ed65fc9f1962e1e817"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyPartition::converge_to_empty_after_failed_install (cyclomatic 17): IggyPartition::converge_to_empty_after_failed_install has cyclomatic complexity 17 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/partitions/src/state_transfer.rs"},"region":{"startLine":3502}}}],"partialFingerprints":{"codehealthFindingId/v1":"0503c74b9fa41ab158b3e188536e29b7725d78b05a5ec6b7f8736ed5f3e3e104"}},{"ruleId":"D1","level":"warning","message":{"text":"server::http::forward::forward_partition_or_pass (cyclomatic 17): server::http::forward::forward_partition_or_pass has cyclomatic complexity 17 (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":"core/server/src/http/forward.rs"},"region":{"startLine":335}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ff86c51b9acf8252f8e588fe92179d727c26b7d9e6e70b83820c54f356a8eae"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyShard::on_repair_prepare (cyclomatic 17): IggyShard::on_repair_prepare has cyclomatic complexity 17 (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":"core/shard/src/lib.rs"},"region":{"startLine":5210}}}],"partialFingerprints":{"codehealthFindingId/v1":"05dd8aa8ac00c252e2d460d1c20b377d4fb351b809d6590d4486b6edbe205842"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyShard::on_partition_request_state_chunk (cyclomatic 17): IggyShard::on_partition_request_state_chunk has cyclomatic complexity 17 (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":"core/shard/src/lib.rs"},"region":{"startLine":8546}}}],"partialFingerprints":{"codehealthFindingId/v1":"e995fac69a5a15e68ec75166553884174dc6dfea2ecb22d08fbb556e1c5ad57f"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyShard::on_partition_read (cyclomatic 17): IggyShard::on_partition_read has cyclomatic complexity 17 (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":"core/shard/src/poll.rs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"bca40b403b4b466dfa3aecaf5c71a806022ac6c00d5ce8ab86c00e2c909c6583"}},{"ruleId":"D1","level":"warning","message":{"text":"simulator::bin::workload-fuzz::network_options (cyclomatic 17): simulator::bin::workload-fuzz::network_options 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":"core/simulator/src/bin/workload-fuzz.rs"},"region":{"startLine":459}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9e53fe70fa354e1dd9f5d7e9e360d3f6696fc0698b702c6f8a6defc11bcdb5e"}},{"ruleId":"D1","level":"warning","message":{"text":"QuicConfig::new (cyclomatic 17): QuicConfig::new 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":"foreign/python/src/config.rs"},"region":{"startLine":608}}}],"partialFingerprints":{"codehealthFindingId/v1":"c709b77a2586afab70028d6854f3987b48bf357d40f6e2b1c7bbdf8fdcb9a15b"}},{"ruleId":"D1","level":"warning","message":{"text":"kafka_message_gen::run_send (cyclomatic 17): kafka_message_gen::run_send has cyclomatic complexity 17 (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":"gateways/kafka/tools/kafka-tool/src/main.rs"},"region":{"startLine":730}}}],"partialFingerprints":{"codehealthFindingId/v1":"1614c26e4e5f4dbd697c569d708e67ebd698e8880ac5041b4582172ff66d6c4c"}},{"ruleId":"D1","level":"warning","message":{"text":"TcpContracts.CreateMessage (cyclomatic 16): TcpContracts.CreateMessage has cyclomatic complexity 16 (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. This is NOT this file\u0027s highest cyclomatic complexity: TcpContracts.HeaderKindToByte (cyclomatic 17) 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":"foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs"},"region":{"startLine":338}}}],"partialFingerprints":{"codehealthFindingId/v1":"099f1441bf460cd242378b7e57f95dbecff45d365c83632047f43ebfc8fb9cc9"}},{"ruleId":"D1","level":"warning","message":{"text":"ShardingConfig::validate (cyclomatic 16): ShardingConfig::validate 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":"core/configs/src/server_config/sharding.rs"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"38d8b1acdcf9a0dc1acebcf026526915e1b6c6b7e893b8679d171b173f25f1cb"}},{"ruleId":"D1","level":"warning","message":{"text":"iggy_connector_sdk::source::handle_messages (cyclomatic 16): iggy_connector_sdk::source::handle_messages has cyclomatic complexity 16 (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":"core/connectors/sdk/src/source.rs"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"2dfb66e4869ccf5e0fa5bcccbd6d05d6b69e9176f70afb85931e34b5596217a1"}},{"ruleId":"D1","level":"warning","message":{"text":"ElasticsearchSource::source_state_to_internal_state (cyclomatic 16): ElasticsearchSource::source_state_to_internal_state 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":"core/connectors/sources/elasticsearch_source/src/lib.rs"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c13369b123c82ce2e6bc5405d9e4558e579c16835a00eea54e03bb582c3f309"}},{"ruleId":"D1","level":"warning","message":{"text":"iggy_connector_influxdb_source::v3::poll (cyclomatic 16): iggy_connector_influxdb_source::v3::poll 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":"core/connectors/sources/influxdb_source/src/v3.rs"},"region":{"startLine":439}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d5e7d24214d2e3a3a02e9a2aab93240b11142badb0213f785ff3ed40fad6956"}},{"ruleId":"D1","level":"warning","message":{"text":"ServerHandle::set_protocol_addresses (cyclomatic 16): ServerHandle::set_protocol_addresses 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":"core/integration/src/harness/handle/server.rs"},"region":{"startLine":402}}}],"partialFingerprints":{"codehealthFindingId/v1":"171128546d89fd29e19d70a3bbe6f86d1cc843fe429b0c34526dd52347c0338d"}},{"ruleId":"D1","level":"warning","message":{"text":"IggyPartition::complete_repair (cyclomatic 16): IggyPartition::complete_repair has cyclomatic complexity 16 (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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":8253}}}],"partialFingerprints":{"codehealthFindingId/v1":"e63178e8e4fc3f8f382e9641c4da31f8615faa17b39c259187f9067dd55e9680"}},{"ruleId":"D1","level":"warning","message":{"text":"server::boot::threads::validate_sharding_runtime_knobs (cyclomatic 16): server::boot::threads::validate_sharding_runtime_knobs 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":"core/server/src/boot/threads.rs"},"region":{"startLine":566}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb99cfcf5e3edcbaceecc64ae1cb79f4de052f7ddb9ad0e4b6fb45203e859ac7"}},{"ruleId":"D1","level":"warning","message":{"text":"Logging::cleanup_log_files (cyclomatic 16): Logging::cleanup_log_files has cyclomatic complexity 16 (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":"core/server_common/src/log/logger.rs"},"region":{"startLine":618}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a8112d4bead4e123e8dcdd07f7b5bed25d4049c1a74a60005bf062a1caab57b"}},{"ruleId":"D1","level":"warning","message":{"text":"iggy_gateway_kafka::protocol::handlers::produce::handle (cyclomatic 16): iggy_gateway_kafka::protocol::handlers::produce::handle 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":"gateways/kafka/src/protocol/handlers/produce.rs"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"063175e7dc4441ccadfe0ea2d92904f623642cc615ec5c874728c14672b20824"}},{"ruleId":"D1","level":"warning","message":{"text":"iggy_gateway_kafka::load_config (cyclomatic 16): iggy_gateway_kafka::load_config 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":"gateways/kafka/src/main.rs"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"97ea6956b00d33c5371e2dc12c001b4f475566f71dc5b7577767e6bd4b9d36b7"}},{"ruleId":"D1","level":"warning","message":{"text":"iggcon.DeserializeHeaders (cyclomatic 16): iggcon.DeserializeHeaders has cyclomatic complexity 16 (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":"foreign/go/contracts/user_headers.go"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"1bac33504eee91bc5dda05769495f7acad8f9c20104d07479a3e7ae493df4ada"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyShard::tick_partitions (cognitive 147): IggyShard::tick_partitions has cognitive complexity 147 (threshold 15). Drivers by points: if/else 55 (131 pts), boolean chains 8, loops 4, match/switch 2 (4 pts) (nesting depth added 78). 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":"core/shard/src/lib.rs"},"region":{"startLine":7575}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f062d08192f8bd71420696d826e6988d24487297025e043976fbafcf17b72ae"}},{"ruleId":"D2","level":"warning","message":{"text":"QuicClient::send_raw_with_response (cognitive 90): QuicClient::send_raw_with_response has cognitive complexity 90 (threshold 15). Drivers by points: if/else 32 (61 pts), match/switch 6 (19 pts), boolean chains 5, loops 2 (5 pts) (nesting depth added 45). 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":"core/sdk/src/quic/quic_client.rs"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"a03366bd8c9e8ddcd73c4d1363a33de806dd955c976f0122fe3f244c73ed25f2"}},{"ruleId":"D2","level":"warning","message":{"text":"WebSocketClient::send_raw_with_response (cognitive 90): WebSocketClient::send_raw_with_response has cognitive complexity 90 (threshold 15). Drivers by points: if/else 32 (61 pts), match/switch 6 (19 pts), boolean chains 5, loops 2 (5 pts) (nesting depth added 45). 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":"core/sdk/src/websocket/websocket_client.rs"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"d03d457d75b9104962d068887035d5c3e0abcc334106e5fa69f0226b34db93bc"}},{"ruleId":"D2","level":"warning","message":{"text":"CommandResponseStream._pollOnPrimary (cognitive 86): CommandResponseStream._pollOnPrimary has cognitive complexity 86 (threshold 15). Drivers by points: if/else 21 (57 pts), ternaries 4 (14 pts), boolean chains 8, error handling 2 (4 pts), loops 2 (3 pts) (nesting depth added 49). 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":"foreign/node/src/client/client.socket.ts"},"region":{"startLine":586}}}],"partialFingerprints":{"codehealthFindingId/v1":"93b1cd24bba2679637a5c3509aa17d0f0aabe9044fd4b06c7cffb7d855eadbad"}},{"ruleId":"D2","level":"warning","message":{"text":"ClusterConfig::validate (cognitive 83): ClusterConfig::validate has cognitive complexity 83 (threshold 15). Drivers by points: if/else 38 (65 pts), loops 7 (15 pts), boolean chains 3 (nesting depth added 35). 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":"core/configs/src/server_config/cluster.rs"},"region":{"startLine":868}}}],"partialFingerprints":{"codehealthFindingId/v1":"da527062ac76eb03b3c4be19ccea83f7822363291941601efff6a4ae332f372b"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyConsumer::poll_next (cognitive 67): IggyConsumer::poll_next has cognitive complexity 67 (threshold 15). Drivers by points: if/else 22 (55 pts), boolean chains 5, loops 2 (5 pts), match/switch 1 (2 pts) (nesting depth added 37). 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":"core/sdk/src/clients/consumer.rs"},"region":{"startLine":1533}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9aca6cf111b0e1f41425cb44a835de2c322377c1c73a88031ddd079d4d0eded"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyPartition::commit_messages_inner (cognitive 65): IggyPartition::commit_messages_inner has cognitive complexity 65 (threshold 15). Drivers by points: if/else 28 (55 pts), boolean chains 7, loops 2 (3 pts) (nesting depth added 28). 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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":5830}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c39dc6aa74e1ea4057ea6ec8ed7877edd1d4fbbbfb12b0a07b8a983fd898d36"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyShard::on_repair_range_reply (cognitive 63): IggyShard::on_repair_range_reply has cognitive complexity 63 (threshold 15). Drivers by points: if/else 27 (55 pts), boolean chains 5, match/switch 2 (3 pts) (nesting depth added 29). 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":"core/shard/src/lib.rs"},"region":{"startLine":5405}}}],"partialFingerprints":{"codehealthFindingId/v1":"57182ff7f4d76b385ea97d9002784cbeec60c6bfc78434374a9ab2d0909ec2b0"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyPartition::on_replicate (cognitive 62): IggyPartition::on_replicate has cognitive complexity 62 (threshold 15). Drivers by points: if/else 33 (53 pts), boolean chains 7, match/switch 2 (nesting depth added 20). 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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":4848}}}],"partialFingerprints":{"codehealthFindingId/v1":"7739581566b20bf1eccbc05c8aa206701cee81e787c94e55c721250026fa2a64"}},{"ruleId":"D2","level":"warning","message":{"text":"iggy_connectors::source::source_forwarding_loop (cognitive 56): iggy_connectors::source::source_forwarding_loop has cognitive complexity 56 (threshold 15). Drivers by points: if/else 26 (46 pts), match/switch 1 (4 pts), boolean chains 3, loops 2 (3 pts) (nesting depth added 24). 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":"core/connectors/runtime/src/source.rs"},"region":{"startLine":555}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb36168610db6ef5011fd27fdc4162d3f6c16cf20370c75b204c115dcf7be03c"}},{"ruleId":"D2","level":"warning","message":{"text":"TcpClient::send_raw (cognitive 56): TcpClient::send_raw has cognitive complexity 56 (threshold 15). Drivers by points: if/else 16 (43 pts), match/switch 3 (7 pts), loops 2 (4 pts), boolean chains 2 (nesting depth added 33). 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":"core/sdk/src/tcp/tcp_client.rs"},"region":{"startLine":1317}}}],"partialFingerprints":{"codehealthFindingId/v1":"e391770f547616d84b0ee4360f7e062fafc0c820e4fb9e486883d2cb4a915855"}},{"ruleId":"D2","level":"warning","message":{"text":"iggy_connector_clickhouse_sink::binary::serialize_value (cognitive 55): iggy_connector_clickhouse_sink::binary::serialize_value has cognitive complexity 55 (threshold 15). Drivers by points: if/else 13 (30 pts), loops 5 (12 pts), match/switch 5 (10 pts), boolean chains 3 (nesting depth added 29). 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":"core/connectors/sinks/clickhouse_sink/src/binary.rs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc0650edb4a038d68a2eccbaa1ad417d54faffaba7371bbc7e4f906df244b9f4"}},{"ruleId":"D2","level":"warning","message":{"text":"TcpMessageStream.TryEstablishConnectionAsync (cognitive 52): TcpMessageStream.TryEstablishConnectionAsync has cognitive complexity 52 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/IggyClient/Implementations/TcpMessageStream.cs"},"region":{"startLine":1049}}}],"partialFingerprints":{"codehealthFindingId/v1":"888b5fddb2f5a052e081d92f2c614568daf43b0a906635c347234b601cf61203"}},{"ruleId":"D2","level":"warning","message":{"text":"QuicClient::connect_inner (cognitive 52): QuicClient::connect_inner has cognitive complexity 52 (threshold 15). Drivers by points: if/else 13 (36 pts), match/switch 4 (11 pts), loops 2 (3 pts), boolean chains 2 (nesting depth added 31). 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":"core/sdk/src/quic/quic_client.rs"},"region":{"startLine":672}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9f9cd3d3b217dca335dcc1d616630fef3737cb02260cdfd7cb2ad4e6d3d4988"}},{"ruleId":"D2","level":"warning","message":{"text":"iggy_gateway_kafka::protocol::bounds_guard::validate_fetch_shape (cognitive 51): iggy_gateway_kafka::protocol::bounds_guard::validate_fetch_shape has cognitive complexity 51 (threshold 15). Drivers by points: if/else 23 (38 pts), loops 5 (13 pts) (nesting depth added 23). 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":"gateways/kafka/src/protocol/bounds_guard.rs"},"region":{"startLine":476}}}],"partialFingerprints":{"codehealthFindingId/v1":"ceca5fc44430bb9a8ac4ceba6ff470dff20fe68165744d16fc0a60687d6dc4cd"}},{"ruleId":"D2","level":"warning","message":{"text":"QuicTransportConn::run (cognitive 49): QuicTransportConn::run has cognitive complexity 49 (threshold 15). Drivers by points: if/else 11 (28 pts), match/switch 5 (15 pts), loops 3 (5 pts), boolean chains 1 (nesting depth added 29). 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":"core/message_bus/src/transports/quic.rs"},"region":{"startLine":379}}}],"partialFingerprints":{"codehealthFindingId/v1":"58cc85fbad26fac2ae972b9fe074932876766006b94cac343d64daa44d9b2b29"}},{"ruleId":"D2","level":"warning","message":{"text":"CommandResponseStream.sendCommand (cognitive 47): CommandResponseStream.sendCommand has cognitive complexity 47 (threshold 15). Drivers by points: if/else 15 (32 pts), boolean chains 7, ternaries 3 (5 pts), error handling 1 (2 pts), loops 1 (nesting depth added 20). 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":"foreign/node/src/client/client.socket.ts"},"region":{"startLine":305}}}],"partialFingerprints":{"codehealthFindingId/v1":"5980c6ea40989a9432a30e9e0b65d7a03568df434b5956f0bee83ebef8408552"}},{"ruleId":"D2","level":"warning","message":{"text":"ConsumerGroup::rebalance_cooperative (cognitive 46): ConsumerGroup::rebalance_cooperative has cognitive complexity 46 (threshold 15). Drivers by points: if/else 16 (33 pts), loops 6 (10 pts), boolean chains 3 (nesting depth added 21). 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":"core/metadata/src/stm/consumer_group.rs"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"b92e5335af7bf81903ac95091c7569a36dc4b6201c564c2843f82b8976db8131"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyTcpClient.sendFrame (cognitive 46): IggyTcpClient.sendFrame has cognitive complexity 46 (threshold 15). Drivers by points: if/else 14 (41 pts), boolean chains 2, match/switch 1 (2 pts), loops 1 (nesting depth added 28). 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":"foreign/go/client/tcp/tcp_core.go"},"region":{"startLine":657}}}],"partialFingerprints":{"codehealthFindingId/v1":"1fc9126a01b424fa0e066cc0d4fcd48b032bfb02ae9d32f50f98781fc194be99"}},{"ruleId":"D2","level":"warning","message":{"text":"ServerConfig::validate (cognitive 45): ServerConfig::validate has cognitive complexity 45 (threshold 15). Drivers by points: if/else 22 (27 pts), boolean chains 12, loops 3 (6 pts) (nesting depth added 8). 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":"core/configs/src/server_config/validators.rs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"2981d1905b01934b06b1185e5dd82d27c8e162cd1da4cf927925a784126d2442"}},{"ruleId":"D2","level":"warning","message":{"text":"iggy_connectors::sink::process_messages (cognitive 45): iggy_connectors::sink::process_messages has cognitive complexity 45 (threshold 15). Drivers by points: if/else 16 (30 pts), match/switch 4 (10 pts), loops 4 (5 pts) (nesting depth added 21). 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":"core/connectors/runtime/src/sink.rs"},"region":{"startLine":548}}}],"partialFingerprints":{"codehealthFindingId/v1":"92781558acaeb2b1a625cd54bc469ad6c0bf5e393c6ef72db2e234941f0396bc"}},{"ruleId":"D2","level":"warning","message":{"text":"server::boot::shard_main (cognitive 44): server::boot::shard_main has cognitive complexity 44 (threshold 15). Drivers by points: if/else 28 (38 pts), boolean chains 2, loops 1 (2 pts), match/switch 2 (nesting depth added 11). 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":"core/server/src/boot/mod.rs"},"region":{"startLine":410}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bfa1cf4c43d8f99761db8a2d520ab2bea7c25369a1fe4c8df6609390cecc82c"}},{"ruleId":"D2","level":"warning","message":{"text":"kafka_message_gen::run_send (cognitive 44): kafka_message_gen::run_send has cognitive complexity 44 (threshold 15). Drivers by points: if/else 9 (33 pts), match/switch 2 (6 pts), loops 2 (3 pts), boolean chains 2 (nesting depth added 29). 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":"gateways/kafka/tools/kafka-tool/src/main.rs"},"region":{"startLine":730}}}],"partialFingerprints":{"codehealthFindingId/v1":"169b91c7b16c3f1a0bce6a3eeed81a9c3c83246477a483e0d791ae8ebc8dc285"}},{"ruleId":"D2","level":"warning","message":{"text":"CommandResponseStream._processVsr (cognitive 44): CommandResponseStream._processVsr has cognitive complexity 44 (threshold 15). Drivers by points: if/else 15 (33 pts), boolean chains 7, error handling 2 (3 pts), loops 1 (nesting depth added 19). 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":"foreign/node/src/client/client.socket.ts"},"region":{"startLine":879}}}],"partialFingerprints":{"codehealthFindingId/v1":"b87ac503f5fe510767011340934b47789269f9f45244b7ce97c8066fdc568a4e"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyPublisherBuilder.Validate (cognitive 43): IggyPublisherBuilder.Validate has cognitive complexity 43 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Publishers/IggyPublisherBuilder.cs"},"region":{"startLine":385}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8b94a8ed9f5ed75c61906f036f4f78895fa0b3ed490ec6ecd1cc6757561b605"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyPartition::apply_checked_install (cognitive 43): IggyPartition::apply_checked_install has cognitive complexity 43 (threshold 15). Drivers by points: if/else 17 (24 pts), loops 8 (9 pts), match/switch 4 (9 pts), boolean chains 1 (nesting depth added 13). 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":"core/partitions/src/state_transfer.rs"},"region":{"startLine":2859}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f1c627cfa4a6881db547c8089236de1510b389ec5bb41bc7eeaad4edad0b25d"}},{"ruleId":"D2","level":"warning","message":{"text":"iggy_connector_clickhouse_sink::binary::strip_timezone (cognitive 42): iggy_connector_clickhouse_sink::binary::strip_timezone has cognitive complexity 42 (threshold 15). Drivers by points: if/else 11 (29 pts), match/switch 2 (12 pts), loops 1 (nesting depth added 28). 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":"core/connectors/sinks/clickhouse_sink/src/binary.rs"},"region":{"startLine":801}}}],"partialFingerprints":{"codehealthFindingId/v1":"3517e32ac0344d3a645b923a2ac9904fc33470ad841141841181dec54dea33c6"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyShard::run_message_pump (cognitive 42): IggyShard::run_message_pump has cognitive complexity 42 (threshold 15). Drivers by points: if/else 12 (28 pts), match/switch 4 (11 pts), boolean chains 2, loops 1 (nesting depth added 23). 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":"core/shard/src/router.rs"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"41324fde95ab9c0385fb38cf7344480cce15f57cce169c2383e360d5d5ec5dd6"}},{"ruleId":"D2","level":"warning","message":{"text":"shard::dispatch_vsr_actions (cognitive 42): shard::dispatch_vsr_actions has cognitive complexity 42 (threshold 15). Drivers by points: if/else 8 (24 pts), loops 6 (13 pts), match/switch 2 (5 pts) (nesting depth added 26). 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":"core/shard/src/lib.rs"},"region":{"startLine":11567}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab9d08ab505fdbf1da1cbf2077f63bb41393bc8dd9d74828065c8b1d95e1feb1"}},{"ruleId":"D2","level":"warning","message":{"text":"kafka_message_gen::response::decode_body (cognitive 42): kafka_message_gen::response::decode_body has cognitive complexity 42 (threshold 15). Drivers by points: loops 9 (21 pts), if/else 10 (20 pts), match/switch 1 (nesting depth added 22). 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":"gateways/kafka/tools/kafka-tool/src/response.rs"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac107f5ee4e068ebc193c4b05cec5dd75bf21f4c0cabd1299736f137f27eab60"}},{"ruleId":"D2","level":"warning","message":{"text":"TcpContracts.CreateMessage (cognitive 41): TcpContracts.CreateMessage has cognitive complexity 41 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs"},"region":{"startLine":338}}}],"partialFingerprints":{"codehealthFindingId/v1":"15e1db4d5ac26387b13fc8dbcaaa795c751d063f444f3283f49b8473b0e0088d"}},{"ruleId":"D2","level":"warning","message":{"text":"iggy_connector_sdk::source::handle_messages (cognitive 41): iggy_connector_sdk::source::handle_messages has cognitive complexity 41 (threshold 15). Drivers by points: if/else 7 (24 pts), match/switch 6 (16 pts), loops 1 (nesting depth added 27). 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":"core/connectors/sdk/src/source.rs"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"65e607d7b2fbe78b4da47fc249d4ba1c3e25d8f81812c5d76176a3f37ea38c85"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyPartition::drain_request_queue_into_prepares (cognitive 41): IggyPartition::drain_request_queue_into_prepares has cognitive complexity 41 (threshold 15). Drivers by points: if/else 13 (37 pts), match/switch 1 (2 pts), boolean chains 1, loops 1 (nesting depth added 25). 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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":4649}}}],"partialFingerprints":{"codehealthFindingId/v1":"45a7b37d36d125b2ebeaeaf2e733f6b4fa080de0781fed90e629d36972dececc"}},{"ruleId":"D2","level":"warning","message":{"text":"SendMessages::deserialize (cognitive 40): SendMessages::deserialize has cognitive complexity 40 (threshold 15). Drivers by points: if/else 10 (27 pts), loops 3 (10 pts), match/switch 2 (3 pts) (nesting depth added 25). 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":"core/common/src/http/messages/send_messages.rs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"141ec6c6e82470ce802f7f2b902c240ac40d44c3032b4d96c87d9aaa8036c17e"}},{"ruleId":"D2","level":"warning","message":{"text":"InfluxDbSource::poll (cognitive 40): InfluxDbSource::poll has cognitive complexity 40 (threshold 15). Drivers by points: if/else 15 (29 pts), match/switch 5 (11 pts) (nesting depth added 20). 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":"core/connectors/sources/influxdb_source/src/lib.rs"},"region":{"startLine":469}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f6708015f4aff3813809011e755176baa9d8a040f550db0de0061a02faa96df"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyPartition::on_request (cognitive 40): IggyPartition::on_request has cognitive complexity 40 (threshold 15). Drivers by points: if/else 17 (25 pts), match/switch 5 (8 pts), boolean chains 7 (nesting depth added 11). 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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":4249}}}],"partialFingerprints":{"codehealthFindingId/v1":"eafea9b174a18e2b6d95298132855998f2a304f1abb46cdb9c6881a34728cd3d"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyTcpClient.pollOnRoute (cognitive 40): IggyTcpClient.pollOnRoute has cognitive complexity 40 (threshold 15). Drivers by points: if/else 18 (31 pts), match/switch 2 (5 pts), loops 1 (3 pts), boolean chains 1 (nesting depth added 18). 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":"foreign/go/client/tcp/tcp_poll_routing.go"},"region":{"startLine":219}}}],"partialFingerprints":{"codehealthFindingId/v1":"adba7f09f7fa6ad862f5f94c94eee35a24f73c3bcea689d36606208b51911566"}},{"ruleId":"D2","level":"warning","message":{"text":"PrepareJournal::scan (cognitive 39): PrepareJournal::scan has cognitive complexity 39 (threshold 15). Drivers by points: if/else 14 (32 pts), boolean chains 4, match/switch 1 (2 pts), loops 1 (nesting depth added 19). 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":"core/journal/src/prepare_journal.rs"},"region":{"startLine":411}}}],"partialFingerprints":{"codehealthFindingId/v1":"53ea745b7bcae6616f8800189647f2fe5899dace3ef30ab598bfb96293dc7924"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyPartition::install_state_transfer (cognitive 39): IggyPartition::install_state_transfer has cognitive complexity 39 (threshold 15). Drivers by points: if/else 20 (26 pts), boolean chains 12, loops 1 (nesting depth added 6). 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, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/partitions/src/state_transfer.rs"},"region":{"startLine":2558}}}],"partialFingerprints":{"codehealthFindingId/v1":"e96a70a280d888baabef65ab8367df3b084a2a20bb3bd84680eb5fbb789c6397"}},{"ruleId":"D2","level":"warning","message":{"text":"server::partition_reconciler::reconcile_additions (cognitive 39): server::partition_reconciler::reconcile_additions has cognitive complexity 39 (threshold 15). Drivers by points: if/else 15 (36 pts), match/switch 1 (2 pts), loops 1 (nesting depth added 22). 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":"core/server/src/partition_reconciler.rs"},"region":{"startLine":573}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e7317fff4704dd5716dd313440cf507b109a3cbce00a6e712e29f7acc7d090c"}},{"ruleId":"D2","level":"warning","message":{"text":"PacketSimulator::step (cognitive 39): PacketSimulator::step has cognitive complexity 39 (threshold 15). Drivers by points: if/else 8 (32 pts), loops 3 (6 pts), boolean chains 1 (nesting depth added 27). 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":"core/simulator/src/packet.rs"},"region":{"startLine":667}}}],"partialFingerprints":{"codehealthFindingId/v1":"097867e8db368d94cdd33c0553a7daab267cc228bb02f66fd5067db8d8184354"}},{"ruleId":"D2","level":"warning","message":{"text":"TcpClient::connect_inner (cognitive 38): TcpClient::connect_inner has cognitive complexity 38 (threshold 15). Drivers by points: if/else 9 (23 pts), match/switch 3 (9 pts), boolean chains 3, loops 2 (3 pts) (nesting depth added 21). 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":"core/sdk/src/tcp/tcp_client.rs"},"region":{"startLine":617}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac618db5e1586b11cf7aefd5bf52fbee8873e45c3889a6e60389e7c49c5571e3"}},{"ruleId":"D2","level":"warning","message":{"text":"TcpMessageStream.SendRawAsync (cognitive 37): TcpMessageStream.SendRawAsync has cognitive complexity 37 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/IggyClient/Implementations/TcpMessageStream.Vsr.cs"},"region":{"startLine":531}}}],"partialFingerprints":{"codehealthFindingId/v1":"e353e83bfe870929f6dcc681e1eff007d7a09de120f52a5759a299e804445937"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyPartition::handle_committed_entries (cognitive 37): IggyPartition::handle_committed_entries has cognitive complexity 37 (threshold 15). Drivers by points: if/else 17 (29 pts), loops 3, match/switch 1 (3 pts), boolean chains 2 (nesting depth added 14). 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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":6173}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f3baa17738fd77edaacba2c9d092efa487041184e43685ec5aa986825dac52c"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyShard::on_partition_transfer_progress (cognitive 37): IggyShard::on_partition_transfer_progress has cognitive complexity 37 (threshold 15). Drivers by points: if/else 19 (27 pts), match/switch 4 (7 pts), boolean chains 2, loops 1 (nesting depth added 11). 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":"core/shard/src/lib.rs"},"region":{"startLine":9505}}}],"partialFingerprints":{"codehealthFindingId/v1":"36d34d9fa97353ec07ea0b20d1ccb67e809b3cb8fad335a60e79e22b07e0b383"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyTcpClient.exchangeLocked (cognitive 37): IggyTcpClient.exchangeLocked has cognitive complexity 37 (threshold 15). Drivers by points: if/else 12 (30 pts), boolean chains 4, match/switch 1 (2 pts), loops 1 (nesting depth added 19). 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":"foreign/go/client/tcp/tcp_core.go"},"region":{"startLine":854}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c08aa88dc02f9c913933dc6d3c0e3fcf35bbbab8a860a30e56ffc0fc782b4d1"}},{"ruleId":"D2","level":"warning","message":{"text":"PartitionPrepareJournal::rewrite (cognitive 35): PartitionPrepareJournal::rewrite has cognitive complexity 35 (threshold 15). Drivers by points: if/else 16 (30 pts), boolean chains 4, loops 1 (nesting depth added 14). 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":"core/journal/src/partition_journal.rs"},"region":{"startLine":1353}}}],"partialFingerprints":{"codehealthFindingId/v1":"019b9113904a372c9f94779359c436b8e274cd3bec0aee481c540dc9292f6626"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyPartition::persist_consumer_offset_commit (cognitive 35): IggyPartition::persist_consumer_offset_commit has cognitive complexity 35 (threshold 15). Drivers by points: if/else 10 (23 pts), boolean chains 6, match/switch 3 (6 pts) (nesting depth added 16). 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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":2804}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d45b7dea2bf7a3db39f6176bd6094c69ab8ffe640453ba4665d0779300a5e5e"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyShard::on_request_prepares (cognitive 35): IggyShard::on_request_prepares has cognitive complexity 35 (threshold 15). Drivers by points: if/else 15 (28 pts), loops 3 (5 pts), boolean chains 2 (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":"core/shard/src/lib.rs"},"region":{"startLine":4964}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fa973e0d24aaff4fe0e6e54478ca133aa5245ac70c269ea5c4afcdef3758ea6"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyShard::tick_metadata (cognitive 35): IggyShard::tick_metadata has cognitive complexity 35 (threshold 15). Drivers by points: if/else 18 (32 pts), match/switch 1 (3 pts) (nesting depth added 16). 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":"core/shard/src/lib.rs"},"region":{"startLine":10184}}}],"partialFingerprints":{"codehealthFindingId/v1":"e61536c95c4a238ebf50d20b96529c6ba686a05b5b24fac5c526a242c324fc2a"}},{"ruleId":"D2","level":"warning","message":{"text":"BackgroundMessageProcessor.SendWithRetry (cognitive 34): BackgroundMessageProcessor.SendWithRetry has cognitive complexity 34 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Publishers/BackgroundMessageProcessor.cs"},"region":{"startLine":480}}}],"partialFingerprints":{"codehealthFindingId/v1":"355324922f434540bfc12a6a88df122f23d68bbff1353e6675badf5d6c1add10"}},{"ruleId":"D2","level":"warning","message":{"text":"iggy_connector_delta_sink::coercions::apply_coercion (cognitive 34): iggy_connector_delta_sink::coercions::apply_coercion has cognitive complexity 34 (threshold 15). Drivers by points: if/else 7 (17 pts), loops 4 (12 pts), boolean chains 4, match/switch 1 (nesting depth added 18). 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":"core/connectors/sinks/delta_sink/src/coercions.rs"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"78751b099f54cd7e122b90c312a3cece8a52fdd74aba7a0115c9f8c9795f04f4"}},{"ruleId":"D2","level":"warning","message":{"text":"message_bus::transports::ws::run_pump (cognitive 34): message_bus::transports::ws::run_pump has cognitive complexity 34 (threshold 15). Drivers by points: match/switch 5 (15 pts), if/else 3 (12 pts), loops 3 (7 pts) (nesting depth added 23). 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":"core/message_bus/src/transports/ws.rs"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed07048c37508e6c394d592249ba4f33f178fa5a52cf511db4a5e7334e7bcc29"}},{"ruleId":"D2","level":"warning","message":{"text":"message_bus::transports::wss::run_pump (cognitive 34): message_bus::transports::wss::run_pump has cognitive complexity 34 (threshold 15). Drivers by points: match/switch 5 (15 pts), if/else 3 (12 pts), loops 3 (7 pts) (nesting depth added 23). 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":"core/message_bus/src/transports/wss.rs"},"region":{"startLine":334}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c469d5578a52b913091b58f65865b76dd28f24e25916defd9e3e13ea55797d1"}},{"ruleId":"D2","level":"warning","message":{"text":"metadata::stm::authz::authorize (cognitive 34): metadata::stm::authz::authorize has cognitive complexity 34 (threshold 15). Drivers by points: if/else 16 (31 pts), match/switch 2 (3 pts) (nesting depth added 16). 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":"core/metadata/src/stm/authz.rs"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"49839db330829cc88f0b83ab1100c456804d143323d286a0620ad565bcbe526e"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyConsumer::create_poll_messages_future (cognitive 34): IggyConsumer::create_poll_messages_future has cognitive complexity 34 (threshold 15). Drivers by points: if/else 18 (29 pts), boolean chains 4, loops 1 (nesting depth added 11). 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":"core/sdk/src/clients/consumer.rs"},"region":{"startLine":1214}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd892596ee9771266b242608835e38a0904c4cb37738f5f7345de23724d38235"}},{"ruleId":"D2","level":"warning","message":{"text":"iggy_gateway_kafka::protocol::bounds_guard::validate_create_topics_shape (cognitive 34): iggy_gateway_kafka::protocol::bounds_guard::validate_create_topics_shape has cognitive complexity 34 (threshold 15). Drivers by points: if/else 16 (26 pts), loops 4 (8 pts) (nesting depth added 14). 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":"gateways/kafka/src/protocol/bounds_guard.rs"},"region":{"startLine":633}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b39243d3a6b29f679fe469140a23a48ab5a31704857a9344199bdfb92b223bd"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyTcpClient.pollPrimary (cognitive 34): IggyTcpClient.pollPrimary has cognitive complexity 34 (threshold 15). Drivers by points: if/else 16 (29 pts), boolean chains 4, loops 1 (nesting depth added 13). Of this number, 29 points are the body\u0027s own statements and 5 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":"foreign/go/client/tcp/tcp_poll_routing.go"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"55faabd9ce0ba54f56f96e96d3edb68a6ee9350e97f85dfd1be093f2f0f0044e"}},{"ruleId":"D2","level":"warning","message":{"text":"RabbitMQSink::publish_batch_with_retry (cognitive 32): RabbitMQSink::publish_batch_with_retry has cognitive complexity 32 (threshold 15). Drivers by points: if/else 5 (13 pts), match/switch 5 (13 pts), loops 3 (5 pts), boolean chains 1 (nesting depth added 18). 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":"core/connectors/sinks/rabbitmq_sink/src/lib.rs"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"f99ecbddf4cba485221314409e251f9f4f78a30ad9fd52307cf12b1cea067c02"}},{"ruleId":"D2","level":"warning","message":{"text":"HttpSourceConfig::validate (cognitive 32): HttpSourceConfig::validate has cognitive complexity 32 (threshold 15). Drivers by points: if/else 15 (22 pts), boolean chains 7, loops 3 (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":"core/connectors/sources/http_source/src/lib.rs"},"region":{"startLine":610}}}],"partialFingerprints":{"codehealthFindingId/v1":"af36fb12ffd25a6c6c7b70118ce1300c0f97c6d491438da60d3d124d402af55a"}},{"ruleId":"D2","level":"warning","message":{"text":"FileScanner::probe_for_survivor (cognitive 32): FileScanner::probe_for_survivor has cognitive complexity 32 (threshold 15). Drivers by points: if/else 7 (27 pts), loops 2 (3 pts), boolean chains 2 (nesting depth added 21). 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":"core/partitions/src/segment_recovery.rs"},"region":{"startLine":2804}}}],"partialFingerprints":{"codehealthFindingId/v1":"aba71e529a5ff310976e54296cbd95ff4ab508854159d2a02aef687bd4300af6"}},{"ruleId":"D2","level":"warning","message":{"text":"partitions::segment_recovery::load_persisted_segments_with_checkpoint (cognitive 32): partitions::segment_recovery::load_persisted_segments_with_checkpoint has cognitive complexity 32 (threshold 15). Drivers by points: if/else 14 (23 pts), match/switch 2 (4 pts), boolean chains 3, loops 2 (nesting depth added 11). 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":"core/partitions/src/segment_recovery.rs"},"region":{"startLine":570}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd2435996b94fe601ee6777f46efa51ec201a4c298686e1e864b35b5315bf641"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyShard::process_lifecycle (cognitive 32): IggyShard::process_lifecycle has cognitive complexity 32 (threshold 15). Drivers by points: if/else 12 (26 pts), match/switch 2 (4 pts), boolean chains 2 (nesting depth added 16). 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":"core/shard/src/router.rs"},"region":{"startLine":674}}}],"partialFingerprints":{"codehealthFindingId/v1":"c52840704be59fbc81a8e4468e5582aef9f148373a740e6455f4a665cc299697"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyShard::drain_queued_frames_for_shutdown (cognitive 31): IggyShard::drain_queued_frames_for_shutdown has cognitive complexity 31 (threshold 15). Drivers by points: if/else 10 (27 pts), loops 3 (4 pts) (nesting depth added 18). 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":"core/shard/src/router.rs"},"region":{"startLine":530}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ef63c3ae0c324d0d2f22de1310ffd2ef34c786205c118f573235defeddd114a"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyConnection._reconnectUntilConnected (cognitive 31): IggyConnection._reconnectUntilConnected has cognitive complexity 31 (threshold 15). Drivers by points: if/else 7 (18 pts), boolean chains 7, error handling 1 (3 pts), loops 2 (3 pts) (nesting depth added 14). 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":"foreign/node/src/client/client.connection.ts"},"region":{"startLine":408}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1a5ed307f0f04d5c8dd3a2bc16ebf05ec98777c361137b29ad22e3079de433a"}},{"ruleId":"D2","level":"warning","message":{"text":"Args::from (cognitive 30): Args::from has cognitive complexity 30 (threshold 15). Drivers by points: if/else 28 (29 pts), loops 1 (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":"core/common/src/types/args/mod.rs"},"region":{"startLine":424}}}],"partialFingerprints":{"codehealthFindingId/v1":"6dc79647a9a5fd635d521908bdf36e6b7838d6304a53b4e7df3b528e18ae5bfd"}},{"ruleId":"D2","level":"warning","message":{"text":"WebSocketClient::connect_inner (cognitive 30): WebSocketClient::connect_inner has cognitive complexity 30 (threshold 15). Drivers by points: if/else 8 (19 pts), match/switch 2 (8 pts), loops 2 (3 pts) (nesting depth added 18). 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":"core/sdk/src/websocket/websocket_client.rs"},"region":{"startLine":599}}}],"partialFingerprints":{"codehealthFindingId/v1":"d648ff9660c17c90c756432fdef813162e2bddfc83ed2e1fd5ac0e567e864f2f"}},{"ruleId":"D2","level":"warning","message":{"text":"iggy_connectors::main (cognitive 29): iggy_connectors::main has cognitive complexity 29 (threshold 15). Drivers by points: if/else 9 (16 pts), loops 10 (12 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":"core/connectors/runtime/src/main.rs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"49f89b09d50c685e96340885aea4366c7f1af36a41efd3dc44729c6abadc93c4"}},{"ruleId":"D2","level":"warning","message":{"text":"metadata::impls::recovery::recover (cognitive 29): metadata::impls::recovery::recover has cognitive complexity 29 (threshold 15). Drivers by points: if/else 16 (23 pts), boolean chains 3, match/switch 2, 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":"core/metadata/src/impls/recovery.rs"},"region":{"startLine":355}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc7bce69d44e1d8227ba6f7e9dd77cc798e127999b1b54cb5c8db43fe98d22e9"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyPartition::converge_to_empty_after_failed_install (cognitive 29): IggyPartition::converge_to_empty_after_failed_install has cognitive complexity 29 (threshold 15). Drivers by points: match/switch 5 (14 pts), if/else 3 (7 pts), loops 5 (7 pts), boolean chains 1 (nesting depth added 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. 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":"core/partitions/src/state_transfer.rs"},"region":{"startLine":3502}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ac3e23ad79ae068dcf3bb8b3a87a213784fe381ceb2f8396e9c5de323ed3c8e"}},{"ruleId":"D2","level":"warning","message":{"text":"KafkaGateway::run (cognitive 29): KafkaGateway::run has cognitive complexity 29 (threshold 15). Drivers by points: if/else 5 (20 pts), match/switch 3 (8 pts), loops 1 (nesting depth added 20). 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":"gateways/kafka/src/server.rs"},"region":{"startLine":328}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd245977fcdde7166264f882402a76eaa4c2ec265cb7cbc4473d13f050f8810b"}},{"ruleId":"D2","level":"warning","message":{"text":"iggy_gateway_kafka::group::state::join_step (cognitive 29): iggy_gateway_kafka::group::state::join_step has cognitive complexity 29 (threshold 15). Drivers by points: if/else 18 (24 pts), boolean chains 4, match/switch 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":"gateways/kafka/src/group/state.rs"},"region":{"startLine":745}}}],"partialFingerprints":{"codehealthFindingId/v1":"c09c4a16a2dc6ee8f43b2098cb0844140d3fe07ec242bbf30920b057a79b07e2"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyTcpClient.Connect (cognitive 29): IggyTcpClient.Connect has cognitive complexity 29 (threshold 15). Drivers by points: if/else 14 (21 pts), match/switch 3 (5 pts), boolean chains 2, loops 1 (nesting depth added 9). Of this number, 19 points are the body\u0027s own statements and 10 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":"foreign/go/client/tcp/tcp_core.go"},"region":{"startLine":1043}}}],"partialFingerprints":{"codehealthFindingId/v1":"3380297e697e3b4f7f0589fcc33d7cefec2eb453781cc940381f9f32f7586f25"}},{"ruleId":"D2","level":"warning","message":{"text":"DurationParser.parse (cognitive 29): DurationParser.parse has cognitive complexity 29 (threshold 15). Drivers by points: if/else 11 (24 pts), loops 3 (5 pts) (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":"foreign/node/src/duration.utils.ts"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbf306847a92b9f83b377005cdf5fe664fc91ff64d6bbc19370aa4dcd8cac78e"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyConsumerBuilder.Validate (cognitive 28): IggyConsumerBuilder.Validate has cognitive complexity 28 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Consumers/IggyConsumerBuilder.cs"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"853eaf88689cca26b1724906a1ac593f6205e0bcc44d54ed288d76c88b6d9738"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyMetadata::install_state_transfer (cognitive 28): IggyMetadata::install_state_transfer has cognitive complexity 28 (threshold 15). Drivers by points: if/else 17 (25 pts), boolean chains 3 (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":"core/metadata/src/impls/metadata.rs"},"region":{"startLine":1733}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9557b9405bdacdc5308cdd635fd1e467d61c9c225e4f096f52f7adf2d867f89"}},{"ruleId":"D2","level":"warning","message":{"text":"Logging::cleanup_log_files (cognitive 28): Logging::cleanup_log_files has cognitive complexity 28 (threshold 15). Drivers by points: if/else 12 (19 pts), loops 4 (6 pts), match/switch 1 (2 pts), boolean chains 1 (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":"core/server_common/src/log/logger.rs"},"region":{"startLine":618}}}],"partialFingerprints":{"codehealthFindingId/v1":"39a7876d0ccb090e7d60daa2125d83a3bd620afc8ab5858a44da67fdf51ad947"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyShard::on_transfer_progress (cognitive 28): IggyShard::on_transfer_progress has cognitive complexity 28 (threshold 15). Drivers by points: if/else 14 (21 pts), match/switch 4 (6 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":"core/shard/src/lib.rs"},"region":{"startLine":7347}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a6d5e725e81443283714a9a2cc99eceb1a529cc23ff9103d6efb39ad2981233"}},{"ruleId":"D2","level":"warning","message":{"text":"simulator::replica::new_shard (cognitive 28): simulator::replica::new_shard has cognitive complexity 28 (threshold 15). Drivers by points: if/else 17 (22 pts), loops 2 (4 pts), boolean chains 2 (nesting depth added 7). 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, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/simulator/src/replica.rs"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"dff188144b840f214ae2874eb8afb93524d4828a652472b590f2c036271ec01c"}},{"ruleId":"D2","level":"warning","message":{"text":"iggy_cli::get_command (cognitive 27): iggy_cli::get_command has cognitive complexity 27 (threshold 15). Drivers by points: match/switch 14 (27 pts) (nesting depth added 13). 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":"core/cli/src/main.rs"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"490abb388972d25c55214fd3719a3c83b7d94eeb10ddb7698cbe88419d21b8b6"}},{"ruleId":"D2","level":"warning","message":{"text":"consensus::view_change_quorum::dvc_suffix_decode (cognitive 27): consensus::view_change_quorum::dvc_suffix_decode has cognitive complexity 27 (threshold 15). Drivers by points: if/else 10 (23 pts), boolean chains 3, loops 1 (nesting depth added 13). 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":"core/consensus/src/view_change_quorum.rs"},"region":{"startLine":343}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7c7c9a07752536a753c5838aa1b7f5f05c43eb6321462454492efbadf333d95"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyPartition::open_persistence_with_recovered (cognitive 27): IggyPartition::open_persistence_with_recovered has cognitive complexity 27 (threshold 15). Drivers by points: if/else 15 (20 pts), loops 4 (5 pts), boolean chains 2 (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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":811}}}],"partialFingerprints":{"codehealthFindingId/v1":"97134bdfd17ae8fe61093e2f9ec71e9e696acf809b5fc935a0f978825c6bf913"}},{"ruleId":"D2","level":"warning","message":{"text":"Simulator::step (cognitive 27): Simulator::step has cognitive complexity 27 (threshold 15). Drivers by points: if/else 6 (13 pts), match/switch 3 (9 pts), loops 3 (4 pts), boolean chains 1 (nesting depth added 14). 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":"core/simulator/src/lib.rs"},"region":{"startLine":792}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0652de30032292c589d5b86214cf66881ead120245fa3df7023282c4e529e32"}},{"ruleId":"D2","level":"warning","message":{"text":"binaryserialization.DeserializeFetchMessagesResponse (cognitive 27): binaryserialization.DeserializeFetchMessagesResponse has cognitive complexity 27 (threshold 15). Drivers by points: if/else 10 (21 pts), loops 2 (3 pts), match/switch 1 (3 pts) (nesting depth added 14). 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":"foreign/go/binary_serialization/binary_response_deserializer.go"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"191fe7d99c8f7f0cd5b793fd325e352a1dccefae9698f48dda74c05cbe1c2e75"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyConsumer.PollRentedMessagesAsync (cognitive 26): IggyConsumer.PollRentedMessagesAsync has cognitive complexity 26 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Consumers/IggyConsumer.Rented.cs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"8238731c989b6604906f8c4e78b9c773b733f4441adc051b223ce855082cca13"}},{"ruleId":"D2","level":"warning","message":{"text":"ElasticsearchSink::bulk_index_documents (cognitive 26): ElasticsearchSink::bulk_index_documents has cognitive complexity 26 (threshold 15). Drivers by points: if/else 10 (19 pts), loops 3 (5 pts), boolean chains 2 (nesting depth added 11). 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":"core/connectors/sinks/elasticsearch_sink/src/lib.rs"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"9489d530d78c6394c1cfbcc9ff8704994a72303c5b8391379cefb76e98050873"}},{"ruleId":"D2","level":"warning","message":{"text":"harness_derive::codegen::generate_harness_setup (cognitive 26): harness_derive::codegen::generate_harness_setup has cognitive complexity 26 (threshold 15). Drivers by points: if/else 21 (23 pts), match/switch 2 (3 pts) (nesting depth added 3). 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, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/harness_derive/src/codegen.rs"},"region":{"startLine":389}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef6bdb7ed6553371e65b2a316c03aec6707f11233a8895f66dbd67602df35651"}},{"ruleId":"D2","level":"warning","message":{"text":"PartitionPrepareJournal::append_batch_inner (cognitive 26): PartitionPrepareJournal::append_batch_inner has cognitive complexity 26 (threshold 15). Drivers by points: if/else 10 (19 pts), boolean chains 4, loops 3 (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":"core/journal/src/partition_journal.rs"},"region":{"startLine":771}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5d2c1d8a4fe9fc167997a266582594e962908163e75de17605ae48626ad069c"}},{"ruleId":"D2","level":"warning","message":{"text":"message_bus::installer::replica::install_replica_conn (cognitive 26): message_bus::installer::replica::install_replica_conn has cognitive complexity 26 (threshold 15). Drivers by points: if/else 16 (21 pts), boolean chains 4, match/switch 1 (nesting depth added 5). 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, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/message_bus/src/installer/replica.rs"},"region":{"startLine":326}}}],"partialFingerprints":{"codehealthFindingId/v1":"85bbbd37d74b77626e2df5b06b088e9834994c58c2f7f520fe46554f5d562a0c"}},{"ruleId":"D2","level":"warning","message":{"text":"partitions::segment_recovery::recover_segment_bounds (cognitive 26): partitions::segment_recovery::recover_segment_bounds has cognitive complexity 26 (threshold 15). Drivers by points: if/else 9 (24 pts), boolean chains 1, match/switch 1 (nesting depth added 15). 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":"core/partitions/src/segment_recovery.rs"},"region":{"startLine":1572}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ad12bb2725beaf365b90dc56232fa7eccf30f74380c254bf94b8b674c4664cd"}},{"ruleId":"D2","level":"warning","message":{"text":"server::http::forward::forward_partition_or_pass (cognitive 26): server::http::forward::forward_partition_or_pass has cognitive complexity 26 (threshold 15). Drivers by points: if/else 10 (16 pts), match/switch 2 (4 pts), boolean chains 3, loops 2 (3 pts) (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":"core/server/src/http/forward.rs"},"region":{"startLine":335}}}],"partialFingerprints":{"codehealthFindingId/v1":"26808303704274770e69cb988c1869d4715c8e7a5853990aa7d7d672bb5f3f86"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyShard::on_start_view (cognitive 26): IggyShard::on_start_view has cognitive complexity 26 (threshold 15). Drivers by points: if/else 16 (23 pts), boolean chains 3 (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":"core/shard/src/lib.rs"},"region":{"startLine":4606}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd94b65f381a939c3beb081e067064653647a9e62b47c103bedc48332903e1fa"}},{"ruleId":"D2","level":"warning","message":{"text":"shard::dispatch_partition_journal_actions (cognitive 26): shard::dispatch_partition_journal_actions has cognitive complexity 26 (threshold 15). Drivers by points: if/else 4 (12 pts), loops 5 (12 pts), match/switch 1 (2 pts) (nesting depth added 16). 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":"core/shard/src/lib.rs"},"region":{"startLine":11873}}}],"partialFingerprints":{"codehealthFindingId/v1":"63dc9e630e802bf60bfb5a544219c95fdd939f0b8681034f0670b248210222ee"}},{"ruleId":"D2","level":"warning","message":{"text":"tools::data-seeder::seeder::send_messages (cognitive 26): tools::data-seeder::seeder::send_messages has cognitive complexity 26 (threshold 15). Drivers by points: if/else 3 (10 pts), loops 4 (10 pts), match/switch 1 (5 pts), boolean chains 1 (nesting depth added 17). 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":"core/tools/src/data-seeder/seeder.rs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"afb918116d9b919a5f18f74f28da901e2b51f091ee8a5a38d71dc45e7b74c86b"}},{"ruleId":"D2","level":"warning","message":{"text":"kafka_message_gen::build_payload (cognitive 26): kafka_message_gen::build_payload has cognitive complexity 26 (threshold 15). Drivers by points: if/else 14 (25 pts), match/switch 1 (nesting depth added 11). 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":"gateways/kafka/tools/kafka-tool/src/main.rs"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"0816269926a0cb1283f8f22a62723d9566a5f029b2c515383a850ecd9159a91b"}},{"ruleId":"D2","level":"warning","message":{"text":"EndpointRegistry::restore (cognitive 25): EndpointRegistry::restore has cognitive complexity 25 (threshold 15). Drivers by points: if/else 11 (18 pts), boolean chains 3, loops 2, match/switch 1 (2 pts) (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":"core/connectors/sources/http_source/src/state.rs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5159a6b0b92012140e08abc414d4061adc1e176d76fbf5bea65e6e0d4e7457b"}},{"ruleId":"D2","level":"warning","message":{"text":"PostgresSource::poll_tables (cognitive 25): PostgresSource::poll_tables has cognitive complexity 25 (threshold 15). Drivers by points: if/else 12 (21 pts), loops 2 (3 pts), boolean chains 1 (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":"core/connectors/sources/postgres_source/src/lib.rs"},"region":{"startLine":806}}}],"partialFingerprints":{"codehealthFindingId/v1":"987818c26ccf6cfde00618ceca834f7f8df515a35db24a5826c1e6eb1f9dc945"}},{"ruleId":"D2","level":"warning","message":{"text":"PostgresSource::process_row (cognitive 25): PostgresSource::process_row has cognitive complexity 25 (threshold 15). Drivers by points: if/else 12 (20 pts), boolean chains 4, 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":"core/connectors/sources/postgres_source/src/lib.rs"},"region":{"startLine":1419}}}],"partialFingerprints":{"codehealthFindingId/v1":"121811d2252eaf40feb6a6e131050475a09d9bb5eca325a758c5528318c6c4c5"}},{"ruleId":"D2","level":"warning","message":{"text":"PartitionPrepareJournal::reset_with_segment_checkpoint (cognitive 25): PartitionPrepareJournal::reset_with_segment_checkpoint has cognitive complexity 25 (threshold 15). Drivers by points: if/else 13 (20 pts), boolean chains 4, match/switch 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":"core/journal/src/partition_journal/segments.rs"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0b55261072effb9233545d4f2598b0d6c0fdfdbb007591cb1f79876096ac26c"}},{"ruleId":"D2","level":"warning","message":{"text":"message_bus::transports::tcp_tls::run_pump (cognitive 25): message_bus::transports::tcp_tls::run_pump has cognitive complexity 25 (threshold 15). Drivers by points: if/else 3 (10 pts), match/switch 3 (8 pts), loops 3 (7 pts) (nesting depth added 16). 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":"core/message_bus/src/transports/tcp_tls.rs"},"region":{"startLine":521}}}],"partialFingerprints":{"codehealthFindingId/v1":"f56a60dce62296b13d13fd0fda5239d5ae93f9ec032f1e8d1beb5b3babc74b56"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyPartition::build_poll_plan (cognitive 25): IggyPartition::build_poll_plan has cognitive complexity 25 (threshold 15). Drivers by points: if/else 7 (14 pts), match/switch 5 (9 pts), boolean chains 2 (nesting depth added 11). 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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":3823}}}],"partialFingerprints":{"codehealthFindingId/v1":"3158b1b75ac13cbdf041170c82c1b92afdc7edb6342e8ad518105dfb104065ba"}},{"ruleId":"D2","level":"warning","message":{"text":"PartitionJournal::evict_prefix (cognitive 25): PartitionJournal::evict_prefix has cognitive complexity 25 (threshold 15). Drivers by points: if/else 6 (15 pts), loops 4 (8 pts), boolean chains 2 (nesting depth added 13). 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":"core/partitions/src/journal.rs"},"region":{"startLine":581}}}],"partialFingerprints":{"codehealthFindingId/v1":"74f65525b6cdc4a0fb78b61ad9be6ec44ac262d0e831e1fa2746d2497dc82562"}},{"ruleId":"D2","level":"warning","message":{"text":"server_common::diagnostics::report_io_uring_environment (cognitive 25): server_common::diagnostics::report_io_uring_environment has cognitive complexity 25 (threshold 15). Drivers by points: if/else 9 (14 pts), boolean chains 5, match/switch 3 (4 pts), loops 1 (2 pts) (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":"core/server_common/src/diagnostics.rs"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"28bdc44cd8e8b43558c3b79df705493a8298c4f7f5e67231ce0c04ee4b49bcae"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyShard::on_repair_prepare (cognitive 25): IggyShard::on_repair_prepare has cognitive complexity 25 (threshold 15). Drivers by points: if/else 13 (22 pts), boolean chains 3 (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":"core/shard/src/lib.rs"},"region":{"startLine":5210}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ce08f43e26f1aaa12e747badfe551f0b828dcea07647ce5124c5f086ff93e88"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyShard::on_partition_request_state_chunk (cognitive 25): IggyShard::on_partition_request_state_chunk has cognitive complexity 25 (threshold 15). Drivers by points: if/else 7 (12 pts), match/switch 5 (11 pts), boolean chains 1, loops 1 (nesting depth added 11). 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":"core/shard/src/lib.rs"},"region":{"startLine":8546}}}],"partialFingerprints":{"codehealthFindingId/v1":"2185edc215db6dbf0b99ae9d29e85a3a8d1ab084977231c344b13e9b1507c1db"}},{"ruleId":"D2","level":"warning","message":{"text":"iggcon.DeserializeHeaders (cognitive 25): iggcon.DeserializeHeaders has cognitive complexity 25 (threshold 15). Drivers by points: if/else 10 (20 pts), boolean chains 4, loops 1 (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":"foreign/go/contracts/user_headers.go"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4ca4e482d77c24c0cb83aff55aa3c84aa97ade7386adb7e9e2408a72ecb6e39"}},{"ruleId":"D2","level":"warning","message":{"text":"UserHeadersConverter.Read (cognitive 24): UserHeadersConverter.Read has cognitive complexity 24 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/JsonConverters/UserHeadersConverter.cs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"23f7da8004f49012327c2e8e415d2c3f0260eb8b16067796762055116ae666bc"}},{"ruleId":"D2","level":"warning","message":{"text":"consensus::dvc_merge::merge_dvc_quorum (cognitive 24): consensus::dvc_merge::merge_dvc_quorum has cognitive complexity 24 (threshold 15). Drivers by points: if/else 13 (22 pts), boolean chains 1, 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":"core/consensus/src/dvc_merge.rs"},"region":{"startLine":401}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4bdebb6192a29da5b318ffc711b384ea2c0012d3ee083ae3746825a88f5581d"}},{"ruleId":"D2","level":"warning","message":{"text":"TestHarness::start_internal (cognitive 24): TestHarness::start_internal has cognitive complexity 24 (threshold 15). Drivers by points: loops 5 (11 pts), if/else 6 (10 pts), match/switch 1 (2 pts), boolean chains 1 (nesting depth added 11). 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":"core/integration/src/harness/orchestrator/harness.rs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0c27b0bed1ec38c4e5fd53da2507d0287d65d60c613b5cae2ca481dbd06135d"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyMetadata::commit_committable_prefix (cognitive 24): IggyMetadata::commit_committable_prefix has cognitive complexity 24 (threshold 15). Drivers by points: if/else 10 (21 pts), loops 2, boolean chains 1 (nesting depth added 11). 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":"core/metadata/src/impls/metadata.rs"},"region":{"startLine":2861}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c04268572ad00f0445afec267ac2b9b75ce9383a5c57123791721d8d1291986"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyPartition::resynchronize_consumer_offset_reservations_inner (cognitive 24): IggyPartition::resynchronize_consumer_offset_reservations_inner has cognitive complexity 24 (threshold 15). Drivers by points: if/else 8 (12 pts), boolean chains 9, match/switch 1 (2 pts), 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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":3643}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f3a7804ec7742a966ca71ecac77f1ae8b2ac9cdc067b4acc9bec8ac9f1869e5"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyConsumer::consume_messages (cognitive 24): IggyConsumer::consume_messages has cognitive complexity 24 (threshold 15). Drivers by points: if/else 5 (11 pts), match/switch 4 (10 pts), boolean chains 2, loops 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":"core/sdk/src/consumer_ext/consumer_message_ext.rs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"89d3382613409acca4822f6ce92b55c08b7dc9baa8f585493737b462a8b593cd"}},{"ruleId":"D2","level":"warning","message":{"text":"JwksClient::refresh_keys (cognitive 24): JwksClient::refresh_keys has cognitive complexity 24 (threshold 15). Drivers by points: if/else 7 (18 pts), match/switch 1 (3 pts), loops 2, boolean chains 1 (nesting depth added 13). 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":"core/server/src/http/jwks.rs"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"b09be377a65fd9d3c1e2094138798f07ad1a12ca0771dfaa686d5b7b3bf19192"}},{"ruleId":"D2","level":"warning","message":{"text":"server::dispatch::handle_client_request (cognitive 24): server::dispatch::handle_client_request has cognitive complexity 24 (threshold 15). Drivers by points: match/switch 7 (14 pts), if/else 6 (10 pts) (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":"core/server/src/dispatch/mod.rs"},"region":{"startLine":408}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bd1c382c35a3adaa373c1c81f84b61cc73bfd599bf89c4a3befa9441a18db2c"}},{"ruleId":"D2","level":"warning","message":{"text":"iggy_gateway_kafka::protocol::bounds_guard::validate_list_offsets_shape (cognitive 24): iggy_gateway_kafka::protocol::bounds_guard::validate_list_offsets_shape has cognitive complexity 24 (threshold 15). Drivers by points: if/else 12 (21 pts), loops 2 (3 pts) (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":"gateways/kafka/src/protocol/bounds_guard.rs"},"region":{"startLine":575}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3b4385c5460ec74c32f553fb403e2d161959cf25db7e61d3508892696c0541d"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalConnectorsConfigProvider::init (cognitive 23): LocalConnectorsConfigProvider::init has cognitive complexity 23 (threshold 15). Drivers by points: if/else 7 (18 pts), match/switch 2 (4 pts), loops 1 (nesting depth added 13). 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":"core/connectors/runtime/src/configs/connectors/local_provider.rs"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ef5771db94da94a855753f1c838c50e0ad0d1ae05b82ee9e7836c6299fb9603"}},{"ruleId":"D2","level":"warning","message":{"text":"InfluxDbSource::open (cognitive 23): InfluxDbSource::open has cognitive complexity 23 (threshold 15). Drivers by points: if/else 12 (13 pts), boolean chains 7, match/switch 3 (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":"core/connectors/sources/influxdb_source/src/lib.rs"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a5e1a5206f8ec05afb79234ef8d2f5971f7786637412b5eb1b63b66f46635dc"}},{"ruleId":"D2","level":"warning","message":{"text":"PrepareJournal::truncate_from (cognitive 23): PrepareJournal::truncate_from has cognitive complexity 23 (threshold 15). Drivers by points: if/else 11 (16 pts), loops 4, match/switch 1 (2 pts), boolean chains 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":"core/journal/src/prepare_journal.rs"},"region":{"startLine":778}}}],"partialFingerprints":{"codehealthFindingId/v1":"981140f72b4f8261f7882fd16b522d7aeae7fd90a30c013bcd333aeb1c6cf6da"}},{"ruleId":"D2","level":"warning","message":{"text":"PrepareJournal::drain (cognitive 23): PrepareJournal::drain has cognitive complexity 23 (threshold 15). Drivers by points: if/else 10 (15 pts), loops 5, match/switch 1 (2 pts), boolean chains 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":"core/journal/src/prepare_journal.rs"},"region":{"startLine":930}}}],"partialFingerprints":{"codehealthFindingId/v1":"12d8fea7e901e4b3384c57b8226a8952f58c500de0a7b981c52eac8a8bba2433"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyPartition::reuse_staged_segments (cognitive 23): IggyPartition::reuse_staged_segments has cognitive complexity 23 (threshold 15). Drivers by points: if/else 9 (16 pts), loops 2 (3 pts), boolean chains 2, match/switch 1 (2 pts) (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":"core/partitions/src/state_transfer.rs"},"region":{"startLine":2462}}}],"partialFingerprints":{"codehealthFindingId/v1":"485591367c2d7edb451eb0860d50a9aa884c25bdeb97263e29a400144dc0c954"}},{"ruleId":"D2","level":"warning","message":{"text":"DiskReadPlan::walk_segment (cognitive 23): DiskReadPlan::walk_segment has cognitive complexity 23 (threshold 15). Drivers by points: if/else 10 (21 pts), boolean chains 1, loops 1 (nesting depth added 11). 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":"core/partitions/src/poll_plan.rs"},"region":{"startLine":628}}}],"partialFingerprints":{"codehealthFindingId/v1":"b34e6350387e7a74cd108b708ac64f342d823b083fdbdab595a567f99d2eed98"}},{"ruleId":"D2","level":"warning","message":{"text":"partitions::segment_recovery::find_provable_index_anchor (cognitive 23): partitions::segment_recovery::find_provable_index_anchor has cognitive complexity 23 (threshold 15). Drivers by points: if/else 8 (20 pts), boolean chains 2, loops 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":"core/partitions/src/segment_recovery.rs"},"region":{"startLine":2228}}}],"partialFingerprints":{"codehealthFindingId/v1":"1fe1c908790107e84f6b5fae79e9fd6e1e71f4559cb5ea59ce6bec4cff498555"}},{"ruleId":"D2","level":"warning","message":{"text":"Shard::new (cognitive 23): Shard::new has cognitive complexity 23 (threshold 15). Drivers by points: if/else 3 (11 pts), match/switch 2 (5 pts), loops 2 (4 pts), boolean chains 3 (nesting depth added 13). 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":"core/sdk/src/clients/producer_sharding.rs"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b513dd09b2a24057ddbc9fb65e5d48c04b9efae47a5024367563825e09b87d3"}},{"ruleId":"D2","level":"warning","message":{"text":"server::dispatch::reads::handle_non_replicated_request (cognitive 23): server::dispatch::reads::handle_non_replicated_request has cognitive complexity 23 (threshold 15). Drivers by points: if/else 10 (18 pts), match/switch 3 (5 pts) (nesting depth added 10). 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":"core/server/src/dispatch/reads.rs"},"region":{"startLine":353}}}],"partialFingerprints":{"codehealthFindingId/v1":"91f35db2431ae310a7ff3ddbe38082b7238cfac43957221da5613e6517670d41"}},{"ruleId":"D2","level":"warning","message":{"text":"PacketSimulator::auto_partition_network (cognitive 23): PacketSimulator::auto_partition_network has cognitive complexity 23 (threshold 15). Drivers by points: loops 6 (11 pts), if/else 4 (9 pts), boolean chains 2, match/switch 1 (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":"core/simulator/src/packet.rs"},"region":{"startLine":819}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c38425eb2357662fe014d89809712168d7ec04f6324e8e921d273717e36784c"}},{"ruleId":"D2","level":"warning","message":{"text":"iggy_gateway_kafka::protocol::bounds_guard::validate_produce_shape (cognitive 23): iggy_gateway_kafka::protocol::bounds_guard::validate_produce_shape has cognitive complexity 23 (threshold 15). Drivers by points: if/else 13 (20 pts), loops 2 (3 pts) (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":"gateways/kafka/src/protocol/bounds_guard.rs"},"region":{"startLine":421}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb9f552095bfa2db87d44052350345171b94836e7f2cbcc67965921b1b179bfb"}},{"ruleId":"D2","level":"warning","message":{"text":"iggy_gateway_kafka::protocol::handlers::produce::handle (cognitive 23): iggy_gateway_kafka::protocol::handlers::produce::handle has cognitive complexity 23 (threshold 15). Drivers by points: if/else 15 (18 pts), match/switch 3 (5 pts) (nesting depth added 5). 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, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"gateways/kafka/src/protocol/handlers/produce.rs"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"398ee20ec33fbda17b0df131941514b655ee0d67fe5db9bf7d49e3133d6e4e7c"}},{"ruleId":"D2","level":"warning","message":{"text":"BinaryMapper.MapPermissions (cognitive 22): BinaryMapper.MapPermissions has cognitive complexity 22 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Mappers/BinaryMapper.cs"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"9730673d3a9d23f9b7af3c981b4287b6df153696c50bb749deb4d3c2e506d701"}},{"ruleId":"D2","level":"warning","message":{"text":"BinaryMapper.MapRentedMessages (cognitive 22): BinaryMapper.MapRentedMessages has cognitive complexity 22 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Mappers/BinaryMapper.cs"},"region":{"startLine":350}}}],"partialFingerprints":{"codehealthFindingId/v1":"c728358699872b584350d180787021cd5735ff63842f8ad2acd235a4ef995b54"}},{"ruleId":"D2","level":"warning","message":{"text":"iggy_connectors::sink::consume_messages (cognitive 22): iggy_connectors::sink::consume_messages has cognitive complexity 22 (threshold 15). Drivers by points: if/else 9 (16 pts), match/switch 2 (4 pts), boolean chains 1, 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":"core/connectors/runtime/src/sink.rs"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"eda3b3b33c492146289a8990df5ba7f2b31446e4bb17499742818c16aad000f8"}},{"ruleId":"D2","level":"warning","message":{"text":"AvroStreamDecoder::apply_field_transformations (cognitive 22): AvroStreamDecoder::apply_field_transformations has cognitive complexity 22 (threshold 15). Drivers by points: if/else 6 (12 pts), loops 2 (8 pts), match/switch 1 (2 pts) (nesting depth added 13). 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":"core/connectors/sdk/src/decoders/avro.rs"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbea22e09c2d34eb188596cde7dc452b78234322c84cb2e59f0b5b98fdb62946"}},{"ruleId":"D2","level":"warning","message":{"text":"FlatBufferStreamDecoder::apply_field_transformations (cognitive 22): FlatBufferStreamDecoder::apply_field_transformations has cognitive complexity 22 (threshold 15). Drivers by points: if/else 6 (12 pts), loops 2 (8 pts), match/switch 1 (2 pts) (nesting depth added 13). 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":"core/connectors/sdk/src/decoders/flatbuffer.rs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3d5aed41a4074874c5ef8c5045df63cffb9cc80ab524b86dfc02483213f88bb"}},{"ruleId":"D2","level":"warning","message":{"text":"ProtoStreamDecoder::apply_field_transformations (cognitive 22): ProtoStreamDecoder::apply_field_transformations has cognitive complexity 22 (threshold 15). Drivers by points: if/else 6 (12 pts), loops 2 (8 pts), match/switch 1 (2 pts) (nesting depth added 13). 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":"core/connectors/sdk/src/decoders/proto.rs"},"region":{"startLine":524}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab3a5f4115cf5f29956cad02a83109472376a7f03249577d96721371146f94ba"}},{"ruleId":"D2","level":"warning","message":{"text":"AvroStreamEncoder::apply_field_transformations (cognitive 22): AvroStreamEncoder::apply_field_transformations has cognitive complexity 22 (threshold 15). Drivers by points: if/else 6 (12 pts), loops 2 (8 pts), match/switch 1 (2 pts) (nesting depth added 13). 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":"core/connectors/sdk/src/encoders/avro.rs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f3b04f67fd4f6858992e07e1a7812157ca017ac9d101b0d4052cfa0f8fc5302"}},{"ruleId":"D2","level":"warning","message":{"text":"FlatBufferStreamEncoder::apply_field_transformations (cognitive 22): FlatBufferStreamEncoder::apply_field_transformations has cognitive complexity 22 (threshold 15). Drivers by points: if/else 6 (12 pts), loops 2 (8 pts), match/switch 1 (2 pts) (nesting depth added 13). 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":"core/connectors/sdk/src/encoders/flatbuffer.rs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb5ff6c3d6b3d078131ecafa1c928c442c599a26b6c6a765166caf77a1be548b"}},{"ruleId":"D2","level":"warning","message":{"text":"HttpRetryMiddleware::handle (cognitive 22): HttpRetryMiddleware::handle has cognitive complexity 22 (threshold 15). Drivers by points: if/else 5 (13 pts), match/switch 3 (7 pts), boolean chains 1, loops 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":"core/connectors/sdk/src/retry.rs"},"region":{"startLine":401}}}],"partialFingerprints":{"codehealthFindingId/v1":"181acda36dc9eeea79124e532e073728c3b59a476b2d80db182638d047fcd4af"}},{"ruleId":"D2","level":"warning","message":{"text":"iggy_connector_clickhouse_sink::schema::parse_type_inner (cognitive 22): iggy_connector_clickhouse_sink::schema::parse_type_inner has cognitive complexity 22 (threshold 15). Drivers by points: if/else 17 (20 pts), boolean chains 1, match/switch 1 (nesting depth added 3). 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":"core/connectors/sinks/clickhouse_sink/src/schema.rs"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7d6cce5658c1479858fb5009120fea4f11a9171c10e4424fcdf2cfd200e4a49"}},{"ruleId":"D2","level":"warning","message":{"text":"DorisSink::send_stream_load (cognitive 22): DorisSink::send_stream_load has cognitive complexity 22 (threshold 15). Drivers by points: if/else 7 (14 pts), match/switch 3 (7 pts), loops 1 (nesting depth added 11). 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":"core/connectors/sinks/doris_sink/src/lib.rs"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"97480766ac45d678ed97ec3d6896c049f524c998d8cd6704b6271a6794f6c5c3"}},{"ruleId":"D2","level":"warning","message":{"text":"ElasticsearchSource::search_documents (cognitive 22): ElasticsearchSource::search_documents has cognitive complexity 22 (threshold 15). Drivers by points: if/else 8 (17 pts), boolean chains 3, loops 1 (2 pts) (nesting depth added 10). 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":"core/connectors/sources/elasticsearch_source/src/lib.rs"},"region":{"startLine":339}}}],"partialFingerprints":{"codehealthFindingId/v1":"ade4e03eacf0c5ee5389f3a30e03f3f2581eac66f9b97480ef1b3cf519f82e7b"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyShard::dispatch_message (cognitive 22): IggyShard::dispatch_message has cognitive complexity 22 (threshold 15). Drivers by points: if/else 6 (15 pts), match/switch 3 (5 pts), boolean chains 2 (nesting depth added 11). 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":"core/shard/src/lib.rs"},"region":{"startLine":3128}}}],"partialFingerprints":{"codehealthFindingId/v1":"9cf24dc13e83eca937248dcb15ec9749cf19bdd0cab068b4425f10f5322be027"}},{"ruleId":"D2","level":"warning","message":{"text":"Permissions.MarshalBinary (cognitive 22): Permissions.MarshalBinary has cognitive complexity 22 (threshold 15). Drivers by points: if/else 8 (16 pts), loops 2 (6 pts) (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":"foreign/go/contracts/users.go"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"bcc4be073e61f406ac5c4688b31d45b976e8bf13183490f0f248237175030f36"}},{"ruleId":"D2","level":"warning","message":{"text":"VsrConnection.SendAttemptAsync (cognitive 21): VsrConnection.SendAttemptAsync has cognitive complexity 21 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Vsr/VsrConnection.cs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbfe0e4a7cd04e76782f4374aaf41e5ebee203b653c7914c37f17b624f98f345"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyMessagesBatch::validate (cognitive 21): IggyMessagesBatch::validate has cognitive complexity 21 (threshold 15). Drivers by points: if/else 12 (20 pts), 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":"core/common/src/types/message/messages_batch.rs"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4360acc728d48158c106e4621b372f360b20c8287fceb342b7b95c1d891a02c"}},{"ruleId":"D2","level":"warning","message":{"text":"iggy_connectors::sink::init (cognitive 21): iggy_connectors::sink::init has cognitive complexity 21 (threshold 15). Drivers by points: if/else 5 (10 pts), match/switch 3 (7 pts), loops 2 (4 pts) (nesting depth added 11). 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":"core/connectors/runtime/src/sink.rs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"14c97ae68243b999df5a744216967936cbb25ce5b73c04ce3ea00a4dcbad3087"}},{"ruleId":"D2","level":"warning","message":{"text":"MongoDbSink::insert_batch (cognitive 21): MongoDbSink::insert_batch has cognitive complexity 21 (threshold 15). Drivers by points: match/switch 5 (13 pts), if/else 4 (7 pts), loops 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":"core/connectors/sinks/mongodb_sink/src/lib.rs"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"e81f34cb25869693365f68488be1157aa877a7eadd41ac933c1e7cf2972708de"}},{"ruleId":"D2","level":"warning","message":{"text":"iggy_connector_influxdb_source::v3::poll (cognitive 21): iggy_connector_influxdb_source::v3::poll has cognitive complexity 21 (threshold 15). Drivers by points: if/else 12 (14 pts), boolean chains 4, match/switch 2 (3 pts) (nesting depth added 3). 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, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sources/influxdb_source/src/v3.rs"},"region":{"startLine":439}}}],"partialFingerprints":{"codehealthFindingId/v1":"66911ede42c07de91732a9e08b6e3ff91f702ab6ce353856eac53a1f72a98ac0"}},{"ruleId":"D2","level":"warning","message":{"text":"consensus::dvc_merge::tally_op (cognitive 21): consensus::dvc_merge::tally_op has cognitive complexity 21 (threshold 15). Drivers by points: if/else 7 (13 pts), match/switch 1 (4 pts), boolean chains 3, 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":"core/consensus/src/dvc_merge.rs"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"567ba03c1abfddd715d42f8c2f7b7679e4b932cf3edf1ed2b4cdf9fd98264ca2"}},{"ruleId":"D2","level":"warning","message":{"text":"consensus::dvc_merge::committed_elsewhere (cognitive 21): consensus::dvc_merge::committed_elsewhere has cognitive complexity 21 (threshold 15). Drivers by points: if/else 7 (16 pts), loops 3 (4 pts), boolean chains 1 (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":"core/consensus/src/dvc_merge.rs"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"047f9cc3497a65f56a6c472ecd141766644f49c3cf64805725db98e3dd364667"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyPartition::remove_sealed_segments_up_to (cognitive 21): IggyPartition::remove_sealed_segments_up_to has cognitive complexity 21 (threshold 15). Drivers by points: if/else 5 (9 pts), match/switch 2 (5 pts), loops 3 (4 pts), boolean chains 3 (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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":7251}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c81b65bd159e790992b46e79f70bf92a4ea530f1cf0a1956fdb8c5958106199"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyPartition::purge (cognitive 21): IggyPartition::purge has cognitive complexity 21 (threshold 15). Drivers by points: if/else 8 (13 pts), loops 2 (3 pts), match/switch 1 (3 pts), boolean chains 2 (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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":7746}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5ddc1ee02c382d261ddc55fdc22bfe0cec5bb0a6613314dc9da97c889c5c8dc"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyPartition::apply_repaired_prepare (cognitive 21): IggyPartition::apply_repaired_prepare has cognitive complexity 21 (threshold 15). Drivers by points: if/else 12 (14 pts), boolean chains 5, match/switch 1 (2 pts) (nesting depth added 3). 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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":8152}}}],"partialFingerprints":{"codehealthFindingId/v1":"c371c8dc6d6e1b666d972f00276f5586e53afde57dc95f72cda6981f6b2fba23"}},{"ruleId":"D2","level":"warning","message":{"text":"server::snapshot::procdump::dump_file (cognitive 21): server::snapshot::procdump::dump_file has cognitive complexity 21 (threshold 15). Drivers by points: if/else 5 (9 pts), match/switch 2 (6 pts), loops 1 (4 pts), boolean chains 2 (nesting depth added 11). 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":"core/server/src/snapshot/procdump.rs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"59848959c27dc06524997f91e3349a36240294c241b6457e980d60a6f1d6fe7c"}},{"ruleId":"D2","level":"warning","message":{"text":"iggy_gateway_kafka::protocol::bounds_guard::validate_join_group_shape (cognitive 21): iggy_gateway_kafka::protocol::bounds_guard::validate_join_group_shape has cognitive complexity 21 (threshold 15). Drivers by points: if/else 17 (20 pts), loops 1 (nesting depth added 3). 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, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"gateways/kafka/src/protocol/bounds_guard.rs"},"region":{"startLine":844}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6ecb3056d28a7dd698c5a70567dcadef05f1bc6af54b853637a9925de42e69a"}},{"ruleId":"D2","level":"warning","message":{"text":"client.connection-string.parseConnectionString (cognitive 21): client.connection-string.parseConnectionString has cognitive complexity 21 (threshold 15). Drivers by points: if/else 11, ternaries 5 (6 pts), boolean chains 4 (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":"foreign/node/src/client/client.connection-string.ts"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa836a3de196e3c4898da71092df232294eb392cccc2205d069f454e30eed856"}},{"ruleId":"D2","level":"warning","message":{"text":"AdvertisedAddress::from_str (cognitive 20): AdvertisedAddress::from_str has cognitive complexity 20 (threshold 15). Drivers by points: if/else 11 (13 pts), boolean chains 6, loops 1 (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":"core/configs/src/server_config/cluster.rs"},"region":{"startLine":714}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb47eb111d18bf26d24dc14d12f542ee3b129666b2b3bd4898dc7d5d28ee2a2c"}},{"ruleId":"D2","level":"warning","message":{"text":"iggy_connectors::source::init (cognitive 20): iggy_connectors::source::init has cognitive complexity 20 (threshold 15). Drivers by points: if/else 5 (10 pts), match/switch 4 (9 pts), loops 1 (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":"core/connectors/runtime/src/source.rs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ebcfe2c59340f5d94933216637a1e4acf4335f797cbfbc3e70a16b278d4e917"}},{"ruleId":"D2","level":"warning","message":{"text":"iggy_connector_influxdb_source::row::parse_csv_rows (cognitive 20): iggy_connector_influxdb_source::row::parse_csv_rows has cognitive complexity 20 (threshold 15). Drivers by points: if/else 7 (15 pts), loops 2 (3 pts), boolean chains 2 (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":"core/connectors/sources/influxdb_source/src/row.rs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7afafcb349a47ae69fb669eb63851fe58d0e542a97dfc183fb7eed9a6f394c9"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyPartition::complete_repair (cognitive 20): IggyPartition::complete_repair has cognitive complexity 20 (threshold 15). Drivers by points: if/else 10 (14 pts), boolean chains 4, match/switch 1 (2 pts) (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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":8253}}}],"partialFingerprints":{"codehealthFindingId/v1":"bef30bbbc79ee86794d345cd7cb62a572aee34cbbe75eb4ab90971e996bc4263"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyPartition::state_transfer_offer (cognitive 20): IggyPartition::state_transfer_offer has cognitive complexity 20 (threshold 15). Drivers by points: if/else 11 (14 pts), boolean chains 4, loops 2 (nesting depth added 3). 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":"core/partitions/src/state_transfer.rs"},"region":{"startLine":1902}}}],"partialFingerprints":{"codehealthFindingId/v1":"6725764871d535dc699061af6d6cd79fdfd4d3c9f3fd4fedfa671e554544c971"}},{"ruleId":"D2","level":"warning","message":{"text":"partitions::segment_recovery::index_is_consistent (cognitive 20): partitions::segment_recovery::index_is_consistent has cognitive complexity 20 (threshold 15). Drivers by points: if/else 4 (12 pts), boolean chains 5, loops 2 (3 pts) (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":"core/partitions/src/segment_recovery.rs"},"region":{"startLine":2361}}}],"partialFingerprints":{"codehealthFindingId/v1":"1aa6f5c281f23370e696dcc8cbff158998b0015ebae6ea89f84f950733665558"}},{"ruleId":"D2","level":"warning","message":{"text":"TcpClient::send_raw_with_response (cognitive 20): TcpClient::send_raw_with_response has cognitive complexity 20 (threshold 15). Drivers by points: if/else 16 (17 pts), boolean chains 3 (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":"core/sdk/src/tcp/tcp_client.rs"},"region":{"startLine":222}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab48fd6652b7ac37ebae3b9430c4921f79327a730b9d703a2a2303e45eea858f"}},{"ruleId":"D2","level":"warning","message":{"text":"TcpClient::send_raw_vsr_attempt (cognitive 20): TcpClient::send_raw_vsr_attempt has cognitive complexity 20 (threshold 15). Drivers by points: if/else 7 (12 pts), match/switch 4 (6 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":"core/sdk/src/tcp/tcp_client.rs"},"region":{"startLine":1496}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cf9823d757f03bee760b7f9c459931872c38f545ee06cf53092a2943d6cc309"}},{"ruleId":"D2","level":"warning","message":{"text":"simulator::workload::state_checker::assert_partition_prefixes_agree (cognitive 20): simulator::workload::state_checker::assert_partition_prefixes_agree has cognitive complexity 20 (threshold 15). Drivers by points: if/else 5 (14 pts), loops 3 (6 pts) (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":"core/simulator/src/workload/state_checker.rs"},"region":{"startLine":352}}}],"partialFingerprints":{"codehealthFindingId/v1":"628bc24749889a91bc37b567a765ffd6ea615d36fb236b5cfd37be120b88ea56"}},{"ruleId":"D2","level":"warning","message":{"text":"iggy_gateway_kafka::protocol::handlers::list_offsets::resolve_topic_lookups (cognitive 20): iggy_gateway_kafka::protocol::handlers::list_offsets::resolve_topic_lookups has cognitive complexity 20 (threshold 15). Drivers by points: if/else 8 (16 pts), match/switch 1 (2 pts), boolean chains 1, 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":"gateways/kafka/src/protocol/handlers/list_offsets.rs"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d2e959313fbe3986b7c0eb8f4d962fa11b17c3e07b687082397432d8939af41"}},{"ruleId":"D2","level":"warning","message":{"text":"iggy_gateway_kafka::protocol::bounds_guard::validate_leave_group_shape (cognitive 20): iggy_gateway_kafka::protocol::bounds_guard::validate_leave_group_shape has cognitive complexity 20 (threshold 15). Drivers by points: if/else 11 (18 pts), loops 1 (2 pts) (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":"gateways/kafka/src/protocol/bounds_guard.rs"},"region":{"startLine":947}}}],"partialFingerprints":{"codehealthFindingId/v1":"825995f2ec0170e27a43dc4eb30b68927c28c3b28f570e7f8cc7ead77bc6a0d0"}},{"ruleId":"D2","level":"warning","message":{"text":"TcpMessageStream.PollPrimaryOnceAsync (cognitive 19): TcpMessageStream.PollPrimaryOnceAsync has cognitive complexity 19 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/IggyClient/Implementations/TcpMessageStream.PollRouting.cs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf61a4b552b44b0259ed91d4c4b094a4464f3df8df60dad34d33b4bae3822db9"}},{"ruleId":"D2","level":"warning","message":{"text":"BackgroundMessageProcessor.RunBackgroundProcessor (cognitive 19): BackgroundMessageProcessor.RunBackgroundProcessor has cognitive complexity 19 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Publishers/BackgroundMessageProcessor.cs"},"region":{"startLine":250}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b60b3093caa86613a1b027c8218d85194f0c93802cd8ed3d86ab8d4111dd4bb"}},{"ruleId":"D2","level":"warning","message":{"text":"InfluxDbSink::append_line (cognitive 19): InfluxDbSink::append_line has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10, boolean chains 6, match/switch 2 (3 pts) (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":"core/connectors/sinks/influxdb_sink/src/lib.rs"},"region":{"startLine":489}}}],"partialFingerprints":{"codehealthFindingId/v1":"40f719d0cfafccb9dc0ae356279b358ee8cc5b07cb2c4a998f39bf5c66a0aad7"}},{"ruleId":"D2","level":"warning","message":{"text":"iggy_connector_influxdb_source::v2::process_rows (cognitive 19): iggy_connector_influxdb_source::v2::process_rows has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (12 pts), match/switch 2 (6 pts), loops 1 (nesting depth added 11). 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":"core/connectors/sources/influxdb_source/src/v2.rs"},"region":{"startLine":786}}}],"partialFingerprints":{"codehealthFindingId/v1":"fba32a19a0f3c3984d3f369c9ddfd20c8b3c9dfc1881da9e68a8c7ca6ec987b7"}},{"ruleId":"D2","level":"warning","message":{"text":"iggy_connector_postgres_source::parse_record_columns (cognitive 19): iggy_connector_postgres_source::parse_record_columns has cognitive complexity 19 (threshold 15). Drivers by points: if/else 4 (10 pts), loops 3 (5 pts), match/switch 1 (3 pts), boolean chains 1 (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":"core/connectors/sources/postgres_source/src/lib.rs"},"region":{"startLine":2344}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce32987b00153cc905cf25c6e677c921b62625fdd9110bba50a66efdba6bd726"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyPartition::commit_partition_entry (cognitive 19): IggyPartition::commit_partition_entry has cognitive complexity 19 (threshold 15). Drivers by points: if/else 7 (17 pts), boolean chains 1, match/switch 1 (nesting depth added 10). 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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":6574}}}],"partialFingerprints":{"codehealthFindingId/v1":"330b9a754f46cb93234559838a6a21a531888fd3fd826f3e32464500a1815f33"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyConsumer::init (cognitive 19): IggyConsumer::init has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10 (15 pts), boolean chains 2, loops 1, match/switch 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":"core/sdk/src/clients/consumer.rs"},"region":{"startLine":954}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f2c8be981cc6526e203449a93a9e37d1f5733f9ae770637ea616e9bedfb934c"}},{"ruleId":"D2","level":"warning","message":{"text":"Logging::read_log_files (cognitive 19): Logging::read_log_files has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (11 pts), match/switch 4 (7 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":"core/server_common/src/log/logger.rs"},"region":{"startLine":550}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc58d3f1e4dc01a38e4d46bb50e3e3755ab5dd9d1fd5f7b74940332170126486"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyShard::on_partition_state_transfer_target (cognitive 19): IggyShard::on_partition_state_transfer_target has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13 (14 pts), boolean chains 2, match/switch 2, loops 1 (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":"core/shard/src/lib.rs"},"region":{"startLine":9231}}}],"partialFingerprints":{"codehealthFindingId/v1":"efef612d611b6e21e698802ec9a27fa66c382c3b81c4ea1ddb74e835997c464c"}},{"ruleId":"D2","level":"warning","message":{"text":"Invariants::check (cognitive 19): Invariants::check has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (16 pts), loops 2 (3 pts) (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":"core/simulator/src/workload/invariants.rs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"88367c7645c9bdc65ea7c9a4fdfdadeebf0a151c821431cb9124afa3b89da929"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyTcpClient.attempt (cognitive 19): IggyTcpClient.attempt has cognitive complexity 19 (threshold 15). Drivers by points: if/else 11 (15 pts), boolean chains 2, match/switch 2 (nesting depth added 4). Of this number, 17 points are the body\u0027s own statements and 2 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":"foreign/go/client/tcp/tcp_core.go"},"region":{"startLine":758}}}],"partialFingerprints":{"codehealthFindingId/v1":"05614f7523e0edf883b137c70f20ebbad3477b4c66bc1e7e3ffbcddc43a6dd13"}},{"ruleId":"D2","level":"warning","message":{"text":"main.types (cognitive 19): main.types has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (10 pts), loops 3 (7 pts), boolean chains 2 (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":"foreign/go/errors/generator/main.go"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1d9528b2509522dd99ac3bbd02381e77208f929ea3eaf588ce21534a89c470a"}},{"ruleId":"D2","level":"warning","message":{"text":"CreateTopic.options (cognitive 19): CreateTopic.options has cognitive complexity 19 (threshold 15). Drivers by points: if/else 8 (14 pts), loops 2 (3 pts), boolean chains 2 (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":"foreign/go/internal/command/topic.go"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c3a08f3fbb9e98d03a8bb41b3248787558a48d96942975f9bd521ddfde272c5"}},{"ruleId":"D2","level":"warning","message":{"text":"util.CheckAndRedirectToLeader (cognitive 19): util.CheckAndRedirectToLeader has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (12 pts), match/switch 2 (5 pts), boolean chains 1, loops 1 (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":"foreign/go/internal/util/leader_aware.go"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"c37a4a16cd1211488a78f84d621ec824aeeee1d814cfed24056cc6090f81a92a"}},{"ruleId":"D2","level":"warning","message":{"text":"CommandResponseStream._processQueue (cognitive 19): CommandResponseStream._processQueue has cognitive complexity 19 (threshold 15). Drivers by points: if/else 7 (12 pts), boolean chains 2, error handling 1 (2 pts), ternaries 1 (2 pts), 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":"foreign/node/src/client/client.socket.ts"},"region":{"startLine":796}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc0554d067fabcc749d2c2d5635c27008f9a6751bfb64bd094a826788426f2db"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyCredentials::new (cognitive 18): IggyCredentials::new has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10 (12 pts), match/switch 2 (4 pts), boolean chains 2 (nesting depth added 4). 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":"core/cli/src/credentials.rs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"11e5410e82a88927bf1b1b1d9fe9be79749d6aee546130b98d182c11ea1e372a"}},{"ruleId":"D2","level":"warning","message":{"text":"QuicConnectionStringOptions::parse_options (cognitive 18): QuicConnectionStringOptions::parse_options has cognitive complexity 18 (threshold 15). Drivers by points: match/switch 10 (15 pts), if/else 1 (2 pts), loops 1 (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":"core/common/src/types/configuration/quic_config/quic_connection_string_options.rs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"054c6cb619aae8afe12e56650a411a421f7fa4ae938413eaaca27cca998fc052"}},{"ruleId":"D2","level":"warning","message":{"text":"PartitionConfig::validate (cognitive 18): PartitionConfig::validate has cognitive complexity 18 (threshold 15). Drivers by points: if/else 13, boolean chains 5. 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":"core/configs/src/server_config/partition.rs"},"region":{"startLine":283}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d7e02cc4698d1842ca884fffb6db291926e86bc3c0976496d83432a8bcc181a"}},{"ruleId":"D2","level":"warning","message":{"text":"iggy_connectors::source::process_messages (cognitive 18): iggy_connectors::source::process_messages has cognitive complexity 18 (threshold 15). Drivers by points: if/else 6 (12 pts), loops 2 (3 pts), match/switch 1 (3 pts) (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":"core/connectors/runtime/src/source.rs"},"region":{"startLine":930}}}],"partialFingerprints":{"codehealthFindingId/v1":"fed2a7c0e895e5ba7b6034b4b202a3b74c834202873827a5dba97aabf08f3714"}},{"ruleId":"D2","level":"warning","message":{"text":"ClickHouseClient::insert (cognitive 18): ClickHouseClient::insert has cognitive complexity 18 (threshold 15). Drivers by points: if/else 6 (15 pts), match/switch 1 (2 pts), loops 1 (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":"core/connectors/sinks/clickhouse_sink/src/client.rs"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"e11918dc743769ec06be48bf90a6aa10f42f5a9f24911fe8ffb538c8b2d46005"}},{"ruleId":"D2","level":"warning","message":{"text":"iggy_connector_clickhouse_sink::schema::strip_named_tuple_field (cognitive 18): iggy_connector_clickhouse_sink::schema::strip_named_tuple_field has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10 (16 pts), boolean chains 1, 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":"core/connectors/sinks/clickhouse_sink/src/schema.rs"},"region":{"startLine":402}}}],"partialFingerprints":{"codehealthFindingId/v1":"608042fad67e8db16ac3d357ed99d0d467538ca3e5332001deb658943e7f6ef5"}},{"ruleId":"D2","level":"warning","message":{"text":"HttpSink::open (cognitive 18): HttpSink::open has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9 (13 pts), loops 3, boolean chains 1, match/switch 1 (nesting depth added 4). 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":"core/connectors/sinks/http_sink/src/lib.rs"},"region":{"startLine":1040}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7f851538da2367df0e524849d65675b59bfb24c85d1bb3db911b402480bafc4"}},{"ruleId":"D2","level":"warning","message":{"text":"MeilisearchSink::retry_sdk_operation_with_retries (cognitive 18): MeilisearchSink::retry_sdk_operation_with_retries has cognitive complexity 18 (threshold 15). Drivers by points: if/else 5 (14 pts), match/switch 1 (2 pts), boolean chains 1, loops 1 (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":"core/connectors/sinks/meilisearch_sink/src/lib.rs"},"region":{"startLine":670}}}],"partialFingerprints":{"codehealthFindingId/v1":"37cb40120363dc613e601727cf9ca0dbf501656fc35bfcd0f22aac4183091bce"}},{"ruleId":"D2","level":"warning","message":{"text":"S3Sink::close (cognitive 18): S3Sink::close has cognitive complexity 18 (threshold 15). Drivers by points: if/else 8 (16 pts), loops 1 (2 pts) (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":"core/connectors/sinks/s3_sink/src/sink.rs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"caf25e551a0ffaf8b71557eb3214f663444cb3a488fcdc970e9c9440596eb0d5"}},{"ruleId":"D2","level":"warning","message":{"text":"SurrealDbSink::insert_records_with_retry (cognitive 18): SurrealDbSink::insert_records_with_retry has cognitive complexity 18 (threshold 15). Drivers by points: match/switch 4 (9 pts), if/else 2 (6 pts), boolean chains 2, loops 1 (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":"core/connectors/sinks/surrealdb_sink/src/lib.rs"},"region":{"startLine":718}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fc225a528f2d5ba52afa9bda3bd09c06b6be473e2222c2b9b5765a1b74822a3"}},{"ruleId":"D2","level":"warning","message":{"text":"RouteTable::build_with (cognitive 18): RouteTable::build_with has cognitive complexity 18 (threshold 15). Drivers by points: match/switch 3 (8 pts), if/else 3 (7 pts), loops 2 (3 pts) (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":"core/connectors/sources/http_source/src/routes.rs"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"da29f9f93bdedb11676c11cd3de94b019d210b953266cd2aec82c8e92d42cf78"}},{"ruleId":"D2","level":"warning","message":{"text":"ServerHandle::start (cognitive 18): ServerHandle::start has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11 (13 pts), boolean chains 5 (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, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/integration/src/harness/handle/server.rs"},"region":{"startLine":883}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f617e49dd4784d2e276fbd52dcf4c83c6766f85bca3aa38dd6713d326815048"}},{"ruleId":"D2","level":"warning","message":{"text":"PartitionPrepareJournal::recover_entries (cognitive 18): PartitionPrepareJournal::recover_entries has cognitive complexity 18 (threshold 15). Drivers by points: if/else 8 (12 pts), boolean chains 5, loops 1 (nesting depth added 4). 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":"core/journal/src/partition_journal.rs"},"region":{"startLine":930}}}],"partialFingerprints":{"codehealthFindingId/v1":"981b41512fc35d5b1384847e635bf790c4f0732093262ac032ec7d66acb3e537"}},{"ruleId":"D2","level":"warning","message":{"text":"PartitionPersistence::run_inner (cognitive 18): PartitionPersistence::run_inner has cognitive complexity 18 (threshold 15). Drivers by points: if/else 8 (13 pts), boolean chains 2, match/switch 1 (2 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":"core/partitions/src/persistence.rs"},"region":{"startLine":1152}}}],"partialFingerprints":{"codehealthFindingId/v1":"a579d79d351b11484a5b6c43e0c0117d00f99ef2b821ce9d895b0a5dba1e78af"}},{"ruleId":"D2","level":"warning","message":{"text":"DiskReadPlan::read_disk (cognitive 18): DiskReadPlan::read_disk has cognitive complexity 18 (threshold 15). Drivers by points: if/else 8 (12 pts), match/switch 3, boolean chains 2, loops 1 (nesting depth added 4). 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":"core/partitions/src/poll_plan.rs"},"region":{"startLine":497}}}],"partialFingerprints":{"codehealthFindingId/v1":"65bdda7eec6cd87425e97f2c918b868007875fbdfd18b92e506e5f0a0ff84b5b"}},{"ruleId":"D2","level":"warning","message":{"text":"partitions::segment_recovery::sweep_scratch_files_and_collect_offsets (cognitive 18): partitions::segment_recovery::sweep_scratch_files_and_collect_offsets has cognitive complexity 18 (threshold 15). Drivers by points: if/else 5 (13 pts), match/switch 2 (3 pts), loops 2 (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":"core/partitions/src/segment_recovery.rs"},"region":{"startLine":1111}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6dc2015a095944184fcc6ac4d541b389ea47a0f75ea41993a137d7b43817484"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyShard::on_partition_read (cognitive 18): IggyShard::on_partition_read has cognitive complexity 18 (threshold 15). Drivers by points: if/else 7 (12 pts), match/switch 3 (4 pts), boolean chains 2 (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":"core/shard/src/poll.rs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"543be806e35387abad577b8f9c4c031d613f51e2901c79165aee31d1a0023098"}},{"ruleId":"D2","level":"warning","message":{"text":"Workload::on_reply (cognitive 18): Workload::on_reply has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10 (12 pts), match/switch 2 (4 pts), boolean chains 2 (nesting depth added 4). 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, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/simulator/src/workload/mod.rs"},"region":{"startLine":475}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea83686817a1159149901e4d7806e5de151abdbf25073be7b1868650f0a869bb"}},{"ruleId":"D2","level":"warning","message":{"text":"iggy_gateway_kafka::protocol::bounds_guard::validate_sync_group_shape (cognitive 18): iggy_gateway_kafka::protocol::bounds_guard::validate_sync_group_shape has cognitive complexity 18 (threshold 15). Drivers by points: if/else 14 (17 pts), loops 1 (nesting depth added 3). 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, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"gateways/kafka/src/protocol/bounds_guard.rs"},"region":{"startLine":992}}}],"partialFingerprints":{"codehealthFindingId/v1":"59a2adf01e26f91cbf0a0a4a9f7a5c37bf210856bea36e152f4fe14244c76c8b"}},{"ruleId":"D2","level":"warning","message":{"text":"iggy_gateway_kafka::protocol::handlers::create_topics::validate_create_topic_shape (cognitive 18): iggy_gateway_kafka::protocol::handlers::create_topics::validate_create_topic_shape has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12 (14 pts), boolean chains 4 (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, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"gateways/kafka/src/protocol/handlers/create_topics.rs"},"region":{"startLine":413}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c1e286521b1b34cacf1d39d629fba254a0b577f13138fa4d213a18ff4d00ccb"}},{"ruleId":"D2","level":"warning","message":{"text":"iggy_gateway_kafka::load_config (cognitive 18): iggy_gateway_kafka::load_config has cognitive complexity 18 (threshold 15). Drivers by points: if/else 16 (18 pts) (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, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"gateways/kafka/src/main.rs"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"47daa0dd74d1e348588aaf69e54801f2dfef05d48f756cc0f8b05a6723ef4c54"}},{"ruleId":"D2","level":"warning","message":{"text":"kafka_message_gen::cmd_generate (cognitive 18): kafka_message_gen::cmd_generate has cognitive complexity 18 (threshold 15). Drivers by points: if/else 5 (11 pts), loops 2 (3 pts), match/switch 1 (3 pts), boolean chains 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":"gateways/kafka/tools/kafka-tool/src/main.rs"},"region":{"startLine":616}}}],"partialFingerprints":{"codehealthFindingId/v1":"481b26ce3caafdd366078c3c75344d2f0386988d52c815e7e03119a68bcaafae"}},{"ruleId":"D2","level":"warning","message":{"text":"binaryserialization.deserializePermissions (cognitive 18): binaryserialization.deserializePermissions has cognitive complexity 18 (threshold 15). Drivers by points: if/else 4 (12 pts), loops 2 (6 pts) (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":"foreign/go/binary_serialization/binary_response_deserializer.go"},"region":{"startLine":597}}}],"partialFingerprints":{"codehealthFindingId/v1":"62a850eb4137840adcdc613eb62cd90e4f3508d96209969bd6dbe7881ad5b066"}},{"ruleId":"D2","level":"warning","message":{"text":"CommandResponseStream._rememberCredentials (cognitive 18): CommandResponseStream._rememberCredentials has cognitive complexity 18 (threshold 15). Drivers by points: if/else 8 (14 pts), boolean chains 4 (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":"foreign/node/src/client/client.socket.ts"},"region":{"startLine":748}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ee4667b06c5767d27c899403a3caeed1fe74d076717895a2dd0eea432225f51"}},{"ruleId":"D2","level":"warning","message":{"text":"poll-messages.command.pollConsumerGroup (cognitive 18): poll-messages.command.pollConsumerGroup has cognitive complexity 18 (threshold 15). Drivers by points: if/else 3 (7 pts), boolean chains 4, ternaries 2 (4 pts), error handling 1 (2 pts), 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":"foreign/node/src/wire/message/poll-messages.command.ts"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9f8f9d9eb6c6c8a563de0f737abdec5c69db015e2697dd80a2ba97e8e825970"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyConsumer.PollMessagesAsync (cognitive 17): IggyConsumer.PollMessagesAsync has cognitive complexity 17 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Consumers/IggyConsumer.cs"},"region":{"startLine":402}}}],"partialFingerprints":{"codehealthFindingId/v1":"971fb36331c08f130c148ba5d4ed92ef46099a1c0daeb1d547e483a73ad548f8"}},{"ruleId":"D2","level":"warning","message":{"text":"TcpMessageStream.PollAutoCommitAsync (cognitive 17): TcpMessageStream.PollAutoCommitAsync has cognitive complexity 17 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/IggyClient/Implementations/TcpMessageStream.PollRouting.cs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"08caa76e8fe507d3127002a511e1100072d808753c7899a2d81a6ac5a757a57b"}},{"ruleId":"D2","level":"warning","message":{"text":"CreatePartitionsWithAssignmentsRequest::apply (cognitive 17): CreatePartitionsWithAssignmentsRequest::apply has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11 (15 pts), loops 2 (nesting depth added 4). 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":"core/metadata/src/stm/stream.rs"},"region":{"startLine":2534}}}],"partialFingerprints":{"codehealthFindingId/v1":"224bda20567566658697e2bbfd92d573385f52f8c0284ebb024fd49cf8d1c2f7"}},{"ruleId":"D2","level":"warning","message":{"text":"ConnectionString::new (cognitive 17): ConnectionString::new has cognitive complexity 17 (threshold 15). Drivers by points: if/else 14 (15 pts), boolean chains 2 (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":"core/common/src/types/configuration/auth_config/connection_string.rs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"47380428cf765c6ea877ea8bd11fc89c4b76b2503a5be8dd666c888ec402f96a"}},{"ruleId":"D2","level":"warning","message":{"text":"ProtoConvert::transform (cognitive 17): ProtoConvert::transform has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10 (16 pts), match/switch 1 (nesting depth added 6). 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":"core/connectors/sdk/src/transforms/proto_convert.rs"},"region":{"startLine":730}}}],"partialFingerprints":{"codehealthFindingId/v1":"99862abdbbb2e112db54f88b5f48d9e9c09a5833f98936db776de5117cfc318b"}},{"ruleId":"D2","level":"warning","message":{"text":"DorisSink::open (cognitive 17): DorisSink::open has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8 (11 pts), match/switch 4, boolean chains 2 (nesting depth added 3). 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":"core/connectors/sinks/doris_sink/src/lib.rs"},"region":{"startLine":941}}}],"partialFingerprints":{"codehealthFindingId/v1":"1dd9afcb38a5e049e4a874b060421818458d30ca920335e5dd69bf605464e164"}},{"ruleId":"D2","level":"warning","message":{"text":"RedshiftSink::process_messages (cognitive 17): RedshiftSink::process_messages has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (14 pts), match/switch 1 (2 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":"core/connectors/sinks/redshift_sink/src/lib.rs"},"region":{"startLine":375}}}],"partialFingerprints":{"codehealthFindingId/v1":"fecc5c97c36886a02ac9702d129f52adf6c33aeefe89f25b6b335abe5ec8f166"}},{"ruleId":"D2","level":"warning","message":{"text":"ClientTable::commit_request (cognitive 17): ClientTable::commit_request has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11 (16 pts), boolean chains 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":"core/consensus/src/client_table.rs"},"region":{"startLine":1260}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbe7b4145fe118be8486708eba52e93e80b0ae06e9351f68551a8d36084faf37"}},{"ruleId":"D2","level":"warning","message":{"text":"VsrConsensus::tick (cognitive 17): VsrConsensus::tick has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10 (15 pts), match/switch 1 (2 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":"core/consensus/src/impls.rs"},"region":{"startLine":2433}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8079c6ac8b5d5ed7be106d2aa990c3083be0716690b99e13aa705eca45799d2"}},{"ruleId":"D2","level":"warning","message":{"text":"ServerHandle::set_protocol_addresses (cognitive 17): ServerHandle::set_protocol_addresses has cognitive complexity 17 (threshold 15). Drivers by points: if/else 14 (16 pts), boolean chains 1 (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":"core/integration/src/harness/handle/server.rs"},"region":{"startLine":402}}}],"partialFingerprints":{"codehealthFindingId/v1":"a12fb2b5966e4569b040bd4a09d5c467d8186757dc420d5c0e69f53f5e3388a0"}},{"ruleId":"D2","level":"warning","message":{"text":"integration::harness::disk::collect_comparable_files (cognitive 17): integration::harness::disk::collect_comparable_files has cognitive complexity 17 (threshold 15). Drivers by points: if/else 5 (13 pts), loops 2 (3 pts), boolean chains 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. This shape REPEATS in the file: one other method here (integration::harness::disk::total_log_bytes) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/integration/src/harness/disk.rs"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"902e043c8b33e851ffb21272b9107f2f94e44a7f05905a3638cab2336b9a3e6f"}},{"ruleId":"D2","level":"warning","message":{"text":"integration::harness::disk::total_log_bytes (cognitive 17): integration::harness::disk::total_log_bytes has cognitive complexity 17 (threshold 15). Drivers by points: if/else 5 (13 pts), loops 2 (3 pts), boolean chains 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. This shape REPEATS in the file: one other method here (integration::harness::disk::collect_comparable_files) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/integration/src/harness/disk.rs"},"region":{"startLine":346}}}],"partialFingerprints":{"codehealthFindingId/v1":"5aa9e8fa54cde058d35641f954562cf83f5238fbfbba6cd97169388428a2ad5b"}},{"ruleId":"D2","level":"warning","message":{"text":"PartitionPrepareJournal::recover_segment_files (cognitive 17): PartitionPrepareJournal::recover_segment_files has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (13 pts), boolean chains 3, 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":"core/journal/src/partition_journal/segments.rs"},"region":{"startLine":504}}}],"partialFingerprints":{"codehealthFindingId/v1":"078dc476aa02e250c405c4b44b9376ad2ca4fe913833de9021614f78914f7ce1"}},{"ruleId":"D2","level":"warning","message":{"text":"PartitionPrepareJournal::recover_unpublished_tail (cognitive 17): PartitionPrepareJournal::recover_unpublished_tail has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (13 pts), boolean chains 3, 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":"core/journal/src/partition_journal.rs"},"region":{"startLine":1003}}}],"partialFingerprints":{"codehealthFindingId/v1":"d672fd83cff3d5757315c03fb2964ffe0eb697a10a10414f8d6ee215a0007b80"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyMetadata::submit_logout_in_process (cognitive 17): IggyMetadata::submit_logout_in_process has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9 (13 pts), match/switch 2 (3 pts), boolean chains 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":"core/metadata/src/impls/metadata.rs"},"region":{"startLine":2239}}}],"partialFingerprints":{"codehealthFindingId/v1":"79f76370872898b6966619b2007ec2e2663f933ad38f4b15209037e6bbbf32ab"}},{"ruleId":"D2","level":"warning","message":{"text":"WriterLease::acquire (cognitive 17): WriterLease::acquire has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8 (15 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":"core/partitions/src/persistence.rs"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"1fc39c9c058ec39ad60d5dfb829bc0913c6468f518b4433f7fa94fab94526d11"}},{"ruleId":"D2","level":"warning","message":{"text":"partitions::segment_recovery::recover_by_walking_log (cognitive 17): partitions::segment_recovery::recover_by_walking_log has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9 (16 pts), 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":"core/partitions/src/segment_recovery.rs"},"region":{"startLine":1856}}}],"partialFingerprints":{"codehealthFindingId/v1":"53bf79a36e96313b083c38f278a4b6412bd43272861932e2c217fb2cf25e9a2b"}},{"ruleId":"D2","level":"warning","message":{"text":"server::boot::recovery::build_shard_for_thread (cognitive 17): server::boot::recovery::build_shard_for_thread has cognitive complexity 17 (threshold 15). Drivers by points: if/else 5 (8 pts), loops 4 (7 pts), match/switch 1 (2 pts) (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":"core/server/src/boot/recovery.rs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"71b0eeff555f7f06016c74646741fc1aefdd2ec72d0f08c0ea4db7ddb70fc234"}},{"ruleId":"D2","level":"warning","message":{"text":"server::consumer_group::liveness::report_sessions (cognitive 17): server::consumer_group::liveness::report_sessions has cognitive complexity 17 (threshold 15). Drivers by points: if/else 4 (8 pts), boolean chains 3, loops 2 (3 pts), match/switch 1 (3 pts) (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":"core/server/src/consumer_group/liveness.rs"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb04c3fb9716c01cea83db48236dd6903f71f4c0649428ee1e7927fd06fe2b8d"}},{"ruleId":"D2","level":"warning","message":{"text":"Logging::late_init (cognitive 17): Logging::late_init has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12 (17 pts) (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":"core/server_common/src/log/logger.rs"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e7411e5e347b7c1b0d7724f7d7651a18fa1b3bd720470df4fabe1a0aff31081"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyShard::on_commit (cognitive 17): IggyShard::on_commit has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (12 pts), match/switch 2 (3 pts), boolean chains 2 (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":"core/shard/src/lib.rs"},"region":{"startLine":4816}}}],"partialFingerprints":{"codehealthFindingId/v1":"048027743d434c5ff4c0bc8c5805415af91d6d0188df36bd104f567e25e625ee"}},{"ruleId":"D2","level":"warning","message":{"text":"QuicConfig::new (cognitive 17): QuicConfig::new has cognitive complexity 17 (threshold 15). Drivers by points: if/else 16 (17 pts) (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":"foreign/python/src/config.rs"},"region":{"startLine":608}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a3317fb67a191a9341cda76fd2d3e90efc1636c85a36935a72ef75022dded4e"}},{"ruleId":"D2","level":"warning","message":{"text":"poll.utils.deserializeBatchMessages (cognitive 17): poll.utils.deserializeBatchMessages has cognitive complexity 17 (threshold 15). Drivers by points: if/else 5 (13 pts), loops 2 (3 pts), boolean chains 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":"foreign/node/src/wire/message/poll.utils.ts"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b5508ff6ecf75cc4181b29f4df631f8587056efeb8e895afdec14ccc43f95ec"}},{"ruleId":"D2","level":"warning","message":{"text":"TcpMessageStream.LoginRegisterAsync (cognitive 16): TcpMessageStream.LoginRegisterAsync has cognitive complexity 16 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/IggyClient/Implementations/TcpMessageStream.Vsr.cs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fc8020df9e2017dccf20978f39c17e61ed3772a6a570a95905f60cef3ee569a"}},{"ruleId":"D2","level":"warning","message":{"text":"CreateTopicWithAssignmentsRequest::apply (cognitive 16): CreateTopicWithAssignmentsRequest::apply has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12 (13 pts), loops 2 (3 pts) (nesting depth added 2). 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":"core/metadata/src/stm/stream.rs"},"region":{"startLine":2191}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c24d57eaa4ae56aac952ecda857cb8ac77e8f4e6f194af8336570599aad7d5f"}},{"ruleId":"D2","level":"warning","message":{"text":"TypedEnvProvider::warn_unknown_env_vars_inner (cognitive 16): TypedEnvProvider::warn_unknown_env_vars_inner has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (9 pts), match/switch 3 (5 pts), boolean chains 1, 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":"core/configs/src/configs_impl/typed_env_provider.rs"},"region":{"startLine":270}}}],"partialFingerprints":{"codehealthFindingId/v1":"e34f2c44b53b3489b6f7f0d4bd4dca0a2e002ec90577e4d954482e734aaf19fd"}},{"ruleId":"D2","level":"warning","message":{"text":"ProtoStreamEncoder::apply_field_transformations (cognitive 16): ProtoStreamEncoder::apply_field_transformations has cognitive complexity 16 (threshold 15). Drivers by points: loops 2 (8 pts), if/else 4 (6 pts), match/switch 1 (2 pts) (nesting depth added 9). 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":"core/connectors/sdk/src/encoders/proto.rs"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"e07ee7ac236fa055ed9ff11b484d0298e4687037d3ce12df730d2510bf77ec69"}},{"ruleId":"D2","level":"warning","message":{"text":"ProtoConvert::apply_field_transformations (cognitive 16): ProtoConvert::apply_field_transformations has cognitive complexity 16 (threshold 15). Drivers by points: loops 2 (8 pts), if/else 4 (6 pts), match/switch 1 (2 pts) (nesting depth added 9). 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":"core/connectors/sdk/src/transforms/proto_convert.rs"},"region":{"startLine":487}}}],"partialFingerprints":{"codehealthFindingId/v1":"4988330137bdc921466f47ec6f4a50cb8fe114e48c527bc8daa1f0541497c806"}},{"ruleId":"D2","level":"warning","message":{"text":"ClickHouseSink::open (cognitive 16): ClickHouseSink::open has cognitive complexity 16 (threshold 15). Drivers by points: if/else 3 (8 pts), match/switch 2 (5 pts), loops 2 (3 pts) (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":"core/connectors/sinks/clickhouse_sink/src/sink.rs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"da8696daf4591aac121a54d3ca1bff6506abff0ed010c1fe0c3e3f5b820f5de2"}},{"ruleId":"D2","level":"warning","message":{"text":"iggy_connector_clickhouse_sink::binary::parse_decimal_str (cognitive 16): iggy_connector_clickhouse_sink::binary::parse_decimal_str has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10 (12 pts), boolean chains 2, match/switch 2 (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, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sinks/clickhouse_sink/src/binary.rs"},"region":{"startLine":605}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2f24b83cb46fed9c41a72d0b3014256da2079bb508d4d60d7fc45fb40cb0af8"}},{"ruleId":"D2","level":"warning","message":{"text":"DynamicRouter::route_data (cognitive 16): DynamicRouter::route_data has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (8 pts), match/switch 3 (6 pts), loops 2 (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":"core/connectors/sinks/iceberg_sink/src/router/dynamic_router.rs"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4ea6be989338aa89f4b465c6ebb587b39045074cd483f5e8ff3e93f6bc45784"}},{"ruleId":"D2","level":"warning","message":{"text":"ElasticsearchSource::source_state_to_internal_state (cognitive 16): ElasticsearchSource::source_state_to_internal_state has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10 (11 pts), boolean chains 5 (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":"core/connectors/sources/elasticsearch_source/src/lib.rs"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0790fe0f9506f34b2ffaced37d1fb721b90a6d50f74fc95a16d0ac175332a91"}},{"ruleId":"D2","level":"warning","message":{"text":"iggy_connector_postgres_source::substitute_query_tokens (cognitive 16): iggy_connector_postgres_source::substitute_query_tokens has cognitive complexity 16 (threshold 15). Drivers by points: if/else 3 (8 pts), loops 2 (3 pts), match/switch 1 (3 pts), boolean chains 2 (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":"core/connectors/sources/postgres_source/src/lib.rs"},"region":{"startLine":2137}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e0c118e5cfaf53c6d7454e8ba0b7404588a7a115fa1012cbd318ece91c0ae09"}},{"ruleId":"D2","level":"warning","message":{"text":"ClientTable::decode (cognitive 16): ClientTable::decode has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9 (12 pts), loops 2 (3 pts), match/switch 1 (nesting depth added 4). 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":"core/consensus/src/client_table.rs"},"region":{"startLine":1945}}}],"partialFingerprints":{"codehealthFindingId/v1":"e19bdaa1cc24066a103a22e9b724141308e41ead1d06f9d0e394a6d98a0801b1"}},{"ruleId":"D2","level":"warning","message":{"text":"ServerHandle::build_envs (cognitive 16): ServerHandle::build_envs has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10 (12 pts), loops 2, boolean chains 1, match/switch 1 (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, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/integration/src/harness/handle/server.rs"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b76695d7ee8c53b0873d89d384fa74c5142dc9d703ef484ef64008192609025"}},{"ruleId":"D2","level":"warning","message":{"text":"ServerHandle::start_dependents (cognitive 16): ServerHandle::start_dependents has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8 (14 pts), boolean chains 2 (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":"core/integration/src/harness/handle/server.rs"},"region":{"startLine":777}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f3b88c1246b71263108f2d9a3b75d0157de42f3b1f7e573c52d129114d314b2"}},{"ruleId":"D2","level":"warning","message":{"text":"integration::bench_utils::run_bench_and_wait_for_finish (cognitive 16): integration::bench_utils::run_bench_and_wait_for_finish has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (9 pts), loops 2 (3 pts), boolean chains 2, match/switch 1 (2 pts) (nesting depth added 4). 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":"core/integration/src/bench_utils.rs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"e21d1f6ff03966b649ab4a4d4fd6740566ef6451fe307859a4edeaf97b968251"}},{"ruleId":"D2","level":"warning","message":{"text":"integration::harness::disk::read_replicated_consumer_offset (cognitive 16): integration::harness::disk::read_replicated_consumer_offset has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (11 pts), loops 2 (3 pts), boolean chains 2 (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":"core/integration/src/harness/disk.rs"},"region":{"startLine":379}}}],"partialFingerprints":{"codehealthFindingId/v1":"e02d4553797ce4806f45ac00a89ec7bd1281da76eb67570fa8a11be9501516bd"}},{"ruleId":"D2","level":"warning","message":{"text":"integration::harness::config::resolve::resolve_config_paths (cognitive 16): integration::harness::config::resolve::resolve_config_paths has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6 (11 pts), boolean chains 2, match/switch 1 (2 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":"core/integration/src/harness/config/resolve.rs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6609626d16f86af39187a47c01f2836ff36a04fc7278e28fee54224ae790a69"}},{"ruleId":"D2","level":"warning","message":{"text":"message_bus::transports::tcp::writer_loop (cognitive 16): message_bus::transports::tcp::writer_loop has cognitive complexity 16 (threshold 15). Drivers by points: if/else 3 (6 pts), loops 3 (5 pts), match/switch 2 (5 pts) (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":"core/message_bus/src/transports/tcp.rs"},"region":{"startLine":397}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9dbe06144eaa008432b98a833e50f6229aee2b56159dfe073a58aa477082c32"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyMetadata::on_replicate (cognitive 16): IggyMetadata::on_replicate has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12 (13 pts), match/switch 2 (3 pts) (nesting depth added 2). 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":"core/metadata/src/impls/metadata.rs"},"region":{"startLine":1153}}}],"partialFingerprints":{"codehealthFindingId/v1":"74a4a6e6003636568003f94f1f79773c6bb2f8b8bd33501d1b69240ef6d8b43f"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyMetadata::repair_primary_self_acks (cognitive 16): IggyMetadata::repair_primary_self_acks has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (10 pts), loops 4 (5 pts), boolean chains 1 (nesting depth added 4). 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":"core/metadata/src/impls/metadata.rs"},"region":{"startLine":2767}}}],"partialFingerprints":{"codehealthFindingId/v1":"98121977d8248d9b564667fcea7f2fa7f38cc4b359f7160ace1f622358e8f6c6"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyPartition::persistence_checkpoint_files (cognitive 16): IggyPartition::persistence_checkpoint_files has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (9 pts), loops 4 (5 pts), boolean chains 2 (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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":1056}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9b6dc05c6263bc2ee83434b4798a528e5148aec09919305b9905491fb8feac3"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyPartition::persist_repaired_prefix_through (cognitive 16): IggyPartition::persist_repaired_prefix_through has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (14 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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":1283}}}],"partialFingerprints":{"codehealthFindingId/v1":"59a4ea34b2502fe29e0e206637d7037866e253e7492010172353fc6ffa8eec95"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyPartition::reanchor_to_offset_frontier (cognitive 16): IggyPartition::reanchor_to_offset_frontier has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (6 pts), match/switch 2 (4 pts), boolean chains 3, loops 2 (3 pts) (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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":7488}}}],"partialFingerprints":{"codehealthFindingId/v1":"18c9e9122bbf3061ec9a1f65175c327d1e1d5abd8fada5962075e2621656f652"}},{"ruleId":"D2","level":"warning","message":{"text":"partitions::segment_recovery::walk_chain_from_anchor (cognitive 16): partitions::segment_recovery::walk_chain_from_anchor has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8 (15 pts), 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":"core/partitions/src/segment_recovery.rs"},"region":{"startLine":1988}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d5a1643d49c6cf6020fd87fded0746305c841c82eba58be82ea9b1db59a40fe"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyConsumer::shutdown (cognitive 16): IggyConsumer::shutdown has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8 (11 pts), boolean chains 3, loops 1 (2 pts) (nesting depth added 4). 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":"core/sdk/src/clients/consumer.rs"},"region":{"startLine":1729}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9a73de5f0e5882406167b14be8cd78cbe1085ded082490638d1de433fa41408"}},{"ruleId":"D2","level":"warning","message":{"text":"WebSocketClient::send_raw_request (cognitive 16): WebSocketClient::send_raw_request has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8 (12 pts), match/switch 2 (3 pts), 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":"core/sdk/src/websocket/websocket_client.rs"},"region":{"startLine":1072}}}],"partialFingerprints":{"codehealthFindingId/v1":"128dc74f88f0a0631f1c12a71e13a2abe193fb972e64a44a1f6d71ad44878d1e"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyShard::park_if_unmaterialised (cognitive 16): IggyShard::park_if_unmaterialised has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10 (11 pts), boolean chains 3, match/switch 1 (2 pts) (nesting depth added 2). 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":"core/shard/src/lib.rs"},"region":{"startLine":3731}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b8b1a526cfa21150a28d89e3097a81a5965cc0206234fec14a37372fc415a03"}},{"ruleId":"D2","level":"warning","message":{"text":"Simulator::build_inner (cognitive 16): Simulator::build_inner has cognitive complexity 16 (threshold 15). Drivers by points: loops 6 (9 pts), if/else 3 (7 pts) (nesting depth added 7). 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":"core/simulator/src/lib.rs"},"region":{"startLine":364}}}],"partialFingerprints":{"codehealthFindingId/v1":"a78f9ea28d51622e642cd2ea13a67af4a9964f8f85cee3c639299702bdd02764"}},{"ruleId":"D2","level":"warning","message":{"text":"simulator::bin::workload-fuzz::network_options (cognitive 16): simulator::bin::workload-fuzz::network_options has cognitive complexity 16 (threshold 15). Drivers by points: if/else 14, boolean chains 2. 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":"core/simulator/src/bin/workload-fuzz.rs"},"region":{"startLine":459}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c97a01a36ba96007da173cfc6438b0f7fadff771e538c420ba29b9628d3c423"}},{"ruleId":"D2","level":"warning","message":{"text":"simulator::workload::run_with_faults (cognitive 16): simulator::workload::run_with_faults has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (11 pts), loops 3 (5 pts) (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":"core/simulator/src/workload/mod.rs"},"region":{"startLine":734}}}],"partialFingerprints":{"codehealthFindingId/v1":"52497e5c90b3dabd807302c67bed166ffb5422272ea9943930d8a09c5d4206ca"}},{"ruleId":"D2","level":"warning","message":{"text":"iggy_cpp::type_conversion::decode_field (cognitive 16): iggy_cpp::type_conversion::decode_field has cognitive complexity 16 (threshold 15). Drivers by points: match/switch 14 (16 pts) (nesting depth added 2). 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":"foreign/cpp/src/type_conversion.rs"},"region":{"startLine":849}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba30898d5672b2e94b8523c54fce2dac574832d07104b88578e545dd936bf7bc"}},{"ruleId":"D2","level":"warning","message":{"text":"IggyClient::consumer_group (cognitive 16): IggyClient::consumer_group has cognitive complexity 16 (threshold 15). Drivers by points: if/else 14, boolean chains 2. 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":"foreign/python/src/client.rs"},"region":{"startLine":1567}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ee389094e4915071f14a92d7904296e3fa0f8e45924a2007b9f775613356cc6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 6190 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 77% of them inside a single declaration: IggyShard (3 blocks, 1368-10413), declaring 49 free functions. The bar is 500 significant lines; this is 5690 over it, 12.38\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":"core/shard/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb081934983e96e4f946df6dcb99c4780f11074fd0ae2c3faf4eec369ae570eb"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: IggyShard: ClassTooLong \u2014 4779 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 151 methods, 3 blocks, lines 1368-10413. The bar is 400 significant lines; this is 4379 over it, 11.95\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":"core/shard/src/lib.rs"},"region":{"startLine":1368}}}],"partialFingerprints":{"codehealthFindingId/v1":"32418796733505930f16c6b3ef08ecb7ba731b84c6214e561850e7b68371dea1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/iggy_partition.rs: FileTooLong \u2014 4917 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 4417 over it, 9.83\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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"730cff38729684d39c46f0928e8067ed46349332d80c2aa3f795018c08ed10f4"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: iggy_swift_golden_vectors::main: FunctionTooLong \u2014 iggy_swift_golden_vectors::main runs 889 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 789 over it, 8.89\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":"foreign/swift/Tools/golden-vectors/src/main.rs"},"region":{"startLine":299}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d66886e9f12ba78579b886ac7d319f5960c092357290de03a5d6e972512d632"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: IggyPartition: TooManyMethods \u2014 219 methods, declared across 2 files: src/iggy_partition.rs (203), src/state_transfer.rs (16). The bar is 30 methods; this is 189 over it, 7.30\u00D7 the bar. That list is where to read them, not a suggestion to split the file: the members belong to the type wherever they are declared, so moving them between files leaves the count unchanged. 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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4f7d34357039f8212050af6c9beb6edb41b0922ecaeb334b3c62d1c6cf055c1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: IggyShard: TooManyMethods \u2014 151 methods, declared across 3 files: src/lib.rs (136), src/router.rs (12), src/poll.rs (3). The bar is 30 methods; this is 121 over it, 5.03\u00D7 the bar. That list is where to read them, not a suggestion to split the file: the members belong to the type wherever they are declared, so moving them between files leaves the count unchanged. 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":"core/shard/src/lib.rs"},"region":{"startLine":1368}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ca4fd389155949428e4f71446c9e69cca4d6d8881d05e2603f41d40410aca97"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: impls/metadata.rs: FileTooLong \u2014 1990 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 1490 over it, 3.98\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":"core/metadata/src/impls/metadata.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"604c3496ec18a6aa770ee6ebb41d629020a298f1d5e9c4cdb5150774fd3b50fa"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: VsrConsensus: TooManyMethods \u2014 119 methods. The bar is 30 methods; this is 89 over it, 3.97\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":"core/consensus/src/impls.rs"},"region":{"startLine":1071}}}],"partialFingerprints":{"codehealthFindingId/v1":"54dd46989f84b89c1ce5131c0cefcfa17fd9628e8f6f603f48443fbb5fefdd23"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TcpMessageStream: TooManyMethods \u2014 1261 significant lines (blank, comment-only and punctuation-only lines excluded), 117 methods, declared across 3 files: Implementations/TcpMessageStream.cs (81), Implementations/TcpMessageStream.Vsr.cs (22), Implementations/TcpMessageStream.PollRouting.cs (14). The bar is 30 methods; this is 87 over it, 3.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":"foreign/csharp/Iggy_SDK/IggyClient/Implementations/TcpMessageStream.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"569c702f75721921e6311c5e09087b32d7e8799aa6abdf5f71e178b97977e4c4"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/state_transfer.rs: FileTooLong \u2014 1949 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 1449 over it, 3.90\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":"core/partitions/src/state_transfer.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba091f9a2b34b800be3f7c0826a2074dc1c86dcbf1d408f63b5b70a66026e808"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: IggyPartition.apply_checked_install: MethodTooLong \u2014 apply_checked_install runs 377 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 277 over it, 3.77\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":"core/partitions/src/state_transfer.rs"},"region":{"startLine":2859}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a42bb596909bfc4755ab82a9fd2e08b06327f4220987b2094115e3d14b57598"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/impls.rs: FileTooLong \u2014 1877 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 70% of them inside a single declaration: VsrConsensus (4 blocks, 406-4248). The bar is 500 significant lines; this is 1377 over it, 3.75\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":"core/consensus/src/impls.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"17440ee243576c678d5dcb5e51213c75bb2427bfc1c194a6a6aabe16fd9ee572"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 1801 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 33 free functions. The bar is 500 significant lines; this is 1301 over it, 3.60\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":"core/connectors/sources/postgres_source/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"44123bd6b2cb442d07078a8de11bc428772ea3cc4807ea84d4634d6e91ae2111"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: iggy_connector_postgres_source::extract_column_value: FunctionTooLong \u2014 iggy_connector_postgres_source::extract_column_value runs 346 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 246 over it, 3.46\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":"core/connectors/sources/postgres_source/src/lib.rs"},"region":{"startLine":1552}}}],"partialFingerprints":{"codehealthFindingId/v1":"8018cfb3aa3798d54806814632154c673202694541dda32bc418858bebf98e05"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: stm/stream.rs: FileTooLong \u2014 1710 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 1210 over it, 3.42\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":"core/metadata/src/stm/stream.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"257dab206be05a04235f6851df6297a87415d26baaca9b23392c313f1fec3a4e"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: server::boot::shard_main: FunctionTooLong \u2014 server::boot::shard_main runs 341 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 241 over it, 3.41\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":"core/server/src/boot/mod.rs"},"region":{"startLine":410}}}],"partialFingerprints":{"codehealthFindingId/v1":"80fef620008d83fae0546594733fd381c8552ce9bafbb9840f5568b55926712e"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: VsrConsensus: ClassTooLong \u2014 1318 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 119 methods, 4 blocks, lines 406-4248. The bar is 400 significant lines; this is 918 over it, 3.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":"core/consensus/src/impls.rs"},"region":{"startLine":1071}}}],"partialFingerprints":{"codehealthFindingId/v1":"f22e140d5eade3dc1b365c4c6e3d68c052cf1dabb0030e7a561ce5b03e0d9b4e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: IggyTcpClient: TooManyMethods \u2014 98 methods, declared across 16 files: tcp/tcp_core.go (29), tcp/tcp_poll_routing.go (10), tcp/tcp_session_management.go (10), tcp/tcp_user_management.go (8), \u002B12 more file(s). The bar is 30 methods; this is 68 over it, 3.27\u00D7 the bar. That list is where to read them, not a suggestion to split the file: the members belong to the type wherever they are declared, so moving them between files leaves the count unchanged. 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":"foreign/go/client/tcp/tcp_core.go"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"921e6dbb8c957e8e9315c05af4272adbfb8a9560a6af88ae87ce0ffb0c80f43a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/segment_recovery.rs: FileTooLong \u2014 1616 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 1116 over it, 3.23\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":"core/partitions/src/segment_recovery.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fdead44ed6a3a6717e99d14161c28c7a8b6bbda092caa1f99fcd8f994e941f1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: consensus/header.rs: FileTooLong \u2014 1519 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 1019 over it, 3.04\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":"core/binary_protocol/src/consensus/header.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"68249751a73fbfe206048a81e5a8be742769b73472706b18de25cc7069e76622"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kafka_message_gen::build_payload: FunctionTooLong \u2014 kafka_message_gen::build_payload runs 272 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 172 over it, 2.72\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":"gateways/kafka/tools/kafka-tool/src/main.rs"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"292772dcda697b46b52ae49f656f811c95db60c932f205dbd3a3519338954154"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: http/handlers.rs: FileTooLong \u2014 1269 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 47 free functions. The bar is 500 significant lines; this is 769 over it, 2.54\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":"core/server/src/http/handlers.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e891f0f00084e4e2b5e9c30d585f12ecd448f614e72b4bcc54280f2fe7b2f29e"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: iggy_connector_clickhouse_sink::binary::serialize_value: FunctionTooLong \u2014 iggy_connector_clickhouse_sink::binary::serialize_value runs 251 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 151 over it, 2.51\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":"core/connectors/sinks/clickhouse_sink/src/binary.rs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"e55fe6d5633da224db27ef34f237a3a198ecd4cfc30f374a7d5342f05debfb4b"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ClusterConfig.validate: MethodTooLong \u2014 validate runs 246 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 146 over it, 2.46\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":"core/configs/src/server_config/cluster.rs"},"region":{"startLine":868}}}],"partialFingerprints":{"codehealthFindingId/v1":"67e5407c319e4e9f362267ea160f42d4999e1b1a75948560042b029713d46d36"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/partition_journal.rs: FileTooLong \u2014 1219 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 78% of them inside a single declaration: PartitionPrepareJournal (4 blocks, 106-1552). The bar is 500 significant lines; this is 719 over it, 2.44\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":"core/journal/src/partition_journal.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"eea6c10cd525d3c5b915ee365cf44024fc96c4179c5c10b68c23b5c59d2c797b"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: PostgresSource: ClassTooLong \u2014 972 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 34 methods, 4 blocks, lines 57-1550. The bar is 400 significant lines; this is 572 over it, 2.43\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":"core/connectors/sources/postgres_source/src/lib.rs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"1bf4bf4a1382537fe6d013304c5526d700db94d76ee0ea9b93d4fb0b96000c53"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: IggyErrorCode.name: MethodTooLong \u2014 name runs 242 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 142 over it, 2.42\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":"foreign/swift/Sources/Iggy/Errors/IggyErrorCode.swift"},"region":{"startLine":271}}}],"partialFingerprints":{"codehealthFindingId/v1":"dac75fd41f5e7a00f8e3651b2963f4ed6bb3d3151bfc6ece690065219e4682b2"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: PartitionPrepareJournal: ClassTooLong \u2014 953 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 64 methods, 4 blocks, lines 106-1552. The bar is 400 significant lines; this is 553 over it, 2.38\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":"core/journal/src/partition_journal.rs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"35901c7584aa80705cdad8a3255cf01360648a9f7e3b34f45ea43384fb911de3"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/main.rs: FileTooLong \u2014 1098 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 598 over it, 2.20\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":"foreign/swift/Tools/golden-vectors/src/main.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d0887d2c732a71c2e12df72eb992ecb124db75655effbd6db613e5b0995aa03"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: TcpClient: ClassTooLong \u2014 870 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 26 methods, 7 blocks, lines 95-1675. The bar is 400 significant lines; this is 470 over it, 2.18\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":"core/sdk/src/tcp/tcp_client.rs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"80a33e0603e065cc3e57f92f89e5fa963cd9e67db138d3fc299312c209893801"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: iggy_connectors::source::source_forwarding_loop: FunctionTooLong \u2014 iggy_connectors::source::source_forwarding_loop runs 216 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 116 over it, 2.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":"core/connectors/runtime/src/source.rs"},"region":{"startLine":555}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0b4d128835b622c8a6ff1f7f86e3e5ded5bf3d6a31593fd54ae79a6156541e7"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ServerConfig.validate: MethodTooLong \u2014 validate runs 214 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 114 over it, 2.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":"core/configs/src/server_config/validators.rs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"7cc90073ad6fc56cce2b6b87bbf52dbdfb767b2fe6757dfc76ea0d0ee47bd501"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: HttpMessageStream: TooManyMethods \u2014 496 significant lines (blank, comment-only and punctuation-only lines excluded), 64 methods. The bar is 30 methods; this is 34 over it, 2.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":"foreign/csharp/Iggy_SDK/IggyClient/Implementations/HttpMessageStream.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d6b6a73049df764b63d6cc295a2e8e91ea2f7be52f4df55caee005556fb3edd"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PartitionPrepareJournal: TooManyMethods \u2014 64 methods, declared across 2 files: src/partition_journal.rs (44), partition_journal/segments.rs (20). The bar is 30 methods; this is 34 over it, 2.13\u00D7 the bar. That list is where to read them, not a suggestion to split the file: the members belong to the type wherever they are declared, so moving them between files leaves the count unchanged. 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":"core/journal/src/partition_journal.rs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"09bb378aac9da08369f2c6363e2c4d0428a64c2303d00253240d0c3a91d707b7"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: IggyClient: ClassTooLong \u2014 849 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 42 methods, 2 blocks, lines 60-1700. The bar is 400 significant lines; this is 449 over it, 2.12\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":"foreign/python/src/client.rs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"1138fe3019399d71cd31c41de9ce746ad143a78a0a7a9541e5c82d06fac7b8f7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/persistence.rs: FileTooLong \u2014 1061 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 72% of them inside a single declaration: PartitionPersistence (3 blocks, 166-1487). The bar is 500 significant lines; this is 561 over it, 2.12\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":"core/partitions/src/persistence.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e805b1afb3abfa4104dc0c306e10721ebb8f27452f214403dbe73d92b9e33c6c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: IggyPartition: TooManyFields \u2014 63 stored fields beside 219 methods. The bar is 30 stored fields; this is 33 over it, 2.10\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b13d68565df95d2841f97b613b8b71586e648aaf98f262a0084a6e3eaa31509"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Client: ClassTooLong \u2014 835 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 48 methods, 2 blocks, lines 59-1226. The bar is 400 significant lines; this is 435 over it, 2.09\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":"foreign/cpp/src/client.rs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"f548ab04e2bb28532e5243e4449b3628a0fd754fc836dde28cf0c27a564df93b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AsyncTcpConnection: TooManyMethods \u2014 62 methods. The bar is 30 methods; this is 32 over it, 2.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":"foreign/java/java-sdk/src/main/java/org/apache/iggy/client/async/tcp/AsyncTcpConnection.java"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"8612e995d323157cbeb2881d8e0059b9e2cf271acd21fb40d2764ddb63b775b3"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: AsyncTcpConnection: ClassTooLong \u2014 809 significant lines (blank, comment-only and punctuation-only lines excluded), 62 methods. The bar is 400 significant lines; this is 409 over it, 2.02\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":"foreign/java/java-sdk/src/main/java/org/apache/iggy/client/async/tcp/AsyncTcpConnection.java"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a57368a31c6da9adc08c3683f5c650a630f042ff487a2d0595b095b3ed60ab3"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: iggy_cli::get_command: FunctionTooLong \u2014 iggy_cli::get_command runs 194 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 94 over it, 1.94\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":"core/cli/src/main.rs"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"56255911dd3462c1b243d43e0d99e54f7ef5b618d544633ca0edf5200145a3b7"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: PartitionPersistence: ClassTooLong \u2014 763 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 56 methods, 3 blocks, lines 166-1487. The bar is 400 significant lines; this is 363 over it, 1.91\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":"core/partitions/src/persistence.rs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d44b6948927774d4f6053bf386341d476ac29839453201a53eea4a9597c46a7"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TestHarness: TooManyMethods \u2014 57 methods. The bar is 30 methods; this is 27 over it, 1.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":"core/integration/src/harness/orchestrator/harness.rs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b11247f947001e9628252256cfb13137465a756183f0d327a39bca40e9c021b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/client_table.rs: FileTooLong \u2014 940 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 69% of them inside a single declaration: ClientTable (3 blocks, 669-2094). The bar is 500 significant lines; this is 440 over it, 1.88\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":"core/consensus/src/client_table.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ec795b196de1011fd284c9027dcb6ae80cc8cdfc9a8ea0d6a98c847743e4953"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: tcp/tcp_client.rs: FileTooLong \u2014 938 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 93% of them inside a single declaration: TcpClient (7 blocks, 95-1675). The bar is 500 significant lines; this is 438 over it, 1.88\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":"core/sdk/src/tcp/tcp_client.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7426c4be2838d58699af3e178423e82134ed750c02778cc71db8e9514d5197e6"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PartitionPersistence: TooManyMethods \u2014 56 methods. The bar is 30 methods; this is 26 over it, 1.87\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":"core/partitions/src/persistence.rs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea5c865262956d0fe231c36502e9100df02db43f72a7c66acb87e096794c4113"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: IggyShard.on_partition_transfer_progress: MethodTooLong \u2014 on_partition_transfer_progress runs 185 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 85 over it, 1.85\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":"core/shard/src/lib.rs"},"region":{"startLine":9505}}}],"partialFingerprints":{"codehealthFindingId/v1":"5eb0a560d254a406774e415a0f82bb93d2683efa9e7ad5f273fe9d82df3bc7aa"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/client.rs: FileTooLong \u2014 918 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 91% of them inside a single declaration: Client (2 blocks, 59-1226). The bar is 500 significant lines; this is 418 over it, 1.84\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":"foreign/cpp/src/client.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbe2fbb3ab84095a4cccd2ad8f3cb2bbd2256d1bca98dcdc941edff41c1e71c6"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: WebSocketClient: ClassTooLong \u2014 734 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 21 methods, 7 blocks, lines 81-1220. The bar is 400 significant lines; this is 334 over it, 1.84\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":"core/sdk/src/websocket/websocket_client.rs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8ade185c355e8fc29cf92379a15e899c233b8d189c23b845aa53b523da5644d"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Simulator: ClassTooLong \u2014 729 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 43 methods, 2 blocks, lines 187-1611. The bar is 400 significant lines; this is 329 over it, 1.82\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":"core/simulator/src/lib.rs"},"region":{"startLine":187}}}],"partialFingerprints":{"codehealthFindingId/v1":"c03881ff74b95eb593bbee622cb20c1ad8fb5b4cc00878318b70d0f734e862c3"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: server::boot::recovery::build_shard_for_thread: FunctionTooLong \u2014 server::boot::recovery::build_shard_for_thread runs 182 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 82 over it, 1.82\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":"core/server/src/boot/recovery.rs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"e012a56f9f7b4b5bbc45b159ccfc822367829a42128d34957003342d641dc639"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/client.rs: FileTooLong \u2014 908 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 94% of them inside a single declaration: IggyClient (2 blocks, 60-1700). The bar is 500 significant lines; this is 408 over it, 1.82\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":"foreign/python/src/client.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fec286989fa0cc03d838b351197b7afbc88d7a0a16ce9d8025f851f7957df78"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: iggy_connectors::sink::process_messages: FunctionTooLong \u2014 iggy_connectors::sink::process_messages runs 177 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 77 over it, 1.77\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":"core/connectors/runtime/src/sink.rs"},"region":{"startLine":548}}}],"partialFingerprints":{"codehealthFindingId/v1":"7092c03e26ae0279b8135b7a6062c9abaf1918b8116a8701f567329fce61f150"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: iggy_connector_influxdb_source::v3::poll: FunctionTooLong \u2014 iggy_connector_influxdb_source::v3::poll runs 177 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 77 over it, 1.77\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":"core/connectors/sources/influxdb_source/src/v3.rs"},"region":{"startLine":439}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa51924bfcc5bd992367605e465a1e3e94d122c17326ac98c50bb663282fbefc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Mappers/BinaryMapper.cs: FileTooLong \u2014 879 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 379 over it, 1.76\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":"foreign/csharp/Iggy_SDK/Mappers/BinaryMapper.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3516755b937dc4f66f72e3e092b749e10e2fe88c7bbe8dd1156d3eda5559826f"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: CommandResponseStream: ClassTooLong \u2014 698 significant lines (blank, comment-only and punctuation-only lines excluded), 35 methods. The bar is 400 significant lines; this is 298 over it, 1.75\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":"foreign/node/src/client/client.socket.ts"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e9f5eb72a0d6bb28a9bec049596f40b4940a6ae950f9d0f9d38b63fbdd8a373"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: tcp/AsyncTcpConnection.java: FileTooLong \u2014 872 significant lines (blank, comment-only and punctuation-only lines excluded), about 93% of them inside a single declaration: AsyncTcpConnection (90-1238). The bar is 500 significant lines; this is 372 over it, 1.74\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":"foreign/java/java-sdk/src/main/java/org/apache/iggy/client/async/tcp/AsyncTcpConnection.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d01898ac68b86cce25ebffa932b83286dfc4d69fb5676950ff66d4db7ee7c430"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 866 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 84% of them inside a single declaration: Simulator (2 blocks, 187-1611). The bar is 500 significant lines; this is 366 over it, 1.73\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":"core/simulator/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"41f8203a4f6a67aca2d1bbbed46dbd3d304d2ba4464b2fc15c853aac6daa8286"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/config.rs: FileTooLong \u2014 864 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 364 over it, 1.73\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":"foreign/python/src/config.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd67ba317bd5d6f40e9e8c49c11701d5a1c1db084707c6e53078c291f5355a81"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: simulator::replica::new_shard: FunctionTooLong \u2014 simulator::replica::new_shard runs 172 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 72 over it, 1.72\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":"core/simulator/src/replica.rs"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"84518ecc617b535634846e508404e1158b9feb453fd8b759ee63bd6dfcb5cf87"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: tcp/tcp_core.go: FileTooLong \u2014 856 significant lines (blank, comment-only and punctuation-only lines excluded), about 74% of them inside a single declaration: IggyTcpClient (30 blocks, 71-1555). The bar is 500 significant lines; this is 356 over it, 1.71\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":"foreign/go/client/tcp/tcp_core.go"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b99cca11993cdb7d153c0012fbf1e4623567938b18e1ddbc3d60c3e905442b1"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: QuicClient: ClassTooLong \u2014 680 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 16 methods, 7 blocks, lines 84-1140. The bar is 400 significant lines; this is 280 over it, 1.70\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":"core/sdk/src/quic/quic_client.rs"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"a60035afc546942cf7731601e4ede9837e7551a81944507fa862f59ca5dab763"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: IggyConsumer: ClassTooLong \u2014 676 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 21 methods, 6 blocks, lines 271-1837. The bar is 400 significant lines; this is 276 over it, 1.69\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":"core/sdk/src/clients/consumer.rs"},"region":{"startLine":637}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b34274588bd893cc161c130aaa49a50a1b0476d8f1a949c2fd95d19b8726e23"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: clients/consumer.rs: FileTooLong \u2014 841 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 80% of them inside a single declaration: IggyConsumer (6 blocks, 271-1837). The bar is 500 significant lines; this is 341 over it, 1.68\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":"core/sdk/src/clients/consumer.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9eb3c736254397d88093040e0ba1597c2493f540cf09972305e75aa98e9aefb"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: partitions::segment_recovery::load_persisted_segments_with_checkpoint: FunctionTooLong \u2014 partitions::segment_recovery::load_persisted_segments_with_checkpoint runs 168 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 68 over it, 1.68\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":"core/partitions/src/segment_recovery.rs"},"region":{"startLine":570}}}],"partialFingerprints":{"codehealthFindingId/v1":"f527958a66bd5156b5f0bbebe2a826803e796a2536ea2029368d004b17411aa5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ErrorFactory: TooManyMethods \u2014 184 significant lines (blank, comment-only and punctuation-only lines excluded), 50 methods. The bar is 30 methods; this is 20 over it, 1.67\u00D7 the bar. The type holds no instance state, so there is no shared data to group its members by. To reduce it, split it by area instead: give each cohesive family of members its own smaller type, so no one type has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ada97a1c86702054e717226ad8bc3cac76d0fae5db26e53a9cd2a5c4482b8b1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ServerHandle: TooManyMethods \u2014 50 methods. The bar is 30 methods; this is 20 over it, 1.67\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":"core/integration/src/harness/handle/server.rs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"8aa1b0e38727688f07e19166a6420e522bb480ff37e0eaaceea3cd0f2189a249"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 822 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 63% of them inside a single declaration: SurrealDbSink (4 blocks, 52-882). The bar is 500 significant lines; this is 322 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":"core/connectors/sinks/surrealdb_sink/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a83036f03c64f1821844cfa9459dc6d62194c289f2c8770b644f1c15fe7f40f5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 816 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 78% of them inside a single declaration: HttpSink (3 blocks, 203-1256). The bar is 500 significant lines; this is 316 over it, 1.63\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":"core/connectors/sinks/http_sink/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"412569671a9c3f35ee61114518ae594e582baaa44dd936f08c66718ee0f96e9e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: dispatch/session_ops.rs: FileTooLong \u2014 814 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 314 over it, 1.63\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":"core/server/src/dispatch/session_ops.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e1f81f4cabdd41694263d2c9aabe88cc1327522b76d581105e572fc4d0be0a4"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: ClientTable: ClassTooLong \u2014 650 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 32 methods, 3 blocks, lines 669-2094. The bar is 400 significant lines; this is 250 over it, 1.63\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":"core/consensus/src/client_table.rs"},"region":{"startLine":669}}}],"partialFingerprints":{"codehealthFindingId/v1":"5130202e9f3808ad2728cd3e2883abd1e8586b23a5ed6971c44323b56258b9b8"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: ServerHandle: ClassTooLong \u2014 646 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 50 methods, 8 blocks, lines 69-1172. The bar is 400 significant lines; this is 246 over it, 1.62\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":"core/integration/src/harness/handle/server.rs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b4b500f4f8d18bc9e8301e358a141478ba89e509609327fbb275f4e3c6b7e94"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: client/client.socket.ts: FileTooLong \u2014 807 significant lines (blank, comment-only and punctuation-only lines excluded), about 86% of them inside a single declaration: CommandResponseStream (163-1294). The bar is 500 significant lines; this is 307 over it, 1.61\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":"foreign/node/src/client/client.socket.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3f15032c8eba4389cc8803447022b1ef07c86ddbfc991f8ce0d3f65c4ab04bf"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Streams: ClassTooLong \u2014 644 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 34 methods, 2 blocks, lines 1112-2777. The bar is 400 significant lines; this is 244 over it, 1.61\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":"core/metadata/src/stm/stream.rs"},"region":{"startLine":846}}}],"partialFingerprints":{"codehealthFindingId/v1":"edf9ae0951329fa90c85f1a08ffebf57f7ffbe5f11a0e0e35445c486d231a0ce"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AsyncIggyTcpClient: TooManyMethods \u2014 48 methods. The bar is 30 methods; this is 18 over it, 1.60\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":"foreign/java/java-sdk/src/main/java/org/apache/iggy/client/async/tcp/AsyncIggyTcpClient.java"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3ff22c10d41d70f6385133a329925ed4f61c690b8ad8203f831345c77c6c4db"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Client: TooManyMethods \u2014 48 methods. The bar is 30 methods; this is 18 over it, 1.60\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":"foreign/cpp/src/client.rs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d429e75753cb5d5f1c23ad0661635a7deb6dacaae2749e5f3852e114c7eb0c6"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: HttpSink: ClassTooLong \u2014 640 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 14 methods, 3 blocks, lines 203-1256. The bar is 400 significant lines; this is 240 over it, 1.60\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":"core/connectors/sinks/http_sink/src/lib.rs"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fe267e738557f89f50b4c4e0d5160e709bfc1cd348f6215dc381f50f58bb5d6"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: IggyTcpClient: ClassTooLong \u2014 637 significant lines (blank, comment-only and punctuation-only lines excluded), 98 methods, 30 blocks, lines 71-1555. The bar is 400 significant lines; this is 237 over it, 1.59\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":"foreign/go/client/tcp/tcp_core.go"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"5295790184613fb3ea3030fa95c0aaaf4654937df91d833f54694f446f86db9b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/source.rs: FileTooLong \u2014 791 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 291 over it, 1.58\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":"core/connectors/runtime/src/source.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb7ccc6e014ce677e435815f8813af2d7e478af799f6c253948703574ca7fb11"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: websocket/websocket_client.rs: FileTooLong \u2014 783 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 94% of them inside a single declaration: WebSocketClient (7 blocks, 81-1220). The bar is 500 significant lines; this is 283 over it, 1.57\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":"core/sdk/src/websocket/websocket_client.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"107699e27f4acd285d6c1fd8bb1a75da1c71f58ffef5845eafc97e3aa5cf49ca"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 781 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 64% of them inside a single declaration: MeilisearchSink (3 blocks, 101-891). The bar is 500 significant lines; this is 281 over it, 1.56\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":"core/connectors/sinks/meilisearch_sink/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c06a294a4981d4b633a95f608d414e14c15ef11ad9849209a38e65ff8db77c52"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: PartitionPrepareJournal.rewrite: MethodTooLong \u2014 rewrite runs 156 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 56 over it, 1.56\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":"core/journal/src/partition_journal.rs"},"region":{"startLine":1353}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0996501ae5218ee1a2a2a9962ee33da0f2f69005bee66d95396bbc58c271dd8"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: quic/quic_client.rs: FileTooLong \u2014 777 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 88% of them inside a single declaration: QuicClient (7 blocks, 84-1140). The bar is 500 significant lines; this is 277 over it, 1.55\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":"core/sdk/src/quic/quic_client.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4277d7158622bff39603781adeb3003946cdefa861ce2ef05c55161cca4cab4"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: partitions::segment_recovery::recover_segment_bounds: FunctionTooLong \u2014 partitions::segment_recovery::recover_segment_bounds runs 155 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 55 over it, 1.55\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":"core/partitions/src/segment_recovery.rs"},"region":{"startLine":1572}}}],"partialFingerprints":{"codehealthFindingId/v1":"a08e57e7131dfe8db5529799ce17caca79403b865738b5ca88a53649bb548a56"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: WebSocketClient.send_raw_with_response: MethodTooLong \u2014 send_raw_with_response runs 155 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 55 over it, 1.55\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":"core/sdk/src/websocket/websocket_client.rs"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9c048dac8a07de8a9aa732bac04338fdd29153db63c966bdaf6e5b0af65c4fe"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: BinaryMapper: TooManyMethods \u2014 865 significant lines (blank, comment-only and punctuation-only lines excluded), 46 methods. The bar is 30 methods; this is 16 over it, 1.53\u00D7 the bar. The type holds no instance state, so there is no shared data to group its members by. To reduce it, split it by area instead: give each cohesive family of members its own smaller type, so no one type has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Mappers/BinaryMapper.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4f6a41f685f492592d897393f1046a6696172db33a839d10a35f82360fcb8c6"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Permissioner: TooManyMethods \u2014 46 methods, declared across 10 files: permissioner_rules/users.rs (9), permissioner_rules/streams.rs (7), permissioner_rules/topics.rs (7), permissioner_rules/consumer_groups.rs (6), \u002B6 more file(s). The bar is 30 methods; this is 16 over it, 1.53\u00D7 the bar. That list is where to read them, not a suggestion to split the file: the members belong to the type wherever they are declared, so moving them between files leaves the count unchanged. 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":"core/metadata/src/permissioner/mod.rs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3d9925c8d212cb9e0f4318ac6111f9fb9f8ee969583ac448dd93abe48d9abf9"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: QuicClient.send_raw_with_response: MethodTooLong \u2014 send_raw_with_response runs 152 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 52 over it, 1.52\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":"core/sdk/src/quic/quic_client.rs"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9ecf17968afe807d7136861a3026857b503eb6ee539678d3a003b81362090a2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: server_config/cluster.rs: FileTooLong \u2014 751 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 251 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":"core/configs/src/server_config/cluster.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1b792f31c1644f50676400e70de7297c96e1651fbeadd3414bf2c7c9ca6621a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: IggyShard: TooManyFields \u2014 45 stored fields beside 151 methods. The bar is 30 stored fields; this is 15 over it, 1.50\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/shard/src/lib.rs"},"region":{"startLine":1368}}}],"partialFingerprints":{"codehealthFindingId/v1":"20bd7c7cf8adb461771b9e34c2b5aa77ef52bab7dbb1d65216fd7ecb22b247b4"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: PartitionPersistence: TooManyFields \u2014 45 stored fields beside 56 methods. The bar is 30 stored fields; this is 15 over it, 1.50\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/partitions/src/persistence.rs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"de1b1a4c3b8a193c00541350a75e13be7aacb648baa1d92835d7239c011a4bfa"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: group/state.rs: FileTooLong \u2014 747 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 247 over it, 1.49\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":"gateways/kafka/src/group/state.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"30c4d9de9ffbe1d24b169365caeeb786442ff081b692003b3eba11ffa2e7665b"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: metadata::stm::authz::authorize: FunctionTooLong \u2014 metadata::stm::authz::authorize runs 147 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 47 over it, 1.47\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":"core/metadata/src/stm/authz.rs"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"b76e55cf62e982cb89122d3f65395ad4d9a81c5a63e47327b1df45655289c261"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/observability.rs: FileTooLong \u2014 730 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 230 over it, 1.46\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":"core/consensus/src/observability.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fdaedc488b0ef5533cd02b093a688170babe843190ce56cebc7e71e035b86ef"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: InfluxDbSource.poll: MethodTooLong \u2014 poll runs 146 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 46 over it, 1.46\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":"core/connectors/sources/influxdb_source/src/lib.rs"},"region":{"startLine":469}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac2cec94f41a77e729670fd2087adcbd954e2a9268ad8222898c8085b5d4fec3"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Implementations/TcpMessageStream.cs: FileTooLong \u2014 727 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 227 over it, 1.45\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":"foreign/csharp/Iggy_SDK/IggyClient/Implementations/TcpMessageStream.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2798e30a6f53a815ce10f92569d5ea3b183a97abc41ac4b589a058963ad5da23"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: IggyConsumer: TooManyMethods \u2014 450 significant lines (blank, comment-only and punctuation-only lines excluded), 43 methods, declared across 3 files: Consumers/IggyConsumer.Logging.cs (23), Consumers/IggyConsumer.cs (17), Consumers/IggyConsumer.Rented.cs (3). The bar is 30 methods; this is 13 over it, 1.43\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":"foreign/csharp/Iggy_SDK/Consumers/IggyConsumer.Logging.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"24d61b4491021f79bb63ec7a939fc07e9b564ff9f8e490983e39ff1541ea42d5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: BytesDeserializer: TooManyMethods \u2014 43 methods. The bar is 30 methods; this is 13 over it, 1.43\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":"foreign/java/java-sdk/src/main/java/org/apache/iggy/serde/BytesDeserializer.java"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"cfd94b3c0239d7168943dfe9a647bac9134ae34b7dca1cc98cc5fc8d41d71dde"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Simulator: TooManyMethods \u2014 43 methods. The bar is 30 methods; this is 13 over it, 1.43\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":"core/simulator/src/lib.rs"},"region":{"startLine":187}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b864247df8176b5c8ffa54a69b988341a848a0eda7fcaf339b7eac12e99f876"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: Args: TooManyFields \u2014 43 stored fields beside 1 method. The bar is 30 stored fields; this is 13 over it, 1.43\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/common/src/types/args/mod.rs"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"397c18153e4561d843ab2538cc052d7801036aa65cd4024d9499f714651e7cee"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: handle/server.rs: FileTooLong \u2014 716 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 90% of them inside a single declaration: ServerHandle (8 blocks, 69-1172). The bar is 500 significant lines; this is 216 over it, 1.43\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":"core/integration/src/harness/handle/server.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"73f71443a1477b32e7a9f84fd935a5ce97bd271743d9052145e1392971e234e8"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/journal.rs: FileTooLong \u2014 716 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 65% of them inside a single declaration: PartitionJournal (6 blocks, 168-1164). The bar is 500 significant lines; this is 216 over it, 1.43\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":"core/partitions/src/journal.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cfc0874225e03ae54bc0ae756d31a5ed6ec68b15b3a62b68bb9b6bbafa0cbc22"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: IggyService: ClassTooLong \u2014 571 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 42 methods, 3 blocks, lines 41-765. The bar is 400 significant lines; this is 171 over it, 1.43\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":"core/ai/mcp/src/service/mod.rs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e57b860538632b30af21263af01284166aa17737a2ae031109f4e96ee267535"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/type_conversion.rs: FileTooLong \u2014 705 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 205 over it, 1.41\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":"foreign/cpp/src/type_conversion.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"707f1687fac23b4c8847e17512f8468c3e087886e37390926cd82587b875a78f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/partition_reconciler.rs: FileTooLong \u2014 703 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 203 over it, 1.41\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":"core/server/src/partition_reconciler.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9269642fceed0febb1e8e11a000e2a2ffaaf60ea33cfc77047045e6fd6d6d291"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: AsyncIggyTcpClient: ClassTooLong \u2014 562 significant lines (blank, comment-only and punctuation-only lines excluded), 48 methods. The bar is 400 significant lines; this is 162 over it, 1.41\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":"foreign/java/java-sdk/src/main/java/org/apache/iggy/client/async/tcp/AsyncIggyTcpClient.java"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b2acfad401e0798fe7f742b3c6f6f317936fd1cdc6781bfb88d4b394dbea8cb"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TcpContracts: TooManyMethods \u2014 545 significant lines (blank, comment-only and punctuation-only lines excluded), 42 methods. The bar is 30 methods; this is 12 over it, 1.40\u00D7 the bar. The type holds no instance state, so there is no shared data to group its members by. To reduce it, split it by area instead: give each cohesive family of members its own smaller type, so no one type has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"25ffb8c38cb792285b7cfc1ccb7cebb3d6655f59c3e188395e1aed678598c6fb"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: IggyService: 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":"core/ai/mcp/src/service/mod.rs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"af5b677ff2271df1dc18a349220172e219e44879c80c355d5b7664bcf297a7c5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SimClient: 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":"core/simulator/src/client.rs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"498148988103a8f97970f63385eecb44859bdb54d2d8c81b88776b3b8488a6be"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: IggyClient: 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":"foreign/python/src/client.rs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"989fde211decf62f6fafe223ee850f5e99f640e6afc91bb55a9b5b5f817f4cb2"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: IggyPartition.install_state_transfer: MethodTooLong \u2014 install_state_transfer runs 140 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 40 over it, 1.40\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":"core/partitions/src/state_transfer.rs"},"region":{"startLine":2558}}}],"partialFingerprints":{"codehealthFindingId/v1":"841344ae40a41be37e6cfb8a2ceba53972a990be9d583377c0685a22ef6bb056"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 696 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 70% of them inside a single declaration: RedshiftSink (3 blocks, 52-782). The bar is 500 significant lines; this is 196 over it, 1.39\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":"core/connectors/sinks/redshift_sink/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7dba8a0f4bc900e3ff335363b7d789c6ce4c51aecb5c7e77ee148cdb8410a96"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: dispatch/partition.rs: FileTooLong \u2014 691 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 191 over it, 1.38\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":"core/server/src/dispatch/partition.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb53766cf3e5cdd324d8df8dcab7e957fa22791805720a4412271f3ce9491dd2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/responses.rs: FileTooLong \u2014 691 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 191 over it, 1.38\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":"core/server/src/responses.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ff134c5da57d381f9fb751be44309dbc2f1569652be7ab4095207c43ffa22ac"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: IggyShard.on_partition_request_state_chunk: MethodTooLong \u2014 on_partition_request_state_chunk runs 138 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 38 over it, 1.38\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":"core/shard/src/lib.rs"},"region":{"startLine":8546}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d8a6a633ce9a45046ae053a23e183cba042621b5e79987897cb943e41562213"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: iggy_connectors::main: FunctionTooLong \u2014 iggy_connectors::main runs 137 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 37 over it, 1.37\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":"core/connectors/runtime/src/main.rs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d155b17fcdf654f4b102f98af6da7e32e0356f28181afb394bd466512557ae1"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: iggy_connectors::source::init: FunctionTooLong \u2014 iggy_connectors::source::init runs 137 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 37 over it, 1.37\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":"core/connectors/runtime/src/source.rs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"6708aa133af49fef918cfa96db268bd656dd116382c8864d5688c3aa57e57c1f"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: QuicClient.connect_inner: MethodTooLong \u2014 connect_inner runs 137 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 37 over it, 1.37\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":"core/sdk/src/quic/quic_client.rs"},"region":{"startLine":672}}}],"partialFingerprints":{"codehealthFindingId/v1":"80f8877c4f533d88741702c24c3d8bce639cbb00428dff79fea46fa967e933d8"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kafka_message_gen::response::decode_body: FunctionTooLong \u2014 kafka_message_gen::response::decode_body runs 137 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 37 over it, 1.37\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":"gateways/kafka/tools/kafka-tool/src/response.rs"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"04dd6cefd7af93cc6e6b11dbdaeaeeed8f66a7ddfd1dc1cba5381ef5ba13a44d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: IggyMetadata: TooManyMethods \u2014 41 methods. The bar is 30 methods; this is 11 over it, 1.37\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":"core/metadata/src/impls/metadata.rs"},"region":{"startLine":697}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbf0ab17e04c68fe8975450cb95be6c6cb83e8134f771351c905c5c62f71d411"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/records.rs: FileTooLong \u2014 677 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 38 free functions. The bar is 500 significant lines; this is 177 over it, 1.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":"gateways/kafka/src/records.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bc46f6753ada6c76fdf73cd3efb2c8c86f6eef021f33959010381fd1e51cf62"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: InfluxDbSource.open: MethodTooLong \u2014 open runs 135 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 35 over it, 1.35\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":"core/connectors/sources/influxdb_source/src/lib.rs"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"f92c0511cc078de21a5071cdf5782965ae1c8040650318ff538059439a69c261"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 672 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 172 over it, 1.34\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":"core/connectors/sinks/doris_sink/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"172b10fb6d4d71065e6b15efb7500c537b57bb670290a60aadfbd2c1cf83a187"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: GetStatsCmd.execute_cmd: MethodTooLong \u2014 execute_cmd runs 132 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 32 over it, 1.32\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":"core/cli/src/commands/binary_system/stats.rs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bdedb54baa582609e37ab4ae42b5fdce5bab6a6d6d6ad8fb3259e576b1a21fc"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: IggyShard.on_partition_state_transfer_target: MethodTooLong \u2014 on_partition_state_transfer_target runs 132 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 32 over it, 1.32\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":"core/shard/src/lib.rs"},"region":{"startLine":9231}}}],"partialFingerprints":{"codehealthFindingId/v1":"503dbcb67d5769a4dd954767980a7a52747b4b034f64c286218b65731dfdc883"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: server::partition_helpers::load_partition_or_fence: FunctionTooLong \u2014 server::partition_helpers::load_partition_or_fence runs 131 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 31 over it, 1.31\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":"core/server/src/partition_helpers.rs"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c88fe8f2f6ff6222a93c2301bc0321cb23c139a0512536300c28ab5edec4582"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: server::partition_reconciler::reconcile_additions: FunctionTooLong \u2014 server::partition_reconciler::reconcile_additions runs 131 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 31 over it, 1.31\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":"core/server/src/partition_reconciler.rs"},"region":{"startLine":573}}}],"partialFingerprints":{"codehealthFindingId/v1":"828e2b161d3d0ae596b0fe9a1a8655b6e4f9d1ce10c15ed13407fa9643aad500"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: IggyConsumer: TooManyFields \u2014 39 stored fields beside 21 methods. The bar is 30 stored fields; this is 9 over it, 1.30\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/clients/consumer.rs"},"region":{"startLine":637}}}],"partialFingerprints":{"codehealthFindingId/v1":"f829fc5e3d7cbb4f696a50fe21ccb1669c395bbe1d43e7484a31e03e3dbd0ee2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: dispatch/reads.rs: FileTooLong \u2014 649 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 149 over it, 1.30\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":"core/server/src/dispatch/reads.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3d1d69dd306d13c4b2ba02de4fa41bd98303ce606497902e39e3ee5875ff84a"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: SurrealDbSink: ClassTooLong \u2014 518 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 18 methods, 4 blocks, lines 52-882. The bar is 400 significant lines; this is 118 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":"core/connectors/sinks/surrealdb_sink/src/lib.rs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"3703d8bd5985ef8211bf6fb4163fc0b5ebfeb7e37eb02ca56d05670c7d070669"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/server.rs: FileTooLong \u2014 647 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 147 over it, 1.29\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":"gateways/kafka/src/server.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e94579404dac359173ec514f180033a5a8cfed2c57189b04b2636a2fc586a13"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: IggyError: ClassTooLong \u2014 515 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 4 methods, 3 blocks, lines 38-597. The bar is 400 significant lines; this is 115 over it, 1.29\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":"core/common/src/error/iggy_error.rs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e777195f03f7cbb0c5d0c70f1bf1f240d3dedbdf9221a684dc5a32f98f8a31d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/server.rs: FileTooLong \u2014 641 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 141 over it, 1.28\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":"core/connectors/sources/http_source/src/server.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"286bf5874c0b9c7a4905c26fef698e951b9851cf364f323680bf7aa11ffd7a62"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: RabbitMQSink.publish_batch_with_retry: MethodTooLong \u2014 publish_batch_with_retry runs 127 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 27 over it, 1.27\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":"core/connectors/sinks/rabbitmq_sink/src/lib.rs"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"d797696e127bba836e1a34bd1361e1b7c510192de077ba196b07f74662267d0c"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: message_bus::installer::replica::install_replica_conn: FunctionTooLong \u2014 message_bus::installer::replica::install_replica_conn runs 127 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 27 over it, 1.27\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":"core/message_bus/src/installer/replica.rs"},"region":{"startLine":326}}}],"partialFingerprints":{"codehealthFindingId/v1":"203bd2b5177c2a910e47659ff69dcb11efa9e3bd00108811cb266591f3137334"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: IggyMessageBus: TooManyMethods \u2014 38 methods. The bar is 30 methods; this is 8 over it, 1.27\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":"core/message_bus/src/lib.rs"},"region":{"startLine":719}}}],"partialFingerprints":{"codehealthFindingId/v1":"586d362b64e076e1fc33be2971a0633b18434b9505728d248cbbbe0449b74352"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: MeilisearchSink: ClassTooLong \u2014 502 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 20 methods, 3 blocks, lines 101-891. The bar is 400 significant lines; this is 102 over it, 1.26\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":"core/connectors/sinks/meilisearch_sink/src/lib.rs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"b491171d49bded0126657d4f368781d600735ca4a4336f76b5ef1188d212922c"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Simulator.build_inner: MethodTooLong \u2014 build_inner runs 125 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) 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":"core/simulator/src/lib.rs"},"region":{"startLine":364}}}],"partialFingerprints":{"codehealthFindingId/v1":"1508e9bf7e353e0e139569c620eab82c23e735d089431f87a6f8281e9cd7c6b9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/wire_conversions.rs: FileTooLong \u2014 622 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 122 over it, 1.24\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":"core/common/src/wire_conversions.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b12df653cd6bf0d7cb4715ede449af869a2ea00c0f9bfa6c72a51224c1ac03cd"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: ProtoConvert: ClassTooLong \u2014 497 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 22 methods, 4 blocks, lines 83-798. The bar is 400 significant lines; this is 97 over it, 1.24\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":"core/connectors/sdk/src/transforms/proto_convert.rs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"7963376a2fccf622c597ca5388da6fcaadcc7f77f504a8d570aaf52ccd8e6550"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: partition_journal/segments.rs: FileTooLong \u2014 620 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 75% of them inside a single declaration: PartitionPrepareJournal (62-685). The bar is 500 significant lines; this is 120 over it, 1.24\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":"core/journal/src/partition_journal/segments.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a0da15954ac1f6334e86d53915efbc3cd11dc40a5c66c781e0f1af51d5f05bf"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: server::partition_helpers::load_partition: FunctionTooLong \u2014 server::partition_helpers::load_partition runs 124 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) 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":"core/server/src/partition_helpers.rs"},"region":{"startLine":375}}}],"partialFingerprints":{"codehealthFindingId/v1":"11134f2ab41051426745681331acc830f104e1eed35365c11ff9c5979bd05631"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: VsrConsensus: TooManyFields \u2014 37 stored fields beside 119 methods. The bar is 30 stored fields; this is 7 over it, 1.23\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/consensus/src/impls.rs"},"region":{"startLine":1071}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f77a30d14c8333d141000bf2e57c9ec328941b46d3d99591961f68343e04704"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: IggyPartitions: TooManyMethods \u2014 37 methods. The bar is 30 methods; this is 7 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":"core/partitions/src/iggy_partitions.rs"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"7197c61ea583900000125d2124d3fe9bbf49ee74ad3f9e7491480b51c8035061"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: stm/consumer_group.rs: FileTooLong \u2014 616 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 116 over it, 1.23\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":"core/metadata/src/stm/consumer_group.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3569c6b3caad44b5c89ba4af4d19a6184109e3f1b3adca154529f4b74bc82fb4"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: BytesDeserializer: ClassTooLong \u2014 492 significant lines (blank, comment-only and punctuation-only lines excluded), 43 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":"foreign/java/java-sdk/src/main/java/org/apache/iggy/serde/BytesDeserializer.java"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea98ba98813f20a0ba52d7a3782670f7212cdfc252e77b0973985c733b57c1a4"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: protocol/bounds_guard.rs: FileTooLong \u2014 614 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 114 over it, 1.23\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":"gateways/kafka/src/protocol/bounds_guard.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bca2e4066ce4841b316f455120ccbdbd012571424a2f1f70b9beb448657088c4"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: connectors/local_provider.rs: FileTooLong \u2014 613 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 79% of them inside a single declaration: LocalConnectorsConfigProvider (5 blocks, 135-807). The bar is 500 significant lines; this is 113 over it, 1.23\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":"core/connectors/runtime/src/configs/connectors/local_provider.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"328fe13a4eb9af716dabc934ae16b692cd551a9561850d2713295d66299341d1"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: IggyTcpClient.Connect: MethodTooLong \u2014 Connect runs 122 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 22 over it, 1.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":"foreign/go/client/tcp/tcp_core.go"},"region":{"startLine":1043}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ec8b0902f668aab7b655ea8b8e672e19a11e86987b0236b23cf8264c32ef07a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: tcp/AsyncIggyTcpClient.java: FileTooLong \u2014 609 significant lines (blank, comment-only and punctuation-only lines excluded), about 92% of them inside a single declaration: AsyncIggyTcpClient (124-1163). The bar is 500 significant lines; this is 109 over it, 1.22\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":"foreign/java/java-sdk/src/main/java/org/apache/iggy/client/async/tcp/AsyncIggyTcpClient.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5647526def41e634d50b9859d5e4fc236efcc5e5d4afd89e4a708e9fcee939d4"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: service/mod.rs: FileTooLong \u2014 609 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 94% of them inside a single declaration: IggyService (3 blocks, 41-765). The bar is 500 significant lines; this is 109 over it, 1.22\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":"core/ai/mcp/src/service/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"222cf0421fe56c9835cb643c7702caad2eeb586b333d4f2c600fbab21e218418"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/main.rs: FileTooLong \u2014 609 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 109 over it, 1.22\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":"gateways/kafka/tools/kafka-tool/src/main.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cfc0acb5ce9ee54049c83cb6e38493dd4f3b48cff9dba409e7c67e9be1266e83"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: RedshiftSink: ClassTooLong \u2014 486 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 27 methods, 3 blocks, lines 52-782. The bar is 400 significant lines; this is 86 over it, 1.22\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":"core/connectors/sinks/redshift_sink/src/lib.rs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbc4242afabd0317958da9390349f8b964da54a1a5e1500b410eb5c4480e8dd7"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: LocalConnectorsConfigProvider: ClassTooLong \u2014 485 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 8 methods, 5 blocks, lines 135-807. The bar is 400 significant lines; this is 85 over it, 1.21\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":"core/connectors/runtime/src/configs/connectors/local_provider.rs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"99ae8e350dc0096e092ac64ef96ff6b48b46d2090fcf52a20893a88d11801621"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: iggy_connector_clickhouse_sink::schema::parse_type_inner: FunctionTooLong \u2014 iggy_connector_clickhouse_sink::schema::parse_type_inner runs 121 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) 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":"core/connectors/sinks/clickhouse_sink/src/schema.rs"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea650bcea46cf230f2f036ad3623f6933fb73120a18d87dae602f196014a9fa6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: options/mod.rs: FileTooLong \u2014 600 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 100 over it, 1.20\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":"core/common/src/types/options/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"16a4c8090d7621f231ca7ce41b2d52c2366308ca29ea0a58edaf7bf755a7403c"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: IggyMetadata.prepare_request: MethodTooLong \u2014 prepare_request runs 120 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) 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":"core/metadata/src/impls/metadata.rs"},"region":{"startLine":3458}}}],"partialFingerprints":{"codehealthFindingId/v1":"618976d933ef14e9925f71ccc50eff49b4383f5f1f474a3ab82e799d5ffaf005"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: Args: TooManyFields \u2014 36 stored fields. The bar is 30 stored fields; this is 6 over it, 1.20\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/simulator/src/bin/workload-fuzz.rs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"c04f248efffe1cb103937cb05b17d8577f0b0b38990b99dccea6c9743515cff0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/sink.rs: FileTooLong \u2014 592 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 92 over it, 1.18\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":"core/connectors/runtime/src/sink.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"def9d2798e763e7e2cc9a3ff5f967e8a5a2e193dd61ea693924407ee4a457c1a"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: SendMessages.deserialize: MethodTooLong \u2014 deserialize runs 118 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) 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":"core/common/src/http/messages/send_messages.rs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1631550b62a43a4d3a32d0c704ee2d4fe54415d08396b229ee03850427d3491"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: binary_serialization/binary_response_deserializer.go: FileTooLong \u2014 585 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 85 over it, 1.17\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":"foreign/go/binary_serialization/binary_response_deserializer.go"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cd8588df07e295b41712719a4061dbea3466bad293424fd2dca5db2e23ca5bc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/producer.rs: FileTooLong \u2014 584 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 84 over it, 1.17\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":"foreign/python/src/producer.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"76effbd1f9f8aeed725ca45354d2f5712064e097d5b6ce832fc652d605d9cf0b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: IggyPublisher: TooManyMethods \u2014 216 significant lines (blank, comment-only and punctuation-only lines excluded), 35 methods, declared across 2 files: Publishers/IggyPublisher.Logging.cs (22), Publishers/IggyPublisher.cs (13). The bar is 30 methods; this is 5 over it, 1.17\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":"foreign/csharp/Iggy_SDK/Publishers/IggyPublisher.Logging.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"37d0e7a0491e8d0c8a30be1211cee9b3a7205510db18afe60704d0604b993e54"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CommandResponseStream: TooManyMethods \u2014 35 methods. The bar is 30 methods; this is 5 over it, 1.17\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":"foreign/node/src/client/client.socket.ts"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"1efafaffe5521354790591766b48b49e72e6224b994f87943229a0221b40006d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: boot/mod.rs: FileTooLong \u2014 582 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 82 over it, 1.16\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":"core/server/src/boot/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9186eb39471fb2e8dcff52e9412b4d6fe320e4050aca958b47753bb44d0c2b7c"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: iggy_connector_sdk::source::handle_messages: FunctionTooLong \u2014 iggy_connector_sdk::source::handle_messages runs 116 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) 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":"core/connectors/sdk/src/source.rs"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa8727e4279ccbb3615e470e242ae3254c77d81b19252512f35c69bf13a1607f"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: PrepareJournal.scan: MethodTooLong \u2014 scan runs 116 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) 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":"core/journal/src/prepare_journal.rs"},"region":{"startLine":411}}}],"partialFingerprints":{"codehealthFindingId/v1":"b76ac9e9ad5e3159589f1564db4fe9f98570d0652a7db83c2c4afe1576b974cd"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 579 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 79 over it, 1.16\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":"core/connectors/sinks/influxdb_sink/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1975e43ba23e633df3b3ad115d9a8d952883f8c5d0f4560441f4c36b45d75677"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: PartitionJournal: ClassTooLong \u2014 462 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 30 methods, 6 blocks, lines 168-1164. The bar is 400 significant lines; this is 62 over it, 1.16\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":"core/partitions/src/journal.rs"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"11f4957b3d9fef17d59bd8bd3a3dee69de77207270c4884294aa651fd6cbe6cb"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: harness_derive::codegen::generate_harness_setup: FunctionTooLong \u2014 harness_derive::codegen::generate_harness_setup runs 115 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 15 over it, 1.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":"core/harness_derive/src/codegen.rs"},"region":{"startLine":389}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9149a9f22ce0b5ed0247d99b22655f117b9496a277b15cda41218de27167763"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: message_bus::replica::io::start_on_shard_zero: FunctionTooLong \u2014 message_bus::replica::io::start_on_shard_zero runs 115 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 15 over it, 1.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":"core/message_bus/src/replica/io.rs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"4cd9c9020a3db5d27405a18ec407f9dae37dafd0f789b989669fb5f7604f9de8"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: message/user_headers.rs: FileTooLong \u2014 574 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 74 over it, 1.15\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":"core/common/src/types/message/user_headers.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8eb8beed24ec8aeed23fb10b7f90ca10b742c648d44b91fc28ff52779752f2f"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: ProtoStreamEncoder: ClassTooLong \u2014 456 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 23 methods, 4 blocks, lines 76-743. The bar is 400 significant lines; this is 56 over it, 1.14\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":"core/connectors/sdk/src/encoders/proto.rs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"7937840128f2fbb5a8e5a2e6d6d8eacf9ca36cfc9074c4a2e815f09d1278ea21"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: PartitionPrepareJournal.reset_with_segment_checkpoint: MethodTooLong \u2014 reset_with_segment_checkpoint runs 114 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) 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":"core/journal/src/partition_journal/segments.rs"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"575f891b86c2c46159790d81a45d466453e0f5376ebc15f9bb5b90db33e0582e"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: partitions::segment_recovery::index_is_consistent: FunctionTooLong \u2014 partitions::segment_recovery::index_is_consistent runs 114 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) 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":"core/partitions/src/segment_recovery.rs"},"region":{"startLine":2361}}}],"partialFingerprints":{"codehealthFindingId/v1":"c619bbb4a9730f7f334dc7eda356c229c17fb05c7dc7b3245a6492b32eefb2fc"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: server::boot::bootstrap: FunctionTooLong \u2014 server::boot::bootstrap runs 114 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) 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":"core/server/src/boot/mod.rs"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa38fb82cec5816f5076c01ff5738e57a8a520a2170acc021a635ebda425fd02"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: IggyShard.on_partition_request_state_transfer: MethodTooLong \u2014 on_partition_request_state_transfer runs 114 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) 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":"core/shard/src/lib.rs"},"region":{"startLine":8354}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fc734e450468c9ab7cbe5744e85008a3b11361803e4cac3069d6c6e4453d055"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/router.rs: FileTooLong \u2014 569 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 96% of them inside a single declaration: IggyShard (53-1096). The bar is 500 significant lines; this is 69 over it, 1.14\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":"core/shard/src/router.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"afbdaab52783bc24950efce9fadbf0b0a13702f8ecd32cc20c897cb37b34a94e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PostgresSource: 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":"core/connectors/sources/postgres_source/src/lib.rs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"91a5373a63915959c71ba24c99e661cc9b740e62808fec6f243d1bcd8ae94983"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Streams: 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":"core/metadata/src/stm/stream.rs"},"region":{"startLine":846}}}],"partialFingerprints":{"codehealthFindingId/v1":"45b68d732756517cf38c437bfc59b6cdd0e03fa13d3a208cf0276e72b43a152e"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: PartitionRecoveryRefusal.fmt: MethodTooLong \u2014 fmt runs 113 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 13 over it, 1.13\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":"core/partitions/src/segment_recovery.rs"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"f98cb9dc7176164d012d31b8fe60b7e615494440e662f34da05bc77e952d16e2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/consensus_message.rs: FileTooLong \u2014 564 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 64 over it, 1.13\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":"core/server_common/src/consensus_message.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8d0f0dba165e4d6dd967a3cd5910e3a0ca97d264d29b2fa24d7cd0ac30c622e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Tcp/TcpContracts.cs: FileTooLong \u2014 561 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 61 over it, 1.12\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":"foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"de8ca151cc5cfe89f85a193ac16f10906b043fc095a0d24b552103d5f034dff7"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: configs_derive::config_env::generate_struct_impl: FunctionTooLong \u2014 configs_derive::config_env::generate_struct_impl runs 112 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 12 over it, 1.12\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":"core/configs_derive/src/config_env.rs"},"region":{"startLine":230}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbbc5c7ea60e84059ed8f007fda5a663e840bbd8535fb1365f0df864818261ab"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/prepare_journal.rs: FileTooLong \u2014 559 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 77% of them inside a single declaration: PrepareJournal (5 blocks, 124-1182). The bar is 500 significant lines; this is 59 over it, 1.12\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":"core/journal/src/prepare_journal.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"58c321c7c4685d769075e971ae0f60bdbf04e3c5c8940a0fdf67a08756e4ad68"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: CommandResponseStream._pollOnPrimary: MethodTooLong \u2014 _pollOnPrimary runs 111 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 11 over it, 1.11\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":"foreign/node/src/client/client.socket.ts"},"region":{"startLine":586}}}],"partialFingerprints":{"codehealthFindingId/v1":"875e88e3117c2490c20136150062e5b4fe5b612b756fb8a8db57ff337aa475f5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 552 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 64% of them inside a single declaration: InfluxDbSource (4 blocks, 72-719). The bar is 500 significant lines; this is 52 over it, 1.10\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":"core/connectors/sources/influxdb_source/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"49f66ee08506bfac9b450b7bab31dcd4b91e8616e024a9d65db1de19394e7828"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: stm/user.rs: FileTooLong \u2014 552 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 52 over it, 1.10\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":"core/metadata/src/stm/user.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c11aa34a4945bca92d0d0ff83287883a25a284245e9d240222b239ff5ade4fcc"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: BackgroundMessageProcessor: TooManyMethods \u2014 336 significant lines (blank, comment-only and punctuation-only lines excluded), 33 methods, declared across 2 files: Publishers/BackgroundMessageProcessor.cs (20), Publishers/BackgroundMessageProcessor.Logging.cs (13). 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":"foreign/csharp/Iggy_SDK/Publishers/BackgroundMessageProcessor.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d4d9739b44b597ccc78bc23e551ceef82e9029e2ebd28b22c30f97deaca691a"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: IggyMetadata.on_replicate: MethodTooLong \u2014 on_replicate runs 110 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 10 over it, 1.10\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":"core/metadata/src/impls/metadata.rs"},"region":{"startLine":1153}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e300ebfcb8aaef5f8bb5344f4550c3a54a477f7c62b7a056a62eb7af13f2b6a"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: IggyShard.on_partition_read: MethodTooLong \u2014 on_partition_read runs 110 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 10 over it, 1.10\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":"core/shard/src/poll.rs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1aa6d9309f813694cd132a19705c5c239c0775b91b0e389dd9d008b2f4fef84"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: transforms/proto_convert.rs: FileTooLong \u2014 548 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 91% of them inside a single declaration: ProtoConvert (4 blocks, 83-798). The bar is 500 significant lines; this is 48 over it, 1.10\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":"core/connectors/sdk/src/transforms/proto_convert.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"885785f07f3aff6e27aead3a7a91975d35a5a901373a4614c9f342a7af5acef7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: serde/BytesDeserializer.java: FileTooLong \u2014 546 significant lines (blank, comment-only and punctuation-only lines excluded), about 90% of them inside a single declaration: BytesDeserializer (81-764). The bar is 500 significant lines; this is 46 over it, 1.09\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":"foreign/java/java-sdk/src/main/java/org/apache/iggy/serde/BytesDeserializer.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fe14755b29f7b3da041aa944f7f2a282e658c9b5349d46fc03c6ad624b7233d"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: iggy_connectors::sink::consume_messages: FunctionTooLong \u2014 iggy_connectors::sink::consume_messages runs 109 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 9 over it, 1.09\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":"core/connectors/runtime/src/sink.rs"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3f1a5f78be53ae9d027fc1a0a3eaf70f9b6e46126fe0abe28f75379a1255c81"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Logging: ClassTooLong \u2014 432 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 10 methods, 4 blocks, lines 107-763. The bar is 400 significant lines; this is 32 over it, 1.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":"core/server_common/src/log/logger.rs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"f827ea882ef4a07461922c398f18a3bd7947249774a5995f67f0edf728e507cf"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: iggy_connectors::sink::init: FunctionTooLong \u2014 iggy_connectors::sink::init runs 108 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 8 over it, 1.08\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":"core/connectors/runtime/src/sink.rs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f7d6361b846bec4e8c01d431e9b186b44056d4c007a2e1087e48549f1742c8c"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: SimClient: ClassTooLong \u2014 430 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 42 methods, 2 blocks, lines 60-818. The bar is 400 significant lines; this is 30 over it, 1.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":"core/simulator/src/client.rs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ffad7312c17512d93ea0ada224f9485c4f6309b26e8632572cc5eee078f1049"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: PrepareJournal: ClassTooLong \u2014 430 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 13 methods, 5 blocks, lines 124-1182. The bar is 400 significant lines; this is 30 over it, 1.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":"core/journal/src/prepare_journal.rs"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"7cfe81b3bc4e737ad4fdb3cc5310875f52f7737be2767997417af9cc26725907"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: TestHarness: ClassTooLong \u2014 429 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 57 methods, 4 blocks, lines 46-841. The bar is 400 significant lines; this is 29 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":"core/integration/src/harness/orchestrator/harness.rs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"b975d6e0c145277557ae9d65206106aaa922fffc22ffe85d8cb18ad90b32edd8"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ClientTable: 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":"core/consensus/src/client_table.rs"},"region":{"startLine":669}}}],"partialFingerprints":{"codehealthFindingId/v1":"b69741b3a1af352ee8fd0d17c25fb88f63890bba0e3a4ac1994dc32a193fc0a5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: ShardMetrics: TooManyFields \u2014 32 stored fields beside 25 methods. The bar is 30 stored fields; this is 2 over it, 1.07\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/shard/src/metrics.rs"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"620e97f2768aabd0255f196edf9e66ca281e0e101d9624ab3167ace9bf0a0a8f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/binary.rs: FileTooLong \u2014 532 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 32 over it, 1.06\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":"core/connectors/sinks/clickhouse_sink/src/binary.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"81889b3188202d264686647f03e45d44d5e10994f028dfe113cc772507f9d0e0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/partition_helpers.rs: FileTooLong \u2014 532 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 32 over it, 1.06\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":"core/server/src/partition_helpers.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b768228eec72e41ff3a25f1f482e668668f480756aabddaea8ff1031cfc3130c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Implementations/HttpMessageStream.cs: FileTooLong \u2014 530 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 30 over it, 1.06\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":"foreign/csharp/Iggy_SDK/IggyClient/Implementations/HttpMessageStream.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0c4a352920a3c68bf4045404306a6c9d57e31291ca9cd4208047bc93c07fc23"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: IggyMetadata.install_state_transfer: MethodTooLong \u2014 install_state_transfer runs 106 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) 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":"core/metadata/src/impls/metadata.rs"},"region":{"startLine":1733}}}],"partialFingerprints":{"codehealthFindingId/v1":"183e5e1a281010818e1509e795077feb1c2f51add13b563e0765ae35670de2b5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: error/iggy_error.rs: FileTooLong \u2014 528 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 98% of them inside a single declaration: IggyError (3 blocks, 38-597). The bar is 500 significant lines; this is 28 over it, 1.06\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":"core/common/src/error/iggy_error.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1bb5013a1a042d9c797d9d5176d56aebae4a5eb4d944e88d6d0de2a97bb6b78"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/poll_plan.rs: FileTooLong \u2014 522 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 22 over it, 1.04\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":"core/partitions/src/poll_plan.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1968401e1b4783016b23d4405419b5d1d0d94570fd45c5ab796d26820637232"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 522 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 22 over it, 1.04\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":"foreign/cpp/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"99c92fc422eae3c80cf896dc32e01a5f73a33aeeadb79c7ac35280fdeed01382"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: IggyConsumer.poll_next: MethodTooLong \u2014 poll_next runs 104 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 4 over it, 1.04\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":"core/sdk/src/clients/consumer.rs"},"region":{"startLine":1533}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cf0849791aa62892f237b3218a7796f1988a4000ea3df9244ffcc3e7630d856"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 517 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 17 over it, 1.03\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":"core/connectors/sources/http_source/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"60bde72a51ee38508e725062062d9e3dea6dcac7dd6eca83285b6f933402ed05"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: IggyTcpClient: TooManyFields \u2014 31 stored fields beside 98 methods. The bar is 30 stored fields; this is 1 over it, 1.03\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/go/client/tcp/tcp_core.go"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd5d24cddc0bf5697a39a499b547336a4de3f03c034b9675728a27af86c3afba"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SegmentedLog: TooManyMethods \u2014 31 methods. The bar is 30 methods; this is 1 over it, 1.03\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":"core/partitions/src/log.rs"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"e04876efe51f264cfc0b171765b58f4bde19db027c228584d00fa5c305ba2d9b"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TcpClient.send_raw_vsr_attempt: MethodTooLong \u2014 send_raw_vsr_attempt runs 102 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 2 over it, 1.02\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":"core/sdk/src/tcp/tcp_client.rs"},"region":{"startLine":1496}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae7f76e47693403f97e9f44f4cac8993022353133804e735e98faeac84e86c6c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: log/logger.rs: FileTooLong \u2014 507 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 85% of them inside a single declaration: Logging (4 blocks, 107-763). The bar is 500 significant lines; this is 7 over it, 1.01\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":"core/server_common/src/log/logger.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ec33ab11549fcb67fbd41ee304b893d0a6fa6b64c120aec6c07bdc5e3fec5d2"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: partitions::partition_storage::configure_consumer_offsets_with_storage: FunctionTooLong \u2014 partitions::partition_storage::configure_consumer_offsets_with_storage runs 101 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 1 over it, 1.01\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":"core/partitions/src/partition_storage.rs"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"8db8affc2619301091a03055712c31bcf51221a0e5ba2321ad5b8ef0a93321e9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/packet.rs: FileTooLong \u2014 504 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 67% of them inside a single declaration: PacketSimulator (3 blocks, 296-961). The bar is 500 significant lines; this is 4 over it, 1.01\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":"core/simulator/src/packet.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe3775659a6217712a76b93f70d34fbc4f40d404343697a9a135247c64fbf7d6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/plane_helpers.rs: FileTooLong \u2014 503 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 3 over it, 1.01\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":"core/consensus/src/plane_helpers.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"464fbf3a6a0af50c78092d6aa95871129d071102c2f8ee41c0b08733beb37daa"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: encoders/proto.rs: FileTooLong \u2014 501 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 91% of them inside a single declaration: ProtoStreamEncoder (4 blocks, 76-743). The bar is 500 significant lines; this is 1 over it, 1.00\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":"core/connectors/sdk/src/encoders/proto.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"424eea5076c9411fb901a5e672265d58d380f3420fc9abc17adc2720f49dab02"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member family (3 members, 11 shared lines): foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs:779-803 | foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs:806-828 | foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs:903-926 \u2014 These 3 members are variants of one another: a block of 11 lines reported below appears in every one of them, and the pairwise near-duplicate rows they would otherwise produce are collapsed into this row. Read them as one construct written 3 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs"},"region":{"startLine":779}}}],"partialFingerprints":{"codehealthFindingId/v1":"844551f616a4dcf52caad468f6701c1cff25abc71aa9f9129d3c55651847b8e8"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (220 shared lines): core/sdk/src/quic/quic_client.rs:168-406 | core/sdk/src/websocket/websocket_client.rs:162-402 \u2014 These two members are variants of one another: 220 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/quic/quic_client.rs"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c407ca753483ab87d3e439c282f04c138c21d4b95a74182fe5ac7ef0cb95665"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (81 shared lines): core/message_bus/src/installer/replica.rs:331-592 | core/message_bus/src/installer/tcp.rs:72-240 \u2014 These two members are variants of one another: 81 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/message_bus/src/installer/replica.rs"},"region":{"startLine":331}}}],"partialFingerprints":{"codehealthFindingId/v1":"6deff1c6ec43c09417fd8bf92025393d500e3a19d0568dac527a667d9abbea8f"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (77 shared lines): core/message_bus/src/transports/ws.rs:186-286 | core/message_bus/src/transports/wss.rs:334-438 \u2014 These two members are variants of one another: 77 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/message_bus/src/transports/ws.rs"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"fececb8915e502bc3f5af2b0092696ab4b56b4cc6b3ba9155592f2115f99b5da"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (52 shared lines): core/sdk/src/websocket/websocket_connection_stream.rs:46-120 | core/sdk/src/websocket/websocket_tls_connection_stream.rs:49-125 \u2014 These two members are variants of one another: 52 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/websocket/websocket_connection_stream.rs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"53793c8aeface4dcb8bc1ad6ce337c0a27e8befa12bf6d5d9d7ef0829e576575"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (42 shared lines): core/journal/src/prepare_journal.rs:778-877 | core/journal/src/prepare_journal.rs:930-1067 \u2014 These two members are variants of one another: 42 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/journal/src/prepare_journal.rs"},"region":{"startLine":778}}}],"partialFingerprints":{"codehealthFindingId/v1":"3518fb9f7ed21277e876eef171f83df83a9ed6c122bcc39f747c31873ea92534"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (37 shared lines): core/connectors/sinks/http_sink/src/lib.rs:741-817 | core/connectors/sinks/http_sink/src/lib.rs:826-910 \u2014 These two members are variants of one another: 37 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sinks/http_sink/src/lib.rs"},"region":{"startLine":741}}}],"partialFingerprints":{"codehealthFindingId/v1":"30302cbabfd7b5257dbe7edc36b07722372d013265cb31fa8f50455a0e0bfe47"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (22 corresponding lines): core/integration/src/harness/handle/connectors_runtime.rs:210-233 | core/integration/src/harness/handle/server.rs:1021-1046 \u2014 These two members are one piece of code written twice and then edited apart: 22 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":"core/integration/src/harness/handle/connectors_runtime.rs"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"a826d00519d236bdd908308aa66fbedf8f7b356aef471a62613008174440e09e"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (13 members, 50\u002B identical tokens): core/consensus/src/observability.rs:480-512 | core/consensus/src/observability.rs:514-546 | core/consensus/src/observability.rs:548-580 | core/consensus/src/observability.rs:582-614 | core/consensus/src/observability.rs:616-648 | core/consensus/src/observability.rs:718-736 | core/consensus/src/observability.rs:743-763 | core/consensus/src/observability.rs:766-788 | core/consensus/src/observability.rs:792-818 | core/consensus/src/observability.rs:822-847 | core/consensus/src/observability.rs:851-875 | core/consensus/src/observability.rs:879-903 | core/consensus/src/observability.rs:907-930 \u2014 These 13 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 13 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 13 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/consensus/src/observability.rs"},"region":{"startLine":480}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce82511a75dcc69686893ce7c3ef7bee8751a982132cb1944cbd7be74cbf2d63"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (10 members, 50\u002B identical tokens): core/binary_protocol/src/requests/consumer_groups/create_consumer_group.rs:47-63 | core/binary_protocol/src/requests/consumer_groups/delete_consumer_group.rs:46-62 | core/binary_protocol/src/requests/consumer_groups/get_consumer_group.rs:46-62 | core/binary_protocol/src/requests/consumer_groups/join_consumer_group.rs:46-62 | core/binary_protocol/src/requests/consumer_groups/leave_consumer_group.rs:46-62 | core/binary_protocol/src/requests/consumer_groups/sync_consumer_group.rs:49-65 | core/binary_protocol/src/requests/consumer_offsets/delete_consumer_offset.rs:72-102 | core/binary_protocol/src/requests/consumer_offsets/get_consumer_offset.rs:65-91 | core/binary_protocol/src/requests/consumer_offsets/store_consumer_offset.rs:75-108 | core/binary_protocol/src/requests/messages/poll_messages.rs:82-120 \u2014 These 10 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 10 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 10 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/binary_protocol/src/requests/consumer_groups/create_consumer_group.rs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb7990c439196e203023fbba2a06882e089882bd977a17405dfde0e095a7c28f"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (8 members, 50\u002B identical tokens): core/connectors/sdk/src/decoders/avro.rs:177-207 | core/connectors/sdk/src/decoders/flatbuffer.rs:120-150 | core/connectors/sdk/src/decoders/proto.rs:524-554 | core/connectors/sdk/src/encoders/avro.rs:121-151 | core/connectors/sdk/src/encoders/flatbuffer.rs:66-96 | core/connectors/sdk/src/encoders/proto.rs:282-314 | core/connectors/sdk/src/transforms/avro_convert.rs:75-101 | core/connectors/sdk/src/transforms/proto_convert.rs:487-514 \u2014 These 8 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 8 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 8 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sdk/src/decoders/avro.rs"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"990827dbbf181d0d844a69cf6970dec8fcf27c50728883bc45b45febe5b959f3"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (6 members, 50\u002B identical tokens): core/connectors/runtime/src/configs/connectors/http_provider.rs:136-156 | core/connectors/runtime/src/configs/connectors/http_provider.rs:162-182 | core/connectors/runtime/src/configs/connectors/http_provider.rs:184-204 | core/connectors/runtime/src/configs/connectors/http_provider.rs:206-226 | core/connectors/runtime/src/configs/connectors/http_provider.rs:268-289 | core/connectors/runtime/src/configs/connectors/http_provider.rs:331-352 \u2014 These 6 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 6 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 6 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/runtime/src/configs/connectors/http_provider.rs"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"52b85162977a3920cee90d83843f7a6739b0e5a0d9252caf5797770ca8921b57"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (5 members, 50\u002B identical tokens): core/binary_protocol/src/codec.rs:84-102 | core/binary_protocol/src/codec.rs:110-128 | core/binary_protocol/src/codec.rs:136-154 | core/binary_protocol/src/codec.rs:187-205 | core/binary_protocol/src/codec.rs:213-231 \u2014 These 5 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 5 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 5 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/binary_protocol/src/codec.rs"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"26f19f0e206e4bcfe670bd5e9c150a8c4b52ec4a7a632025f5ebdc7d8bbe3f1f"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (5 members, 50\u002B identical tokens): foreign/go/internal/command/offset.go:42-75 | foreign/go/internal/command/offset.go:88-119 | foreign/go/internal/command/offset.go:132-164 | foreign/go/internal/command/partition.go:36-54 | foreign/go/internal/command/partition.go:66-84 \u2014 These 5 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 5 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 5 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/go/internal/command/offset.go"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c06e71c8577928a5f78facb503e5a383cc49fb5cc50a7983216d4d67346c11b"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): core/binary_protocol/src/requests/consumer_offsets/delete_consumer_offset.rs:56-68 | core/binary_protocol/src/requests/consumer_offsets/get_consumer_offset.rs:50-61 | core/binary_protocol/src/requests/consumer_offsets/store_consumer_offset.rs:58-71 | core/binary_protocol/src/requests/messages/poll_messages.rs:64-78 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/binary_protocol/src/requests/consumer_offsets/delete_consumer_offset.rs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"30b67c5b1d81187a07a2e06bb6e2aaa212ba20ca27574349bc723214741ab6b7"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): core/message_bus/src/lifecycle/connection_registry.rs:558-569 | core/message_bus/src/lifecycle/connection_registry.rs:582-601 | core/message_bus/src/lifecycle/connection_registry.rs:883-899 | core/message_bus/src/lifecycle/connection_registry.rs:909-927 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/message_bus/src/lifecycle/connection_registry.rs"},"region":{"startLine":558}}}],"partialFingerprints":{"codehealthFindingId/v1":"09e9b94166d52ac3db99b8324d9b5c1263047f747c78bd70b164aaf18131817c"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): core/sdk/src/http/consumer_groups.rs:34-55 | core/sdk/src/http/consumer_offsets.rs:56-79 | core/sdk/src/http/streams.rs:33-48 | core/sdk/src/http/topics.rs:35-55 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/http/consumer_groups.rs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"8412b05a0369d068dacf4ae50fcb64ce4507a86a32401ebaf024c9aa8acca1b2"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): core/shard/src/lib.rs:4484-4519 | core/shard/src/lib.rs:4529-4603 | core/shard/src/lib.rs:4613-4813 | core/shard/src/lib.rs:4924-4957 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/shard/src/lib.rs"},"region":{"startLine":4484}}}],"partialFingerprints":{"codehealthFindingId/v1":"aecfb00f524abab8d7ee40559b4c90716d65ff12aa5916a484f906235e02e557"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (165 lines \u00D7 2): core/sdk/src/quic/quic_client.rs:169-333 | core/sdk/src/websocket/websocket_client.rs:163-327 \u2014 \u0060core/sdk/src/quic/quic_client.rs\u0060 and \u0060core/sdk/src/websocket/websocket_client.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 16 separate duplicated blocks between them, totalling at least 414 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/quic/quic_client.rs"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6fbd6c034427316c0971593b7bd53adadfa56a3aea3714453def6bca1de6ba5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (42\u201346 lines \u00D7 2): core/connectors/sources/influxdb_source/src/lib.rs:547-592 | core/connectors/sources/influxdb_source/src/lib.rs:633-674 \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":"core/connectors/sources/influxdb_source/src/lib.rs"},"region":{"startLine":547}}}],"partialFingerprints":{"codehealthFindingId/v1":"f59eb9a65435a26e14a573f96e93019a83057d7060907a4741c68e59eee57fc7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (38\u201344 lines \u00D7 2): foreign/csharp/Iggy_SDK/Consumers/IggyConsumerConfig.cs:46-83 | foreign/csharp/Iggy_SDK/Publishers/IggyPublisherConfig.cs:44-87 \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 \u0060foreign/csharp/Iggy_SDK/Consumers/IggyConsumerConfig.cs:46\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":"foreign/csharp/Iggy_SDK/Consumers/IggyConsumerConfig.cs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbbb91e5b5a586ab6e2e03ad79e8119459993a1338581fc366ffc257ca635f6a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (43 lines \u00D7 2): core/connectors/sdk/src/decoders/avro.rs:87-129 | core/connectors/sdk/src/encoders/avro.rs:77-119 \u2014 \u0060core/connectors/sdk/src/decoders/avro.rs\u0060 and \u0060core/connectors/sdk/src/encoders/avro.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 6 separate duplicated blocks between them, totalling at least 110 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sdk/src/decoders/avro.rs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"f811b3d2db4f64b1b42c74a139627975b4e769ca900bcd21ec5e69f110cd8605"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27\u201339 lines \u00D7 2): core/journal/src/prepare_journal.rs:818-844 | core/journal/src/prepare_journal.rs:980-1018 \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":"core/journal/src/prepare_journal.rs"},"region":{"startLine":818}}}],"partialFingerprints":{"codehealthFindingId/v1":"2251295ba5669b00225ca4d16dc161d5c8fce37099c2211f47e6f21baa55f5a0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (28\u201334 lines \u00D7 2): core/message_bus/src/installer/replica.rs:414-447 | core/message_bus/src/installer/tcp.rs:102-129 \u2014 before extracting anything, compare \u0060core/message_bus/src/installer/replica.rs\u0060 and \u0060core/message_bus/src/installer/tcp.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 108 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/message_bus/src/installer/replica.rs"},"region":{"startLine":414}}}],"partialFingerprints":{"codehealthFindingId/v1":"7abba7a46ce81a517ffe9f3fd0a6948a3b9527874d43017509e29764ffe0a6be"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (31\u201333 lines \u00D7 2): foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs:646-678 | foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs:702-732 \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 \u0060foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs:646\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":"foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs"},"region":{"startLine":646}}}],"partialFingerprints":{"codehealthFindingId/v1":"33a1f3505cb780d3c9586cb2a89a80bf87cb8031392e5952d98a9e6439ef02f4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (32 lines \u00D7 2): foreign/csharp/Iggy_SDK/JsonConverters/UserHeadersConverter.cs:93-124 | foreign/csharp/Iggy_SDK/JsonConverters/UserHeadersConverter.cs:138-169 \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 \u0060foreign/csharp/Iggy_SDK/JsonConverters/UserHeadersConverter.cs:93\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/JsonConverters/UserHeadersConverter.cs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"1290df9245f60ae1939a0ce9f3806340ad340f5659bb159a3e53cba4d8cdbeda"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26\u201332 lines \u00D7 2): core/sdk/src/quic/quic_client.rs:335-366 | core/sdk/src/websocket/websocket_client.rs:332-357 \u2014 \u0060core/sdk/src/quic/quic_client.rs\u0060 and \u0060core/sdk/src/websocket/websocket_client.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 16 separate duplicated blocks between them, totalling at least 414 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/quic/quic_client.rs"},"region":{"startLine":335}}}],"partialFingerprints":{"codehealthFindingId/v1":"e00220fa4d668db3af27642993cdc1167d6440cfbe543cd26300fe74efae90bc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19\u201331 lines \u00D7 3): core/sdk/src/quic/quic_client.rs:358-376 | core/sdk/src/tcp/tcp_client.rs:264-294 | core/sdk/src/websocket/websocket_client.rs:349-367 \u2014 \u0060core/sdk/src/quic/quic_client.rs\u0060 and \u0060core/sdk/src/tcp/tcp_client.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 8 separate duplicated blocks between them, totalling at least 134 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/quic/quic_client.rs"},"region":{"startLine":358}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ac24867e81fbd5baa13d1e6734af12d1459eef4d95a0ec05ee0095e8cca5add"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (31 lines \u00D7 2): core/ai/mcp/src/log.rs:149-179 | core/connectors/runtime/src/log.rs:102-132 \u2014 before extracting anything, compare \u0060core/ai/mcp/src/log.rs\u0060 and \u0060core/connectors/runtime/src/log.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 87 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/ai/mcp/src/log.rs"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e33c2e95d1124deed2c0bb90a7810cdfede67b6fb338396ea81374c913c6d79"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (31 lines \u00D7 2): core/ai/mcp/src/log.rs:185-215 | core/connectors/runtime/src/log.rs:138-168 \u2014 before extracting anything, compare \u0060core/ai/mcp/src/log.rs\u0060 and \u0060core/connectors/runtime/src/log.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 87 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/ai/mcp/src/log.rs"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"b68d1e5d1a10230cf276bfda3c30633b3daf4dcc1a39584bd031023a0da7e2cc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13\u201331 lines \u00D7 2): core/message_bus/src/installer/replica.rs:380-410 | core/message_bus/src/installer/tcp.rs:86-98 \u2014 before extracting anything, compare \u0060core/message_bus/src/installer/replica.rs\u0060 and \u0060core/message_bus/src/installer/tcp.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 108 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/message_bus/src/installer/replica.rs"},"region":{"startLine":380}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa8d7116664645489c8d2467ed1dc103bba3559f26a459612689cf4c23b9f03c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (28\u201329 lines \u00D7 3): core/connectors/sdk/src/decoders/proto.rs:118-145 | core/connectors/sdk/src/encoders/proto.rs:147-175 | core/connectors/sdk/src/transforms/proto_convert.rs:141-169 \u2014 \u0060core/connectors/sdk/src/decoders/proto.rs\u0060 and \u0060core/connectors/sdk/src/encoders/proto.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 11 separate duplicated blocks between them, totalling at least 151 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sdk/src/decoders/proto.rs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b435851181c84ecde13b755f620a227500662cfcdd593cf68fa229cbddf98b8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (29 lines \u00D7 2): foreign/csharp/Iggy_SDK/Consumers/IggyConsumer.Rented.cs:185-213 | foreign/csharp/Iggy_SDK/Consumers/IggyConsumer.cs:469-497 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060foreign/csharp/Iggy_SDK/Consumers/IggyConsumer.Rented.cs:185\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":"foreign/csharp/Iggy_SDK/Consumers/IggyConsumer.Rented.cs"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"0aa00ad0d5f9550a5d40779ae81069926aa4d42e594d45a84f41fad5eb8dc623"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (29 lines \u00D7 2): core/message_bus/src/transports/ws.rs:187-215 | core/message_bus/src/transports/wss.rs:335-363 \u2014 before extracting anything, compare \u0060core/message_bus/src/transports/ws.rs\u0060 and \u0060core/message_bus/src/transports/wss.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 81 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/message_bus/src/transports/ws.rs"},"region":{"startLine":187}}}],"partialFingerprints":{"codehealthFindingId/v1":"252e7c0d5c77c3ac6ddbea0e9f3842b0dd50a63832f0a79654624783bea33c86"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 3): core/connectors/sdk/src/encoders/avro.rs:316-342 | core/connectors/sdk/src/encoders/flatbuffer.rs:193-219 | core/connectors/sdk/src/encoders/proto.rs:685-711 \u2014 before extracting anything, compare \u0060core/connectors/sdk/src/encoders/avro.rs\u0060 and \u0060core/connectors/sdk/src/encoders/flatbuffer.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 85 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sdk/src/encoders/avro.rs"},"region":{"startLine":316}}}],"partialFingerprints":{"codehealthFindingId/v1":"170c051bf4d1f6a089453941fcce189350ded5df18073d94aac8964f00faacc5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16\u201327 lines \u00D7 3): core/sdk/src/quic/quic_client.rs:235-250 | core/sdk/src/tcp/tcp_client.rs:1413-1439 | core/sdk/src/websocket/websocket_client.rs:229-244 \u2014 \u0060core/sdk/src/quic/quic_client.rs\u0060 and \u0060core/sdk/src/tcp/tcp_client.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 8 separate duplicated blocks between them, totalling at least 134 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/quic/quic_client.rs"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"d78873b78f41bf47f8b3430a35c48bab02e05cbb06d21efb91e804e5c7bed442"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25\u201327 lines \u00D7 2): core/connectors/runtime/src/configs/connectors/local_provider.rs:724-748 | core/connectors/runtime/src/configs/connectors/local_provider.rs:777-803 \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":"core/connectors/runtime/src/configs/connectors/local_provider.rs"},"region":{"startLine":724}}}],"partialFingerprints":{"codehealthFindingId/v1":"df60e776f189687e2f483a63e8f117a2f970649084d03226277f716802c6a734"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 2): core/simulator/src/workload/ops/create_partitions.rs:58-84 | core/simulator/src/workload/ops/delete_partitions.rs:71-97 \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":"core/simulator/src/workload/ops/create_partitions.rs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed55d2d6a11dd32fc437fa18c9706c64f120c3f77e5ca246520323d467421ce2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u201326 lines \u00D7 2): core/message_bus/src/installer/replica.rs:495-502 | core/message_bus/src/installer/tcp.rs:148-173 \u2014 before extracting anything, compare \u0060core/message_bus/src/installer/replica.rs\u0060 and \u0060core/message_bus/src/installer/tcp.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 108 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/message_bus/src/installer/replica.rs"},"region":{"startLine":495}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d50a89787eb7a7499497b59b12072ee73b677c4941e385c2d0270b445ee3f2c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): core/ai/mcp/src/configs.rs:261-285 | core/connectors/runtime/src/api/config.rs:153-177 \u2014 before extracting anything, compare \u0060core/ai/mcp/src/configs.rs\u0060 and \u0060core/connectors/runtime/src/api/config.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 56 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/ai/mcp/src/configs.rs"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f664f0b61578944a3ad811edf620ffc5ae7d87158412af0f679aabc43322ed6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22\u201325 lines \u00D7 2): core/message_bus/src/transports/ws.rs:221-242 | core/message_bus/src/transports/wss.rs:369-393 \u2014 before extracting anything, compare \u0060core/message_bus/src/transports/ws.rs\u0060 and \u0060core/message_bus/src/transports/wss.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 81 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/message_bus/src/transports/ws.rs"},"region":{"startLine":221}}}],"partialFingerprints":{"codehealthFindingId/v1":"96124f69a079e1041d4188018952917a6a315494cd38e4c9d885598d86c59d8e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): core/common/src/types/options/mod.rs:666-689 | core/common/src/types/options/mod.rs:904-927 \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":"core/common/src/types/options/mod.rs"},"region":{"startLine":666}}}],"partialFingerprints":{"codehealthFindingId/v1":"eff474472b0348921e4e22dd40d8d13a61c73254c5ea10af8701639be146332d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): core/sdk/src/tcp/tcp_client.rs:1159-1182 | core/sdk/src/websocket/websocket_client.rs:829-852 \u2014 \u0060core/sdk/src/tcp/tcp_client.rs\u0060 and \u0060core/sdk/src/websocket/websocket_client.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 9 separate duplicated blocks between them, totalling at least 158 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/tcp/tcp_client.rs"},"region":{"startLine":1159}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd295957e4da4360c5ad385030956b89bc3942b1d62d26cc70a97bef81264f56"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 6): core/connectors/sdk/src/decoders/avro.rs:179-201 | core/connectors/sdk/src/decoders/flatbuffer.rs:122-144 | core/connectors/sdk/src/decoders/proto.rs:526-548 | core/connectors/sdk/src/encoders/avro.rs:123-145 | core/connectors/sdk/src/encoders/flatbuffer.rs:68-90 | core/connectors/sdk/src/transforms/avro_convert.rs:76-98 \u2014 before extracting anything, compare \u0060core/connectors/sdk/src/decoders/avro.rs\u0060 and \u0060core/connectors/sdk/src/decoders/flatbuffer.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 69 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sdk/src/decoders/avro.rs"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"4410732b85042581cad42298f09c27e76190e86d07535668b4e354e275d05c82"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18\u201323 lines \u00D7 2): core/simulator/src/lib.rs:447-469 | core/simulator/src/lib.rs:1250-1267 \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":"core/simulator/src/lib.rs"},"region":{"startLine":447}}}],"partialFingerprints":{"codehealthFindingId/v1":"47d4f405a19d1c871a4652d2ff4b13f3d652742d8681a82fc5b8f86b5aa81e08"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 3): core/sdk/src/quic/quic_client.rs:422-443 | core/sdk/src/tcp/tcp_client.rs:351-372 | core/sdk/src/websocket/websocket_client.rs:418-439 \u2014 \u0060core/sdk/src/quic/quic_client.rs\u0060 and \u0060core/sdk/src/tcp/tcp_client.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 8 separate duplicated blocks between them, totalling at least 134 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/quic/quic_client.rs"},"region":{"startLine":422}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0fc98664efde999656048ccab67391b5dea3b1500d32389e5af3203ff21437f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21\u201322 lines \u00D7 2): foreign/csharp/Iggy_SDK/IggyClient/Implementations/HttpMessageStream.cs:831-851 | foreign/csharp/Iggy_SDK/IggyClient/Implementations/HttpMessageStream.cs:914-935 \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 \u0060foreign/csharp/Iggy_SDK/IggyClient/Implementations/HttpMessageStream.cs:831\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/IggyClient/Implementations/HttpMessageStream.cs"},"region":{"startLine":831}}}],"partialFingerprints":{"codehealthFindingId/v1":"249bfaf33031f3ed937f0c72b28b1eb62eab1b3f67aa68278b4a841c77944572"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): core/binary_protocol/src/requests/partitions/create_partitions_with_assignments.rs:84-105 | core/binary_protocol/src/requests/topics/create_topic_with_assignments.rs:119-140 \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":"core/binary_protocol/src/requests/partitions/create_partitions_with_assignments.rs"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"98fc5f69e3dde1a2682c95909c6d85ea851c80d086f4fde684d88d1059c2347f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): core/server_common/src/consensus_message.rs:290-311 | core/server_common/src/consensus_message.rs:329-350 \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":"core/server_common/src/consensus_message.rs"},"region":{"startLine":290}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3ffe2e00eefe229a306263323286f8fab17b93813234893e9f918b6f93791ea"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): gateways/kafka/src/protocol/bounds_guard.rs:494-515 | gateways/kafka/src/protocol/bounds_guard.rs:588-609 \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":"gateways/kafka/src/protocol/bounds_guard.rs"},"region":{"startLine":494}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba1ae437b03fff2c81bb741fa812cb32028f109fcf2d9a0a5877a70a0aa012c0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): foreign/csharp/Iggy_SDK/JsonConverters/MessageConverter.cs:91-111 | foreign/csharp/Iggy_SDK/JsonConverters/UserHeadersConverter.cs:236-256 \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":"foreign/csharp/Iggy_SDK/JsonConverters/MessageConverter.cs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"095cbb210729b632368078e64ca7e93489722118f22bda3608c7c0eca5907f10"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): core/connectors/sources/http_source/src/server.rs:826-846 | core/connectors/sources/http_source/src/server.rs:922-942 \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":"core/connectors/sources/http_source/src/server.rs"},"region":{"startLine":826}}}],"partialFingerprints":{"codehealthFindingId/v1":"e55c8e97533b279a0bb4169d4e620ccd88b483fdd8da7a4eec07fe256469173f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17\u201321 lines \u00D7 2): core/consensus/src/impls.rs:2575-2595 | core/consensus/src/impls.rs:2831-2847 \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":"core/consensus/src/impls.rs"},"region":{"startLine":2575}}}],"partialFingerprints":{"codehealthFindingId/v1":"25ec52f6cc36a069f3238fa893888ad3b10f12d055387e2ea35c1376e2b46b89"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs:806-825 | foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs:903-922 \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 \u0060foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs:806\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":"foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs"},"region":{"startLine":806}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b922ce2d852d0b2e98c1bb70cb888110ab90a7b67af8a11651e3b121e5e08ba"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): core/integration/src/harness/handle/connectors_runtime.rs:214-233 | core/integration/src/harness/handle/server.rs:1027-1046 \u2014 before extracting anything, compare \u0060core/integration/src/harness/handle/connectors_runtime.rs\u0060 and \u0060core/integration/src/harness/handle/server.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 46 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/integration/src/harness/handle/connectors_runtime.rs"},"region":{"startLine":214}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9a10dcc1639d4b88ee87845d37d821e5a3c657703e1996c8efc1c050abca53c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): core/partitions/src/iggy_partition.rs:5607-5626 | core/partitions/src/iggy_partition.rs:8467-8486 \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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":5607}}}],"partialFingerprints":{"codehealthFindingId/v1":"27aa062238575e3b2abf890f12f2231318342b2fc96a57c43b2438749952b6bd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17\u201320 lines \u00D7 2): core/server/src/boot/handoff.rs:145-164 | core/server/src/boot/handoff.rs:185-201 \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":"core/server/src/boot/handoff.rs"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"e153dad9fe75bfc227b207c9590d61ce10b84b262df70dce75e5a70697e371c7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): gateways/kafka/src/protocol/bounds_guard.rs:912-931 | gateways/kafka/src/protocol/bounds_guard.rs:994-1013 \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":"gateways/kafka/src/protocol/bounds_guard.rs"},"region":{"startLine":912}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8ac87de4434eccbd1570a597372415c310bd57ec57e8f860bbf3eb28fea68de"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 3): core/integration/src/harness/handle/connectors_runtime.rs:183-201 | core/integration/src/harness/handle/mcp.rs:183-201 | core/integration/src/harness/handle/server.rs:989-1007 \u2014 before extracting anything, compare \u0060core/integration/src/harness/handle/connectors_runtime.rs\u0060 and \u0060core/integration/src/harness/handle/mcp.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 39 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/integration/src/harness/handle/connectors_runtime.rs"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"66eebd4ff14f8639020bd2951bedb54d2f4d6f3c627c31d856231dd6b4f16e8d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): core/binary_protocol/src/consensus/header.rs:392-410 | core/binary_protocol/src/consensus/header.rs:418-436 \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":"core/binary_protocol/src/consensus/header.rs"},"region":{"startLine":392}}}],"partialFingerprints":{"codehealthFindingId/v1":"c18cf1c1225c50811481d259b8228fef5a1f222f7bfeeb7a4d1b91825c21f8cc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): core/binary_protocol/src/requests/users/login_register.rs:118-136 | core/binary_protocol/src/requests/users/login_user.rs:102-120 \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":"core/binary_protocol/src/requests/users/login_register.rs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"7907de5b0f24e212907553290c422ca26ae4aebd9c84ae7e18a9924780669ca3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): core/partitions/src/iggy_index_writer.rs:56-74 | core/partitions/src/messages_writer.rs:68-86 \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":"core/partitions/src/iggy_index_writer.rs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bffaaa3bc0cf9eb5b27e094bab4378609f8c3b0941b8ab71eb365aa0862a887"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 3): core/connectors/sdk/src/decoders/proto.rs:95-112 | core/connectors/sdk/src/encoders/proto.rs:117-134 | core/connectors/sdk/src/transforms/proto_convert.rs:111-128 \u2014 \u0060core/connectors/sdk/src/decoders/proto.rs\u0060 and \u0060core/connectors/sdk/src/encoders/proto.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 11 separate duplicated blocks between them, totalling at least 151 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sdk/src/decoders/proto.rs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f084abbfb3805037c46e88f2598bad18f73dbd7b030e4d3e4629b25d6c50922"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 3): gateways/kafka/src/protocol/bounds_guard.rs:433-450 | gateways/kafka/src/protocol/bounds_guard.rs:494-511 | gateways/kafka/src/protocol/bounds_guard.rs:588-605 \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":"gateways/kafka/src/protocol/bounds_guard.rs"},"region":{"startLine":433}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a6f8f2286658914b37cf0d70dd3a332c9ae7a65411b32538fb623d13badfa5f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): core/ai/mcp/src/configs.rs:286-303 | core/connectors/runtime/src/api/config.rs:178-195 \u2014 before extracting anything, compare \u0060core/ai/mcp/src/configs.rs\u0060 and \u0060core/connectors/runtime/src/api/config.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 56 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/ai/mcp/src/configs.rs"},"region":{"startLine":286}}}],"partialFingerprints":{"codehealthFindingId/v1":"6393c2c41a7886bfc9e16d86fbe0f490bc0d9c5e93d3b08d969cb98eb279bb1e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): core/connectors/runtime/src/configs/connectors/http_provider.rs:308-325 | core/connectors/runtime/src/configs/connectors/http_provider.rs:372-389 \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":"core/connectors/runtime/src/configs/connectors/http_provider.rs"},"region":{"startLine":308}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1c8b69c96815bea5393e8dec20163ea6592a1f08d7ada861c4334b5e5841962"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): core/connectors/sdk/src/source.rs:380-397 | core/connectors/sdk/src/source.rs:404-421 \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":"core/connectors/sdk/src/source.rs"},"region":{"startLine":380}}}],"partialFingerprints":{"codehealthFindingId/v1":"eff808f02437684c6a704da90292894e6c61e9ad873c04cc517d12362ddf1951"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): core/sdk/src/clients/producer.rs:949-966 | core/sdk/src/clients/producer.rs:989-1006 \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":"core/sdk/src/clients/producer.rs"},"region":{"startLine":949}}}],"partialFingerprints":{"codehealthFindingId/v1":"9528acba847cbfee8e8e75bd0d1dab637f4e3666cff3c27095911ecc6569d2ad"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): core/sdk/src/quic/quic_client.rs:389-406 | core/sdk/src/websocket/websocket_client.rs:385-402 \u2014 \u0060core/sdk/src/quic/quic_client.rs\u0060 and \u0060core/sdk/src/websocket/websocket_client.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 16 separate duplicated blocks between them, totalling at least 414 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/quic/quic_client.rs"},"region":{"startLine":389}}}],"partialFingerprints":{"codehealthFindingId/v1":"da6a19433686f2c8edf18553f77c879e4dbb483dd46b7b07649cc5dfdb85f5fc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): core/sdk/src/quic/quic_client.rs:653-670 | core/sdk/src/websocket/websocket_client.rs:580-597 \u2014 \u0060core/sdk/src/quic/quic_client.rs\u0060 and \u0060core/sdk/src/websocket/websocket_client.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 16 separate duplicated blocks between them, totalling at least 414 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/quic/quic_client.rs"},"region":{"startLine":653}}}],"partialFingerprints":{"codehealthFindingId/v1":"282bf0ebd1a599cd23e853eefdf059d29c856fc49237cb8bf824920650c6d8af"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17\u201318 lines \u00D7 2): core/sdk/src/websocket/websocket_connection_stream.rs:98-114 | core/sdk/src/websocket/websocket_tls_connection_stream.rs:100-117 \u2014 before extracting anything, compare \u0060core/sdk/src/websocket/websocket_connection_stream.rs\u0060 and \u0060core/sdk/src/websocket/websocket_tls_connection_stream.rs\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 102 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/websocket/websocket_connection_stream.rs"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"3aa5792766dc3f7da01ce284c48b116b5ee582a58935d5e9fb23d07a882b9f36"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16\u201317 lines \u00D7 4): core/binary_protocol/src/requests/consumer_offsets/delete_consumer_offset.rs:73-88 | core/binary_protocol/src/requests/consumer_offsets/get_consumer_offset.rs:66-81 | core/binary_protocol/src/requests/consumer_offsets/store_consumer_offset.rs:76-91 | core/binary_protocol/src/requests/messages/poll_messages.rs:83-99 \u2014 before extracting anything, compare \u0060core/binary_protocol/src/requests/consumer_offsets/delete_consumer_offset.rs\u0060 and \u0060core/binary_protocol/src/requests/consumer_offsets/get_consumer_offset.rs\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. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/binary_protocol/src/requests/consumer_offsets/delete_consumer_offset.rs"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0354dae96e4ade7f2046dd980328aac8d39ef90c2eb26de32f5f2951095e3e0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): core/binary_protocol/src/requests/users/create_user.rs:93-109 | core/binary_protocol/src/requests/users/update_permissions.rs:63-79 \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":"core/binary_protocol/src/requests/users/create_user.rs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"c210eb65cb166d5949fbb548eefef5470644752f99fda64e27fa5d4636110b72"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): core/common/src/http/users/create_user.rs:58-74 | core/common/src/http/users/login_user.rs:37-53 \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":"core/common/src/http/users/create_user.rs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"8279ea563ee27a41ef949f7f9a786db0a34982884e69130dba4ffab9f3eb477f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): core/connectors/runtime/src/api/sink.rs:118-134 | core/connectors/runtime/src/api/source.rs:121-137 \u2014 before extracting anything, compare \u0060core/connectors/runtime/src/api/sink.rs\u0060 and \u0060core/connectors/runtime/src/api/source.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 63 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/runtime/src/api/sink.rs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"0241e2db05695f0ba9a255424e0de7b5c8d99abdfeaa9e7eb292b058b7412ddf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): core/connectors/runtime/src/configs/connectors.rs:386-402 | core/connectors/runtime/src/configs/connectors.rs:407-423 \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":"core/connectors/runtime/src/configs/connectors.rs"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"48752faad7b12ad5668b67314da999417a3cbe0042fcc5a02c0bc775df6e436f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): core/connectors/sinks/influxdb_sink/src/lib.rs:127-143 | core/connectors/sources/influxdb_source/src/common.rs:60-76 \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":"core/connectors/sinks/influxdb_sink/src/lib.rs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"1526164efd17708151c814614513df14b1cc1574fbe4c6a05829f9025064329a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15\u201317 lines \u00D7 2): core/message_bus/src/installer/replica.rs:457-473 | core/message_bus/src/installer/tcp.rs:134-148 \u2014 before extracting anything, compare \u0060core/message_bus/src/installer/replica.rs\u0060 and \u0060core/message_bus/src/installer/tcp.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 108 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/message_bus/src/installer/replica.rs"},"region":{"startLine":457}}}],"partialFingerprints":{"codehealthFindingId/v1":"b441d4920ad48a39ff60676e546c4343aac45b757b563658803b3a5de533e210"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): core/sdk/src/quic/quic_client.rs:892-908 | core/sdk/src/websocket/websocket_client.rs:932-948 \u2014 \u0060core/sdk/src/quic/quic_client.rs\u0060 and \u0060core/sdk/src/websocket/websocket_client.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 16 separate duplicated blocks between them, totalling at least 414 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/quic/quic_client.rs"},"region":{"startLine":892}}}],"partialFingerprints":{"codehealthFindingId/v1":"a59132f6e5d097d88cb930e262479e3517057cafdd2665fea9bceacd8db5318d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): core/shard/src/lib.rs:5101-5117 | core/shard/src/lib.rs:5643-5659 \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":"core/shard/src/lib.rs"},"region":{"startLine":5101}}}],"partialFingerprints":{"codehealthFindingId/v1":"82f428ca5c8bfb093f02309a922b6886511556f82a9fcdc79e636c0e18ad0a0c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): core/simulator/src/workload/ops/delete_topic.rs:47-63 | core/simulator/src/workload/ops/purge_topic.rs:46-62 \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":"core/simulator/src/workload/ops/delete_topic.rs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"82c10ead45245536a1d5af35023ef027fe2a7584bba37c97e592e00da9a7e2a2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201316 lines \u00D7 4): core/sdk/src/http/consumer_groups.rs:41-55 | core/sdk/src/http/consumer_offsets.rs:64-79 | core/sdk/src/http/streams.rs:35-48 | core/sdk/src/http/topics.rs:41-55 \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 all 4 call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/http/consumer_groups.rs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"99edd3a7517cf5bceada477e514c81c2d9711bc31e335212990b909ec2f9f856"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201316 lines \u00D7 3): core/common/src/types/args/mod.rs:438-448 | core/common/src/types/args/mod.rs:452-463 | core/common/src/types/args/mod.rs:473-488 \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":"core/common/src/types/args/mod.rs"},"region":{"startLine":438}}}],"partialFingerprints":{"codehealthFindingId/v1":"d747b4f571750ae0c00215b585148146b92bfe875537acb297ca663d37bdaf87"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): foreign/csharp/Iggy_SDK/Publishers/IggyPublisherOfT.cs:102-117 | foreign/csharp/Iggy_SDK/Publishers/IggyPublisherOfT.cs:137-152 \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 \u0060foreign/csharp/Iggy_SDK/Publishers/IggyPublisherOfT.cs:102\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":"foreign/csharp/Iggy_SDK/Publishers/IggyPublisherOfT.cs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"0430cb2ea18721fd4763b87b80a5d53aa7a067365507894ba173be354dd776aa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): core/connectors/sinks/http_sink/src/lib.rs:755-770 | core/connectors/sinks/http_sink/src/lib.rs:837-852 \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":"core/connectors/sinks/http_sink/src/lib.rs"},"region":{"startLine":755}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb2dddfb6d8cb5addc09664a0aa9f768ad9433d2479619410ff568ca33441f43"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): core/connectors/sources/influxdb_source/src/v2.rs:854-869 | core/connectors/sources/influxdb_source/src/v3.rs:419-434 \u2014 before extracting anything, compare \u0060core/connectors/sources/influxdb_source/src/v2.rs\u0060 and \u0060core/connectors/sources/influxdb_source/src/v3.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 37 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sources/influxdb_source/src/v2.rs"},"region":{"startLine":854}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbec9dce6bfa815cd8f18e4c6f8c6313cfc1b112736410a803adb070bdc95b65"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): core/integration/src/harness/disk.rs:193-208 | core/integration/src/harness/disk.rs:348-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":"core/integration/src/harness/disk.rs"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ea3a92bc3bb2b6d406970031f931407f11a9f352e95a0d830eb95cf9288d9eb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): core/integration/src/harness/seeds.rs:71-86 | core/integration/src/harness/seeds.rs:95-110 \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":"core/integration/src/harness/seeds.rs"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"10edb001348cfc03430df4bd4f8c3b8200c87f054f2ee46d14e106061dfb9d73"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201316 lines \u00D7 2): core/server/src/dispatch/session_ops.rs:602-617 | core/server/src/dispatch/session_ops.rs:810-819 \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":"core/server/src/dispatch/session_ops.rs"},"region":{"startLine":602}}}],"partialFingerprints":{"codehealthFindingId/v1":"8683f9351a17e7bf96ca76013e22137ad873a7310215b59c0dec6d2352d7c7b1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): gateways/kafka/src/protocol/bounds_guard.rs:875-890 | gateways/kafka/src/protocol/bounds_guard.rs:1019-1034 \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":"gateways/kafka/src/protocol/bounds_guard.rs"},"region":{"startLine":875}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ff6c029960dc51b5d4da671385ecbb2db13fd919c25896d8089774dd2f68567"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 7): core/connectors/sdk/src/decoders/avro.rs:193-207 | core/connectors/sdk/src/decoders/flatbuffer.rs:136-150 | core/connectors/sdk/src/decoders/proto.rs:540-554 | core/connectors/sdk/src/encoders/avro.rs:137-151 | core/connectors/sdk/src/encoders/flatbuffer.rs:82-96 | core/connectors/sdk/src/encoders/proto.rs:300-314 | core/connectors/sdk/src/transforms/proto_convert.rs:500-514 \u2014 before extracting anything, compare \u0060core/connectors/sdk/src/decoders/avro.rs\u0060 and \u0060core/connectors/sdk/src/decoders/flatbuffer.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 69 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sdk/src/decoders/avro.rs"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d19e729cb7b37d18659184af773ff4fdaee57c1c8b95bc88f388bec7db719b5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 5): core/consensus/src/observability.rs:498-512 | core/consensus/src/observability.rs:532-546 | core/consensus/src/observability.rs:566-580 | core/consensus/src/observability.rs:600-614 | core/consensus/src/observability.rs:634-648 \u2014 all 5 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":"core/consensus/src/observability.rs"},"region":{"startLine":498}}}],"partialFingerprints":{"codehealthFindingId/v1":"39d148c4cea136a8aafdd75823607ea85168847aaa9393adaba56467c09d3e23"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 3): core/binary_protocol/src/requests/users/login_register.rs:117-131 | core/binary_protocol/src/requests/users/login_register_with_pat.rs:93-107 | core/binary_protocol/src/requests/users/login_user.rs:101-115 \u2014 before extracting anything, compare \u0060core/binary_protocol/src/requests/users/login_register.rs\u0060 and \u0060core/binary_protocol/src/requests/users/login_register_with_pat.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 33 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/binary_protocol/src/requests/users/login_register.rs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"19e914214cc8639809fdbf2c10c81d629a1c05c1cb3bfc68bebcadda3fd351f8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): core/binary_protocol/src/primitives/permissions.rs:120-134 | core/binary_protocol/src/primitives/permissions.rs:162-176 \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":"core/binary_protocol/src/primitives/permissions.rs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"00e0494e8fa632d7e8f1ef5d1abd98daad0264be6ab4a24e8409dbfaf16c631e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): core/connectors/runtime/src/configs/connectors/http_provider.rs:411-425 | core/connectors/runtime/src/configs/connectors/http_provider.rs:443-457 \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":"core/connectors/runtime/src/configs/connectors/http_provider.rs"},"region":{"startLine":411}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4a388ba398676b4dbe92c554916ef7d275ba57a7b261a7797164352a917708e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): core/connectors/sources/postgres_source/src/lib.rs:1770-1784 | core/connectors/sources/postgres_source/src/lib.rs:1804-1818 \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":"core/connectors/sources/postgres_source/src/lib.rs"},"region":{"startLine":1770}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed1fe077dce5724b49f12ccae70fb537a922ac364b373cc310409ac550f77a93"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201315 lines \u00D7 2): core/integration/src/harness/disk.rs:96-107 | core/integration/src/harness/disk.rs:459-473 \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":"core/integration/src/harness/disk.rs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"f684a05d622bcf4bcc1d0d869cb56b7ada4cb3e21c25b33384e556fb966099a7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): core/sdk/src/quic/quic_client.rs:907-921 | core/sdk/src/tcp/tcp_client.rs:942-956 \u2014 \u0060core/sdk/src/quic/quic_client.rs\u0060 and \u0060core/sdk/src/tcp/tcp_client.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 8 separate duplicated blocks between them, totalling at least 134 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/quic/quic_client.rs"},"region":{"startLine":907}}}],"partialFingerprints":{"codehealthFindingId/v1":"43ec1ef8fe057a3d3eedd25e7e2f57dd23bf3b6e38ba36fe72a086fd264e3232"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): foreign/python/src/config.rs:306-320 | foreign/python/src/config.rs:1319-1333 \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":"foreign/python/src/config.rs"},"region":{"startLine":306}}}],"partialFingerprints":{"codehealthFindingId/v1":"bec8d51e14a706b3fcc40faedcd359794d03043fd3f1ab32d55d6630b778af20"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): gateways/kafka/src/protocol/handlers/metadata.rs:402-416 | gateways/kafka/src/protocol/handlers/metadata.rs:447-461 \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":"gateways/kafka/src/protocol/handlers/metadata.rs"},"region":{"startLine":402}}}],"partialFingerprints":{"codehealthFindingId/v1":"95b81284a28523ae1764621dbdb70a0cf84890f38807449c9f45cba1bab4d50a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 5): core/binary_protocol/src/codec.rs:85-98 | core/binary_protocol/src/codec.rs:111-124 | core/binary_protocol/src/codec.rs:137-150 | core/binary_protocol/src/codec.rs:188-201 | core/binary_protocol/src/codec.rs:214-227 \u2014 all 5 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":"core/binary_protocol/src/codec.rs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ab018b0e4bd4d9586fdfec78fdb620ca60a3b992488c2d25500e44c6ec94ab6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 5): core/binary_protocol/src/requests/consumer_groups/delete_consumer_group.rs:49-62 | core/binary_protocol/src/requests/consumer_groups/get_consumer_group.rs:49-62 | core/binary_protocol/src/requests/consumer_groups/join_consumer_group.rs:49-62 | core/binary_protocol/src/requests/consumer_groups/leave_consumer_group.rs:49-62 | core/binary_protocol/src/requests/consumer_groups/sync_consumer_group.rs:52-65 \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 all 5 call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/binary_protocol/src/requests/consumer_groups/delete_consumer_group.rs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"92f6180e2224e73fbcb3ec4bd32d6b5d49cab68fcb6dc410b693943db567d1d8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 4): core/connectors/sources/postgres_source/src/lib.rs:1839-1852 | core/connectors/sources/postgres_source/src/lib.rs:1870-1883 | core/connectors/sources/postgres_source/src/lib.rs:1887-1900 | core/connectors/sources/postgres_source/src/lib.rs:1904-1917 \u2014 all 4 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":"core/connectors/sources/postgres_source/src/lib.rs"},"region":{"startLine":1839}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a49936de82abb106d8fa908febb375321732ad53e140b1f3190f69c056a9623"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 3): core/binary_protocol/src/primitives/options.rs:154-167 | core/binary_protocol/src/responses/system/describe_options.rs:72-85 | core/binary_protocol/src/responses/system/describe_options.rs:90-103 \u2014 there are 3 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 3 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/binary_protocol/src/primitives/options.rs"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc893b1b3835818e1c2cece435fff668429df0f640f2ea153a31bbdd7eee8257"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201314 lines \u00D7 3): core/partitions/src/iggy_partition.rs:7317-7327 | core/partitions/src/iggy_partition.rs:7508-7517 | core/partitions/src/state_transfer.rs:2907-2920 \u2014 there are 3 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 3 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":7317}}}],"partialFingerprints":{"codehealthFindingId/v1":"20385ed138360db75d9b166b26bb6f784b57fc2c08e1be494d38f0e76c193d35"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): core/bench/report/src/types/server_stats.rs:174-187 | core/common/src/types/stats/mod.rs:177-190 \u2014 before extracting anything, compare \u0060core/bench/report/src/types/server_stats.rs\u0060 and \u0060core/common/src/types/stats/mod.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 31 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/bench/report/src/types/server_stats.rs"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb94c7779ab2d1540b2d15a45bfa2463eb9d1e5762b3481e21a6389fee0bf470"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): core/binary_protocol/src/requests/partitions/create_partitions.rs:47-60 | core/binary_protocol/src/requests/partitions/delete_partitions.rs:47-60 \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":"core/binary_protocol/src/requests/partitions/create_partitions.rs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d1b55c61a8236b80399c7dca36a920f5ced741add4a6ad12dd6d820c1bc08f2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): core/connectors/runtime/src/api/sink.rs:92-105 | core/connectors/runtime/src/api/source.rs:95-108 \u2014 before extracting anything, compare \u0060core/connectors/runtime/src/api/sink.rs\u0060 and \u0060core/connectors/runtime/src/api/source.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 63 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/runtime/src/api/sink.rs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"24700b49d8ba54070acea3f54eca52c402c20ea9ebf81b81e4e90d5d4d37f037"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): core/connectors/sources/postgres_source/src/lib.rs:1720-1733 | core/connectors/sources/postgres_source/src/lib.rs:1737-1750 \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":"core/connectors/sources/postgres_source/src/lib.rs"},"region":{"startLine":1720}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8f0ca12ca341d5a79f91ce25d9430d121833b77716d29478b58b67f58a79277"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): core/metadata/src/impls/metadata.rs:1081-1094 | core/metadata/src/impls/metadata.rs:3127-3140 \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":"core/metadata/src/impls/metadata.rs"},"region":{"startLine":1081}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e16c7f8de8d29443a08c490a0aabd96928ac53515892e28fb1d72e307707a55"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13\u201314 lines \u00D7 2): core/metadata/src/impls/metadata.rs:3594-3607 | core/metadata/src/impls/metadata.rs:3634-3646 \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":"core/metadata/src/impls/metadata.rs"},"region":{"startLine":3594}}}],"partialFingerprints":{"codehealthFindingId/v1":"29f97be6371a5b3b37ded0b4ee8489d757ab737562dcdff37aeebeac6ce72327"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201314 lines \u00D7 2): core/partitions/src/iggy_partition.rs:4962-4975 | core/partitions/src/iggy_partition.rs:5175-5186 \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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":4962}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b337e3b499b542efc2efd9951809839234a524ba9f059603d4b661983892d26"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201314 lines \u00D7 2): core/partitions/src/iggy_partition.rs:7310-7323 | core/partitions/src/iggy_partition.rs:7777-7788 \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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":7310}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c53e44c0c2f4cb56bed792f516547d697de14acada58fd2f42bd756ebdc701a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): core/sdk/src/websocket/websocket_connection_stream.rs:126-139 | core/sdk/src/websocket/websocket_tls_connection_stream.rs:131-144 \u2014 before extracting anything, compare \u0060core/sdk/src/websocket/websocket_connection_stream.rs\u0060 and \u0060core/sdk/src/websocket/websocket_tls_connection_stream.rs\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 102 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/websocket/websocket_connection_stream.rs"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"57daefd8ac22074e84d2729765aa2920af17dc160a8753741bc8277fd2e65a3f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 8): core/connectors/sdk/src/decoders/avro.rs:192-203 | core/connectors/sdk/src/decoders/flatbuffer.rs:135-146 | core/connectors/sdk/src/decoders/proto.rs:539-550 | core/connectors/sdk/src/encoders/avro.rs:136-147 | core/connectors/sdk/src/encoders/flatbuffer.rs:81-92 | core/connectors/sdk/src/encoders/proto.rs:299-310 | core/connectors/sdk/src/transforms/avro_convert.rs:89-101 | core/connectors/sdk/src/transforms/proto_convert.rs:499-510 \u2014 before extracting anything, compare \u0060core/connectors/sdk/src/decoders/avro.rs\u0060 and \u0060core/connectors/sdk/src/decoders/flatbuffer.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 69 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sdk/src/decoders/avro.rs"},"region":{"startLine":192}}}],"partialFingerprints":{"codehealthFindingId/v1":"8eca3659608268575c61b0ac937a449818ae29b3e0e0a0bb01dc0ec67e84385d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 3): core/sdk/src/quic/quic_client.rs:388-399 | core/sdk/src/tcp/tcp_client.rs:313-325 | core/sdk/src/websocket/websocket_client.rs:384-395 \u2014 \u0060core/sdk/src/quic/quic_client.rs\u0060 and \u0060core/sdk/src/tcp/tcp_client.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 8 separate duplicated blocks between them, totalling at least 134 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/quic/quic_client.rs"},"region":{"startLine":388}}}],"partialFingerprints":{"codehealthFindingId/v1":"62ee8b42f488f260f21de2b1d092116cea5dbe611f27418e57fdf714532d1e60"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): foreign/python/src/config.rs:312-324 | foreign/python/src/config.rs:663-675 | foreign/python/src/config.rs:1325-1337 \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":"foreign/python/src/config.rs"},"region":{"startLine":312}}}],"partialFingerprints":{"codehealthFindingId/v1":"23538ec0c71c4dbf986a6694c0104ba4b49c93cb3b0acd20392dfdcd06abd8c4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): foreign/csharp/Iggy_SDK/Mappers/BinaryMapper.cs:155-167 | foreign/csharp/Iggy_SDK/Mappers/BinaryMapper.cs:170-182 \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 \u0060foreign/csharp/Iggy_SDK/Mappers/BinaryMapper.cs:155\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":"foreign/csharp/Iggy_SDK/Mappers/BinaryMapper.cs"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"77c7e722ce6a4d6e1adfbc74f1d40f3fd8a716c07642707e010c96d21ac992f3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): core/binary_protocol/src/requests/topics/create_topic.rs:66-78 | core/binary_protocol/src/requests/topics/update_topic.rs:64-76 \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":"core/binary_protocol/src/requests/topics/create_topic.rs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"8765624ec1ed529e8d48ab1f63bdbd556737f28171fd6359c3bb1374ae28fa10"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): core/binary_protocol/src/requests/users/login_register.rs:82-94 | core/binary_protocol/src/requests/users/login_register_with_pat.rs:61-73 \u2014 before extracting anything, compare \u0060core/binary_protocol/src/requests/users/login_register.rs\u0060 and \u0060core/binary_protocol/src/requests/users/login_register_with_pat.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 33 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/binary_protocol/src/requests/users/login_register.rs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ff437ccec436c1daae700db69e8da4e3d4936047fc371d676ee4faa6263507c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): core/connectors/runtime/src/configs/connectors/http_provider.rs:233-245 | core/connectors/runtime/src/configs/connectors/http_provider.rs:254-266 \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":"core/connectors/runtime/src/configs/connectors/http_provider.rs"},"region":{"startLine":233}}}],"partialFingerprints":{"codehealthFindingId/v1":"08300e97ffbec611f6dd5a91ca9a112a93ff07c226310d10981caa5912954dcf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): core/connectors/runtime/src/configs/connectors.rs:162-174 | core/connectors/runtime/src/configs/connectors.rs:215-227 \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":"core/connectors/runtime/src/configs/connectors.rs"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2d7c1d6891661e4060f23e91437e64585f357c9acbe0bfad763a929df4676a2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): core/connectors/runtime/src/main.rs:273-285 | core/connectors/runtime/src/main.rs:290-302 \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":"core/connectors/runtime/src/main.rs"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6120b3b61cc3e53837f8f11255e81162af9ab980f5731fc24b119d0b8adbc04"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): core/connectors/sdk/src/decoders/proto.rs:175-187 | core/connectors/sdk/src/transforms/proto_convert.rs:201-213 \u2014 before extracting anything, compare \u0060core/connectors/sdk/src/decoders/proto.rs\u0060 and \u0060core/connectors/sdk/src/transforms/proto_convert.rs\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 143 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sdk/src/decoders/proto.rs"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"1552bf38e1f1ef3abd3411abfec1f0ff4d701c5ce782189e8d7c1c9ad326c1e9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 2): core/connectors/sdk/src/decoders/proto.rs:196-207 | core/connectors/sdk/src/encoders/proto.rs:231-243 \u2014 \u0060core/connectors/sdk/src/decoders/proto.rs\u0060 and \u0060core/connectors/sdk/src/encoders/proto.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 11 separate duplicated blocks between them, totalling at least 151 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sdk/src/decoders/proto.rs"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c4996d7a5f9334242566c1bdddfc63d4749f801127ed07f9344a1fe7caa5fe1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): core/connectors/sinks/postgres_sink/src/lib.rs:527-539 | core/connectors/sinks/redshift_sink/src/lib.rs:1040-1052 \u2014 before extracting anything, compare \u0060core/connectors/sinks/postgres_sink/src/lib.rs\u0060 and \u0060core/connectors/sinks/redshift_sink/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 44 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sinks/postgres_sink/src/lib.rs"},"region":{"startLine":527}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe58d270a29617b7effaa35d46f195b4d2e076e4405bb2004e7b2fb52c14ddb8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): core/integration/src/harness/handle/connectors_runtime.rs:167-179 | core/integration/src/harness/handle/mcp.rs:167-179 \u2014 before extracting anything, compare \u0060core/integration/src/harness/handle/connectors_runtime.rs\u0060 and \u0060core/integration/src/harness/handle/mcp.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 39 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/integration/src/harness/handle/connectors_runtime.rs"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"b948f38ec3cc75ab449df7fb51da9c6e55487892ffa9bf817099489a681eb531"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): core/integration/src/harness/handle/server.rs:698-710 | core/integration/src/harness/handle/server.rs:869-881 \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":"core/integration/src/harness/handle/server.rs"},"region":{"startLine":698}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1f1b7d3c76a451f59b354e146f82fe77c6aa7ab71be9b1dd391e05d2da028d3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u201313 lines \u00D7 2): core/partitions/src/iggy_partition.rs:8033-8045 | core/partitions/src/state_transfer.rs:3257-3264 \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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":8033}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0746b3e08ed7c2fb0175fdf46587c6fe03b348cd79f1bbb5bef76efcb421d42"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): core/sdk/src/clients/consumer.rs:1544-1556 | core/sdk/src/clients/consumer.rs:1666-1678 \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":"core/sdk/src/clients/consumer.rs"},"region":{"startLine":1544}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b6aabfa6db2e4188b4c2c5fcf9256bb46c963baa1a2e55889b14bb115de9028"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 2): core/sdk/src/quic/quic_client.rs:748-760 | core/sdk/src/websocket/websocket_client.rs:862-873 \u2014 \u0060core/sdk/src/quic/quic_client.rs\u0060 and \u0060core/sdk/src/websocket/websocket_client.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 16 separate duplicated blocks between them, totalling at least 414 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/quic/quic_client.rs"},"region":{"startLine":748}}}],"partialFingerprints":{"codehealthFindingId/v1":"945d926030eb1b10581f140f4ee788aadcc5ab76935131d15e2da1cac3160c54"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): core/sdk/src/tcp/tcp_client.rs:1318-1330 | core/sdk/src/websocket/websocket_client.rs:1078-1090 \u2014 \u0060core/sdk/src/tcp/tcp_client.rs\u0060 and \u0060core/sdk/src/websocket/websocket_client.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 9 separate duplicated blocks between them, totalling at least 158 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/tcp/tcp_client.rs"},"region":{"startLine":1318}}}],"partialFingerprints":{"codehealthFindingId/v1":"c356314028b5eb0cb782268e62442d890aac735aa93c05b48e1caf78b760d852"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 2): core/server/src/partition_helpers.rs:502-513 | core/server/src/partition_helpers.rs:837-849 \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":"core/server/src/partition_helpers.rs"},"region":{"startLine":502}}}],"partialFingerprints":{"codehealthFindingId/v1":"6339154a302980e6caf1acf1c6a5793900e679925b4442c255256b0b2b1dc0d9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 2): core/server_common/src/bootstrap.rs:127-138 | core/server_common/src/fs_utils.rs:101-113 \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":"core/server_common/src/bootstrap.rs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f60028aeaad8d306d44beb77b5cf2fd14efe5f0d69160c570d4f54c34a22ee9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): foreign/php/src/receive_message.rs:39-51 | foreign/php/src/send_message.rs:39-51 \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":"foreign/php/src/receive_message.rs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa9e9c495f1ba144878083e245f117d48d83917f09e8035652682639a588047f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 13): core/consensus/src/observability.rs:492-503 | core/consensus/src/observability.rs:526-537 | core/consensus/src/observability.rs:560-571 | core/consensus/src/observability.rs:594-605 | core/consensus/src/observability.rs:628-639 | core/consensus/src/observability.rs:723-734 | core/consensus/src/observability.rs:748-759 | core/consensus/src/observability.rs:772-783 | core/consensus/src/observability.rs:798-809 | core/consensus/src/observability.rs:828-839 | core/consensus/src/observability.rs:857-868 | core/consensus/src/observability.rs:887-898 | core/consensus/src/observability.rs:913-924 \u2014 all 13 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":"core/consensus/src/observability.rs"},"region":{"startLine":492}}}],"partialFingerprints":{"codehealthFindingId/v1":"c29b9e0eadc3d1e219bea43e8bfb1a283e40d77b59e9ca3ea7fbd9e9e0f28257"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 6): core/connectors/runtime/src/configs/connectors/http_provider.rs:145-156 | core/connectors/runtime/src/configs/connectors/http_provider.rs:171-182 | core/connectors/runtime/src/configs/connectors/http_provider.rs:193-204 | core/connectors/runtime/src/configs/connectors/http_provider.rs:215-226 | core/connectors/runtime/src/configs/connectors/http_provider.rs:278-289 | core/connectors/runtime/src/configs/connectors/http_provider.rs:341-352 \u2014 all 6 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":"core/connectors/runtime/src/configs/connectors/http_provider.rs"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"06f66b83db4a538cccc0e2d8ed0757b53e52ebe23b4b3958edfa7c666d881167"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): core/bench/src/analytics/report_builder.rs:214-225 | core/common/src/wire_conversions.rs:458-469 | foreign/cpp/src/type_conversion.rs:256-267 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 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 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/bench/src/analytics/report_builder.rs"},"region":{"startLine":214}}}],"partialFingerprints":{"codehealthFindingId/v1":"676fb751cc0f173029db34a92037eae74becc12b373ca940df911bb732d70726"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): core/sdk/src/clients/producer.rs:957-968 | core/sdk/src/clients/producer.rs:997-1008 | core/sdk/src/clients/producer.rs:1029-1040 \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":"core/sdk/src/clients/producer.rs"},"region":{"startLine":957}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbc6266af2ffdb2e77502bdc2df150e71735b51a92943dc8cdb9879e264ee4f9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): foreign/python/src/config.rs:165-176 | foreign/python/src/config.rs:461-472 | foreign/python/src/config.rs:1017-1028 \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":"foreign/python/src/config.rs"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"1130a8ac099682cdb79d1594f58c5851c7bde3d9c40d30c6b3235470d3ba6cd0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): core/binary_protocol/src/primitives/user_headers.rs:168-179 | core/binary_protocol/src/primitives/user_headers.rs:182-193 \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":"core/binary_protocol/src/primitives/user_headers.rs"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"946fe9906e39b9e821ab07eb3436a435b02201e78541c8c52f6e7a5d1fe63358"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): core/binary_protocol/src/responses/streams/stream_response.rs:74-85 | core/binary_protocol/src/responses/users/user_response.rs:68-79 \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":"core/binary_protocol/src/responses/streams/stream_response.rs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"726bc021c1f3d608960ec1eb26e0f3ef5223947771b11bfcaf53a704adf99e68"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): core/common/src/wire_conversions.rs:609-620 | foreign/cpp/src/type_conversion.rs:321-332 \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":"core/common/src/wire_conversions.rs"},"region":{"startLine":609}}}],"partialFingerprints":{"codehealthFindingId/v1":"aeaf0d436b430b194999c39ee5e4b52e5602a70a0e4da726dc406894efc5402f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201312 lines \u00D7 2): core/connectors/runtime/src/sink.rs:612-623 | core/connectors/runtime/src/source.rs:945-955 \u2014 before extracting anything, compare \u0060core/connectors/runtime/src/sink.rs\u0060 and \u0060core/connectors/runtime/src/source.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 50 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/runtime/src/sink.rs"},"region":{"startLine":612}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae40db41202d2a7573912fd7a0b3bf59c9bc7c402bd48f6449bc885c73ff8571"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): core/connectors/sinks/influxdb_sink/src/protocol.rs:49-60 | core/connectors/sinks/influxdb_sink/src/protocol.rs:86-97 \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":"core/connectors/sinks/influxdb_sink/src/protocol.rs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a37373cbfc9cbbd2dd6dc09389dde798279d17e4fb5516f6bffb617ee69966c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): core/connectors/sinks/postgres_sink/src/lib.rs:171-182 | core/connectors/sources/postgres_source/src/lib.rs:486-497 \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":"core/connectors/sinks/postgres_sink/src/lib.rs"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf00467668ec05be56d37fe67e401fa715707d87b5caac290b655bbcb2e57394"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): core/partitions/src/iggy_partition.rs:7417-7428 | core/partitions/src/partition_storage.rs:348-359 \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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":7417}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfdfe4a2cf07595c33de2bda98441996d457f9681b6e6a11ef51719c6a3feff4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201312 lines \u00D7 2): core/partitions/src/state_transfer.rs:2379-2390 | core/partitions/src/state_transfer.rs:2432-2441 \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":"core/partitions/src/state_transfer.rs"},"region":{"startLine":2379}}}],"partialFingerprints":{"codehealthFindingId/v1":"514eaf45fa0043dfe369dcea7da0899e045d55fa224c15f0624dc2618b428abf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): core/sdk/src/quic/quic_client.rs:464-475 | core/sdk/src/websocket/websocket_client.rs:460-471 \u2014 \u0060core/sdk/src/quic/quic_client.rs\u0060 and \u0060core/sdk/src/websocket/websocket_client.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 16 separate duplicated blocks between them, totalling at least 414 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/quic/quic_client.rs"},"region":{"startLine":464}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9604e713c54b453112b6a994b30c012bd1b5565f97c0764f24b740ccd38e1d9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201312 lines \u00D7 2): core/sdk/src/tcp/tcp_client.rs:1288-1297 | core/sdk/src/websocket/websocket_client.rs:1033-1044 \u2014 \u0060core/sdk/src/tcp/tcp_client.rs\u0060 and \u0060core/sdk/src/websocket/websocket_client.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 9 separate duplicated blocks between them, totalling at least 158 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/tcp/tcp_client.rs"},"region":{"startLine":1288}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce625ad9d22d98b67825df339f613d1e43cc25114fb0bbe8dfd59b0f2767d3fb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): core/sdk/src/websocket/websocket_connection_stream.rs:171-182 | core/sdk/src/websocket/websocket_tls_connection_stream.rs:176-187 \u2014 before extracting anything, compare \u0060core/sdk/src/websocket/websocket_connection_stream.rs\u0060 and \u0060core/sdk/src/websocket/websocket_tls_connection_stream.rs\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 102 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/websocket/websocket_connection_stream.rs"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"497217ce9fe376dc01c107555089dea02c5cbc9ce0c2e7282fdadd7620cec2e7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): core/server/src/dispatch/session_ops.rs:898-909 | core/server/src/dispatch/session_ops.rs:924-935 \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":"core/server/src/dispatch/session_ops.rs"},"region":{"startLine":898}}}],"partialFingerprints":{"codehealthFindingId/v1":"2951771f561015cee32354ea3f1e11a04bf4dbe71ec135111ac9a30b07078940"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201312 lines \u00D7 2): core/server_common/src/iobuf.rs:459-470 | core/server_common/src/iobuf.rs:495-505 \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":"core/server_common/src/iobuf.rs"},"region":{"startLine":459}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f3d35f568badfe7d3d166760bee4d1db9ee63915a92fe57bd407936f2292a1c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): foreign/python/src/config.rs:324-335 | foreign/python/src/config.rs:1340-1351 \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":"foreign/python/src/config.rs"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fe369512824b58f61995ecc12d63a2f37335ab063eb5c56c464515f640eda16"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 4): foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs:308-318 | foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs:782-792 | foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs:809-819 | foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs:906-916 \u2014 all 4 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 \u0060foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs:308\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":"foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs"},"region":{"startLine":308}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b1e9a65fa64745ffcc8f3418f8e3b02c98b96e6900440afd27659e8cb045929"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): core/connectors/sdk/src/decoders/proto.rs:163-173 | core/connectors/sdk/src/encoders/proto.rs:195-205 | core/connectors/sdk/src/transforms/proto_convert.rs:189-199 \u2014 \u0060core/connectors/sdk/src/decoders/proto.rs\u0060 and \u0060core/connectors/sdk/src/encoders/proto.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 11 separate duplicated blocks between them, totalling at least 151 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sdk/src/decoders/proto.rs"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"0089167ad532638b839d4955dd0f9744a61371d483539a8c0ee28888fa1d0c12"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): core/integration/src/harness/disk.rs:194-204 | core/integration/src/harness/disk.rs:349-359 | core/integration/src/harness/disk.rs:381-391 \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":"core/integration/src/harness/disk.rs"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"c46fd2ee7a6f14f6826ea30f87095d35380bdf4c8f830fe95e8e315ec1abf625"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): core/ai/mcp/src/log.rs:127-137 | core/connectors/runtime/src/log.rs:83-93 \u2014 before extracting anything, compare \u0060core/ai/mcp/src/log.rs\u0060 and \u0060core/connectors/runtime/src/log.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 87 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/ai/mcp/src/log.rs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fe5575a80babf9aeeb103bc900bb83673c611750c7f37aca4e48ad4c2018f2e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): core/ai/mcp/src/stream.rs:26-36 | core/connectors/runtime/src/stream.rs:36-46 \u2014 before extracting anything, compare \u0060core/ai/mcp/src/stream.rs\u0060 and \u0060core/connectors/runtime/src/stream.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 52 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/ai/mcp/src/stream.rs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f6782cc7e386ed23ea98d19394ffff4547affbb2af3e4bfc69f21c69b4559cc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): core/common/src/types/configuration/quic_config/quic_connection_string_options.rs:200-210 | core/common/src/types/configuration/tcp_config/tcp_connection_string_options.rs:113-123 \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":"core/common/src/types/configuration/quic_config/quic_connection_string_options.rs"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"168795b263d2d3ad6d3b4ee55600cf02b351ce982464c130ef21e38283ab30f1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): core/configs/src/configs_impl/typed_env_provider.rs:393-403 | core/integration/src/harness/config/resolve.rs:183-193 \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":"core/configs/src/configs_impl/typed_env_provider.rs"},"region":{"startLine":393}}}],"partialFingerprints":{"codehealthFindingId/v1":"1382f52e51a7d6078571506e6d8ae832e0338611c7e4b111b7dcf5cfe3b603fd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): core/connectors/sinks/postgres_sink/src/lib.rs:542-552 | core/connectors/sinks/redshift_sink/src/lib.rs:1055-1065 \u2014 before extracting anything, compare \u0060core/connectors/sinks/postgres_sink/src/lib.rs\u0060 and \u0060core/connectors/sinks/redshift_sink/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 44 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sinks/postgres_sink/src/lib.rs"},"region":{"startLine":542}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a97a4c595ce356cede7b7cd5152773a81ac9932046d25035222b26850b2c23d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): core/message_bus/src/transports/tcp_tls.rs:258-268 | core/message_bus/src/transports/wss.rs:258-268 \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":"core/message_bus/src/transports/tcp_tls.rs"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ec491ce06093d6d379d0e83980a2a806143518eb3ba4a51d99dd23a5e89ddf8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201311 lines \u00D7 2): core/sdk/src/quic/quic_client.rs:921-930 | core/sdk/src/websocket/websocket_client.rs:958-968 \u2014 \u0060core/sdk/src/quic/quic_client.rs\u0060 and \u0060core/sdk/src/websocket/websocket_client.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 16 separate duplicated blocks between them, totalling at least 414 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/quic/quic_client.rs"},"region":{"startLine":921}}}],"partialFingerprints":{"codehealthFindingId/v1":"d72a9f685c0520a608d48afc3221f072ca528e6a0e3a9074db2942a547834e4f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): core/sdk/src/quic/quic_client.rs:938-948 | core/sdk/src/websocket/websocket_client.rs:976-986 \u2014 \u0060core/sdk/src/quic/quic_client.rs\u0060 and \u0060core/sdk/src/websocket/websocket_client.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 16 separate duplicated blocks between them, totalling at least 414 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/quic/quic_client.rs"},"region":{"startLine":938}}}],"partialFingerprints":{"codehealthFindingId/v1":"daa82c9387fe8c455085a698c7ca077be1b7f6aaa27e3ce8fac0aeb59bc66425"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): core/sdk/src/websocket/websocket_connection_stream.rs:195-205 | core/sdk/src/websocket/websocket_tls_connection_stream.rs:200-210 \u2014 before extracting anything, compare \u0060core/sdk/src/websocket/websocket_connection_stream.rs\u0060 and \u0060core/sdk/src/websocket/websocket_tls_connection_stream.rs\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 102 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/websocket/websocket_connection_stream.rs"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f92f94fd2de924c269382c14d02741fa53f6e738a9d0023cb8f43cca7fe5cf5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): core/shard/src/lib.rs:7252-7262 | core/shard/src/lib.rs:8717-8727 \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":"core/shard/src/lib.rs"},"region":{"startLine":7252}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c64a93741d118a184d4cc933be116c47c56db92269d10709d6da46ddee2cf1d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 5): core/consensus/src/observability.rs:481-490 | core/consensus/src/observability.rs:515-524 | core/consensus/src/observability.rs:549-558 | core/consensus/src/observability.rs:583-592 | core/consensus/src/observability.rs:617-626 \u2014 all 5 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":"core/consensus/src/observability.rs"},"region":{"startLine":481}}}],"partialFingerprints":{"codehealthFindingId/v1":"bafec3906afc1ffd71eaf6eb5fe70281e8724d1955037d32fc137e3d866eab29"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 4): core/binary_protocol/src/requests/consumer_offsets/delete_consumer_offset.rs:57-66 | core/binary_protocol/src/requests/consumer_offsets/get_consumer_offset.rs:51-60 | core/binary_protocol/src/requests/consumer_offsets/store_consumer_offset.rs:59-68 | core/binary_protocol/src/requests/messages/poll_messages.rs:65-74 \u2014 before extracting anything, compare \u0060core/binary_protocol/src/requests/consumer_offsets/delete_consumer_offset.rs\u0060 and \u0060core/binary_protocol/src/requests/consumer_offsets/get_consumer_offset.rs\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. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/binary_protocol/src/requests/consumer_offsets/delete_consumer_offset.rs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a7c5dc4d018e90e8dac355699c6d77060e31ffb976c193d85dc616fee976a6a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): foreign/csharp/Iggy_SDK/Consumers/IggyConsumer.Rented.cs:125-134 | foreign/csharp/Iggy_SDK/Consumers/IggyConsumer.cs:422-431 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060foreign/csharp/Iggy_SDK/Consumers/IggyConsumer.Rented.cs:125\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":"foreign/csharp/Iggy_SDK/Consumers/IggyConsumer.Rented.cs"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7fec7dfa368e91abdc40712f04d0fb400d2e632a00d6ab8ed46f342fd286fb8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs:104-113 | foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs:115-124 \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":"foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"73d9c5f7561bb76affc38c68d56b3f9c0535e6b8f654ecd5136ccdbe771b50e9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201310 lines \u00D7 2): core/bench/report/src/types/server_stats.rs:136-145 | core/common/src/types/stats/mod.rs:140-148 \u2014 before extracting anything, compare \u0060core/bench/report/src/types/server_stats.rs\u0060 and \u0060core/common/src/types/stats/mod.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 31 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/bench/report/src/types/server_stats.rs"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"875926a39b589da9dc75b55f703d859f9e78a4de0555df69dc0aea1386cb019f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): core/connectors/runtime/src/api/models.rs:63-72 | core/connectors/runtime/src/api/models.rs:78-87 \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":"core/connectors/runtime/src/api/models.rs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"1febaf78b53227ac4a5000b0ee5d58d6f91b143abace52d8c6bac8c39cdb59bf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): core/connectors/runtime/src/configs/connectors/http_provider.rs:400-409 | core/connectors/runtime/src/configs/connectors/http_provider.rs:432-441 \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":"core/connectors/runtime/src/configs/connectors/http_provider.rs"},"region":{"startLine":400}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf8da915033501a7cc40394aa38672d2a96d38f5ad58f2fa0ede8f6ae2d6a00d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): core/connectors/runtime/src/configs/connectors/local_provider.rs:485-494 | core/connectors/runtime/src/configs/connectors/local_provider.rs:507-516 \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":"core/connectors/runtime/src/configs/connectors/local_provider.rs"},"region":{"startLine":485}}}],"partialFingerprints":{"codehealthFindingId/v1":"015ed09e9bbdfb3a144dc2ba5db0307d69d94642caeb3e20b0942f25acaf7462"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): core/connectors/sinks/surrealdb_sink/src/lib.rs:433-442 | core/connectors/sinks/surrealdb_sink/src/lib.rs:489-498 \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":"core/connectors/sinks/surrealdb_sink/src/lib.rs"},"region":{"startLine":433}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b5cca4afa6a5bbd43d884dfe4ea45fec31d626dcaa3239bafb3deba33a0b417"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6\u201310 lines \u00D7 2): core/journal/src/partition_journal.rs:1782-1787 | core/journal/src/partition_journal/segments.rs:790-799 \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":"core/journal/src/partition_journal.rs"},"region":{"startLine":1782}}}],"partialFingerprints":{"codehealthFindingId/v1":"704bd73a16777e355eeb67f8d1d55d33d4e259e13ad17b5336fc76aeb57b1d02"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): core/journal/src/prepare_journal.rs:857-866 | core/journal/src/prepare_journal.rs:1049-1058 \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":"core/journal/src/prepare_journal.rs"},"region":{"startLine":857}}}],"partialFingerprints":{"codehealthFindingId/v1":"13fcb0415af2921c9d5def940ae4fd9fadc0c501ae8cf6a89bbdeddbca75f27b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): core/message_bus/src/lifecycle/connection_registry.rs:888-897 | core/message_bus/src/lifecycle/connection_registry.rs:915-924 \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":"core/message_bus/src/lifecycle/connection_registry.rs"},"region":{"startLine":888}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c42fad4b8b27341fa8dd6fc65fc5e706bad2be620acb651f5cfa53daf1a607a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201310 lines \u00D7 2): core/partitions/src/journal.rs:240-249 | core/partitions/src/journal.rs:812-820 \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":"core/partitions/src/journal.rs"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"ddd76adaa2c6520e84f5012ea40f3c2b40d4440e4ecb5121e1424d6806136df7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): core/partitions/src/partition_storage.rs:632-641 | core/partitions/src/partition_storage.rs:671-680 \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":"core/partitions/src/partition_storage.rs"},"region":{"startLine":632}}}],"partialFingerprints":{"codehealthFindingId/v1":"773f698f928bd2929e77168a0708aa06a0a58661059efba8604c871542932860"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): core/binary_protocol/src/primitives/permissions.rs:107-115 | core/binary_protocol/src/primitives/permissions.rs:160-168 | core/binary_protocol/src/primitives/permissions.rs:219-227 \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":"core/binary_protocol/src/primitives/permissions.rs"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"902c0862c6e28528c755d6a01682909b7fe53a6d1df7ce6bc0e456f359065d68"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): core/ai/mcp/src/log.rs:85-93 | core/ai/mcp/src/log.rs:96-104 \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":"core/ai/mcp/src/log.rs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"e73307fc8a85e30c6f6b926aa825050bca3c363e04214d76fe3fe77b51292a72"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): core/ai/mcp/src/api.rs:166-176 | core/connectors/runtime/src/api/mod.rs:121-129 \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":"core/ai/mcp/src/api.rs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"606c838381d121c3cccad1b39cde3d4c7818b1fbd18ded7a1d837d508f094b4a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): core/binary_protocol/src/framing.rs:106-114 | core/binary_protocol/src/framing.rs:182-190 \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":"core/binary_protocol/src/framing.rs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"6eef2e9883f52a23adf7fcecf461217774746506521f6bae5fb990b04a2a717c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): core/binary_protocol/src/requests/users/create_user.rs:68-76 | core/binary_protocol/src/requests/users/update_permissions.rs:47-55 \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":"core/binary_protocol/src/requests/users/create_user.rs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b1394708ec3d49ec1827fa286e9c0968ee321ce91ce39199927c56c626c64f2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): core/cli/src/args/permissions/global.rs:113-121 | core/cli/src/args/permissions/topic.rs:106-114 \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":"core/cli/src/args/permissions/global.rs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe49347a0ca57d0ff6d6de092b623a46980deb6d25395d102fa26bdbacbf97aa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): core/connectors/runtime/src/manager/sink.rs:45-53 | core/connectors/runtime/src/manager/source.rs:45-53 \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":"core/connectors/runtime/src/manager/sink.rs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"becaf257c0ed48d1bcc0d611729f40cda572ced9e3a7fcab5cd8c73313f84ac4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): core/connectors/runtime/src/manager/sink.rs:121-129 | core/connectors/runtime/src/manager/sink.rs:248-256 \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":"core/connectors/runtime/src/manager/sink.rs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"98de77beaa40d2a13df659002201efce52f104326f5d193f57d410dfa696afc6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): core/connectors/runtime/src/manager/source.rs:131-139 | core/connectors/runtime/src/manager/source.rs:313-321 \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":"core/connectors/runtime/src/manager/source.rs"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"8159e01feab494ac1113e020b9328482017943eeadf11cf7087d19275e3dfb27"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): core/connectors/sources/http_source/src/management.rs:330-338 | core/connectors/sources/http_source/src/management.rs:376-387 \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":"core/connectors/sources/http_source/src/management.rs"},"region":{"startLine":330}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8d6a0d2b6f882cc3c828f2074b41eafaa090f0cfe8a62eb6e0254299f1532bc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u20139 lines \u00D7 2): core/consensus/src/vsr_timeout.rs:285-293 | core/consensus/src/vsr_timeout.rs:310-316 \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":"core/consensus/src/vsr_timeout.rs"},"region":{"startLine":285}}}],"partialFingerprints":{"codehealthFindingId/v1":"679fef2e94b551d3568ae0a870844af363ef3d24203719c3cd4945d2cf778ac9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): core/integration/src/harness/handle/common.rs:34-42 | core/integration/src/harness/handle/server.rs:652-660 \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":"core/integration/src/harness/handle/common.rs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"f603f7d1d27bf0bbc1f7a3f3ea94561ddd29083790bcf6b7e6f61ad2c3af3b19"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u20139 lines \u00D7 2): core/metadata/src/impls/metadata.rs:2292-2299 | core/metadata/src/impls/metadata.rs:2307-2315 \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":"core/metadata/src/impls/metadata.rs"},"region":{"startLine":2292}}}],"partialFingerprints":{"codehealthFindingId/v1":"7da7541d7fde91a97a085626e255b20fbbffb2dbf7c6cd15b0fa44e82867b524"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): core/server_common/src/send_messages.rs:322-330 | core/server_common/src/send_messages.rs:385-393 \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":"core/server_common/src/send_messages.rs"},"region":{"startLine":322}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4f8bef670e4285245a71a3080fe916bf042d5814694be0e65b694ae61eee597"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5\u20139 lines \u00D7 3): core/server_common/src/send_messages.rs:146-150 | core/server_common/src/send_messages.rs:333-341 | core/server_common/src/send_messages.rs:396-404 \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":"core/server_common/src/send_messages.rs"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"79158a31aeb01a490ba9e882806a831b4650a3825dce43c07052d12fa9b588e6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): core/shard/src/lib.rs:3302-3310 | core/shard/src/lib.rs:3337-3345 \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":"core/shard/src/lib.rs"},"region":{"startLine":3302}}}],"partialFingerprints":{"codehealthFindingId/v1":"702a5e2fd8ab6f434402497b125a00196c7ab3a6825fd564364144a84268970b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): core/simulator/src/workload/state_checker.rs:109-117 | core/simulator/src/workload/state_checker.rs:288-296 \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":"core/simulator/src/workload/state_checker.rs"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"345c3b2a0d4b8f938a789dcefde6d37adc731cad65fa68157a451f5168178427"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): foreign/cpp/src/type_conversion.rs:677-685 | foreign/cpp/src/type_conversion.rs:695-703 \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":"foreign/cpp/src/type_conversion.rs"},"region":{"startLine":677}}}],"partialFingerprints":{"codehealthFindingId/v1":"218440278945286f556bf25ffee7251fbcb847bf46f0de24bd437e78cd14b592"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): foreign/python/src/permissions.rs:67-77 | foreign/python/src/permissions.rs:315-323 \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":"foreign/python/src/permissions.rs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2fe6af17ac6e1b098f133928cb13e2ab7e1e62108b904dc13dcbd87ae2d5786"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): foreign/python/src/producer.rs:549-557 | foreign/python/src/producer.rs:588-596 \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":"foreign/python/src/producer.rs"},"region":{"startLine":549}}}],"partialFingerprints":{"codehealthFindingId/v1":"efe0616d1367caf2c297f3bd190540912a3029687c5c88cee25447ead0d51940"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): gateways/kafka/src/protocol/bounds_guard.rs:845-853 | gateways/kafka/src/protocol/bounds_guard.rs:993-1001 \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":"gateways/kafka/src/protocol/bounds_guard.rs"},"region":{"startLine":845}}}],"partialFingerprints":{"codehealthFindingId/v1":"848a6251068d40b9a03668bdf3539e24b11379c4a45aac2451b4a36121ef4138"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 4): core/message_bus/src/lifecycle/connection_registry.rs:561-568 | core/message_bus/src/lifecycle/connection_registry.rs:592-599 | core/message_bus/src/lifecycle/connection_registry.rs:891-898 | core/message_bus/src/lifecycle/connection_registry.rs:918-925 \u2014 all 4 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":"core/message_bus/src/lifecycle/connection_registry.rs"},"region":{"startLine":561}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9becfa9a11b490773585ce2f69ead83207d9747c7617b3b12a94dbc3aee0d29"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u20138 lines \u00D7 3): core/connectors/sdk/src/decoders/proto.rs:223-229 | core/connectors/sdk/src/encoders/proto.rs:263-270 | core/connectors/sdk/src/transforms/proto_convert.rs:260-267 \u2014 \u0060core/connectors/sdk/src/decoders/proto.rs\u0060 and \u0060core/connectors/sdk/src/encoders/proto.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 11 separate duplicated blocks between them, totalling at least 151 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sdk/src/decoders/proto.rs"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6063d5ae0b7c628a1325f9bc96d5018dd7b53c447380a6b520d845583567b62"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): core/connectors/sinks/mongodb_sink/src/lib.rs:587-594 | core/connectors/sinks/postgres_sink/src/lib.rs:556-563 | core/connectors/sources/postgres_source/src/lib.rs:2492-2499 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 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 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sinks/mongodb_sink/src/lib.rs"},"region":{"startLine":587}}}],"partialFingerprints":{"codehealthFindingId/v1":"c173f185542af0c71ee47da114a5360913b6de2c2e89ceb76f12f9507d8c4e9c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): core/ai/mcp/src/stream.rs:75-82 | core/connectors/runtime/src/stream.rs:107-114 \u2014 before extracting anything, compare \u0060core/ai/mcp/src/stream.rs\u0060 and \u0060core/connectors/runtime/src/stream.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 52 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/ai/mcp/src/stream.rs"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"6670a162f757900a94cd5c3a4a71b97a9a87b11d3475e7ff6540d0566339f472"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): core/binary_protocol/src/requests/users/create_user.rs:59-66 | core/binary_protocol/src/requests/users/login_user.rs:51-58 \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":"core/binary_protocol/src/requests/users/create_user.rs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e7732bb080089bacb178bbd9bc0d5298b28c2131c590801749ea66dd4e8b153"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): core/connectors/sinks/http_sink/src/lib.rs:746-753 | core/connectors/sinks/http_sink/src/lib.rs:828-835 \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":"core/connectors/sinks/http_sink/src/lib.rs"},"region":{"startLine":746}}}],"partialFingerprints":{"codehealthFindingId/v1":"855bb760f6440f17e2adf16579b470cbeba3dc24faad6501c7801e26754123fe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): core/connectors/sources/postgres_source/src/lib.rs:771-778 | core/connectors/sources/postgres_source/src/lib.rs:1499-1506 \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":"core/connectors/sources/postgres_source/src/lib.rs"},"region":{"startLine":771}}}],"partialFingerprints":{"codehealthFindingId/v1":"63324dd9c4bb91943f3d566a7c51c18b92ce61172cffb8edcd898ff4350ea65f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): core/integration/src/harness/handle/client.rs:116-123 | core/integration/src/harness/handle/client.rs:189-196 \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":"core/integration/src/harness/handle/client.rs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"723dae2cb9a2a320304df7b8068713c16bc83aa35d2ce99d693b75c32a95681f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): core/message_bus/src/transports/ws.rs:249-256 | core/message_bus/src/transports/wss.rs:400-407 \u2014 before extracting anything, compare \u0060core/message_bus/src/transports/ws.rs\u0060 and \u0060core/message_bus/src/transports/wss.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 81 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/message_bus/src/transports/ws.rs"},"region":{"startLine":249}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4c3f5f15aed59ecddbd739c97876a05b597eea5611f33ba60d60ae32319ca36"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): core/metadata/src/impls/metadata.rs:3875-3882 | core/metadata/src/impls/metadata.rs:3913-3920 \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":"core/metadata/src/impls/metadata.rs"},"region":{"startLine":3875}}}],"partialFingerprints":{"codehealthFindingId/v1":"4769a52ea7de8be964791eec56ec05f93875fee0d8c8ae87be3edb3d8285227c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): core/partitions/src/iggy_partitions.rs:135-142 | core/partitions/src/iggy_partitions.rs:151-158 \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":"core/partitions/src/iggy_partitions.rs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e8ff6f5c98f93defd55bfc4fb4a19d789882285f68fbd4b87dec7c466324c9d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): core/partitions/src/journal.rs:529-536 | core/partitions/src/journal.rs:598-605 \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":"core/partitions/src/journal.rs"},"region":{"startLine":529}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e6af011fc5e895aad16ce2643a1b27f27ace03b85ac28ba9169251ada9f2dd7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): core/partitions/src/journal.rs:585-592 | core/partitions/src/journal.rs:1133-1140 \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":"core/partitions/src/journal.rs"},"region":{"startLine":585}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e7ee3d8b8e2f083e7c0b019fdcfc7f49fc52734983ee2efd094226ba338c73a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): core/partitions/src/persistence.rs:360-367 | core/partitions/src/persistence.rs:400-407 \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":"core/partitions/src/persistence.rs"},"region":{"startLine":360}}}],"partialFingerprints":{"codehealthFindingId/v1":"05c5a0b6b7f12593914d18120b9e64972ef9584bee24c82c3671aa231adf94cf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): core/sdk/src/quic/quic_client.rs:501-508 | core/sdk/src/websocket/websocket_client.rs:497-504 \u2014 \u0060core/sdk/src/quic/quic_client.rs\u0060 and \u0060core/sdk/src/websocket/websocket_client.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 16 separate duplicated blocks between them, totalling at least 414 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/quic/quic_client.rs"},"region":{"startLine":501}}}],"partialFingerprints":{"codehealthFindingId/v1":"db14891f91e4336ce7ea5754b129a2055c586c5e1ebc19110b310f75ecd50162"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): core/sdk/src/quic/quic_client.rs:758-765 | core/sdk/src/tcp/tcp_client.rs:766-773 \u2014 \u0060core/sdk/src/quic/quic_client.rs\u0060 and \u0060core/sdk/src/tcp/tcp_client.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 8 separate duplicated blocks between them, totalling at least 134 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/quic/quic_client.rs"},"region":{"startLine":758}}}],"partialFingerprints":{"codehealthFindingId/v1":"73f38f479055dd5e27384e6cb16ae4204b4c05c782d54112f5d721c8a5020bfb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): core/simulator/src/client.rs:769-776 | core/simulator/src/client.rs:787-794 \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":"core/simulator/src/client.rs"},"region":{"startLine":769}}}],"partialFingerprints":{"codehealthFindingId/v1":"722eac9edbedc45a7735a298e7665cf074441e41835230c143fc0db1794da9c3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): gateways/kafka/src/bridge/iggy_bridge/topics.rs:108-115 | gateways/kafka/src/bridge/iggy_bridge/topics.rs:372-379 \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":"gateways/kafka/src/bridge/iggy_bridge/topics.rs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"537b1d1e4d51fcc0ce5fd259b12184b6b1097a7b053d3495495796f2a0f5fe09"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): gateways/kafka/tools/kafka-tool/src/response.rs:303-310 | gateways/kafka/tools/kafka-tool/src/response.rs:327-334 \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":"gateways/kafka/tools/kafka-tool/src/response.rs"},"region":{"startLine":303}}}],"partialFingerprints":{"codehealthFindingId/v1":"7078be2e00099098a852624a0c2d3fb32c92ed1301168fa1419e1d2b10e18360"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 10): core/connectors/sources/postgres_source/src/lib.rs:1719-1725 | core/connectors/sources/postgres_source/src/lib.rs:1736-1742 | core/connectors/sources/postgres_source/src/lib.rs:1753-1759 | core/connectors/sources/postgres_source/src/lib.rs:1787-1793 | core/connectors/sources/postgres_source/src/lib.rs:1838-1844 | core/connectors/sources/postgres_source/src/lib.rs:1869-1875 | core/connectors/sources/postgres_source/src/lib.rs:1886-1892 | core/connectors/sources/postgres_source/src/lib.rs:1903-1909 | core/connectors/sources/postgres_source/src/lib.rs:1920-1926 | core/connectors/sources/postgres_source/src/lib.rs:1937-1943 \u2014 all 10 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":"core/connectors/sources/postgres_source/src/lib.rs"},"region":{"startLine":1719}}}],"partialFingerprints":{"codehealthFindingId/v1":"f853f64c9902b22a6b765675d1499c8240bc210c26d20562253f311e0172668e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 7): core/connectors/sdk/src/decoders/avro.rs:178-184 | core/connectors/sdk/src/decoders/flatbuffer.rs:121-127 | core/connectors/sdk/src/decoders/proto.rs:525-531 | core/connectors/sdk/src/encoders/avro.rs:122-128 | core/connectors/sdk/src/encoders/flatbuffer.rs:67-73 | core/connectors/sdk/src/encoders/proto.rs:283-289 | core/connectors/sdk/src/transforms/proto_convert.rs:488-494 \u2014 before extracting anything, compare \u0060core/connectors/sdk/src/decoders/avro.rs\u0060 and \u0060core/connectors/sdk/src/decoders/flatbuffer.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 69 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sdk/src/decoders/avro.rs"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"7de79603f9ee9ef12880f17cab9516e0f59f93fa079a50e8f0364cdfe36504d0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs:601-607 | foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs:610-616 | foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs:619-625 | foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs:635-641 \u2014 all 4 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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs"},"region":{"startLine":601}}}],"partialFingerprints":{"codehealthFindingId/v1":"59815f154151da5df30dafe1c0f43c09b2ddc0579c84492597a7b23f6657b7ee"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): core/ai/mcp/src/log.rs:161-167 | core/connectors/runtime/src/log.rs:114-120 | core/server_common/src/log/logger.rs:386-392 \u2014 before extracting anything, compare \u0060core/ai/mcp/src/log.rs\u0060 and \u0060core/connectors/runtime/src/log.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 87 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/ai/mcp/src/log.rs"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"c780256b9bc0b4c6814060eb15f64c30f5e5925b79f633e07a0928cffd383b3b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): core/ai/mcp/src/log.rs:197-203 | core/connectors/runtime/src/log.rs:150-156 | core/server_common/src/log/logger.rs:417-423 \u2014 before extracting anything, compare \u0060core/ai/mcp/src/log.rs\u0060 and \u0060core/connectors/runtime/src/log.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 87 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/ai/mcp/src/log.rs"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b878014555a48423944c098306bbd05a51036a5439e0b2f984e175ef7216ef9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): core/integration/src/harness/handle/connectors_runtime.rs:173-179 | core/integration/src/harness/handle/mcp.rs:173-179 | core/integration/src/harness/handle/server.rs:979-985 \u2014 before extracting anything, compare \u0060core/integration/src/harness/handle/connectors_runtime.rs\u0060 and \u0060core/integration/src/harness/handle/mcp.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 39 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/integration/src/harness/handle/connectors_runtime.rs"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"66bb8be27a2bf23f0fd7ca2dbc37982d70d1a0d9d3c80c9ba7fa070232e9df05"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs:46-52 | foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs:55-61 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"240987b114d47da43002d0f77ee1818784b98582017d85a80ec312b82b851980"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs:831-837 | foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs:840-846 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs"},"region":{"startLine":831}}}],"partialFingerprints":{"codehealthFindingId/v1":"d41366e86b6658f788070a4a718aaafdd3c5fc18d88b315b7ce88850403f8a0b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): core/ai/mcp/src/stream.rs:91-97 | core/connectors/runtime/src/stream.rs:123-129 \u2014 before extracting anything, compare \u0060core/ai/mcp/src/stream.rs\u0060 and \u0060core/connectors/runtime/src/stream.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 52 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/ai/mcp/src/stream.rs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"669ecd36c63896515ecce938a23413c2dec05c996d466b180fa1cfdf0b30e805"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): core/common/src/types/options/mod.rs:1182-1188 | core/common/src/types/options/mod.rs:1238-1244 \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":"core/common/src/types/options/mod.rs"},"region":{"startLine":1182}}}],"partialFingerprints":{"codehealthFindingId/v1":"6067937d837d1340b8447c774433cfab4d02973de30cdf1ec5affd82b361ef55"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): core/configs/src/configs_impl/parsing.rs:77-83 | core/connectors/sources/influxdb_source/src/common.rs:475-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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/configs/src/configs_impl/parsing.rs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"3876d6b2cda145bda6e990f31e939492f0a2c264e7cbb36c72d9660fc24b4308"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): core/connectors/runtime/src/configs/connectors/local_provider.rs:546-552 | core/connectors/runtime/src/configs/connectors/local_provider.rs:575-581 \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":"core/connectors/runtime/src/configs/connectors/local_provider.rs"},"region":{"startLine":546}}}],"partialFingerprints":{"codehealthFindingId/v1":"a598c882b38d91a2f547e930732a880b8679fe26e01425654170ba941565abbc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): core/connectors/runtime/src/stats.rs:44-50 | core/connectors/runtime/src/stats.rs:70-76 \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":"core/connectors/runtime/src/stats.rs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"176c7fe75facc2b788424baf861cb664238056473288d13585819b89fdb74749"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): core/connectors/sdk/src/lib.rs:196-202 | core/connectors/sdk/src/lib.rs:340-346 \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":"core/connectors/sdk/src/lib.rs"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"35bf92ca336b2b7a3a0d96ad776877c5a9cb9e06cee29f1b542d47d4847d0125"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): core/connectors/sinks/elasticsearch_sink/src/lib.rs:137-143 | core/connectors/sources/elasticsearch_source/src/lib.rs:327-333 \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":"core/connectors/sinks/elasticsearch_sink/src/lib.rs"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc818e39f7d12c030b6cc78438be6363f8037ed007c1affb17cd08464807efe3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): core/connectors/sources/influxdb_source/src/common.rs:522-528 | core/connectors/sources/influxdb_source/src/lib.rs:805-811 \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":"core/connectors/sources/influxdb_source/src/common.rs"},"region":{"startLine":522}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9d9ff20e4e3c373b807234f29319681bbe9578b7795f0c19bfb25adcf0b9670"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): core/integration/src/harness/handle/server.rs:789-795 | core/integration/src/harness/handle/server.rs:800-806 \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":"core/integration/src/harness/handle/server.rs"},"region":{"startLine":789}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a13e9149e74e97843bd25d0815f736809ef5bee29229b59eab23224c28df0e9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): core/sdk/src/quic/quic_client.rs:596-602 | core/sdk/src/websocket/websocket_client.rs:547-553 \u2014 \u0060core/sdk/src/quic/quic_client.rs\u0060 and \u0060core/sdk/src/websocket/websocket_client.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 16 separate duplicated blocks between them, totalling at least 414 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/quic/quic_client.rs"},"region":{"startLine":596}}}],"partialFingerprints":{"codehealthFindingId/v1":"59dc4326eef423f498d20547cd39bc4a2adb1e0db047eebb12eb6fe1c4a5fe34"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): core/server/src/http/handlers.rs:1103-1109 | core/server/src/http/handlers.rs:1127-1133 \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":"core/server/src/http/handlers.rs"},"region":{"startLine":1103}}}],"partialFingerprints":{"codehealthFindingId/v1":"602cdd179a2c355e3becb401a384c0d862af3aafc63533e2a98433b5ca162fb3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): core/shard/src/lib.rs:4485-4491 | core/shard/src/lib.rs:4530-4536 \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":"core/shard/src/lib.rs"},"region":{"startLine":4485}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d38cec3a805ff6f083f68eb1b0faaf6c4e80701dae68dc6e5deeca20fbbaa54"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): gateways/kafka/src/group/state.rs:875-881 | gateways/kafka/src/group/state.rs:883-889 \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":"gateways/kafka/src/group/state.rs"},"region":{"startLine":875}}}],"partialFingerprints":{"codehealthFindingId/v1":"2920f5e5d3e85bb31e8d65d61403e75a5e117e2b5d8f15e9302af851baa8b7ba"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): core/bench/src/utils/mod.rs:113-118 | core/connectors/sinks/influxdb_sink/src/lib.rs:421-426 \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":"core/bench/src/utils/mod.rs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"08d0692eb9155e502d53b877e2f5b2f7c4f049970eb041684621bcae5fe8b9d8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): core/connectors/runtime/src/configs/connectors/local_provider.rs:406-411 | core/connectors/runtime/src/configs/connectors/local_provider.rs:441-446 \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":"core/connectors/runtime/src/configs/connectors/local_provider.rs"},"region":{"startLine":406}}}],"partialFingerprints":{"codehealthFindingId/v1":"68026ef63bca37f2caa2263f65a315a4da9b16c2e1e75f75bdf7659dcde4a62f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): core/connectors/runtime/src/manager/sink.rs:71-76 | core/connectors/runtime/src/manager/source.rs:71-76 \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":"core/connectors/runtime/src/manager/sink.rs"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"dafade64ad6ac964d92019e074afee729f8c93080b75fc5f06f522b13ab256cd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): core/connectors/sdk/src/decoders/proto.rs:429-434 | core/connectors/sdk/src/decoders/proto.rs:482-487 \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":"core/connectors/sdk/src/decoders/proto.rs"},"region":{"startLine":429}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ad90b2d68eee5386f01492991a108e47c9dca1a6c7b45ed491eb82215f967e7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): core/connectors/sdk/src/sink.rs:68-73 | core/connectors/sdk/src/source.rs:161-166 \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":"core/connectors/sdk/src/sink.rs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c5180178ef925050aff5f031a6121ffe5f85b7d23bfba8b1e0ef78b716bc2e9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): core/connectors/sinks/clickhouse_sink/src/binary.rs:486-491 | core/connectors/sinks/clickhouse_sink/src/binary.rs:679-684 \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":"core/connectors/sinks/clickhouse_sink/src/binary.rs"},"region":{"startLine":486}}}],"partialFingerprints":{"codehealthFindingId/v1":"83fed5c4d631274f0fe524dded8120e454d4bf8ae1c2d13ccd814c686bae6df6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): core/consensus/src/client_table.rs:1997-2002 | core/consensus/src/client_table.rs:2063-2068 \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":"core/consensus/src/client_table.rs"},"region":{"startLine":1997}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecb5d0066e12b79fda7040afde923204251152ab3888f08e2ebc51d1b4b9b7a8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): core/metadata/src/stm/consumer_group.rs:435-440 | core/metadata/src/stm/consumer_group.rs:504-509 \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":"core/metadata/src/stm/consumer_group.rs"},"region":{"startLine":435}}}],"partialFingerprints":{"codehealthFindingId/v1":"101b862c2a1d71d59cbafb7fea8e6542a99cc531fb1b5d15316db99f5baf2f17"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): core/metadata/src/stm/stream.rs:1215-1220 | core/metadata/src/stm/stream.rs:1236-1241 \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":"core/metadata/src/stm/stream.rs"},"region":{"startLine":1215}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b3293b765b2dd513f71b2091ae34aa8f63f71793bbeb30bdc714c286fe69735"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): core/sdk/src/stream_builder/build/build_iggy_consumer.rs:45-50 | core/sdk/src/stream_builder/build/build_iggy_producer.rs:46-51 \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":"core/sdk/src/stream_builder/build/build_iggy_consumer.rs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"dff1a97f98db92821ac8e2a9972ed025fa3dc33d91e11b5088a9dccfd1d584e8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (3\u20136 lines \u00D7 4): core/shard/src/lib.rs:4494-4499 | core/shard/src/lib.rs:4548-4550 | core/shard/src/lib.rs:4643-4645 | core/shard/src/lib.rs:4932-4937 \u2014 all 4 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":"core/shard/src/lib.rs"},"region":{"startLine":4494}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d4a98d891be23459009055109a9421d8c7e59544916179c1b48e24f9a6ee3c5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): core/simulator/src/workload/state_checker.rs:286-291 | core/simulator/src/workload/state_checker.rs:359-364 \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":"core/simulator/src/workload/state_checker.rs"},"region":{"startLine":286}}}],"partialFingerprints":{"codehealthFindingId/v1":"eca2421d5fcfa48022bc2ec32b66e75e478713590cc122600e9960851bf21e9f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 9): core/binary_protocol/src/requests/consumer_groups/delete_consumer_group.rs:49-53 | core/binary_protocol/src/requests/consumer_groups/get_consumer_group.rs:49-53 | core/binary_protocol/src/requests/consumer_groups/join_consumer_group.rs:49-53 | core/binary_protocol/src/requests/consumer_groups/leave_consumer_group.rs:49-53 | core/binary_protocol/src/requests/consumer_groups/sync_consumer_group.rs:52-56 | core/binary_protocol/src/requests/consumer_offsets/delete_consumer_offset.rs:75-79 | core/binary_protocol/src/requests/consumer_offsets/get_consumer_offset.rs:68-72 | core/binary_protocol/src/requests/consumer_offsets/store_consumer_offset.rs:78-82 | core/binary_protocol/src/requests/messages/poll_messages.rs:85-89 \u2014 before extracting anything, compare \u0060core/binary_protocol/src/requests/consumer_offsets/delete_consumer_offset.rs\u0060 and \u0060core/binary_protocol/src/requests/consumer_offsets/get_consumer_offset.rs\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. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/binary_protocol/src/requests/consumer_groups/delete_consumer_group.rs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9e5a9687fe21ff583d123ebc97cadf923bb39ded8159f15c5ee3a886c75ae9e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 6): core/binary_protocol/src/requests/consumer_groups/create_consumer_group.rs:48-52 | core/binary_protocol/src/requests/consumer_groups/delete_consumer_group.rs:47-51 | core/binary_protocol/src/requests/consumer_groups/get_consumer_group.rs:47-51 | core/binary_protocol/src/requests/consumer_groups/join_consumer_group.rs:47-51 | core/binary_protocol/src/requests/consumer_groups/leave_consumer_group.rs:47-51 | core/binary_protocol/src/requests/consumer_groups/sync_consumer_group.rs:50-54 \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 all 6 call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/binary_protocol/src/requests/consumer_groups/create_consumer_group.rs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"6382d1be7206dfb7cc00bf95eae778ea2e0612332e7d74d4f85b8f870d4cf0c1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): core/connectors/sinks/postgres_sink/src/lib.rs:526-530 | core/connectors/sinks/redshift_sink/src/lib.rs:1039-1043 | core/connectors/sources/postgres_source/src/lib.rs:2471-2477 \u2014 before extracting anything, compare \u0060core/connectors/sinks/postgres_sink/src/lib.rs\u0060 and \u0060core/connectors/sinks/redshift_sink/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 44 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sinks/postgres_sink/src/lib.rs"},"region":{"startLine":526}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf90963c6ffc2ff7afebe2491d4b4914cea7e390a14ec90d7a179286ab3ac027"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): core/binary_protocol/src/responses/streams/get_stream.rs:92-96 | core/binary_protocol/src/responses/streams/stream_response.rs:73-77 \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":"core/binary_protocol/src/responses/streams/get_stream.rs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a2bdd9dc09950e5e1b73305ec25465993d6e7363e5d058d2c2a595078a127f8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): core/journal/src/prepare_journal.rs:742-746 | core/journal/src/prepare_journal.rs:971-975 \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":"core/journal/src/prepare_journal.rs"},"region":{"startLine":742}}}],"partialFingerprints":{"codehealthFindingId/v1":"daf8c10655be8c81fe02802f7022a56d75f55493f231b31df18c69218c0fb8bd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): core/journal/src/prepare_journal.rs:799-803 | core/journal/src/prepare_journal.rs:949-953 \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":"core/journal/src/prepare_journal.rs"},"region":{"startLine":799}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5d568603e8350e3d28617b03b6cbe3cb5dafa7a8d046b86549749fdc5f15634"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): core/partitions/src/journal.rs:233-237 | core/partitions/src/journal.rs:806-810 \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":"core/partitions/src/journal.rs"},"region":{"startLine":233}}}],"partialFingerprints":{"codehealthFindingId/v1":"02efb516c2d0a77cd2e6aaffcad46a73834e50f0112025ee7cf15545a4ccce21"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): core/ai/mcp/src/stream.rs:38-63 | core/connectors/runtime/src/stream.rs:48-73 \u2014 before extracting anything, compare \u0060core/ai/mcp/src/stream.rs\u0060 and \u0060core/connectors/runtime/src/stream.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 52 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/ai/mcp/src/stream.rs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"d49332bfb81b60203d341f8548cfb475d18ecf58bc36e5ab9acaa423dd84c59b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): core/binary_protocol/src/requests/personal_access_tokens/login_with_personal_access_token.rs:30-43 | core/binary_protocol/src/responses/personal_access_tokens/create_personal_access_token.rs:35-48 \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":"core/binary_protocol/src/requests/personal_access_tokens/login_with_personal_access_token.rs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fb2dc96f3f1ec192e4321877dd43315b166a8bee1d3d34abe2b86493fdd8899"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 4): core/binary_protocol/src/requests/streams/delete_stream.rs:30-43 | core/binary_protocol/src/requests/streams/get_stream.rs:30-43 | core/binary_protocol/src/requests/streams/purge_stream.rs:30-43 | core/binary_protocol/src/requests/topics/get_topics.rs:30-43 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 4 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 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/binary_protocol/src/requests/streams/delete_stream.rs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b2f64202e93ddd0f538c3fc65261516aa626c79599b2f8477aea889e6eb9de7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 3): core/binary_protocol/src/requests/topics/delete_topic.rs:31-53 | core/binary_protocol/src/requests/topics/get_topic.rs:31-53 | core/binary_protocol/src/requests/topics/purge_topic.rs:31-53 \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 all 3 call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/binary_protocol/src/requests/topics/delete_topic.rs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd7fd74978df774ee90eec42c6b87904eee9d25bcb668ad91d328823cafc14de"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): core/binary_protocol/src/requests/users/delete_user.rs:30-43 | core/binary_protocol/src/requests/users/get_user.rs:30-43 \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":"core/binary_protocol/src/requests/users/delete_user.rs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"178807bc7f260e622c53fa5ee58ac4fcf2d85ef69f731163b611f9eb9fce3769"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): core/common/src/types/consumer/consumer_group_offsets.rs:25-50 | core/common/src/types/consumer/consumer_offsets.rs:24-49 \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":"core/common/src/types/consumer/consumer_group_offsets.rs"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e43ec2835e3daddfb9cc3b1fe6e6c39a86fd20dc87469a17025bcff6f92afea"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): foreign/csharp/Iggy_SDK/Consumers/IggyConsumerBuilder.cs:311-315 | foreign/csharp/Iggy_SDK/Publishers/IggyPublisherBuilder.cs:375-379 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Consumers/IggyConsumerBuilder.cs"},"region":{"startLine":311}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee825ceb544e550f8e279a5b55a971647b3e43d0efb884bd261b32f5ca2ed19a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 4): foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs:628-632 | foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs:756-760 | foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs:764-768 | foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs:771-775 \u2014 all 4 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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs"},"region":{"startLine":628}}}],"partialFingerprints":{"codehealthFindingId/v1":"89a7fa940d1ad8ea541e1b994fe6919467f6f93fdf1056ee39a7f20839ac7073"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): foreign/csharp/Iggy_SDK/Identifier.cs:53-57 | foreign/csharp/Iggy_SDK/Kinds/Partitioning.cs:52-56 \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":"foreign/csharp/Iggy_SDK/Identifier.cs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"60d69ff5fe7130fecd6bb6fb6b2615d817c2a8bd1ce8ff38c2a9ea153589de30"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): core/ai/mcp/src/configs.rs:375-387 | core/connectors/runtime/src/api/config.rs:250-262 \u2014 before extracting anything, compare \u0060core/ai/mcp/src/configs.rs\u0060 and \u0060core/connectors/runtime/src/api/config.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 56 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/ai/mcp/src/configs.rs"},"region":{"startLine":375}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca180a7fe0db22a4e83674d4dd2ecf4dc8a3f4da437d5a7a9055c81fd485421e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): core/ai/mcp/src/configs.rs:201-207 | core/connectors/runtime/src/configs/runtime.rs:128-134 \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":"core/ai/mcp/src/configs.rs"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"bab502ff4d5cc7b7001e0767a89a4941bd4f0e2ef93eb6913936be2561e293d5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): core/binary_protocol/src/requests/users/login_register.rs:140-144 | core/binary_protocol/src/requests/users/login_register_with_pat.rs:115-119 \u2014 before extracting anything, compare \u0060core/binary_protocol/src/requests/users/login_register.rs\u0060 and \u0060core/binary_protocol/src/requests/users/login_register_with_pat.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 33 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/binary_protocol/src/requests/users/login_register.rs"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5d646b4103d57790040e76d7a83448a43a07a20f1ae1ae119070f0256907d23"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): core/common/src/http/partitions/create_partitions.rs:52-58 | core/common/src/http/partitions/delete_partitions.rs:52-58 \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":"core/common/src/http/partitions/create_partitions.rs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab4ac7cabd2be45126078e5b473daf46f9e883426861f620cb78eb48223e5815"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): core/common/src/http/personal_access_tokens/create_personal_access_token.rs:46-55 | core/common/src/http/personal_access_tokens/delete_personal_access_token.rs:41-50 \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":"core/common/src/http/personal_access_tokens/create_personal_access_token.rs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"226b1c22f88811a4528267ad0f427f2ed5b9e65e8a8264b4919d36e979b6db92"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): core/common/src/http/streams/create_stream.rs:41-47 | core/common/src/http/streams/update_stream.rs:53-59 \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":"core/common/src/http/streams/create_stream.rs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"af8e03569e0d06233e41dc1f38b1e57c4cd357e5e75191d29195e06138adb311"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): core/common/src/types/configuration/quic_config/quic_client_config_builder.rs:159-164 | core/common/src/types/configuration/tcp_config/tcp_client_config_builder.rs:108-113 | core/common/src/types/configuration/websocket_config/websocket_client_config_builder.rs:143-148 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 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 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/common/src/types/configuration/quic_config/quic_client_config_builder.rs"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"c40078713ce4286f01c4aae51dab8265264506fb49c35dbd4f59a65b3be2f926"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): core/common/src/utils/serde_secret.rs:66-71 | core/connectors/sources/http_source/src/state.rs:587-592 \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":"core/common/src/utils/serde_secret.rs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"5919d3dbdabc34b22c079bb9bc4489f89e50cb93d6f990e50ee0dea5c7f7f89c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): core/connectors/runtime/src/api/sink.rs:60-69 | core/connectors/runtime/src/api/source.rs:63-72 \u2014 before extracting anything, compare \u0060core/connectors/runtime/src/api/sink.rs\u0060 and \u0060core/connectors/runtime/src/api/source.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 63 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/runtime/src/api/sink.rs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"72118202345dcd63a1dac19550f497170cae3ffbaa4bb919175e9644a35f94e2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): core/connectors/sdk/src/decoders/avro.rs:76-84 | core/connectors/sdk/src/encoders/avro.rs:66-74 \u2014 \u0060core/connectors/sdk/src/decoders/avro.rs\u0060 and \u0060core/connectors/sdk/src/encoders/avro.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 6 separate duplicated blocks between them, totalling at least 110 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sdk/src/decoders/avro.rs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"d08bd3d2498aa930f33690d00b1cb4b14c042d664d5f6ebf848721d15fbafb68"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): core/connectors/sdk/src/decoders/avro.rs:215-225 | core/connectors/sdk/src/decoders/flatbuffer.rs:158-168 \u2014 before extracting anything, compare \u0060core/connectors/sdk/src/decoders/avro.rs\u0060 and \u0060core/connectors/sdk/src/decoders/flatbuffer.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 69 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sdk/src/decoders/avro.rs"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"52830d85779d23cb972f216a67560b3b5dcde19f1a956d3ce66c2f9dd9301a9b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): core/connectors/sdk/src/decoders/proto.rs:85-92 | core/connectors/sdk/src/encoders/proto.rs:107-114 \u2014 \u0060core/connectors/sdk/src/decoders/proto.rs\u0060 and \u0060core/connectors/sdk/src/encoders/proto.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 11 separate duplicated blocks between them, totalling at least 151 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sdk/src/decoders/proto.rs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0200722c06b0926ddebc2b2122dd9fcd6f5a08b962af3505c22c618fea2e25d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): core/connectors/sdk/src/encoders/proto.rs:532-538 | core/connectors/sdk/src/transforms/proto_convert.rs:455-461 \u2014 before extracting anything, compare \u0060core/connectors/sdk/src/encoders/proto.rs\u0060 and \u0060core/connectors/sdk/src/transforms/proto_convert.rs\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 137 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sdk/src/encoders/proto.rs"},"region":{"startLine":532}}}],"partialFingerprints":{"codehealthFindingId/v1":"906a13263deafcbace74f8f6022153dd3def213ca9a4a9da20eeca15025c37cb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): core/connectors/sdk/src/transforms/add_fields.rs:56-65 | core/connectors/sdk/src/transforms/delete_fields.rs:57-66 | core/connectors/sdk/src/transforms/update_fields.rs:67-76 \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 all 3 call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sdk/src/transforms/add_fields.rs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"af12bb486b847e876d847ead2a87016949e16e63155dd708321e03899ce7a1c7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): core/sdk/src/quic/quic_client.rs:445-453 | core/sdk/src/tcp/tcp_client.rs:374-382 | core/sdk/src/websocket/websocket_client.rs:441-449 \u2014 \u0060core/sdk/src/quic/quic_client.rs\u0060 and \u0060core/sdk/src/tcp/tcp_client.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 8 separate duplicated blocks between them, totalling at least 134 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/quic/quic_client.rs"},"region":{"startLine":445}}}],"partialFingerprints":{"codehealthFindingId/v1":"547e3797c9dc5230981529974f0566908bcbef2cb134e7142700c02bfb99bfe8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): core/sdk/src/tcp/tcp_client.rs:799-805 | core/sdk/src/websocket/websocket_client.rs:697-703 \u2014 \u0060core/sdk/src/tcp/tcp_client.rs\u0060 and \u0060core/sdk/src/websocket/websocket_client.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 9 separate duplicated blocks between them, totalling at least 158 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/tcp/tcp_client.rs"},"region":{"startLine":799}}}],"partialFingerprints":{"codehealthFindingId/v1":"e505a4c5c1ec9950a3aa65625ae7ed4949bca06dd88d835414bf7dd4828064b4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): core/simulator/src/workload/ops/delete_stream.rs:44-51 | core/simulator/src/workload/ops/purge_stream.rs:44-51 \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":"core/simulator/src/workload/ops/delete_stream.rs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c3174bf4f28dd6f3e3b45f53625726e10e22b80a7499ced21288a38aa9a8607"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): foreign/python/src/config.rs:1444-1448 | foreign/python/src/producer.rs:904-908 \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":"foreign/python/src/config.rs"},"region":{"startLine":1444}}}],"partialFingerprints":{"codehealthFindingId/v1":"6241b05136d66b3707e445db218f064a3c21c4b8254c3a0b8da4aaa0dbe88a72"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): foreign/python/src/config.rs:1492-1499 | foreign/python/src/producer.rs:910-917 \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":"foreign/python/src/config.rs"},"region":{"startLine":1492}}}],"partialFingerprints":{"codehealthFindingId/v1":"71855267883dff36d0118054a52ee3282e595589e2469f89a0366895419d44ee"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): core/bench/report/src/types/server_stats.rs:121-127 | core/common/src/types/stats/mod.rs:125-131 \u2014 before extracting anything, compare \u0060core/bench/report/src/types/server_stats.rs\u0060 and \u0060core/common/src/types/stats/mod.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 31 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/bench/report/src/types/server_stats.rs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b636f87776a53ca33e84244ea68dcdef3f9ec61ee89c3dfd1fee7f195fb96ca"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): core/binary_protocol/src/responses/system/describe_options.rs:136-142 | core/binary_protocol/src/responses/topics/get_topics.rs:50-56 \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":"core/binary_protocol/src/responses/system/describe_options.rs"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"53eca3ed070052524d68cfc2ac297c52f9897c7ee1ed210ae9f8b1c1f69e5c3d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): core/cli/src/commands/binary_consumer_groups/get_consumer_groups.rs:33-40 | core/cli/src/commands/binary_topics/get_topics.rs:33-40 \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":"core/cli/src/commands/binary_consumer_groups/get_consumer_groups.rs"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"e54713a1b202ad8e12192f1e2962d6b2dd4c202fb990c3d9634b36387a920890"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): core/connectors/runtime/src/api/sink.rs:160-170 | core/connectors/runtime/src/api/source.rs:163-173 \u2014 before extracting anything, compare \u0060core/connectors/runtime/src/api/sink.rs\u0060 and \u0060core/connectors/runtime/src/api/source.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 63 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/runtime/src/api/sink.rs"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"797636002f8c210b5bd82157501923a3ed5823ea98ad75a175de3b55052ab29c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): core/connectors/runtime/src/api/sink.rs:211-221 | core/connectors/runtime/src/api/source.rs:214-224 \u2014 before extracting anything, compare \u0060core/connectors/runtime/src/api/sink.rs\u0060 and \u0060core/connectors/runtime/src/api/source.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 63 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/runtime/src/api/sink.rs"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c7eff041b0fceab2850cd0000519bc3a889aa9fa272e764c059c27464e33b6a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): core/connectors/runtime/src/sink.rs:445-452 | core/connectors/runtime/src/source.rs:280-287 \u2014 before extracting anything, compare \u0060core/connectors/runtime/src/sink.rs\u0060 and \u0060core/connectors/runtime/src/source.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 50 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/runtime/src/sink.rs"},"region":{"startLine":445}}}],"partialFingerprints":{"codehealthFindingId/v1":"e51b3ee6edddf76ec06928d5e3893a61c09ab34c5ce59b721a1e634753030a59"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): core/metadata/src/impls/metadata.rs:1462-1468 | core/partitions/src/iggy_partitions.rs:782-788 \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":"core/metadata/src/impls/metadata.rs"},"region":{"startLine":1462}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c6cc9943bebd5208e9859f712668ec01542df84569f65c5c8683908c801ff08"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): core/partitions/src/segment_recovery.rs:2912-2916 | core/sdk/src/vsr.rs:310-314 \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":"core/partitions/src/segment_recovery.rs"},"region":{"startLine":2912}}}],"partialFingerprints":{"codehealthFindingId/v1":"08aa06cef21711a8e151f1e29a440d61662e54488ffe1cb88b8d52eba0884fb3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): core/sdk/src/http/http_client.rs:289-297 | core/sdk/src/quic/quic_client.rs:605-613 | core/sdk/src/tcp/tcp_client.rs:555-563 \u2014 \u0060core/sdk/src/quic/quic_client.rs\u0060 and \u0060core/sdk/src/tcp/tcp_client.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 8 separate duplicated blocks between them, totalling at least 134 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/http/http_client.rs"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c5fb36272f5f4af010ad6d780f62aaeaf4acfcf48eccacfe99ed7d3ad27eede"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): core/simulator/src/workload/ops/create_partitions.rs:108-117 | core/simulator/src/workload/ops/delete_partitions.rs:133-142 \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":"core/simulator/src/workload/ops/create_partitions.rs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"165ad74c048e6093f452280a957c275fb0be588c9af18c255463d2ba2b8a94b8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): core/simulator/src/workload/ops/delete_personal_access_token.rs:68-75 | core/simulator/src/workload/ops/delete_stream.rs:68-75 \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":"core/simulator/src/workload/ops/delete_personal_access_token.rs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"4706465cc8190c805faa315208863663357af22a56ef30453f7ef779ad77725b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): core/simulator/src/workload/ops/delete_user.rs:44-53 | core/simulator/src/workload/ops/update_permissions.rs:44-53 \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":"core/simulator/src/workload/ops/delete_user.rs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"738ca03fb95adf8909406c107886e0fe43a124ad148e2df2d8983607b4473871"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): core/server/src/dispatch/session_ops.rs:1220-1235 | core/server/src/dispatch/session_ops.rs:1258-1277 \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":"core/server/src/dispatch/session_ops.rs"},"region":{"startLine":1220}}}],"partialFingerprints":{"codehealthFindingId/v1":"94dea2cd1a6a485b08bb9dfb9c299f2f7c21a4f158df136dc0c16bf953946892"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): core/connectors/sinks/elasticsearch_sink/src/lib.rs:373-390 | core/connectors/sinks/meilisearch_sink/src/lib.rs:786-803 \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":"core/connectors/sinks/elasticsearch_sink/src/lib.rs"},"region":{"startLine":373}}}],"partialFingerprints":{"codehealthFindingId/v1":"8fc7ed9be6a4e909558198b5a461bf606d7bcdc17221382abb30ca3d480941cb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): core/tools/src/data-seeder/seeder.rs:58-74 | core/tools/src/data-seeder/seeder.rs:82-98 \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":"core/tools/src/data-seeder/seeder.rs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab152da75df43d240cc7260a368ab6628e1c176f9a57283cda5da48698b98032"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): core/partitions/src/iggy_partition.rs:4453-4469 | core/partitions/src/iggy_partition.rs:4491-4501 \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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":4453}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5a2739b61f275635a723d8d5213ea616c8eb66a628e479d28676fca2d552f8b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): core/connectors/sdk/src/decoders/proto.rs:175-187 | core/connectors/sdk/src/encoders/proto.rs:207-222 | core/connectors/sdk/src/transforms/proto_convert.rs:201-213 \u2014 \u0060core/connectors/sdk/src/decoders/proto.rs\u0060 and \u0060core/connectors/sdk/src/encoders/proto.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 11 separate duplicated blocks between them, totalling at least 151 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sdk/src/decoders/proto.rs"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"41c5d1d920d83cdb649e733ade7a05b2846fc306ae09614043d5b51d03832141"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): core/partitions/src/poll_plan.rs:858-873 | core/partitions/src/poll_plan.rs:904-919 \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":"core/partitions/src/poll_plan.rs"},"region":{"startLine":858}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c8858c4e60cfb20c0eacd2f8fcaabee1b49ec4e5db52497d704fe6ef9650464"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): core/partitions/src/partition_storage.rs:68-78 | core/partitions/src/partition_storage.rs:81-95 \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":"core/partitions/src/partition_storage.rs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"14b20b4a7c710806b9101dab6c259b743eeeed249b71285f7e0b806c796c6306"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): core/partitions/src/partition_storage.rs:68-78 | core/partitions/src/partition_storage.rs:81-93 | core/partitions/src/partition_storage.rs:97-111 \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":"core/partitions/src/partition_storage.rs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"624ab1adaee9fa7235509d947fe1060df53cf962708c1b18d10a9eedf20e70ee"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): core/metadata/src/impls/metadata.rs:1127-1141 | core/metadata/src/impls/metadata.rs:3145-3159 \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":"core/metadata/src/impls/metadata.rs"},"region":{"startLine":1127}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed3c865a4d5c625b7ac4611caefb54c584c377144c8404e57b9e8299ad9e3a20"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): core/message_bus/src/transports/tcp_tls.rs:226-240 | core/message_bus/src/transports/wss.rs:185-199 \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":"core/message_bus/src/transports/tcp_tls.rs"},"region":{"startLine":226}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a298c4ce279714214f587af848386b26facb45f2b91dbed79c9c9d172c8928b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 3): core/connectors/sinks/elasticsearch_sink/src/lib.rs:372-386 | core/connectors/sinks/meilisearch_sink/src/lib.rs:785-799 | core/connectors/sinks/stdout_sink/src/lib.rs:74-88 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 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 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sinks/elasticsearch_sink/src/lib.rs"},"region":{"startLine":372}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad73008c99208289bd25e4685efa56c9b9efd3aac42b35581c5890495582b353"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): core/server_common/src/segment_storage/index_writer.rs:57-67 | core/server_common/src/segment_storage/messages_writer.rs:65-78 \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":"core/server_common/src/segment_storage/index_writer.rs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"b93400fbeed2af8c2cc11539b3e12fcb6f929b9032e3d33e1d456e20db19e760"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): core/message_bus/src/transports/ws.rs:263-275 | core/message_bus/src/transports/wss.rs:414-427 \u2014 before extracting anything, compare \u0060core/message_bus/src/transports/ws.rs\u0060 and \u0060core/message_bus/src/transports/wss.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 81 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/message_bus/src/transports/ws.rs"},"region":{"startLine":263}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed48b67c8da4b4a24c92eb1ccafe938884a151d2c35a58a0d731a55426191f13"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): core/connectors/sources/influxdb_source/src/v2.rs:584-596 | core/connectors/sources/influxdb_source/src/v3.rs:93-105 \u2014 before extracting anything, compare \u0060core/connectors/sources/influxdb_source/src/v2.rs\u0060 and \u0060core/connectors/sources/influxdb_source/src/v3.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 37 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sources/influxdb_source/src/v2.rs"},"region":{"startLine":584}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb32fd6f4272d38c096405dd015da33ce2d153cf4743d05359b378bfb7133a76"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): core/journal/src/prepare_journal.rs:484-496 | core/journal/src/prepare_journal.rs:552-564 \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":"core/journal/src/prepare_journal.rs"},"region":{"startLine":484}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe78ef506be22ff30831da215790305771b3325830fc3d6347454b68fc05d671"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): core/sdk/src/websocket/websocket_connection_stream.rs:82-94 | core/sdk/src/websocket/websocket_tls_connection_stream.rs:85-96 \u2014 before extracting anything, compare \u0060core/sdk/src/websocket/websocket_connection_stream.rs\u0060 and \u0060core/sdk/src/websocket/websocket_tls_connection_stream.rs\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 102 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/websocket/websocket_connection_stream.rs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"636e5d2b87abf0e23e6b76fe36b11b24625e7fde29e192a28de5197b169b9f5d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): core/connectors/sinks/http_sink/src/lib.rs:805-817 | core/connectors/sinks/http_sink/src/lib.rs:898-910 \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":"core/connectors/sinks/http_sink/src/lib.rs"},"region":{"startLine":805}}}],"partialFingerprints":{"codehealthFindingId/v1":"4da28bf5406af0982ed030671242242792f149765ee0b9ac389f35864ea95e48"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): core/connectors/runtime/src/state/http.rs:310-322 | core/connectors/runtime/src/state/http.rs:354-366 \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":"core/connectors/runtime/src/state/http.rs"},"region":{"startLine":310}}}],"partialFingerprints":{"codehealthFindingId/v1":"3199a4d0bd42b0f5e9e40b15492631632b5c1c22e853a58d18bf4ae65bc4dcf2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): core/connectors/sdk/src/decoders/proto.rs:67-79 | core/connectors/sdk/src/encoders/proto.rs:89-101 | core/connectors/sdk/src/transforms/proto_convert.rs:92-104 \u2014 \u0060core/connectors/sdk/src/decoders/proto.rs\u0060 and \u0060core/connectors/sdk/src/encoders/proto.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 11 separate duplicated blocks between them, totalling at least 151 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sdk/src/decoders/proto.rs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"5617a0f332602db85405cbae3325ec8b544de35eea1106126bd9da8af5c34033"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): core/sdk/src/websocket/websocket_connection_stream.rs:158-169 | core/sdk/src/websocket/websocket_tls_connection_stream.rs:163-174 \u2014 before extracting anything, compare \u0060core/sdk/src/websocket/websocket_connection_stream.rs\u0060 and \u0060core/sdk/src/websocket/websocket_tls_connection_stream.rs\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 102 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/websocket/websocket_connection_stream.rs"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"a19aa44cee40d0ca3d9770ffe481d1f7a638ebfb4e2525e0196551f3c77c3f64"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): core/simulator/src/workload/ops/create_consumer_group.rs:59-70 | core/simulator/src/workload/ops/update_topic.rs:54-65 \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":"core/simulator/src/workload/ops/create_consumer_group.rs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1f3b8ca7fc7210de7a4e1acb8adb3c6ad5c2ebbeea6f01a4e11a81e6b2c44c3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): core/message_bus/src/client_listener/tcp_tls.rs:112-123 | core/message_bus/src/client_listener/wss.rs:106-117 \u2014 before extracting anything, compare \u0060core/message_bus/src/client_listener/tcp_tls.rs\u0060 and \u0060core/message_bus/src/client_listener/wss.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 44 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/message_bus/src/client_listener/tcp_tls.rs"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"1cb13284f498eda296e86dfcee397a80abde8daa7748794c615f23811ed8be03"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): core/server/src/dispatch/session_ops.rs:511-522 | core/server/src/dispatch/session_ops.rs:765-776 \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":"core/server/src/dispatch/session_ops.rs"},"region":{"startLine":511}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ddc305eb13e186d8efe211e6843c8ad7005ba125f5312719b447a3e9395f1c5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): core/common/src/types/configuration/quic_config/quic_connection_string_options.rs:115-125 | core/common/src/types/configuration/quic_config/quic_connection_string_options.rs:139-149 | core/common/src/types/configuration/quic_config/quic_connection_string_options.rs:155-165 \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":"core/common/src/types/configuration/quic_config/quic_connection_string_options.rs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c8a92ac585130ba1a1c120d1e6c1d8d650692cc12dd00833ee2c3354566e14d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): core/message_bus/src/client_listener/tcp.rs:64-74 | core/message_bus/src/client_listener/tcp_tls.rs:106-116 | core/message_bus/src/client_listener/wss.rs:100-110 \u2014 before extracting anything, compare \u0060core/message_bus/src/client_listener/tcp.rs\u0060 and \u0060core/message_bus/src/client_listener/tcp_tls.rs\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. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/message_bus/src/client_listener/tcp.rs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"af0f56d1f8edc72af6e593925f715d207a76c1d958c6f43a3c15a2f42327c133"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 4): core/message_bus/src/client_listener/tcp.rs:63-73 | core/message_bus/src/client_listener/tcp_tls.rs:105-115 | core/message_bus/src/client_listener/wss.rs:99-109 | core/message_bus/src/replica/listener.rs:97-106 \u2014 before extracting anything, compare \u0060core/message_bus/src/client_listener/tcp.rs\u0060 and \u0060core/message_bus/src/client_listener/tcp_tls.rs\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. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/message_bus/src/client_listener/tcp.rs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"d94b9eeaf854c473a5636e9a36da4f1a8e6ee6e4b290ac9103cc0632b9252f2d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): core/integration/src/harness/handle/client_builder.rs:189-199 | core/integration/src/harness/handle/client_builder.rs:256-266 \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":"core/integration/src/harness/handle/client_builder.rs"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca3d72f15ae135795084e61e6bdbb79d6eda522e826da31544c92d6fc02835c8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): core/connectors/runtime/src/context.rs:95-105 | core/connectors/runtime/src/context.rs:141-151 \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":"core/connectors/runtime/src/context.rs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"363f04c00cae3e1b2add1e497e8c690314f3c8a217bb4b8545763c22193057b6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): core/sdk/src/websocket/websocket_connection_stream.rs:52-62 | core/sdk/src/websocket/websocket_tls_connection_stream.rs:55-65 \u2014 before extracting anything, compare \u0060core/sdk/src/websocket/websocket_connection_stream.rs\u0060 and \u0060core/sdk/src/websocket/websocket_tls_connection_stream.rs\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 102 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/websocket/websocket_connection_stream.rs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa0a446656abdecbe30139e1a8138f873420999bdd9fc9df7d449a30ca733b69"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): core/connectors/runtime/src/sink.rs:76-86 | core/connectors/runtime/src/source.rs:114-124 \u2014 before extracting anything, compare \u0060core/connectors/runtime/src/sink.rs\u0060 and \u0060core/connectors/runtime/src/source.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 50 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/runtime/src/sink.rs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e49e5e38986c41226a61ab6c607d68f599f165740c5c8f9f80b58ab892eaa69"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): core/integration/src/harness/handle/client_builder.rs:189-199 | core/integration/src/harness/handle/client_builder.rs:256-266 | core/integration/src/harness/handle/client_builder.rs:311-321 \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":"core/integration/src/harness/handle/client_builder.rs"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"882dab5070784654c3bd0bc1ee4538eeba05b188edf697ee6df28ad750607689"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): gateways/kafka/src/protocol/bounds_guard.rs:287-297 | gateways/kafka/src/protocol/bounds_guard.rs:330-340 \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":"gateways/kafka/src/protocol/bounds_guard.rs"},"region":{"startLine":287}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3ad7c2ba23b5fd0f6dca70c625083636f25e2fe364a29707ac7abb4f6e1d094"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): core/sdk/src/websocket/websocket_connection_stream.rs:69-79 | core/sdk/src/websocket/websocket_tls_connection_stream.rs:72-82 \u2014 before extracting anything, compare \u0060core/sdk/src/websocket/websocket_connection_stream.rs\u0060 and \u0060core/sdk/src/websocket/websocket_tls_connection_stream.rs\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 102 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/sdk/src/websocket/websocket_connection_stream.rs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c5a8de6798185598d78466b5c7066e7afb190558b6a496cc75762df38ee9a0f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): core/partitions/src/segment_recovery.rs:2245-2254 | core/partitions/src/segment_recovery.rs:2370-2379 | core/partitions/src/segment_recovery.rs:2381-2390 \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":"core/partitions/src/segment_recovery.rs"},"region":{"startLine":2245}}}],"partialFingerprints":{"codehealthFindingId/v1":"a131ba22b055f986dc452c2dd3dbf2384fd109af2009425ef37a2fcb37de376b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): core/integration/src/harness/orchestrator/builder.rs:354-363 | core/integration/src/harness/orchestrator/builder.rs:366-375 \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":"core/integration/src/harness/orchestrator/builder.rs"},"region":{"startLine":354}}}],"partialFingerprints":{"codehealthFindingId/v1":"3409e36890d0c18bc819156c808f70454ef6115b8a269bfc6d3f7d5719a0b94d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): core/connectors/runtime/src/sink.rs:489-498 | core/connectors/runtime/src/source.rs:439-448 \u2014 before extracting anything, compare \u0060core/connectors/runtime/src/sink.rs\u0060 and \u0060core/connectors/runtime/src/source.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 50 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/runtime/src/sink.rs"},"region":{"startLine":489}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb6836cd80853bf6163d7af81d6baf182aaeb28689623ace09f34618bae6c2be"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): core/connectors/sources/postgres_source/src/lib.rs:1131-1140 | core/connectors/sources/postgres_source/src/lib.rs:1151-1160 \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":"core/connectors/sources/postgres_source/src/lib.rs"},"region":{"startLine":1131}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f0469e316fe05df64e2af327ce95b913bad87b104d7522123b7b7342d7d7c16"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 4): core/message_bus/src/client_listener/tcp.rs:67-74 | core/message_bus/src/client_listener/tcp_tls.rs:109-118 | core/message_bus/src/client_listener/ws.rs:81-88 | core/message_bus/src/client_listener/wss.rs:103-112 \u2014 before extracting anything, compare \u0060core/message_bus/src/client_listener/tcp.rs\u0060 and \u0060core/message_bus/src/client_listener/tcp_tls.rs\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. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/message_bus/src/client_listener/tcp.rs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"13f9e195da7eaeb2d2831cc5eba81511b6c216fa0212060705ea0b6e32fcfe5d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): core/message_bus/src/transports/tls/mod.rs:111-120 | core/message_bus/src/transports/tls/mod.rs:130-139 \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":"core/message_bus/src/transports/tls/mod.rs"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"93d1e7d99cfb518f21eb5ab7cdae8e3356f0c8b1cbcf0fb5ded44b0a5e09c42e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): core/server/src/boot/credentials.rs:344-353 | core/server/src/boot/credentials.rs:360-369 \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":"core/server/src/boot/credentials.rs"},"region":{"startLine":344}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf1c506d06aca29c5c008c85b00e657204d40dc766d928df62d268dc3bcd4942"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): foreign/python/src/config.rs:215-224 | foreign/python/src/config.rs:511-520 | foreign/python/src/config.rs:1067-1076 \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":"foreign/python/src/config.rs"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"2dfaeeaa5bdae68c639393dead71262b976408cb92363b1d72694d35b458af28"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): core/integration/src/harness/handle/client.rs:131-139 | core/integration/src/harness/handle/client.rs:156-164 \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":"core/integration/src/harness/handle/client.rs"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe53d3ed279105b55225a1f2ca85e160c3d8f2555ab1c412937550c36fd13b99"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): core/connectors/runtime/src/sink.rs:67-75 | core/connectors/runtime/src/source.rs:105-113 \u2014 before extracting anything, compare \u0060core/connectors/runtime/src/sink.rs\u0060 and \u0060core/connectors/runtime/src/source.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 50 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/runtime/src/sink.rs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe0be3e6a99d29c6678f9fbf9ac5cd3c58c239aceb67d154c563bf14802861c5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): core/cli/src/commands/binary_consumer_groups/get_consumer_group.rs:64-72 | core/cli/src/commands/binary_streams/get_stream.rs:50-56 | core/cli/src/commands/binary_topics/get_topic.rs:63-69 | core/cli/src/commands/binary_users/get_user.rs:54-61 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 4 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 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/cli/src/commands/binary_consumer_groups/get_consumer_group.rs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"f37417d5420540fb06302afa741685676d937078183cc7ad70a49a3fc9bf8e9e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): core/connectors/runtime/src/configs/connectors/local_provider.rs:415-423 | core/connectors/runtime/src/configs/connectors/local_provider.rs:450-458 \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":"core/connectors/runtime/src/configs/connectors/local_provider.rs"},"region":{"startLine":415}}}],"partialFingerprints":{"codehealthFindingId/v1":"db7ecfe158ff0d601531f447806d376a4c08384b4f021dc0ee0c560a06ba52ca"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): core/metadata/src/impls/metadata.rs:2730-2738 | core/metadata/src/impls/metadata.rs:2836-2844 \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":"core/metadata/src/impls/metadata.rs"},"region":{"startLine":2730}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbd13a2d90b1d1397bebb728b3f53b3b5cf66163abe79a1bdc3dea1713e907bd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): core/cli/src/commands/binary_users/change_password.rs:65-72 | core/cli/src/commands/binary_users/change_password.rs:78-85 \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":"core/cli/src/commands/binary_users/change_password.rs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef9e56ec384ce52cf7133107b5679d76c99db677d9ad92c0cc753ef281424f79"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): core/connectors/sinks/postgres_sink/src/lib.rs:168-175 | core/connectors/sinks/redshift_sink/src/lib.rs:142-146 \u2014 before extracting anything, compare \u0060core/connectors/sinks/postgres_sink/src/lib.rs\u0060 and \u0060core/connectors/sinks/redshift_sink/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 44 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sinks/postgres_sink/src/lib.rs"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"be9f5d079c1ea71a7f1a5247a6dc6d4fa82671aba0a92f06998f95364a31c496"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): foreign/python/src/config.rs:398-405 | foreign/python/src/config.rs:1413-1420 \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":"foreign/python/src/config.rs"},"region":{"startLine":398}}}],"partialFingerprints":{"codehealthFindingId/v1":"71c0eb0713b88a2f07b7ce7ab090b39da8e783711ff3e3f9eefb1994b7c3f828"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): core/integration/src/harness/handle/server.rs:470-477 | core/integration/src/harness/handle/server.rs:482-489 \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":"core/integration/src/harness/handle/server.rs"},"region":{"startLine":470}}}],"partialFingerprints":{"codehealthFindingId/v1":"978b46c48155aee58b0c45cdb38d0cc9e4fdb1b3050f0ad4056d40c4da495fe4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): core/connectors/runtime/src/manager/sink.rs:196-203 | core/connectors/runtime/src/manager/source.rs:213-220 \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":"core/connectors/runtime/src/manager/sink.rs"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d714ae701c90d156b8078a6cbb94aa193400c19a42f227ad1721de7e7efa9c2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): core/connectors/sources/influxdb_source/src/v2.rs:598-605 | core/connectors/sources/influxdb_source/src/v3.rs:107-114 \u2014 before extracting anything, compare \u0060core/connectors/sources/influxdb_source/src/v2.rs\u0060 and \u0060core/connectors/sources/influxdb_source/src/v3.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 37 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sources/influxdb_source/src/v2.rs"},"region":{"startLine":598}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0b4875e72a0d8e6bb476f56a7496c37be75a6e90824ed1da4772416593e8448"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): core/common/src/types/message/iggy_message.rs:618-622 | core/common/src/types/message/iggy_message.rs:628-634 \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":"core/common/src/types/message/iggy_message.rs"},"region":{"startLine":618}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e0ed79b6dcbb58fef5b4ecae11e657f58c9aefd284dae57f07187e3cbf4c292"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): core/common/src/types/configuration/http_config/http_connection_string_options.rs:41-47 | core/common/src/types/configuration/tcp_config/tcp_connection_string_options.rs:76-82 \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":"core/common/src/types/configuration/http_config/http_connection_string_options.rs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c93ae8d34009f15b23e2a0d0768854ad7636c7af2d9afec56881ad2463673dd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): core/connectors/sources/postgres_source/src/lib.rs:1627-1633 | core/connectors/sources/postgres_source/src/lib.rs:1635-1641 | core/connectors/sources/postgres_source/src/lib.rs:1651-1657 \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":"core/connectors/sources/postgres_source/src/lib.rs"},"region":{"startLine":1627}}}],"partialFingerprints":{"codehealthFindingId/v1":"251b51e78b592dbe477555c108a510a43fab8ab49b9a2a92d3ede5c8716d8b57"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): core/cli/src/commands/binary_users/change_password.rs:64-70 | core/cli/src/commands/binary_users/change_password.rs:77-83 | core/cli/src/credentials.rs:130-134 \u2014 there are 3 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 3 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/cli/src/commands/binary_users/change_password.rs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8f5e0850d6dce18cc2b7f12e51340c320d4630cf20295fc2bcef64da4fe60f4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): core/common/src/types/consumer/consumer_kind.rs:145-151 | core/server/src/http/jwt.rs:441-447 \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":"core/common/src/types/consumer/consumer_kind.rs"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"82e7caf0bcfe72f0c2502ca294c6e0d9ad203595ff6c4da7a06e107c70785732"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): core/connectors/sinks/clickhouse_sink/src/binary.rs:689-694 | core/connectors/sinks/clickhouse_sink/src/binary.rs:746-751 \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":"core/connectors/sinks/clickhouse_sink/src/binary.rs"},"region":{"startLine":689}}}],"partialFingerprints":{"codehealthFindingId/v1":"8015b29037641ef31738b91a992a9d73f2cfe7219460e6798b66e004674a838d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): core/binary_protocol/src/consensus/header.rs:941-946 | core/binary_protocol/src/consensus/header.rs:1089-1094 \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":"core/binary_protocol/src/consensus/header.rs"},"region":{"startLine":941}}}],"partialFingerprints":{"codehealthFindingId/v1":"446c481ad82e56766f1a6a1cb03a303c3cd03b29dc244e5897418616fb68a7f8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): core/connectors/runtime/src/configs/connectors/local_provider.rs:707-712 | core/connectors/runtime/src/configs/connectors/local_provider.rs:758-763 \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":"core/connectors/runtime/src/configs/connectors/local_provider.rs"},"region":{"startLine":707}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf172b328be3783889628f2551d3dfd8fc5988c7b6159283093787a736e6b27a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): core/message_bus/src/transports/ws.rs:243-247 | core/message_bus/src/transports/wss.rs:394-398 \u2014 before extracting anything, compare \u0060core/message_bus/src/transports/ws.rs\u0060 and \u0060core/message_bus/src/transports/wss.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 81 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/message_bus/src/transports/ws.rs"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"146f0fa177f11efc90a1238f61ccad5b791f73eb4dc5b4cb4d22c018b82eb242"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): core/connectors/sinks/postgres_sink/src/lib.rs:193-197 | core/connectors/sinks/redshift_sink/src/lib.rs:601-605 \u2014 before extracting anything, compare \u0060core/connectors/sinks/postgres_sink/src/lib.rs\u0060 and \u0060core/connectors/sinks/redshift_sink/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 44 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sinks/postgres_sink/src/lib.rs"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"cfa6091ed028b99724695334239e07a017f5cdd3eec5f8ab163ad0dc0080d860"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): core/binary_protocol/src/batch.rs:301-307 | core/binary_protocol/src/batch.rs:338-344 \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":"core/binary_protocol/src/batch.rs"},"region":{"startLine":301}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee01e9d64cf73b0825430bb8bd3904b426f97d64b8abc27f9c96ba3916106c8c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): core/consensus/src/client_table.rs:1892-1896 | core/consensus/src/client_table.rs:1906-1910 \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":"core/consensus/src/client_table.rs"},"region":{"startLine":1892}}}],"partialFingerprints":{"codehealthFindingId/v1":"5806d3864225c374bb14bdf3882a82bf60411acb1e3ed6d952652b76880dea76"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): foreign/java/java-sdk/src/main/java/org/apache/iggy/serde/BytesSerializer.java:224-238 | foreign/java/java-sdk/src/main/java/org/apache/iggy/serde/BytesSerializer.java:241-255 \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":"foreign/java/java-sdk/src/main/java/org/apache/iggy/serde/BytesSerializer.java"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e698029685fd6607a9d9b0abf328df2e153f39fafeedaab86fc786dc487a16e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201314 lines \u00D7 3): foreign/java/java-sdk/src/main/java/org/apache/iggy/client/async/tcp/ConsumerGroupsTcpClient.java:141-154 | foreign/java/java-sdk/src/main/java/org/apache/iggy/client/async/tcp/ConsumerGroupsTcpClient.java:164-177 | foreign/java/java-sdk/src/main/java/org/apache/iggy/client/async/tcp/ConsumerGroupsTcpClient.java:188-198 \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. The \u0060return\u0060 at the foot of the matched lines is the enclosing body\u0027s own terminal exit, not an early one: it moves with them unchanged, and each site calls the extracted unit from the position that \u0060return\u0060 occupied \u2014 no decision has to be handed back and re-acted on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/java/java-sdk/src/main/java/org/apache/iggy/client/async/tcp/ConsumerGroupsTcpClient.java"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"da58cc13a803beec30671dab3c60eb0d695690c3baa789269cc2a1344b6749ad"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): foreign/java/external-processors/iggy-connector-pinot/src/main/java/org/apache/iggy/connector/pinot/consumer/IggyPartitionGroupConsumer.java:125-137 | foreign/java/external-processors/iggy-connector-pinot/src/main/java/org/apache/iggy/connector/pinot/metadata/IggyStreamMetadataProvider.java:155-167 \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 \u0060foreign/java/external-processors/iggy-connector-pinot/src/main/java/org/apache/iggy/connector/pinot/consumer/IggyPartitionGroupConsumer.java:125\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. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060foreign/java/external-processors/iggy-connector-pinot/src/main/java/org/apache/iggy/connector/pinot/consumer/IggyPartitionGroupConsumer.java:139\u0060 calls \u0060of\u0060, \u0060valueOf\u0060 and \u0060foreign/java/external-processors/iggy-connector-pinot/src/main/java/org/apache/iggy/connector/pinot/metadata/IggyStreamMetadataProvider.java:169\u0060 does not \u2014 after which the two agree again for 3 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":"foreign/java/external-processors/iggy-connector-pinot/src/main/java/org/apache/iggy/connector/pinot/consumer/IggyPartitionGroupConsumer.java"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6fc8c5d0afb2d61c0bb554767ed233f696d2002109437f2ee4e91ac4ecdd078"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): foreign/java/external-processors/iggy-connector-flink/iggy-connector-library/src/main/java/org/apache/iggy/connector/flink/sink/IggyCommittable.java:50-61 | foreign/java/external-processors/iggy-connector-flink/iggy-connector-library/src/main/java/org/apache/iggy/connector/flink/source/IggySourceSplit.java:52-63 \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":"foreign/java/external-processors/iggy-connector-flink/iggy-connector-library/src/main/java/org/apache/iggy/connector/flink/sink/IggyCommittable.java"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6029f2ad5fb6fba2749e0706b0edc945ca9f5377e1730e947a3f6a168d49069"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u20139 lines \u00D7 2): foreign/java/external-processors/iggy-connector-flink/iggy-connector-library/src/main/java/org/apache/iggy/connector/flink/sink/IggySink.java:127-134 | foreign/java/external-processors/iggy-connector-flink/iggy-connector-library/src/main/java/org/apache/iggy/connector/flink/source/IggySource.java:163-171 \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 \u0060foreign/java/external-processors/iggy-connector-flink/iggy-connector-library/src/main/java/org/apache/iggy/connector/flink/sink/IggySink.java:127\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. 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":"foreign/java/external-processors/iggy-connector-flink/iggy-connector-library/src/main/java/org/apache/iggy/connector/flink/sink/IggySink.java"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"edfb103e88792828154560120f04df38ac26273bc4d82ab7c9d6c8646004e7e8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): foreign/java/java-sdk/src/main/java/org/apache/iggy/serde/BytesDeserializer.java:655-662 | foreign/java/java-sdk/src/main/java/org/apache/iggy/serde/BytesDeserializer.java:708-715 | foreign/java/java-sdk/src/main/java/org/apache/iggy/serde/BytesDeserializer.java:722-729 \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":"foreign/java/java-sdk/src/main/java/org/apache/iggy/serde/BytesDeserializer.java"},"region":{"startLine":655}}}],"partialFingerprints":{"codehealthFindingId/v1":"4becbce86aa3b7bbb103d71caf32fdd4bf14b3a3c971459fa80d3799b519cb98"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): foreign/java/java-sdk/src/main/java/org/apache/iggy/client/async/tcp/UsersTcpClient.java:94-101 | foreign/java/java-sdk/src/main/java/org/apache/iggy/client/async/tcp/UsersTcpClient.java:142-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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/java/java-sdk/src/main/java/org/apache/iggy/client/async/tcp/UsersTcpClient.java"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"05db9a979995ec60c7d31521b43158332c9fd2de5e1fd324c8d83d6a26dba05f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): foreign/java/java-sdk/src/main/java/org/apache/iggy/client/async/MessagesClient.java:131-188 | foreign/java/java-sdk/src/main/java/org/apache/iggy/client/blocking/MessagesClient.java:43-66 \u2014 \u0060foreign/java/java-sdk/src/main/java/org/apache/iggy/client/async/MessagesClient.java\u0060 and \u0060foreign/java/java-sdk/src/main/java/org/apache/iggy/client/blocking/MessagesClient.java\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 1 separate duplicated blocks between them, totalling at least 58 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own. Read the line range as the matched WINDOW rather than a finished unit: at \u0060foreign/java/java-sdk/src/main/java/org/apache/iggy/client/async/MessagesClient.java:131\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/java/java-sdk/src/main/java/org/apache/iggy/client/async/MessagesClient.java"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"2274326e408ce0af771209c14da76bea5f6f3a8812fc4fe5a751de01e41bc1cd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 5): foreign/java/external-processors/iggy-connector-flink/iggy-connector-library/src/main/java/org/apache/iggy/connector/flink/sink/IggySinkWriter.java:248-254 | foreign/java/external-processors/iggy-connector-flink/iggy-connector-library/src/main/java/org/apache/iggy/connector/flink/source/IggyPartitionSplitReader.java:250-256 | foreign/java/external-processors/iggy-connector-flink/iggy-connector-library/src/main/java/org/apache/iggy/connector/flink/source/IggySourceSplitEnumerator.java:259-265 | foreign/java/external-processors/iggy-connector-pinot/src/main/java/org/apache/iggy/connector/pinot/consumer/IggyPartitionGroupConsumer.java:229-235 | foreign/java/external-processors/iggy-connector-pinot/src/main/java/org/apache/iggy/connector/pinot/metadata/IggyStreamMetadataProvider.java:207-213 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 5 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 5 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/java/external-processors/iggy-connector-flink/iggy-connector-library/src/main/java/org/apache/iggy/connector/flink/sink/IggySinkWriter.java"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"74f262dac97bb53820a4befe5fc2ba380aa1c9e365ba42bb9792ec125195e105"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 5): foreign/java/external-processors/iggy-connector-flink/iggy-connector-library/src/main/java/org/apache/iggy/connector/flink/sink/IggySinkWriter.java:259-265 | foreign/java/external-processors/iggy-connector-flink/iggy-connector-library/src/main/java/org/apache/iggy/connector/flink/source/IggyPartitionSplitReader.java:261-267 | foreign/java/external-processors/iggy-connector-flink/iggy-connector-library/src/main/java/org/apache/iggy/connector/flink/source/IggySourceSplitEnumerator.java:270-276 | foreign/java/external-processors/iggy-connector-pinot/src/main/java/org/apache/iggy/connector/pinot/consumer/IggyPartitionGroupConsumer.java:240-246 | foreign/java/external-processors/iggy-connector-pinot/src/main/java/org/apache/iggy/connector/pinot/metadata/IggyStreamMetadataProvider.java:218-224 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 5 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 5 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/java/external-processors/iggy-connector-flink/iggy-connector-library/src/main/java/org/apache/iggy/connector/flink/sink/IggySinkWriter.java"},"region":{"startLine":259}}}],"partialFingerprints":{"codehealthFindingId/v1":"8257c69528601f1e31e97905d514a1609c940306298b2eb763f4264c1c07ef89"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): foreign/java/java-sdk/src/main/java/org/apache/iggy/cluster/ClusterNodeRole.java:40-47 | foreign/java/java-sdk/src/main/java/org/apache/iggy/cluster/ClusterNodeStatus.java:46-53 \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":"foreign/java/java-sdk/src/main/java/org/apache/iggy/cluster/ClusterNodeRole.java"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4ce3a2b71eccf883a62d88b9faccd1693d8126212f18b456b1e3699efcf56e1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): foreign/java/java-sdk/src/main/java/org/apache/iggy/message/HeaderKind.java:47-54 | foreign/java/java-sdk/src/main/java/org/apache/iggy/topic/CompressionAlgorithm.java:34-41 \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":"foreign/java/java-sdk/src/main/java/org/apache/iggy/message/HeaderKind.java"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"81dc8a647c1fac4d711f2c942ed90f74815898af5111f51c6a43741feba5fcd8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (29 lines \u00D7 3): foreign/go/internal/command/offset.go:43-71 | foreign/go/internal/command/offset.go:89-117 | foreign/go/internal/command/offset.go:133-161 \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. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060foreign/go/internal/command/offset.go:72\u0060 calls \u0060PutUint64\u0060 and \u0060foreign/go/internal/command/offset.go:118\u0060 does not \u2014 after which the two agree again for 3 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":"foreign/go/internal/command/offset.go"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"85c43dcbbb5ab4ab94e0f96a4ec7deab9bf64e6a2af913b563343770ec78cb1f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): foreign/go/internal/command/partition.go:37-54 | foreign/go/internal/command/partition.go:67-84 \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":"foreign/go/internal/command/partition.go"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"85c1d3b00c092632dd672748b4c10d712165a706cab93118352697ae29714dd3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): foreign/go/internal/command/topic.go:77-90 | foreign/go/internal/command/topic.go:218-231 \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":"foreign/go/internal/command/topic.go"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b11d807d93b6e91bb0d4c59f455ed0625c194b30d9100f1f80f937679050f6e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): foreign/go/binary_serialization/binary_response_deserializer.go:614-625 | foreign/go/binary_serialization/binary_response_deserializer.go:630-641 \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 \u0060foreign/go/binary_serialization/binary_response_deserializer.go:614\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":"foreign/go/binary_serialization/binary_response_deserializer.go"},"region":{"startLine":614}}}],"partialFingerprints":{"codehealthFindingId/v1":"eecf0dd21f08d14dc80fca70fa4c93a1facfffcf7e476237de400525fbeb7cc7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 5): foreign/go/internal/command/offset.go:53-60 | foreign/go/internal/command/offset.go:99-106 | foreign/go/internal/command/offset.go:143-150 | foreign/go/internal/command/partition.go:37-44 | foreign/go/internal/command/partition.go:67-74 \u2014 there are 5 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 5 sites; resolving a subset leaves the remainder to drift apart. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/go/internal/command/offset.go"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"c905c8f262138f8bbc425368496f723cf97eff19a82bfe3a64a3fe02f99cd721"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): foreign/go/internal/command/user.go:69-76 | foreign/go/internal/command/user.go:134-141 \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 \u0060foreign/go/internal/command/user.go: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":"foreign/go/internal/command/user.go"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"63a3d3535f0b251e97370b232c51876e2653aad4dfbdcece12b55a548c82fe62"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): foreign/go/contracts/node_status.go:56-66 | foreign/go/contracts/role.go:45-55 \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":"foreign/go/contracts/node_status.go"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b51ad4e4a5ea1b697a6107adf9a6a48dafbbcd4628305a4a1920494c7de775e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 4): foreign/go/client/tcp/tcp_access_token_management.go:47-54 | foreign/go/client/tcp/tcp_clients_management.go:28-35 | foreign/go/client/tcp/tcp_stream_management.go:29-36 | foreign/go/client/tcp/tcp_user_management.go:41-48 \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 all 4 call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/go/client/tcp/tcp_access_token_management.go"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"3caddabde64b663adf02ef359757bf341e7dc038ff75852ac2fcb1dadaeec252"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): foreign/go/contracts/user_headers.go:160-165 | foreign/go/contracts/user_headers.go:189-194 \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":"foreign/go/contracts/user_headers.go"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb2c7ed4c71e0b688a3ff56e40eab4c73502c75aa975f17aec55bab0f7b855f9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): foreign/go/errors/generator/main.go:189-194 | foreign/go/errors/generator/main.go:204-209 \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 \u0060foreign/go/errors/generator/main.go:189\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":"foreign/go/errors/generator/main.go"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f76be6fe000721bc61afd943447040d8d406f72f937a54e2e53783ba81862ae"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): foreign/go/binary_serialization/binary_response_deserializer.go:111-115 | foreign/go/binary_serialization/binary_response_deserializer.go:461-465 \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":"foreign/go/binary_serialization/binary_response_deserializer.go"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"9dda515fdfe94f64cd86e3328ae7f35c0cad8285b1ced99d4731841a920c0437"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): foreign/swift/Sources/Iggy/Models/IggyMessage.swift:134-140 | foreign/swift/Sources/Iggy/Models/UserHeaders.swift:310-316 \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":"foreign/swift/Sources/Iggy/Models/IggyMessage.swift"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"b16408e0695e21480637cb930269ed51d8f89eeccb2116e7c8db81533b3400a5"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (34 shared lines): core/bench/report/src/types/group_metrics.rs:42-123 | core/bench/report/src/types/individual_metrics.rs:43-121 \u2014 These two members are variants of one another: 34 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/bench/report/src/types/group_metrics.rs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"44c964384b29d910b5a4a42fff55720bfe5c053c2f14df285185c850c804e1fd"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (6 members, 50\u002B identical tokens): core/bench/dashboard/frontend/src/api/mod.rs:55-75 | core/bench/dashboard/frontend/src/api/mod.rs:77-97 | core/bench/dashboard/frontend/src/api/mod.rs:102-127 | core/bench/dashboard/frontend/src/api/mod.rs:165-185 | core/bench/dashboard/frontend/src/api/mod.rs:191-216 | core/bench/dashboard/frontend/src/api/mod.rs:229-250 \u2014 These 6 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 6 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 6 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/bench/dashboard/frontend/src/api/mod.rs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"180c2b26f025b7dbbc78b455d37fab9f7e180f1c7d776c2e177dd90e172e553c"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): examples/java/src/main/java/org/apache/iggy/examples/gettingstarted/consumer/GettingStartedConsumer.java:62-115 | examples/java/src/main/java/org/apache/iggy/examples/messageenvelope/consumer/MessageEnvelopeConsumer.java:71-124 | examples/java/src/main/java/org/apache/iggy/examples/messageheaders/consumer/MessageHeadersConsumer.java:74-119 | examples/java/src/main/java/org/apache/iggy/examples/tcptls/consumer/TcpTlsConsumer.java:83-136 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/java/src/main/java/org/apache/iggy/examples/gettingstarted/consumer/GettingStartedConsumer.java"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f94bce4fd0c1ce44a4cd37aee64f81464b0ad4289eda339dc5c9faa55dc4b58"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (73 lines \u00D7 3): core/bench/src/actors/consumer/benchmark_consumer.rs:315-387 | core/bench/src/actors/producer/benchmark_producer.rs:325-397 | core/bench/src/actors/producing_consumer/benchmark_producing_consumer.rs:405-477 \u2014 \u0060core/bench/src/actors/consumer/benchmark_consumer.rs\u0060 and \u0060core/bench/src/actors/producer/benchmark_producer.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 8 separate duplicated blocks between them, totalling at least 201 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/bench/src/actors/consumer/benchmark_consumer.rs"},"region":{"startLine":315}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb86a68eeb7f9c97c0aa1927e187cd1516877fbc72e3c788e46a7eea2af64cef"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (53 lines \u00D7 3): examples/csharp/src/GettingStarted/Iggy_SDK.Examples.GettingStarted.Consumer/Utils.cs:36-88 | examples/csharp/src/MessageEnvelope/Iggy_SDK.Examples.MessageEnvelope.Consumer/Utils.cs:38-90 | examples/csharp/src/MessageHeaders/Iggy_SDK.Examples.MessageHeaders.Consumer/Utils.cs:39-91 \u2014 before extracting anything, compare \u0060examples/csharp/src/GettingStarted/Iggy_SDK.Examples.GettingStarted.Consumer/Utils.cs\u0060 and \u0060examples/csharp/src/MessageEnvelope/Iggy_SDK.Examples.MessageEnvelope.Consumer/Utils.cs\u0060 as WHOLE FILES: 89% 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 2 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/csharp/src/GettingStarted/Iggy_SDK.Examples.GettingStarted.Consumer/Utils.cs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"cba2d9b89e28b952d6da6e4e73552708ef8212aeb5c99f0df45fe954992cb626"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (38 lines \u00D7 2): examples/csharp/src/MessageEnvelope/Iggy_SDK.Examples.MessageEnvelope.Producer/Utils.cs:48-85 | examples/csharp/src/MessageHeaders/Iggy_SDK.Examples.MessageHeaders.Producer/Utils.cs:49-86 \u2014 before extracting anything, compare \u0060examples/csharp/src/MessageEnvelope/Iggy_SDK.Examples.MessageEnvelope.Producer/Utils.cs\u0060 and \u0060examples/csharp/src/MessageHeaders/Iggy_SDK.Examples.MessageHeaders.Producer/Utils.cs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 87 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 \u0060examples/csharp/src/MessageEnvelope/Iggy_SDK.Examples.MessageEnvelope.Producer/Utils.cs:48\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":"examples/csharp/src/MessageEnvelope/Iggy_SDK.Examples.MessageEnvelope.Producer/Utils.cs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"242c3911bbe5985f62490047c86f7768a8a73b27049855d24635f6de9fa6c31c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (29 lines \u00D7 3): core/bench/src/actors/consumer/benchmark_consumer.rs:255-283 | core/bench/src/actors/producer/benchmark_producer.rs:265-293 | core/bench/src/actors/producing_consumer/benchmark_producing_consumer.rs:342-370 \u2014 \u0060core/bench/src/actors/consumer/benchmark_consumer.rs\u0060 and \u0060core/bench/src/actors/producer/benchmark_producer.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 8 separate duplicated blocks between them, totalling at least 201 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/bench/src/actors/consumer/benchmark_consumer.rs"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad9d5181d28bfe17f4c88bda4572ae530cc0cb348e737e4bb336ccb96c361ea6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (29 lines \u00D7 2): core/bench/src/actors/consumer/benchmark_consumer.rs:96-124 | core/bench/src/actors/producer/benchmark_producer.rs:113-141 \u2014 \u0060core/bench/src/actors/consumer/benchmark_consumer.rs\u0060 and \u0060core/bench/src/actors/producer/benchmark_producer.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 8 separate duplicated blocks between them, totalling at least 201 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/bench/src/actors/consumer/benchmark_consumer.rs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbefd97e2fde9bab7c6a614c70e505c77270e8fa43a0187dca6a572091f81971"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 8): examples/csharp/src/GettingStarted/Iggy_SDK.Examples.GettingStarted.Consumer/Utils.cs:101-126 | examples/csharp/src/GettingStarted/Iggy_SDK.Examples.GettingStarted.Producer/Utils.cs:96-121 | examples/csharp/src/MessageEnvelope/Iggy_SDK.Examples.MessageEnvelope.Consumer/Utils.cs:129-154 | examples/csharp/src/MessageEnvelope/Iggy_SDK.Examples.MessageEnvelope.Producer/Utils.cs:104-129 | examples/csharp/src/MessageHeaders/Iggy_SDK.Examples.MessageHeaders.Consumer/Utils.cs:130-155 | examples/csharp/src/MessageHeaders/Iggy_SDK.Examples.MessageHeaders.Producer/Utils.cs:109-134 | examples/csharp/src/NewSdk/Iggy_SDK.Examples.NewSdk.Consumer/Utils.cs:71-96 | examples/csharp/src/NewSdk/Iggy_SDK.Examples.NewSdk.Producer/Utils.cs:84-109 \u2014 before extracting anything, compare \u0060examples/csharp/src/GettingStarted/Iggy_SDK.Examples.GettingStarted.Consumer/Utils.cs\u0060 and \u0060examples/csharp/src/MessageEnvelope/Iggy_SDK.Examples.MessageEnvelope.Consumer/Utils.cs\u0060 as WHOLE FILES: 89% 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 2 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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/csharp/src/GettingStarted/Iggy_SDK.Examples.GettingStarted.Consumer/Utils.cs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"18f51d5bd08d0c2bb6c8d6fa5dc4fd7b38fcdb25d1d6deca5f5586ce5f117f4d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 3): core/bench/src/actors/consumer/benchmark_consumer.rs:218-238 | core/bench/src/actors/producer/benchmark_producer.rs:228-248 | core/bench/src/actors/producing_consumer/benchmark_producing_consumer.rs:305-325 \u2014 \u0060core/bench/src/actors/consumer/benchmark_consumer.rs\u0060 and \u0060core/bench/src/actors/producer/benchmark_producer.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 8 separate duplicated blocks between them, totalling at least 201 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/bench/src/actors/consumer/benchmark_consumer.rs"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"39c333686ca1c58bea532cc65b77ca95f649487a6a424117c8c2460b7d77c2db"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 3): examples/csharp/src/MessageEnvelope/Iggy_SDK.Examples.MessageEnvelope.Consumer/Utils.cs:104-123 | examples/csharp/src/MessageHeaders/Iggy_SDK.Examples.MessageHeaders.Consumer/Utils.cs:105-124 | examples/csharp/src/NewSdk/Iggy_SDK.Examples.NewSdk.Consumer/Utils.cs:46-65 \u2014 before extracting anything, compare \u0060examples/csharp/src/MessageEnvelope/Iggy_SDK.Examples.MessageEnvelope.Consumer/Utils.cs\u0060 and \u0060examples/csharp/src/MessageHeaders/Iggy_SDK.Examples.MessageHeaders.Consumer/Utils.cs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 99 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 \u0060examples/csharp/src/MessageEnvelope/Iggy_SDK.Examples.MessageEnvelope.Consumer/Utils.cs:104\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. 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. Note first that the copies are not typed on the same thing: the declarations holding them bind \u0060message\u0060 to \u0060MessageResponse\u0060 in one and \u0060ReceivedMessage\u0060 in another, and the duplicated lines use it. The extracted unit therefore needs a parameter type that fits BOTH \u2014 their common supertype where they have one, or a new abstraction over them where they do not \u2014 and settling that is the step that comes BEFORE the extraction above. Where the two types are deliberately unrelated, the duplication is the price of that separation and the honest resolution is to record the decision rather than to extract."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/csharp/src/MessageEnvelope/Iggy_SDK.Examples.MessageEnvelope.Consumer/Utils.cs"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"b21929a28ce7eb55ba4e6550780f2cfb9e2060002cf239a873fd82c4e689f744"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): core/bench/dashboard/server/src/handlers.rs:464-481 | core/bench/dashboard/server/src/handlers.rs:659-676 \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":"core/bench/dashboard/server/src/handlers.rs"},"region":{"startLine":464}}}],"partialFingerprints":{"codehealthFindingId/v1":"33a7f7ccdaca371d1cbcb2bc5ff12856c9ec338d5879d8ac4122f8da6677a939"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): core/bench/dashboard/server/src/handlers.rs:496-513 | core/bench/dashboard/server/src/handlers.rs:678-695 \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":"core/bench/dashboard/server/src/handlers.rs"},"region":{"startLine":496}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd218db9749d97c881b218bad5b89aa147e72d5565eb1656e3fc729af512a174"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): core/bench/report/src/types/group_metrics.rs:93-110 | core/bench/report/src/types/individual_metrics.rs:90-107 \u2014 before extracting anything, compare \u0060core/bench/report/src/types/group_metrics.rs\u0060 and \u0060core/bench/report/src/types/individual_metrics.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 34 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/bench/report/src/types/group_metrics.rs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"718d243702c0c2a7951382bdb345c9116e8656c999d6b80ef674e8f8ae5513cc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): examples/csharp/src/MessageEnvelope/Iggy_SDK.Examples.MessageEnvelope.Producer/Utils.cs:86-101 | examples/csharp/src/MessageHeaders/Iggy_SDK.Examples.MessageHeaders.Producer/Utils.cs:91-106 \u2014 before extracting anything, compare \u0060examples/csharp/src/MessageEnvelope/Iggy_SDK.Examples.MessageEnvelope.Producer/Utils.cs\u0060 and \u0060examples/csharp/src/MessageHeaders/Iggy_SDK.Examples.MessageHeaders.Producer/Utils.cs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 87 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 \u0060examples/csharp/src/MessageEnvelope/Iggy_SDK.Examples.MessageEnvelope.Producer/Utils.cs: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":"examples/csharp/src/MessageEnvelope/Iggy_SDK.Examples.MessageEnvelope.Producer/Utils.cs"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae06c1f8044327f8459b8ccb15ff2ed1c25b65127fdf2179bb01b055de75aa9b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15\u201316 lines \u00D7 2): core/bench/dashboard/frontend/src/components/embed_modal.rs:86-100 | core/bench/dashboard/frontend/src/components/tooltips/benchmark_info_tooltip.rs:42-57 \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":"core/bench/dashboard/frontend/src/components/embed_modal.rs"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"45b2dab931ad570315a6b7e27e515b421130cdf61b8d4693309c460ef8e8138a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): core/bench/dashboard/frontend/src/components/layout/hero.rs:297-312 | core/bench/dashboard/frontend/src/components/layout/main_content.rs:261-276 \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":"core/bench/dashboard/frontend/src/components/layout/hero.rs"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"37024b20a13b9bca9a137a12e6a4d2e1007526f8b3243ed10b18f6968a77aac3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13\u201314 lines \u00D7 2): examples/csharp/src/GettingStarted/Iggy_SDK.Examples.GettingStarted.Producer/Utils.cs:69-81 | examples/csharp/src/TcpTls/Iggy_SDK.Examples.TcpTls.Producer/Program.cs:114-127 \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 \u0060examples/csharp/src/GettingStarted/Iggy_SDK.Examples.GettingStarted.Producer/Utils.cs:69\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":"examples/csharp/src/GettingStarted/Iggy_SDK.Examples.GettingStarted.Producer/Utils.cs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e02a4aed50314c452e210e2033d4496a8b3957a6a4a136e824de0780d8dcdd6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): core/bench/dashboard/frontend/src/components/layout/sidebar.rs:196-209 | core/bench/dashboard/frontend/src/components/layout/sidebar.rs:213-226 \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":"core/bench/dashboard/frontend/src/components/layout/sidebar.rs"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a1fc35398170e26c016023b1b154481c068d918054b1a13a9aa006ba1fe5a08"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): core/bench/dashboard/frontend/src/components/layout/sidebar.rs:236-248 | core/bench/dashboard/frontend/src/components/layout/sidebar.rs:257-269 \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":"core/bench/dashboard/frontend/src/components/layout/sidebar.rs"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"49b9d4d48f7d9acc1c9213eaa84f53fae4f32e246d28eaee5d5a3acf859986bd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): core/bench/dashboard/frontend/src/components/layout/main_content.rs:114-125 | core/bench/dashboard/frontend/src/components/layout/main_content.rs:208-219 \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":"core/bench/dashboard/frontend/src/components/layout/main_content.rs"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"887734f76511d156e1d9e27b800dd1d9caaa3340ff123af1f2f893a9f2689cd4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): core/bench/dashboard/frontend/src/api/mod.rs:107-118 | core/bench/dashboard/frontend/src/api/mod.rs:196-207 \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":"core/bench/dashboard/frontend/src/api/mod.rs"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"b02a18711b6d2fde4028685251c3cb04eea6e90b5424d10966681429742cfda1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): core/bench/src/analytics/time_series/calculator.rs:50-60 | core/bench/src/analytics/time_series/calculator.rs:86-97 \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":"core/bench/src/analytics/time_series/calculator.rs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef89b9d21e39ec91458c5593abacda43e6f123f94fd31f90762cf9c59a493305"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): examples/csharp/src/Basic/Iggy_SDK.Examples.Basic.Consumer/Settings.cs:22-31 | examples/csharp/src/Basic/Iggy_SDK.Examples.Basic.Producer/Settings.cs:22-31 \u2014 \u0060examples/csharp/src/Basic/Iggy_SDK.Examples.Basic.Consumer/Settings.cs\u0060 and \u0060examples/csharp/src/Basic/Iggy_SDK.Examples.Basic.Producer/Settings.cs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 1 separate duplicated blocks between them, totalling at least 10 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own. Read the line range as the matched WINDOW rather than a finished unit: at \u0060examples/csharp/src/Basic/Iggy_SDK.Examples.Basic.Consumer/Settings.cs:22\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":"examples/csharp/src/Basic/Iggy_SDK.Examples.Basic.Consumer/Settings.cs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"c769d6dfbe69c28cea6b927933cb765f9919c4c4617428f6df63fd5322490831"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): core/bench/dashboard/frontend/src/components/layout/sidebar.rs:133-141 | core/bench/dashboard/frontend/src/components/layout/sidebar.rs:143-151 \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":"core/bench/dashboard/frontend/src/components/layout/sidebar.rs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba647afa77441125b034502f6aab2f451d4c5a893781705c5342d2a977837bfa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): core/bench/dashboard/frontend/src/components/selectors/param_filters_panel.rs:93-101 | core/bench/dashboard/frontend/src/components/selectors/param_filters_panel.rs:148-156 \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":"core/bench/dashboard/frontend/src/components/selectors/param_filters_panel.rs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f4dbc0f8fbfc8b28ec6b7e006e1be20d658fae74cb43cc8320f93dbc738de9c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): core/bench/src/actors/consumer/benchmark_consumer.rs:288-295 | core/bench/src/actors/producer/benchmark_producer.rs:298-305 | core/bench/src/actors/producing_consumer/benchmark_producing_consumer.rs:375-382 \u2014 \u0060core/bench/src/actors/consumer/benchmark_consumer.rs\u0060 and \u0060core/bench/src/actors/producer/benchmark_producer.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 8 separate duplicated blocks between them, totalling at least 201 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/bench/src/actors/consumer/benchmark_consumer.rs"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"1088498650ab9d05fb5a2378a707f1aca7c00989330d7cf2958faa8a5c322d30"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): core/bench/dashboard/server/src/main.rs:63-70 | core/bench/runner/src/main.rs:37-44 \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":"core/bench/dashboard/server/src/main.rs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"3db542ba762650ec705398a89985a2f9efe0f6e2fdb0056ef39a31f13128b78c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): core/bench/report/src/types/group_metrics.rs:79-86 | core/bench/report/src/types/individual_metrics.rs:76-83 \u2014 before extracting anything, compare \u0060core/bench/report/src/types/group_metrics.rs\u0060 and \u0060core/bench/report/src/types/individual_metrics.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 34 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/bench/report/src/types/group_metrics.rs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8de8ee83447041a8a32ed40ce6c8d5ae424551a276357fa123b8cbaba6cebcc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): core/bench/src/actors/consumer/benchmark_consumer.rs:82-89 | core/bench/src/actors/producer/benchmark_producer.rs:98-105 \u2014 \u0060core/bench/src/actors/consumer/benchmark_consumer.rs\u0060 and \u0060core/bench/src/actors/producer/benchmark_producer.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 8 separate duplicated blocks between them, totalling at least 201 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/bench/src/actors/consumer/benchmark_consumer.rs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"09f0270a9481b1776e6577fa48057fe90d217bfd799443b1d51d8ecffffe7ba0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): core/bench/dashboard/frontend/src/api/mod.rs:82-88 | core/bench/dashboard/frontend/src/api/mod.rs:170-176 | core/bench/dashboard/frontend/src/api/mod.rs:235-241 \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":"core/bench/dashboard/frontend/src/api/mod.rs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9aa33d84c7fab30dcb8664b7e4f577c2902a98621dba212b4b43b643eb5a9e4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): core/bench/dashboard/frontend/src/components/layout/hero.rs:148-154 | core/bench/dashboard/frontend/src/components/layout/top_app_bar.rs:415-421 \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":"core/bench/dashboard/frontend/src/components/layout/hero.rs"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"00f0ced18948fd5e52aad07a453369a6aad8d862c2d67a38a16afa673d39f9fe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): core/bench/dashboard/frontend/src/components/layout/hero.rs:345-351 | core/bench/dashboard/frontend/src/components/layout/hero.rs:421-427 \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":"core/bench/dashboard/frontend/src/components/layout/hero.rs"},"region":{"startLine":345}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a2e1a06d183904e00895ea01ac77235ac1444107b0c100109fd1ede549467f3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): core/bench/src/analytics/time_series/calculator.rs:62-68 | core/bench/src/analytics/time_series/calculator.rs:99-105 \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":"core/bench/src/analytics/time_series/calculator.rs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"c11c585467c13f716fb0b9d4c07c1fa66fc14dbf05991a92af405a901f28d960"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): examples/csharp/src/GettingStarted/Iggy_SDK.Examples.GettingStarted.Producer/Utils.cs:38-44 | examples/csharp/src/MessageEnvelope/Iggy_SDK.Examples.MessageEnvelope.Producer/Utils.cs:39-45 | examples/csharp/src/MessageHeaders/Iggy_SDK.Examples.MessageHeaders.Producer/Utils.cs:40-46 \u2014 before extracting anything, compare \u0060examples/csharp/src/MessageEnvelope/Iggy_SDK.Examples.MessageEnvelope.Producer/Utils.cs\u0060 and \u0060examples/csharp/src/MessageHeaders/Iggy_SDK.Examples.MessageHeaders.Producer/Utils.cs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 87 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/csharp/src/GettingStarted/Iggy_SDK.Examples.GettingStarted.Producer/Utils.cs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"58fb76f7cd3939446c71f9ff97cf42b542659bf0cf29d3eb3f2f86e7c9e1e891"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): core/bench/dashboard/frontend/src/components/layout/hero.rs:314-320 | core/bench/dashboard/frontend/src/components/layout/main_content.rs:237-243 \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":"core/bench/dashboard/frontend/src/components/layout/hero.rs"},"region":{"startLine":314}}}],"partialFingerprints":{"codehealthFindingId/v1":"16668fec9f16d95e2355d1f3c3cb19d36a935277b2243ccc0f361ab315e1808c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): core/bench/src/actors/consumer/typed_benchmark_consumer.rs:95-100 | core/bench/src/actors/producer/typed_benchmark_producer.rs:94-99 | core/bench/src/actors/producing_consumer/typed_benchmark_producing_consumer.rs:124-129 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 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 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/bench/src/actors/consumer/typed_benchmark_consumer.rs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef3e6152cd9b495f255f04bc88c7f3151f20a714ab3ad68653ae1ca5fd944c7e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 3): core/bench/src/actors/consumer/benchmark_consumer.rs:193-217 | core/bench/src/actors/producer/benchmark_producer.rs:203-227 | core/bench/src/actors/producing_consumer/benchmark_producing_consumer.rs:280-304 \u2014 \u0060core/bench/src/actors/consumer/benchmark_consumer.rs\u0060 and \u0060core/bench/src/actors/producer/benchmark_producer.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 8 separate duplicated blocks between them, totalling at least 201 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/bench/src/actors/consumer/benchmark_consumer.rs"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"afed85345c92df548c03f2ba3486aed9f3b2c4208fdc17acb20fa2d3fcfd7218"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 6): core/bench/dashboard/frontend/src/api/mod.rs:62-73 | core/bench/dashboard/frontend/src/api/mod.rs:84-95 | core/bench/dashboard/frontend/src/api/mod.rs:114-125 | core/bench/dashboard/frontend/src/api/mod.rs:172-183 | core/bench/dashboard/frontend/src/api/mod.rs:203-214 | core/bench/dashboard/frontend/src/api/mod.rs:237-248 \u2014 all 6 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":"core/bench/dashboard/frontend/src/api/mod.rs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"4068e5ec3f6f4ce1269f57adda838925fcf6bd1839b593bbbbae8712ec322055"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): core/bench/dashboard/frontend/src/components/tooltips/benchmark_info_toggle.rs:28-37 | core/bench/dashboard/frontend/src/components/tooltips/server_stats_toggle.rs:28-37 \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":"core/bench/dashboard/frontend/src/components/tooltips/benchmark_info_toggle.rs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9824c46f7acad09de563ad0c64227681911e25991b4b084026decc0f6869efb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): core/bench/dashboard/frontend/src/components/layout/hero.rs:449-457 | core/bench/dashboard/frontend/src/format.rs:55-63 \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":"core/bench/dashboard/frontend/src/components/layout/hero.rs"},"region":{"startLine":449}}}],"partialFingerprints":{"codehealthFindingId/v1":"7100565fbdf0163d21c0fd265fbefdff17ee066c6048c7d388fe0a93debe0ca8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): core/bench/report/src/types/group_metrics.rs:62-69 | core/bench/report/src/types/individual_metrics.rs:62-69 \u2014 before extracting anything, compare \u0060core/bench/report/src/types/group_metrics.rs\u0060 and \u0060core/bench/report/src/types/individual_metrics.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 34 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/bench/report/src/types/group_metrics.rs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"1647b54a0f5432586ab9d7dd12b47ddfcd89491923159bbf10b627bcc5d4c143"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): core/bench/src/actors/consumer/benchmark_consumer.rs:305-312 | core/bench/src/actors/producer/benchmark_producer.rs:315-322 \u2014 \u0060core/bench/src/actors/consumer/benchmark_consumer.rs\u0060 and \u0060core/bench/src/actors/producer/benchmark_producer.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 8 separate duplicated blocks between them, totalling at least 201 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/bench/src/actors/consumer/benchmark_consumer.rs"},"region":{"startLine":305}}}],"partialFingerprints":{"codehealthFindingId/v1":"a29303f3d56f2c644108beb82c0f25d97ddf937fea5277a856a2df65c4aa7587"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (53 lines \u00D7 3): examples/java/src/main/java/org/apache/iggy/examples/gettingstarted/consumer/GettingStartedConsumer.java:63-115 | examples/java/src/main/java/org/apache/iggy/examples/messageenvelope/consumer/MessageEnvelopeConsumer.java:72-124 | examples/java/src/main/java/org/apache/iggy/examples/tcptls/consumer/TcpTlsConsumer.java:84-136 \u2014 before extracting anything, compare \u0060examples/java/src/main/java/org/apache/iggy/examples/gettingstarted/consumer/GettingStartedConsumer.java\u0060 and \u0060examples/java/src/main/java/org/apache/iggy/examples/messageenvelope/consumer/MessageEnvelopeConsumer.java\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 86 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":"examples/java/src/main/java/org/apache/iggy/examples/gettingstarted/consumer/GettingStartedConsumer.java"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5e0a514060464d20041691e0f6eb612e052632c498d8872a83886a264047329"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (36 lines \u00D7 2): foreign/java/bench/src/main/java/org/apache/iggy/bench/report/IndividualMetricsCalculator.java:189-224 | foreign/java/bench/src/main/java/org/apache/iggy/bench/report/IndividualMetricsCalculator.java:255-290 \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 \u0060foreign/java/bench/src/main/java/org/apache/iggy/bench/report/IndividualMetricsCalculator.java:189\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":"foreign/java/bench/src/main/java/org/apache/iggy/bench/report/IndividualMetricsCalculator.java"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3d54a081a0d7767e301b0148e9de011cd4aa8e1a92e7b8e0f87416c1d0e4924"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (34 lines \u00D7 2): examples/java/src/main/java/org/apache/iggy/examples/gettingstarted/producer/GettingStartedProducer.java:70-103 | examples/java/src/main/java/org/apache/iggy/examples/tcptls/producer/TcpTlsProducer.java:91-124 \u2014 before extracting anything, compare \u0060examples/java/src/main/java/org/apache/iggy/examples/gettingstarted/producer/GettingStartedProducer.java\u0060 and \u0060examples/java/src/main/java/org/apache/iggy/examples/tcptls/producer/TcpTlsProducer.java\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 51 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":"examples/java/src/main/java/org/apache/iggy/examples/gettingstarted/producer/GettingStartedProducer.java"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f87be8d2f17cd69f995de289df91c559c108f2e6acb88cc9ca52eaa976c074d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): examples/java/src/main/java/org/apache/iggy/examples/messageenvelope/producer/MessageEnvelopeProducer.java:62-87 | examples/java/src/main/java/org/apache/iggy/examples/messageheaders/producer/MessageHeadersProducer.java:63-88 \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. 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":"examples/java/src/main/java/org/apache/iggy/examples/messageenvelope/producer/MessageEnvelopeProducer.java"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"0300c934785a430d11b4665dad27bbd4ff7e4abd09d8d038e2ae96b3ea130405"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 4): examples/java/src/main/java/org/apache/iggy/examples/gettingstarted/consumer/GettingStartedConsumer.java:70-93 | examples/java/src/main/java/org/apache/iggy/examples/messageenvelope/consumer/MessageEnvelopeConsumer.java:79-102 | examples/java/src/main/java/org/apache/iggy/examples/messageheaders/consumer/MessageHeadersConsumer.java:81-104 | examples/java/src/main/java/org/apache/iggy/examples/tcptls/consumer/TcpTlsConsumer.java:91-114 \u2014 before extracting anything, compare \u0060examples/java/src/main/java/org/apache/iggy/examples/gettingstarted/consumer/GettingStartedConsumer.java\u0060 and \u0060examples/java/src/main/java/org/apache/iggy/examples/messageenvelope/consumer/MessageEnvelopeConsumer.java\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 86 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 \u0060examples/java/src/main/java/org/apache/iggy/examples/gettingstarted/consumer/GettingStartedConsumer.java:70\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. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060examples/java/src/main/java/org/apache/iggy/examples/gettingstarted/consumer/GettingStartedConsumer.java:94\u0060 calls \u0060sleep\u0060 and \u0060examples/java/src/main/java/org/apache/iggy/examples/messageheaders/consumer/MessageHeadersConsumer.java:105\u0060 does not \u2014 after which the two agree again for 3 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":"examples/java/src/main/java/org/apache/iggy/examples/gettingstarted/consumer/GettingStartedConsumer.java"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"a08d93d7bbbd000fd66e8ec1de34dcfa4dae9f4f0e9280d737d22e5e7967af25"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): foreign/java/bench/src/main/java/org/apache/iggy/bench/report/IndividualMetricsCalculator.java:172-186 | foreign/java/bench/src/main/java/org/apache/iggy/bench/report/IndividualMetricsCalculator.java:238-252 \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 \u0060foreign/java/bench/src/main/java/org/apache/iggy/bench/report/IndividualMetricsCalculator.java:172\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/java/bench/src/main/java/org/apache/iggy/bench/report/IndividualMetricsCalculator.java"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a84f72999303e742e5fb71916fb310b6145331fc15a95919901914f208aa70d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201315 lines \u00D7 2): examples/java/src/main/java/org/apache/iggy/examples/async/AsyncConsumer.java:147-161 | examples/java/src/main/java/org/apache/iggy/examples/async/AsyncProducer.java:95-108 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060examples/java/src/main/java/org/apache/iggy/examples/async/AsyncConsumer.java:147\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":"examples/java/src/main/java/org/apache/iggy/examples/async/AsyncConsumer.java"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"ddbc6a2de512d461b3f45f53210cb18309c2118c457136b8534430e468d35fe7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): examples/java/src/main/java/org/apache/iggy/examples/multitenant/consumer/MultiTenantConsumer.java:93-107 | examples/java/src/main/java/org/apache/iggy/examples/multitenant/producer/MultiTenantProducer.java:93-107 \u2014 before extracting anything, compare \u0060examples/java/src/main/java/org/apache/iggy/examples/multitenant/consumer/MultiTenantConsumer.java\u0060 and \u0060examples/java/src/main/java/org/apache/iggy/examples/multitenant/producer/MultiTenantProducer.java\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 57 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 \u0060examples/java/src/main/java/org/apache/iggy/examples/multitenant/consumer/MultiTenantConsumer.java:93\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":"examples/java/src/main/java/org/apache/iggy/examples/multitenant/consumer/MultiTenantConsumer.java"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"b464c60c3110e78429660db4a9cf4a7aa8fdd8dbf25abd6a2ba0b2f229f7d182"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): foreign/java/external-processors/iggy-connector-flink/iggy-flink-examples/src/main/java/org/apache/iggy/flink/example/MultiStreamJoinJob.java:148-160 | foreign/java/external-processors/iggy-connector-flink/iggy-flink-examples/src/main/java/org/apache/iggy/flink/example/StreamTransformJob.java:128-140 | foreign/java/external-processors/iggy-connector-flink/iggy-flink-examples/src/main/java/org/apache/iggy/flink/example/WordCountJob.java:123-135 \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 all 3 call sites, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060foreign/java/external-processors/iggy-connector-flink/iggy-flink-examples/src/main/java/org/apache/iggy/flink/example/MultiStreamJoinJob.java:148\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":"foreign/java/external-processors/iggy-connector-flink/iggy-flink-examples/src/main/java/org/apache/iggy/flink/example/MultiStreamJoinJob.java"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"d88cdf9a99b2a4ee39ff7ab4cf1d668fb5e86f95c49645ecd29a57c5d6f22e25"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): examples/java/src/main/java/org/apache/iggy/examples/multitenant/consumer/MultiTenantConsumer.java:342-353 | examples/java/src/main/java/org/apache/iggy/examples/multitenant/producer/MultiTenantProducer.java:355-366 | examples/java/src/main/java/org/apache/iggy/examples/sinkdataproducer/SinkDataProducer.java:161-172 \u2014 before extracting anything, compare \u0060examples/java/src/main/java/org/apache/iggy/examples/multitenant/consumer/MultiTenantConsumer.java\u0060 and \u0060examples/java/src/main/java/org/apache/iggy/examples/multitenant/producer/MultiTenantProducer.java\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 57 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 \u0060examples/java/src/main/java/org/apache/iggy/examples/sinkdataproducer/SinkDataProducer.java:161\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. The \u0060return\u0060 at the foot of the matched lines is the enclosing body\u0027s own terminal exit, not an early one: it moves with them unchanged, and each site calls the extracted unit from the position that \u0060return\u0060 occupied \u2014 no decision has to be handed back and re-acted on. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just before the matched lines, \u0060examples/java/src/main/java/org/apache/iggy/examples/sinkdataproducer/SinkDataProducer.java:160\u0060 calls \u0060toLowerCase\u0060, \u0060replace\u0060 and \u0060examples/java/src/main/java/org/apache/iggy/examples/multitenant/consumer/MultiTenantConsumer.java:341\u0060 does not \u2014 after which the two agree again for 2 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":"examples/java/src/main/java/org/apache/iggy/examples/multitenant/consumer/MultiTenantConsumer.java"},"region":{"startLine":342}}}],"partialFingerprints":{"codehealthFindingId/v1":"221008c86d78e12e2e237db3053a277aee4989a04c8d1957e471c9dc0a8276cf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): examples/java/src/main/java/org/apache/iggy/examples/multitenant/consumer/MultiTenantConsumer.java:286-296 | examples/java/src/main/java/org/apache/iggy/examples/multitenant/producer/MultiTenantProducer.java:329-339 \u2014 before extracting anything, compare \u0060examples/java/src/main/java/org/apache/iggy/examples/multitenant/consumer/MultiTenantConsumer.java\u0060 and \u0060examples/java/src/main/java/org/apache/iggy/examples/multitenant/producer/MultiTenantProducer.java\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 57 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":"examples/java/src/main/java/org/apache/iggy/examples/multitenant/consumer/MultiTenantConsumer.java"},"region":{"startLine":286}}}],"partialFingerprints":{"codehealthFindingId/v1":"90775f96ee5668ada03c29f8d43b5230805c07dcc4d60d96bc8718d83bc85622"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): examples/java/src/main/java/org/apache/iggy/examples/multitenant/consumer/MultiTenantConsumer.java:329-339 | examples/java/src/main/java/org/apache/iggy/examples/multitenant/producer/MultiTenantProducer.java:342-352 \u2014 before extracting anything, compare \u0060examples/java/src/main/java/org/apache/iggy/examples/multitenant/consumer/MultiTenantConsumer.java\u0060 and \u0060examples/java/src/main/java/org/apache/iggy/examples/multitenant/producer/MultiTenantProducer.java\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 57 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":"examples/java/src/main/java/org/apache/iggy/examples/multitenant/consumer/MultiTenantConsumer.java"},"region":{"startLine":329}}}],"partialFingerprints":{"codehealthFindingId/v1":"8229969bf8bf224d09c1428790043b01af2a6d7ca7c55be4e9dbab84cf9152f1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): foreign/java/bench/src/main/java/org/apache/iggy/bench/report/FinalReportBuilder.java:219-228 | foreign/java/bench/src/main/java/org/apache/iggy/bench/report/FinalReportBuilder.java:231-240 \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":"foreign/java/bench/src/main/java/org/apache/iggy/bench/report/FinalReportBuilder.java"},"region":{"startLine":219}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0051c1e1775ddf95dadc2e52e312d234cd42d67d1fae4a4eb741c6f2d57982c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): examples/java/src/main/java/org/apache/iggy/examples/gettingstarted/producer/GettingStartedProducer.java:115-123 | examples/java/src/main/java/org/apache/iggy/examples/tcptls/producer/TcpTlsProducer.java:136-144 \u2014 before extracting anything, compare \u0060examples/java/src/main/java/org/apache/iggy/examples/gettingstarted/producer/GettingStartedProducer.java\u0060 and \u0060examples/java/src/main/java/org/apache/iggy/examples/tcptls/producer/TcpTlsProducer.java\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 51 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":"examples/java/src/main/java/org/apache/iggy/examples/gettingstarted/producer/GettingStartedProducer.java"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"f061e33babb7381f3e1ac341e5fe3336ca1764b077b269d08fa502aab224af3d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): foreign/java/bench/src/main/java/org/apache/iggy/bench/report/IndividualMetricsCalculator.java:103-110 | foreign/java/bench/src/main/java/org/apache/iggy/bench/report/IndividualMetricsCalculator.java:116-123 \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 \u0060foreign/java/bench/src/main/java/org/apache/iggy/bench/report/IndividualMetricsCalculator.java:103\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":"foreign/java/bench/src/main/java/org/apache/iggy/bench/report/IndividualMetricsCalculator.java"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"c94934049c6e2c5fc24bee9cc2ed05a7e115a0b1b9348fe81e79ac57aadcc10b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): examples/java/src/main/java/org/apache/iggy/examples/multitenant/consumer/MultiTenantConsumer.java:110-117 | examples/java/src/main/java/org/apache/iggy/examples/multitenant/producer/MultiTenantProducer.java:110-117 \u2014 before extracting anything, compare \u0060examples/java/src/main/java/org/apache/iggy/examples/multitenant/consumer/MultiTenantConsumer.java\u0060 and \u0060examples/java/src/main/java/org/apache/iggy/examples/multitenant/producer/MultiTenantProducer.java\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 57 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 \u0060examples/java/src/main/java/org/apache/iggy/examples/multitenant/consumer/MultiTenantConsumer.java:110\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":"examples/java/src/main/java/org/apache/iggy/examples/multitenant/consumer/MultiTenantConsumer.java"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"0cd8407f6397d15b5706a74c55e71518e21156cc8aa6d0a162d16f4c3f3c0824"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): foreign/java/bench/src/main/java/org/apache/iggy/bench/report/IndividualMetricsCalculator.java:171-177 | foreign/java/bench/src/main/java/org/apache/iggy/bench/report/IndividualMetricsCalculator.java:237-243 | foreign/java/bench/src/main/java/org/apache/iggy/bench/report/IndividualMetricsCalculator.java:303-309 \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":"foreign/java/bench/src/main/java/org/apache/iggy/bench/report/IndividualMetricsCalculator.java"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"313a8beb17a911e835cf35e15c5bb345ac81208cf4d8b044b7baad663819bdec"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): examples/java/src/main/java/org/apache/iggy/examples/messageenvelope/producer/MessageEnvelopeProducer.java:70-76 | examples/java/src/main/java/org/apache/iggy/examples/messageheaders/producer/MessageHeadersProducer.java:71-77 | examples/java/src/main/java/org/apache/iggy/examples/streambuilder/StreamBasic.java:120-126 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 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 3 times. Read the line range as the matched WINDOW rather than a finished unit: at \u0060examples/java/src/main/java/org/apache/iggy/examples/messageenvelope/producer/MessageEnvelopeProducer.java:70\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":"examples/java/src/main/java/org/apache/iggy/examples/messageenvelope/producer/MessageEnvelopeProducer.java"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"09fbbcbc0fde6cdd59b6db0715f99842578a8351606a90ffd68559a97b82b6c1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): foreign/java/bench/src/main/java/org/apache/iggy/bench/models/report/FinalReport.java:43-47 | foreign/java/bench/src/main/java/org/apache/iggy/bench/models/report/metrics/IndividualMetrics.java:35-39 \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. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060foreign/java/bench/src/main/java/org/apache/iggy/bench/models/report/FinalReport.java:48\u0060 calls \u0060copyOf\u0060, \u0060requireNonNull\u0060 and \u0060foreign/java/bench/src/main/java/org/apache/iggy/bench/models/report/metrics/IndividualMetrics.java:40\u0060 does not \u2014 after which the two agree again for 2 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":"foreign/java/bench/src/main/java/org/apache/iggy/bench/models/report/FinalReport.java"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2aec0a14f979fb9033a68042a801d56d9eea2c13e62c3babcafe76f84bfaf4f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): examples/java/src/main/java/org/apache/iggy/examples/gettingstarted/consumer/GettingStartedConsumer.java:52-60 | examples/java/src/main/java/org/apache/iggy/examples/messageenvelope/consumer/MessageEnvelopeConsumer.java:61-69 | examples/java/src/main/java/org/apache/iggy/examples/messageheaders/consumer/MessageHeadersConsumer.java:64-72 \u2014 before extracting anything, compare \u0060examples/java/src/main/java/org/apache/iggy/examples/gettingstarted/consumer/GettingStartedConsumer.java\u0060 and \u0060examples/java/src/main/java/org/apache/iggy/examples/messageenvelope/consumer/MessageEnvelopeConsumer.java\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 86 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/java/src/main/java/org/apache/iggy/examples/gettingstarted/consumer/GettingStartedConsumer.java"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e973ffbfc24792a00a82033ee8ba10389d80d775b451941659d7d8fd978664c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): examples/java/src/main/java/org/apache/iggy/examples/gettingstarted/producer/GettingStartedProducer.java:105-112 | examples/java/src/main/java/org/apache/iggy/examples/tcptls/producer/TcpTlsProducer.java:126-133 \u2014 before extracting anything, compare \u0060examples/java/src/main/java/org/apache/iggy/examples/gettingstarted/producer/GettingStartedProducer.java\u0060 and \u0060examples/java/src/main/java/org/apache/iggy/examples/tcptls/producer/TcpTlsProducer.java\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 51 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/java/src/main/java/org/apache/iggy/examples/gettingstarted/producer/GettingStartedProducer.java"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"83e06c5f11de8181282569fad4a3f055ed088cbe81f1341d41c8b810fd98df3c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (36 lines \u00D7 2): examples/python/basic/consumer.py:62-97 | examples/python/getting-started/consumer.py:176-211 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just before the matched lines, \u0060examples/python/getting-started/consumer.py:172\u0060 calls \u0060exception\u0060 and \u0060examples/python/basic/consumer.py:58\u0060 does not \u2014 after which the two agree again for 2 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":"examples/python/basic/consumer.py"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef0bb6a4126aef772f2bdb9f871104eb36f377f9b5e64ab9ee1aac038cc3f5ba"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (35 lines \u00D7 2): examples/python/getting-started/consumer.py:70-104 | examples/python/getting-started/producer.py:69-103 \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. The \u0060return\u0060 at the foot of the matched lines is the enclosing body\u0027s own terminal exit, not an early one: it moves with them unchanged, and each site calls the extracted unit from the position that \u0060return\u0060 occupied \u2014 no decision has to be handed back and re-acted on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/python/getting-started/consumer.py"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"259f1b10ad361604e462ca45ed9d45642e948a4a78914a1fd6cd07c3a987eb70"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): examples/python/basic/producer.py:85-108 | examples/python/getting-started/producer.py:195-218 \u2014 \u0060examples/python/basic/producer.py\u0060 and \u0060examples/python/getting-started/producer.py\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 3 separate duplicated blocks between them, totalling at least 57 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own. Read the line range as the matched WINDOW rather than a finished unit: at \u0060examples/python/basic/producer.py:85\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":"examples/python/basic/producer.py"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f4c0c9baf4b144b241d7f8ae319651c15150c2d87386d7be203ef451b0069c3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 3): examples/python/basic/producer.py:63-81 | examples/python/getting-started/producer.py:173-191 | examples/python/message-headers/common.py:121-139 \u2014 \u0060examples/python/basic/producer.py\u0060 and \u0060examples/python/getting-started/producer.py\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 3 separate duplicated blocks between them, totalling at least 57 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/python/basic/producer.py"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f2a37193e5209ea08253ecf3995ba2407716e9729a3d8289919f913c92c55ca"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): examples/python/basic/producer.py:114-127 | examples/python/getting-started/producer.py:220-233 \u2014 \u0060examples/python/basic/producer.py\u0060 and \u0060examples/python/getting-started/producer.py\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 3 separate duplicated blocks between them, totalling at least 57 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own. Read the line range as the matched WINDOW rather than a finished unit: at \u0060examples/python/basic/producer.py:114\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just before the matched lines, \u0060examples/python/basic/producer.py:113\u0060 calls \u0060partition_id\u0060 and \u0060examples/python/getting-started/producer.py:219\u0060 does not \u2014 after which the two agree again for 2 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":"examples/python/basic/producer.py"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c983921537e410addf4af1ab323cbf2ddd24396cd57eec21d872a5f4370ae33"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): examples/python/high-level/background_producer.py:82-94 | examples/python/high-level/producer.py:82-91 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060examples/python/high-level/background_producer.py:82\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. 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":"examples/python/high-level/background_producer.py"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe92b47cdbbfb8b1ef22940cbfe9be64c7b66e5e555d8ba22f1a129376373df9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): examples/python/basic/consumer.py:39-49 | examples/python/basic/producer.py:39-49 \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. The \u0060return\u0060 at the foot of the matched lines is the enclosing body\u0027s own terminal exit, not an early one: it moves with them unchanged, and each site calls the extracted unit from the position that \u0060return\u0060 occupied \u2014 no decision has to be handed back and re-acted on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/python/basic/consumer.py"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff39f61375c40a11f459279d92547549cb14f207cce15b72023f54cfc9c75274"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (43 lines \u00D7 2): examples/python/getting-started/consumer.py:110-152 | examples/python/getting-started/producer.py:109-151 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/python/getting-started/consumer.py"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"146a2292b747e50d8d194d593c640ce51debf7c78d068321cdf41339046a63df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): examples/python/high-level/background_producer.py:43-53 | examples/python/high-level/consumer.py:43-53 | examples/python/high-level/producer.py:37-47 \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 all 3 call sites, so a change lands once. The \u0060return\u0060 at the foot of the matched lines is the enclosing body\u0027s own terminal exit, not an early one: it moves with them unchanged, and each site calls the extracted unit from the position that \u0060return\u0060 occupied \u2014 no decision has to be handed back and re-acted on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/python/high-level/background_producer.py"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"3659033169838ad4fe2368a324b2f2092d8a16c70eb0e7c3bd1e7ed29b891a60"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (28 lines \u00D7 2): examples/go/getting-started/consumer/main.go:141-168 | examples/go/getting-started/producer/main.go:137-164 \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. 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":"examples/go/getting-started/consumer/main.go"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"3302e48d6084c2897433444a294e4f14fbd358171693d2746e2a38530c7f893e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): examples/go/getting-started/consumer/main.go:41-59 | examples/go/getting-started/producer/main.go:43-61 \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. The matched lines also register a scope-exit action (a \u0060defer\u0060-style statement) that runs when the function holding them returns: moved into a called unit it would run when THAT unit returns instead \u2014 before the caller uses what it releases \u2014 so keep the registration at the call site and extract only the work around it, or have the extracted unit hand the resource back for the caller to register."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/go/getting-started/consumer/main.go"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3a6eb04f4265c67b39762832706e16a538243497dbcdd12dfef666f1925aa63"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project server: server has instability 0.92 with 1 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"2db80dd0432d10329e53af3f4586bc7dbcc374ee9186a1dacc609e22dbc70eea"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: cpu_allocation: cpu_allocation: abstractness 0.00, instability 0.00, distance 1.00 \u2014 zone of pain \u2014 concrete and depended on by 3 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"1a31b5f5199926f2331e47857dbeccd89b0f86b7915066b7ed428d05ac3ed44a"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: github.com/apache/iggy/foreign/go: github.com/apache/iggy/foreign/go: abstractness 0.01, instability 0.00, distance 0.99 \u2014 zone of pain \u2014 concrete and depended on by 1 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"bd55405d6ca5f018364ac1a0d1004b3bb4d8dd24315a0966a35aaf4c4149f9f9"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: iggy_binary_protocol: iggy_binary_protocol: abstractness 0.02, instability 0.00, distance 0.98 \u2014 zone of pain \u2014 concrete and depended on by 15 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"3f8a562cb76e7ee71014508b31053d5710815638d7ec9ef7f0b9a9540ebdb374"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: iggy_connector_sdk: iggy_connector_sdk: abstractness 0.07, instability 0.08, distance 0.85 \u2014 zone of pain \u2014 concrete and depended on by 23 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"945e8d7f3c19dfbb26efec870ac412f1863bf4b95719453efcf77cfb10928658"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: iggy_common: iggy_common: abstractness 0.14, instability 0.03, distance 0.83 \u2014 the shape a shared-kernel / building-block library has BY DESIGN \u2014 concrete and widely depended-on is what makes it useful, and this dimension does not penalise it (the distance is reported for completeness, not as a defect). Worth a look only if it has grown past one coherent kernel into an everything-bucket."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0ffdcd4d2f8c051a6d167e6546e90f7805053e49c7a9798006d9bc29b07c8b85"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: iggy (Cargo): iggy (Cargo): abstractness 0.14, instability 0.15, distance 0.71 \u2014 zone of pain \u2014 concrete and depended on by 11 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"669c6bfa112918fee4c244c0049260e3ff6cf362e98c63ca47eed17dfeb11464"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: Permissions (LCOM4 4): Permissions\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":"core/ai/mcp/src/main.rs"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"1698f7a96b63f79629905f761b612e458b0a32f4d29c09fce74223b9e3f5ffe8"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: CreateClient_TcpClientDisposesTwice: 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":"foreign/csharp/Iggy_SDK_Tests/ClientTests/IggyClientFactoryTests.cs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"0074933fb383cf932fcf184743962c44ee6fe7a9d74ee648869d44332120ba93"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Dispose_IsIdempotent: 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":"foreign/csharp/Iggy_SDK_Tests/UtilityTests/PooledBufferWriterTests.cs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d044a9f3b7a0a2327428d2c9cc44c67b3660a0343c4192528fc9ea66acea08c"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: BatchDispose_IsIdempotent: 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":"foreign/csharp/Iggy_SDK_Tests/UtilityTests/RentedMessageBatchTests.cs"},"region":{"startLine":192}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9b3b23bf676c2742de05a7fc4e6888bc01d289937b2aa4dbe1d06b886634de1"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: ValidateUsername_AcceptsTheServerBounds: 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":"foreign/csharp/Iggy_SDK_Tests/VsrTests/CredentialBoundsTests.cs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1ce7bde7a879f1549c267ba834e9a94eaf94e2f317bc56e73a8df1b232def93"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: ValidatePassword_AcceptsTheServerBounds: 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":"foreign/csharp/Iggy_SDK_Tests/VsrTests/CredentialBoundsTests.cs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2afff526c1709c129b0cbf8456415b72ad8634e906fea2f9f4470bb67c751b0"}},{"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":"11da6712ede2b30b3ff94ee82c98457c47b968884056163cb6b4f13d97947dea"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D13","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"deb753553f303f9be97b4f9e6c56726c4a1877ab4a1f18c5aa25cfe80357a7e2"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D13","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"8fef195632876b0ee419aeeb39b83473c212d835ff13501bc9f3fc9af4ee9938"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D13","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d6c849190067ee73495163a73e2a53ecd47beab1aaecdfe62e306d338b6672e2"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D13","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"bc7655fda34bd06d04a676403961a7021c178b7483545ad274e973ef7576f900"},"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: core/shard/src/lib.rs: core/shard/src/lib.rs changed 58 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 66 in IggyShard::tick_partitions at line 7575. 32 of those changes were fix/bug commits, so the churn is repair rather than feature work. 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/shard/src/lib.rs\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":"core/shard/src/lib.rs"},"region":{"startLine":7575}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2a4a4070a29b34017583841d49e63d326ac1245c573d37dfb6da9bb2d71c54d"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/partitions/src/iggy_partition.rs: core/partitions/src/iggy_partition.rs changed 53 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 36 in IggyPartition::on_replicate at line 4848. 26 of those changes were fix/bug commits, and the other 27 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/partitions/src/iggy_partition.rs\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":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":4848}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed49260ee1872320b8dfeb5dad0404b495af150a31a7f553c19839debc8904fa"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: foreign/node/src/wire/error.code.ts: foreign/node/src/wire/error.code.ts changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 240 in error.code.translateErrorCode at line 18. 3 of those changes were fix/bug commits, so the churn is repair rather than feature work. 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- foreign/node/src/wire/error.code.ts\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":"foreign/node/src/wire/error.code.ts"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"777afe3d37f2fa4afa2936b758de6fb913a16eecb292d33bac9cd1070a2c51bc"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/shard/src/router.rs: core/shard/src/router.rs changed 30 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 36 in IggyShard::process_lifecycle at line 674. 13 of those changes were fix/bug commits, and the other 17 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/shard/src/router.rs\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":"core/shard/src/router.rs"},"region":{"startLine":674}}}],"partialFingerprints":{"codehealthFindingId/v1":"62c771b2c83d6f32fea6b402e605571ab210284779c706ec0baa5d4e2c0cbf4e"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/server/src/partition_reconciler.rs: core/server/src/partition_reconciler.rs changed 42 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 18 in server::partition_reconciler::reconcile_additions at line 573. 13 of those changes were fix/bug commits, and the other 29 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/server/src/partition_reconciler.rs\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":"core/server/src/partition_reconciler.rs"},"region":{"startLine":573}}}],"partialFingerprints":{"codehealthFindingId/v1":"8922a25b996e05519c6efa4d54395baefe0a2d83413326c0af671932ce3bbce0"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/metadata/src/impls/metadata.rs: core/metadata/src/impls/metadata.rs changed 42 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 17 in IggyMetadata::install_state_transfer at line 1733. 17 of those changes were fix/bug commits, and the other 25 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/metadata/src/impls/metadata.rs\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":"core/metadata/src/impls/metadata.rs"},"region":{"startLine":1733}}}],"partialFingerprints":{"codehealthFindingId/v1":"e55e31da28456429364065c915b03c3b9cc94cf8454bffdfa4c851fe4c95a81e"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/partitions/src/state_transfer.rs: core/partitions/src/state_transfer.rs changed 15 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 33 in IggyPartition::install_state_transfer at line 2558. 8 of those changes were fix/bug commits, so the churn is repair rather than feature work. 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/partitions/src/state_transfer.rs\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":"core/partitions/src/state_transfer.rs"},"region":{"startLine":2558}}}],"partialFingerprints":{"codehealthFindingId/v1":"8324524649ed5c3ff85b5114b3309bf6d00b88cd28fc6ec4c60aa2a2aded4969"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/configs/src/server_config/validators.rs: core/configs/src/server_config/validators.rs changed 13 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 38 in ServerConfig::validate at line 51. 5 of those changes were fix/bug commits, and the other 8 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/configs/src/server_config/validators.rs\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":"core/configs/src/server_config/validators.rs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"bcb6d6ecb8472f85bfea5c7f84327e36aebce53dc538b915973aeac25e4f0860"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/sdk/src/quic/quic_client.rs: core/sdk/src/quic/quic_client.rs changed 11 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 44 in QuicClient::send_raw_with_response at line 168. 6 of those changes were fix/bug commits, so the churn is repair rather than feature work. 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/sdk/src/quic/quic_client.rs\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":"core/sdk/src/quic/quic_client.rs"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4c7bd2106ecff58e7e72b7828fe20ac5aa19e58aad03eb24707c5906746ee82"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/sdk/src/websocket/websocket_client.rs: core/sdk/src/websocket/websocket_client.rs changed 11 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 44 in WebSocketClient::send_raw_with_response at line 162. 7 of those changes were fix/bug commits, so the churn is repair rather than feature work. 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/sdk/src/websocket/websocket_client.rs\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":"core/sdk/src/websocket/websocket_client.rs"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"358246d4b8be9877351877290326ea9d4d7e91fd0bf065d2ec13a4a3b0d078aa"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/simulator/src/replica.rs: core/simulator/src/replica.rs changed 24 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 19 in simulator::replica::new_shard at line 143. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/simulator/src/replica.rs\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":"core/simulator/src/replica.rs"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c57862dab96d3681b4f447bbb40777e49b1e8853c51cd73110e94f1e587f96c"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/configs/src/server_config/cluster.rs: core/configs/src/server_config/cluster.rs changed 8 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 49 in ClusterConfig::validate at line 868. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/configs/src/server_config/cluster.rs\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":"core/configs/src/server_config/cluster.rs"},"region":{"startLine":868}}}],"partialFingerprints":{"codehealthFindingId/v1":"98b70095c991fb26bb2d3a9d3e901275ef312c3936a8dd4536304da98fda326b"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/metadata/src/stm/stream.rs: core/metadata/src/stm/stream.rs changed 26 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in CreateTopicWithAssignmentsRequest::apply at line 2191. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/metadata/src/stm/stream.rs\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":"core/metadata/src/stm/stream.rs"},"region":{"startLine":2191}}}],"partialFingerprints":{"codehealthFindingId/v1":"9131c3d6fffc22eba6d80e94ddbe8c6b1aa1286256f2ea1a59de29a66c5eeb8f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: foreign/csharp/Iggy_SDK/IggyClient/Implementations/TcpMessageStream.cs: foreign/csharp/Iggy_SDK/IggyClient/Implementations/TcpMessageStream.cs changed 13 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 28 in TcpMessageStream.TryEstablishConnectionAsync at line 1049. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- foreign/csharp/Iggy_SDK/IggyClient/Implementations/TcpMessageStream.cs\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":"foreign/csharp/Iggy_SDK/IggyClient/Implementations/TcpMessageStream.cs"},"region":{"startLine":1049}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bd3ad262dd150123cdac0aedcc764ed7f87bede789211b68d0b8972c8eede3f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/metadata/src/impls/recovery.rs: core/metadata/src/impls/recovery.rs changed 16 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 21 in metadata::impls::recovery::recover at line 355. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/metadata/src/impls/recovery.rs\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":"core/metadata/src/impls/recovery.rs"},"region":{"startLine":355}}}],"partialFingerprints":{"codehealthFindingId/v1":"c749d061030544c853b2bedc7b5315f4dfee0079929a3ddd49e07f95f02c8f8e"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/sdk/src/clients/consumer.rs: core/sdk/src/clients/consumer.rs changed 12 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 28 in IggyConsumer::poll_next at line 1533. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/sdk/src/clients/consumer.rs\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":"core/sdk/src/clients/consumer.rs"},"region":{"startLine":1533}}}],"partialFingerprints":{"codehealthFindingId/v1":"d526b357c90a71ccba25d6b81f69acaf9f1985ba26445d084667830bb3a76341"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/server/src/boot/mod.rs: core/server/src/boot/mod.rs changed 10 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 27 in server::boot::shard_main at line 410. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/server/src/boot/mod.rs\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":"core/server/src/boot/mod.rs"},"region":{"startLine":410}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c4ea98a4503f7d189c5d80e46d32b69e73c44be47c4ca1301f427ad460ec390"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: foreign/go/client/tcp/tcp_core.go: foreign/go/client/tcp/tcp_core.go changed 10 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 27 in IggyTcpClient.Connect at line 1043. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- foreign/go/client/tcp/tcp_core.go\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":"foreign/go/client/tcp/tcp_core.go"},"region":{"startLine":1043}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e43fabbae6276cb701fccf6ef7215a7b65c748d20223d0e1a1c3d5b62b89d4d"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/server_common/src/consensus_message.rs: core/server_common/src/consensus_message.rs changed 12 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 22 in MessageBag::try_from at line 920. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/server_common/src/consensus_message.rs\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":"core/server_common/src/consensus_message.rs"},"region":{"startLine":920}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1b2be01dce7b9ee371450ef262d190287b7e5c8d54e371999c45db2dd67f1a5"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: foreign/node/src/client/client.socket.ts: foreign/node/src/client/client.socket.ts changed 9 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 29 in CommandResponseStream.sendCommand at line 305. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- foreign/node/src/client/client.socket.ts\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":"foreign/node/src/client/client.socket.ts"},"region":{"startLine":305}}}],"partialFingerprints":{"codehealthFindingId/v1":"629c272d169e60dec7f3acf0b0a51ae644aef8147ab2f52c88dfc8e1f262b05d"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/journal/src/prepare_journal.rs: core/journal/src/prepare_journal.rs changed 12 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 21 in PrepareJournal::scan at line 411. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/journal/src/prepare_journal.rs\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":"core/journal/src/prepare_journal.rs"},"region":{"startLine":411}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4dbbb60b5a7199108837b052470d58169c40c2f2c8d53c180b8b26aef9bd9f1"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/sdk/src/tcp/tcp_client.rs: core/sdk/src/tcp/tcp_client.rs changed 10 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 25 in TcpClient::send_raw at line 1317. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/sdk/src/tcp/tcp_client.rs\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":"core/sdk/src/tcp/tcp_client.rs"},"region":{"startLine":1317}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6ca1e4e1446f39349ece094b4428e54603f770bc2a5a3028c3ed32f09056044"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/metadata/src/stm/authz.rs: core/metadata/src/stm/authz.rs changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 39 in metadata::stm::authz::authorize at line 128. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/metadata/src/stm/authz.rs\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":"core/metadata/src/stm/authz.rs"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"e91fcf970ba34e31f3e971bb6e80e30cc0c552a2afc9be297562d96d08751938"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/partitions/src/segment_recovery.rs: core/partitions/src/segment_recovery.rs changed 12 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 19 in partitions::segment_recovery::load_persisted_segments_with_checkpoint at line 570. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/partitions/src/segment_recovery.rs\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":"core/partitions/src/segment_recovery.rs"},"region":{"startLine":570}}}],"partialFingerprints":{"codehealthFindingId/v1":"5047482b7f6aaa0e9b066d456bb350b4c034822db8615a4d4a43009bbdb55820"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/server/src/dispatch/mod.rs: core/server/src/dispatch/mod.rs changed 11 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 20 in server::dispatch::handle_client_request at line 408. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/server/src/dispatch/mod.rs\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":"core/server/src/dispatch/mod.rs"},"region":{"startLine":408}}}],"partialFingerprints":{"codehealthFindingId/v1":"49800375ac0f894dee7483da8637e666c7c30ac8a1a9ac228cdab0ded6cc7c99"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/cli/src/main.rs: core/cli/src/main.rs changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 50 in iggy_cli::get_command at line 107. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/cli/src/main.rs\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":"core/cli/src/main.rs"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecc067c162459812e430d9cf686979cf6d9a96c3c2f734421b71c03b2640ccc5"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: foreign/csharp/Iggy_SDK/IggyClient/Implementations/TcpMessageStream.Vsr.cs: foreign/csharp/Iggy_SDK/IggyClient/Implementations/TcpMessageStream.Vsr.cs changed 8 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 25 in TcpMessageStream.SendRawAsync at line 531. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- foreign/csharp/Iggy_SDK/IggyClient/Implementations/TcpMessageStream.Vsr.cs\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":"foreign/csharp/Iggy_SDK/IggyClient/Implementations/TcpMessageStream.Vsr.cs"},"region":{"startLine":531}}}],"partialFingerprints":{"codehealthFindingId/v1":"a279dc0aa7221b401855dffcde24d614b02d70c740abdb236bda01c7ab74af53"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/partitions/src/poll_plan.rs: core/partitions/src/poll_plan.rs changed 13 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in DiskReadPlan::read_disk at line 497. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/partitions/src/poll_plan.rs\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":"core/partitions/src/poll_plan.rs"},"region":{"startLine":497}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c184a1c122c09a653fd1469ee4e1f2df10a084edaec01735282ed9d8510858f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/configs/src/server_config/partition.rs: core/configs/src/server_config/partition.rs changed 10 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 19 in PartitionConfig::validate at line 283. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/configs/src/server_config/partition.rs\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":"core/configs/src/server_config/partition.rs"},"region":{"startLine":283}}}],"partialFingerprints":{"codehealthFindingId/v1":"29fa4f9803f2487d190b5b5d6ac1989c600c07fe2624c9c6830b93b2bb5ded4a"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/metadata/src/stm/result.rs: core/metadata/src/stm/result.rs changed 7 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 24 in metadata::stm::result::result_code_recognized at line 286. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/metadata/src/stm/result.rs\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":"core/metadata/src/stm/result.rs"},"region":{"startLine":286}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b2bdb451c435407cf1f7febdb7ca5e90f12b1db12b1461443b3244d6ac75d20"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: foreign/node/src/client/client.connection.ts: foreign/node/src/client/client.connection.ts changed 8 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 19 in IggyConnection._reconnectUntilConnected at line 408. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- foreign/node/src/client/client.connection.ts\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":"foreign/node/src/client/client.connection.ts"},"region":{"startLine":408}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebe876f5ec78f0a26c656bb50ecf8af4b457683e07d4b9af89e4bdd3dd81abb4"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: foreign/csharp/Iggy_SDK/Publishers/IggyPublisherBuilder.cs: foreign/csharp/Iggy_SDK/Publishers/IggyPublisherBuilder.cs changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 25 in IggyPublisherBuilder.Validate at line 385. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- foreign/csharp/Iggy_SDK/Publishers/IggyPublisherBuilder.cs\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":"foreign/csharp/Iggy_SDK/Publishers/IggyPublisherBuilder.cs"},"region":{"startLine":385}}}],"partialFingerprints":{"codehealthFindingId/v1":"88e6a4e1efa14a247e24aa7003eae8088cb21623cdf5c33b9eb47e7f3e9cf28f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/connectors/runtime/src/main.rs: core/connectors/runtime/src/main.rs changed 7 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 21 in iggy_connectors::main at line 121. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/connectors/runtime/src/main.rs\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":"core/connectors/runtime/src/main.rs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"c45198486294739e8ea78c0587403bedaa788bb3e48460f21dd15cc0d5c7c4fb"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/configs/src/server_config/sharding.rs: core/configs/src/server_config/sharding.rs changed 9 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in ShardingConfig::validate at line 177. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/configs/src/server_config/sharding.rs\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":"core/configs/src/server_config/sharding.rs"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd0b1587fdad2132799fd41b5791a03855f58b06a9a47992ed38a1c8b7421f35"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/server/src/http/forward.rs: core/server/src/http/forward.rs changed 8 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 17 in server::http::forward::forward_partition_or_pass at line 335. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/server/src/http/forward.rs\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":"core/server/src/http/forward.rs"},"region":{"startLine":335}}}],"partialFingerprints":{"codehealthFindingId/v1":"749f02e7df44f39f503323bb996c1ca5f8e815d755f31010360ea8824c3e749a"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/integration/src/harness/orchestrator/harness.rs: core/integration/src/harness/orchestrator/harness.rs changed 9 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in TestHarness::start_internal at line 106. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/integration/src/harness/orchestrator/harness.rs\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":"core/integration/src/harness/orchestrator/harness.rs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"2547b3bfb74e074b1f0f8b6424e82208a05255e551bf430ea51d4d189148e3b1"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/message_bus/src/transports/quic.rs: core/message_bus/src/transports/quic.rs changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 21 in QuicTransportConn::run at line 379. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/message_bus/src/transports/quic.rs\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":"core/message_bus/src/transports/quic.rs"},"region":{"startLine":379}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d51f810776182349977fca2e1d179685733149f1cd5885afd8726a4f537cc8e"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: gateways/kafka/tools/kafka-tool/src/main.rs: gateways/kafka/tools/kafka-tool/src/main.rs changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 37 in kafka_message_gen::build_payload at line 242. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- gateways/kafka/tools/kafka-tool/src/main.rs\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":"gateways/kafka/tools/kafka-tool/src/main.rs"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4b575d4304477cf750302729359e72a1fed1125b08ad4b51cc628a94cdd640d"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/server/src/dispatch/reads.rs: core/server/src/dispatch/reads.rs changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 21 in server::dispatch::reads::handle_non_replicated_request at line 353. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/server/src/dispatch/reads.rs\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":"core/server/src/dispatch/reads.rs"},"region":{"startLine":353}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ab7d9edd0eff5522e697083271306e118e6a9579df379c0f09bff27c0c32bd7"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/connectors/runtime/src/source.rs: core/connectors/runtime/src/source.rs changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 25 in iggy_connectors::source::source_forwarding_loop at line 555. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/connectors/runtime/src/source.rs\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":"core/connectors/runtime/src/source.rs"},"region":{"startLine":555}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c4f590e8b51370227306a1a191c836f489136f2c89f382338c5fb60ac938106"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: foreign/csharp/Iggy_SDK/Consumers/IggyConsumerBuilder.cs: foreign/csharp/Iggy_SDK/Consumers/IggyConsumerBuilder.cs changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 20 in IggyConsumerBuilder.Validate at line 321. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- foreign/csharp/Iggy_SDK/Consumers/IggyConsumerBuilder.cs\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":"foreign/csharp/Iggy_SDK/Consumers/IggyConsumerBuilder.cs"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"85074f67242eafa1eeb7ef576d82d2d3f443bfcee25fe25a9e738e2d17aebebe"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/server/src/boot/threads.rs: core/server/src/boot/threads.rs changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in server::boot::threads::validate_sharding_runtime_knobs at line 566. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/server/src/boot/threads.rs\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":"core/server/src/boot/threads.rs"},"region":{"startLine":566}}}],"partialFingerprints":{"codehealthFindingId/v1":"5231eaadd7b567a0f000f3ef4e19abe183adc55a5816529be5002ae9f8fe3c57"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs: foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in TcpContracts.CreateMessage at line 338. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs\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":"foreign/csharp/Iggy_SDK/Contracts/Tcp/TcpContracts.cs"},"region":{"startLine":338}}}],"partialFingerprints":{"codehealthFindingId/v1":"20ec1426afbe984f61a50b9d37a0d50a0f576011a1c0e5c7fa169631a431bcb4"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/simulator/src/workload/ops/mod.rs: core/simulator/src/workload/ops/mod.rs changed 4 times in last 90 days, max cyclomatic complexity 24 in simulator::workload::ops::predicted_effect at line 172. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/simulator/src/workload/ops/mod.rs\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":"core/simulator/src/workload/ops/mod.rs"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d072b850d1c8e8b0e9758b4cb0c715b7ba3557b4c18cc91635289ca443ffe45"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: foreign/python/src/config.rs: foreign/python/src/config.rs changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 17 in QuicConfig::new at line 608. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- foreign/python/src/config.rs\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":"foreign/python/src/config.rs"},"region":{"startLine":608}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4120a7b5e2a7e9e1af192eb4c0ac94709d28759e25a3e59eeb88d68f4827842"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: foreign/node/src/client/client.config.ts: foreign/node/src/client/client.config.ts changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 21 in (anonymous) at line 35. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- foreign/node/src/client/client.config.ts\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":"foreign/node/src/client/client.config.ts"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"49a344d748047a7075d07cb2d3a1f7e2bfdf518cd9b4303c6741392ff86bfe4e"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: gateways/kafka/src/main.rs: gateways/kafka/src/main.rs changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in iggy_gateway_kafka::load_config at line 180. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- gateways/kafka/src/main.rs\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":"gateways/kafka/src/main.rs"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"01eaf2477012defc4731730d05bf5d2ee26d0bcc0852650e084bdcdd40eb0a97"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: foreign/csharp/Iggy_SDK/Consumers/IggyConsumer.Rented.cs: foreign/csharp/Iggy_SDK/Consumers/IggyConsumer.Rented.cs changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 19 in IggyConsumer.PollRentedMessagesAsync at line 103. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- foreign/csharp/Iggy_SDK/Consumers/IggyConsumer.Rented.cs\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":"foreign/csharp/Iggy_SDK/Consumers/IggyConsumer.Rented.cs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfed4f10482051bf8ea491f048012421a3eaa490b926bad3b9772d113e5d62d5"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: foreign/csharp/Iggy_SDK/Consumers/IggyConsumer.cs: foreign/csharp/Iggy_SDK/Consumers/IggyConsumer.cs changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in IggyConsumer.PollMessagesAsync at line 402. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- foreign/csharp/Iggy_SDK/Consumers/IggyConsumer.cs\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":"foreign/csharp/Iggy_SDK/Consumers/IggyConsumer.cs"},"region":{"startLine":402}}}],"partialFingerprints":{"codehealthFindingId/v1":"d31193d5cd7ae8dbfeaafcdc716ad58f04db10c7dc95b5361dfbc10ed100088c"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/connectors/runtime/src/sink.rs: core/connectors/runtime/src/sink.rs changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 23 in iggy_connectors::sink::process_messages at line 548. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/connectors/runtime/src/sink.rs\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":"core/connectors/runtime/src/sink.rs"},"region":{"startLine":548}}}],"partialFingerprints":{"codehealthFindingId/v1":"46153cff41041ccebbd30c21b8e1c53eab5c351e8759306223409893fdad913c"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/journal/src/partition_journal.rs: core/journal/src/partition_journal.rs changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 18 in PartitionPrepareJournal::rewrite at line 1353. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/journal/src/partition_journal.rs\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":"core/journal/src/partition_journal.rs"},"region":{"startLine":1353}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1337a68e5318d058b2da7fee19fe420b60c963fc9202cd7295ca4857e32b602"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: foreign/node/src/wire/topic/create-topic.command.ts: foreign/node/src/wire/topic/create-topic.command.ts changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 18 in serialize at line 86. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- foreign/node/src/wire/topic/create-topic.command.ts\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":"foreign/node/src/wire/topic/create-topic.command.ts"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"41b9c933b8062a95c43807560764d4a2f914806b45962b3a98463cfff624e819"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/connectors/sources/influxdb_source/src/lib.rs: core/connectors/sources/influxdb_source/src/lib.rs changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 24 in InfluxDbSource::open at line 258. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/connectors/sources/influxdb_source/src/lib.rs\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":"core/connectors/sources/influxdb_source/src/lib.rs"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee8aa842314a67614211ea9904e318845f3998a9101cd8a7450820b7bace2408"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/connectors/sdk/src/source.rs: core/connectors/sdk/src/source.rs changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in iggy_connector_sdk::source::handle_messages at line 288. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/connectors/sdk/src/source.rs\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":"core/connectors/sdk/src/source.rs"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0c38ae59dc056bb21c37aa3e14c386de5dac02934439cafc1ddcd348057f82f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/connectors/sources/postgres_source/src/lib.rs: core/connectors/sources/postgres_source/src/lib.rs changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in PostgresSource::process_row at line 1419. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/connectors/sources/postgres_source/src/lib.rs\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":"core/connectors/sources/postgres_source/src/lib.rs"},"region":{"startLine":1419}}}],"partialFingerprints":{"codehealthFindingId/v1":"115e1d7af44d06040f71fcbf63e5e90735c02c1755c769f767e3b742df743223"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: core/connectors/sdk/src/decoders/proto.rs: core/connectors/sdk/src/decoders/proto.rs changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 20 in ProtoStreamDecoder::decode_field_value at line 386. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/connectors/sdk/src/decoders/proto.rs\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":"core/connectors/sdk/src/decoders/proto.rs"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6918cf65f2a3344616674fa358b6fcb36cd6f3954130113d05466434f1d4339"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: foreign/csharp/Iggy_SDK/Publishers/BackgroundMessageProcessor.cs: foreign/csharp/Iggy_SDK/Publishers/BackgroundMessageProcessor.cs changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 18 in BackgroundMessageProcessor.SendWithRetry at line 480. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- foreign/csharp/Iggy_SDK/Publishers/BackgroundMessageProcessor.cs\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":"foreign/csharp/Iggy_SDK/Publishers/BackgroundMessageProcessor.cs"},"region":{"startLine":480}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7bd5327af535daa443664d699a67e25d8fdb6485c7fe086978378bd9e165838"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: gateways/kafka/src/protocol/handlers/produce.rs: gateways/kafka/src/protocol/handlers/produce.rs changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in iggy_gateway_kafka::protocol::handlers::produce::handle at line 100. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- gateways/kafka/src/protocol/handlers/produce.rs\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":"gateways/kafka/src/protocol/handlers/produce.rs"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cfbe7e476d778daab4c996f8ec7f1a93932fb6ee71612f0a6f972394d40f81d"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: core/shard/src/metrics.rs: core/shard/src/metrics.rs changed 18 times in last 90 days and 11 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 2 (its worst body is FrameDropMetrics::record at line 893), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix(cluster): preserve group membership and reduce produce/poll overhead (#4169)\u201D; \u201Cfix(partitions): complete polls on the owning shard (#4119)\u201D; \u201Cfix(shard): refuse a frame no consensus plane claims (#4103)\u201D; \u201Cfix(partitions): bound consumer offset state per partition (#4063)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/shard/src/metrics.rs\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":"core/shard/src/metrics.rs"},"region":{"startLine":893}}}],"partialFingerprints":{"codehealthFindingId/v1":"a24e308c61446dc4260f1eb61bc53f39a95d1ce937eab6299d0ed5216ee29618"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: core/consensus/src/plane_helpers.rs: core/consensus/src/plane_helpers.rs changed 19 times in last 90 days and 10 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 6 (its worst body is consensus::plane_helpers::replicate_preflight at line 345), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix(consensus): count an unservable header as a nack (#4109)\u201D; \u201Cfix(consensus): keep a replica off a hole in its committed prefix (#4073)\u201D; \u201Cfix(cluster): prevent repaired prepares from rewinding WAL parent (#3978)\u201D; \u201Crefactor(consensus): single restore constructor \u002B wedge/replay/ack fixes (#3909)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/consensus/src/plane_helpers.rs\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":"core/consensus/src/plane_helpers.rs"},"region":{"startLine":345}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7ad2f4a6548ffb7dbd2f0ad227ae542424ff897851d1b03ae03543c22585431"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: core/server/src/boot/recovery.rs: core/server/src/boot/recovery.rs changed 12 times in last 90 days and 7 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 11 (its worst body is server::boot::recovery::build_shard_for_thread at line 69), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix(server): recover stalled consumer groups after restarts (#4283)\u201D; \u201Cfix(partitions): complete polls on the owning shard (#4119)\u201D; \u201Cfix(metadata): roll deleted partitions and topics out of parent stats (#4046)\u201D; \u201Cfix(partitions): bound consumer offset state per partition (#4063)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/server/src/boot/recovery.rs\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":"core/server/src/boot/recovery.rs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"549f135d79cc0c4f815405a06e175b1d1f78fd9199b3e54c6947f9e0a8a95b6c"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: core/common/src/error/iggy_error.rs: core/common/src/error/iggy_error.rs changed 9 times in last 90 days and 6 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 1 (its worst body is IggyError::as_code at line 572), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix(partitions): bound consumer offset state per partition (#4063)\u201D; \u201Cfix(server): truncate torn segment tails instead of resurrecting them (#3946)\u201D; \u201Cfix(metadata): enforce namespace caps at admission to stop aliasing (#3907)\u201D; \u201Cfix(sdk): forward unknown command codes instead of rejecting them (#3766)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/common/src/error/iggy_error.rs\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":"core/common/src/error/iggy_error.rs"},"region":{"startLine":572}}}],"partialFingerprints":{"codehealthFindingId/v1":"aca34a53a1a73b50a751b5a8f5dc7d97c1d76be77008278561aa0316187ed8cb"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: core/common/src/traits/binary_impls/messages.rs: core/common/src/traits/binary_impls/messages.rs changed 9 times in last 90 days and 5 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 9 (its worst body is iggy_common::traits::binary_impls::messages::poll_group_messages at line 169), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix(cluster): preserve group membership and reduce produce/poll overhead (#4169)\u201D; \u201Cfix(sdk): preserve consumer progress and client error handling (#4151)\u201D; \u201Cfix(server): preserve write responses and validate CLI input (#4150)\u201D; \u201Cfix(sdk): correct consumer group polling and commits in IggyConsumer (#4034)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/common/src/traits/binary_impls/messages.rs\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":"core/common/src/traits/binary_impls/messages.rs"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a2e05f3f67ab1c48942fc4c12d486e461193a132d5dd2a2e217f50eb7c3fb40"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: core/binary_protocol/src/consensus/operation.rs: core/binary_protocol/src/consensus/operation.rs changed 7 times in last 90 days and 4 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 3 (its worst body is Operation::to_command_code at line 225), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix(server): preserve write responses and validate CLI input (#4150)\u201D; \u201Cfix(shard): refuse a frame no consensus plane claims (#4103)\u201D; \u201Cfix(shard): tell an unknown consensus operation from a corrupt header (#3931)\u201D; \u201Cfix(integration): pass remaining tests for server-ng (#3585)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/binary_protocol/src/consensus/operation.rs\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":"core/binary_protocol/src/consensus/operation.rs"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5ce69ccf60e6f42d98766920b272d232b86ea871e2a1bad6fb36bf64ee332d8"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: core/server/src/shell.rs: core/server/src/shell.rs changed 6 times in last 90 days and 4 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 1 (its worst body is server::shell::duration_to_ticks at line 86), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix(server): recover stalled consumer groups after restarts (#4283)\u201D; \u201Cfix(partitions): complete polls on the owning shard (#4119)\u201D; \u201Cfix(shard): drive metadata repair and the commit walk from the tick (#4008)\u201D; \u201Cfix(shard): drive partition repair and the commit walk from the tick (#4006)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/server/src/shell.rs\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":"core/server/src/shell.rs"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"93b9ff731fe8cf5b0aa429254055fe1e89d0e58b4e68beebd5994f1ad7d7692b"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: core/sdk/src/leader_aware.rs: core/sdk/src/leader_aware.rs changed 6 times in last 90 days and 4 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 7 (its worst body is iggy::leader_aware::check_and_redirect_to_leader at line 71), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix(cluster): preserve group membership and reduce produce/poll overhead (#4169)\u201D; \u201Cfix(partitions): bound consumer offset state per partition (#4063)\u201D; \u201Cfix(cluster): recover writes after a fast partition primary rejoin (#3987)\u201D; \u201Cfix(server-ng): fix restart/reconnect hardening and cg integration tests (#3625)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/sdk/src/leader_aware.rs\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":"core/sdk/src/leader_aware.rs"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"09c4729e0523792ddf23aec43835129be046de2a2339947f90e8e65a626dfb41"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: core/connectors/sinks/quickwit_sink/src/lib.rs: core/connectors/sinks/quickwit_sink/src/lib.rs changed 5 times in last 90 days and 4 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 8 (its worst body is QuickwitSink::ingest at line 212), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix(connectors): tag sink batches with the payload\u0027s schema (#4204)\u201D; \u201Cfix(connectors): defer source checkpoints and surface sink failures (#4153)\u201D; \u201Cfix(connectors): validate sink writes and startup readiness (#4154)\u201D; \u201Cfix(connectors): bring quickwit_sink up to convention (#3523)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/connectors/sinks/quickwit_sink/src/lib.rs\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":"core/connectors/sinks/quickwit_sink/src/lib.rs"},"region":{"startLine":212}}}],"partialFingerprints":{"codehealthFindingId/v1":"40c81051cafc7b5d6fda5e55a344a0fe4381eb9a3f8b980ab8121f0c6b74462b"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: core/connectors/sinks/elasticsearch_sink/src/lib.rs: core/connectors/sinks/elasticsearch_sink/src/lib.rs changed 4 times in last 90 days and 4 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 14 (its worst body is ElasticsearchSink::bulk_index_documents at line 205), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix(connectors): tag sink batches with the payload\u0027s schema (#4204)\u201D; \u201Cfix(connectors): defer source checkpoints and surface sink failures (#4153)\u201D; \u201Cfix(connectors): validate sink writes and startup readiness (#4154)\u201D; \u201Cfix(connectors): Harden Elasticsearch sink test readiness (#3729)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/connectors/sinks/elasticsearch_sink/src/lib.rs\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":"core/connectors/sinks/elasticsearch_sink/src/lib.rs"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbed7fe1ac1d699b9f9ae9a5f6b2de353852ea78cac9403b461289fe9610eab1"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: core/sdk/src/clients/client.rs: core/sdk/src/clients/client.rs changed 5 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 5 (its worst body is IggyClient::send_binary_request at line 870), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix(sdk): preserve consumer progress and client error handling (#4151)\u201D; \u201Cfix(rust): add heartbeat handle and drop for rust sdk (#3852)\u201D; \u201Cfix(sdk): forward unknown command codes instead of rejecting them (#3766)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/sdk/src/clients/client.rs\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":"core/sdk/src/clients/client.rs"},"region":{"startLine":870}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd4249c01499cb7985421a9c111a269cafbb9667797a30424af178a4557aaf2b"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: core/server/src/dispatch/submit.rs: core/server/src/dispatch/submit.rs changed 5 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 11 (its worst body is server::dispatch::submit::handle_metadata_submit at line 54), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix(server): recover stalled consumer groups after restarts (#4283)\u201D; \u201Cfix(cluster): preserve group membership and reduce produce/poll overhead (#4169)\u201D; \u201Cfix(cluster): serve metadata reads at or above the client\u0027s own writes (#4024)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/server/src/dispatch/submit.rs\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":"core/server/src/dispatch/submit.rs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"db6d09b11720aa9b7339328f4809cefac59c9ac73c6976b115ebfc893fd02605"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: core/partitions/src/persistence.rs: core/partitions/src/persistence.rs changed 5 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 13 (its worst body is PartitionPersistence::run_inner at line 1152), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix(partitions): sync checkpoints through original writers (#4253)\u201D; \u201Cfix(partitions): account for segment-backed append batches (#4202)\u201D; \u201Cfix(cluster): preserve group membership and reduce produce/poll overhead (#4169)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/partitions/src/persistence.rs\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":"core/partitions/src/persistence.rs"},"region":{"startLine":1152}}}],"partialFingerprints":{"codehealthFindingId/v1":"37f0579fbe8ff25bc45de474c48036f0ac25a65756d85c8bc4141076617e364b"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: core/message_bus/src/client_listener/mod.rs: core/message_bus/src/client_listener/mod.rs changed 5 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 1 (its worst body is message_bus::client_listener::bind_nodelay_listener at line 115), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix(server): distribute TCP-TLS and WSS connections across shards (#4193)\u201D; \u201Cfix(io_uring): keep shard startup off blocking fallbacks\u201D; \u201Cfix(integration): pass remaining tests for server-ng (#3585)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/message_bus/src/client_listener/mod.rs\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":"core/message_bus/src/client_listener/mod.rs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"15bf312013da9c150241a8f3c152c35d12ca185ca5522cea9daef003d0892d24"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: core/connectors/runtime/src/manager/source.rs: core/connectors/runtime/src/manager/source.rs changed 5 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 7 (its worst body is SourceDetails::apply_status at line 375), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix(connectors): defer postgres source progress until ack (#3957)\u201D; \u201Cfix(connectors): report failures and correct format conversion (#4152)\u201D; \u201Cfix(connectors): close the source instance a failed start leaves behind (#4064)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/connectors/runtime/src/manager/source.rs\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":"core/connectors/runtime/src/manager/source.rs"},"region":{"startLine":375}}}],"partialFingerprints":{"codehealthFindingId/v1":"847e515322022e03e9065132738f7df8a1900655fce85a3329758331a0a337e8"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: core/server/src/http/error.rs: core/server/src/http/error.rs changed 5 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 10 (its worst body is ErrorResponse::from_error at line 117), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix(partitions): complete polls on the owning shard (#4119)\u201D; \u201Cfix(cluster): serve metadata reads at or above the client\u0027s own writes (#4024)\u201D; \u201Cfix(server)!: reject a wildcard bind with no advertised address (#3923)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/server/src/http/error.rs\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":"core/server/src/http/error.rs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"10d722cee5a15f72372fcd10fe3672de96c479932dbe31b0a68e53aaec6ef2b3"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: core/sdk/src/clients/producer_dispatcher.rs: core/sdk/src/clients/producer_dispatcher.rs changed 5 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 10 (its worst body is ProducerDispatcher::dispatch at line 449), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix(sdk): respect max_buffer_size when merging batches (#3933)\u201D; \u201Cfix(sdk): error callback should await shard flush on producer shutdown (#3953)\u201D; \u201Cfix(rust,sdk): stop late offset stores from hitting a left group (#3668)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/sdk/src/clients/producer_dispatcher.rs\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":"core/sdk/src/clients/producer_dispatcher.rs"},"region":{"startLine":449}}}],"partialFingerprints":{"codehealthFindingId/v1":"42e18f709fd3cc4eab9a050e3cdd49039e1547398fd2484fc1c2265b9f922ee8"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: core/connectors/runtime/src/metrics.rs: core/connectors/runtime/src/metrics.rs changed 3 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 6 (its worst body is Stage::as_label at line 74), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix(connectors): tag sink batches with the payload\u0027s schema (#4204)\u201D; \u201Cfix(connectors): close the source instance a failed start leaves behind (#4064)\u201D; \u201Cfix(connectors): stop rendering counter metrics with a doubled _total (#3921)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/connectors/runtime/src/metrics.rs\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":"core/connectors/runtime/src/metrics.rs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"54f20b0484fe702a71ea84d7e27bf32938dd37793f289ee6d347aa84ec15f179"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: core/integration/src/harness/handle/connectors_runtime.rs: core/integration/src/harness/handle/connectors_runtime.rs changed 3 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 7 (its worst body is ConnectorsRuntimeHandle::stop at line 210), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix(connectors): defer postgres source progress until ack (#3957)\u201D; \u201Cfix(connectors): Harden Elasticsearch sink test readiness (#3729)\u201D; \u201Cfix(sdk): rejoin consumer group after membership loss under vsr (#3703)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/integration/src/harness/handle/connectors_runtime.rs\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":"core/integration/src/harness/handle/connectors_runtime.rs"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"05318755cec2fedf50b349637f6bde85187318455038e6ee2e041b41fff984f9"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: core/common/src/consumer_group_client_state.rs: core/common/src/consumer_group_client_state.rs changed 3 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 2 (its worst body is ConsumerGroupClientState::set_assignment at line 72), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix(sdk): preserve consumer progress and client error handling (#4151)\u201D; \u201Cfix(sdk): correct consumer group polling and commits in IggyConsumer (#4034)\u201D; \u201Cfix(sdk): rejoin consumer group after membership loss under vsr (#3703)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 21:36:42 \u002B02:00\u0027 --until=\u00272026-09-29 21:36:42 \u002B02:00\u0027 --full-history --no-merges -- core/common/src/consumer_group_client_state.rs\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":"core/common/src/consumer_group_client_state.rs"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"28a181d534afd1e332ec55d07e05be220aeced1fe1f1ee1e493a4fb89637cb14"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #1: If anonymized user #1 becomes unavailable, 19 significant file(s) lose their only recent owner: core/message_bus/src/lifecycle/connection_registry.rs, core/message_bus/src/transports/tcp_tls.rs, core/server/src/http/jwt.rs, core/configs/src/server_config/message_bus.rs, core/message_bus/src/transports/tls/mod.rs, core/bench/src/analytics/metrics/individual.rs, core/bench/dashboard/shared/src/subtext.rs, core/integration/src/harness/handle/mcp.rs (\u002B11 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"11792e46808680b2f0f51b4c4d77c0a1ed3c8d77c0e39461e0894592e43839dd"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #2: If anonymized user #2 becomes unavailable, 16 significant file(s) lose their only recent owner: foreign/csharp/Iggy_SDK/Publishers/BackgroundMessageProcessor.cs, foreign/csharp/Iggy_SDK/Consumers/IggyConsumer.Rented.cs, foreign/csharp/Iggy_SDK/Publishers/IggyPublisherOfT.cs, foreign/csharp/Iggy_SDK/Kinds/Partitioning.cs, foreign/csharp/Iggy_SDK/Consumers/IggyConsumer.Logging.cs, foreign/csharp/Iggy_SDK/Consumers/IggyConsumerBuilderOfT.cs, foreign/csharp/Iggy_SDK/Publishers/IggyPublisherBuilderOfT.cs, foreign/csharp/Iggy_SDK/Identifier.cs (\u002B8 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"47123134411107faeb8f4475dc50d561729b12b3dadb727197834d1db0a81539"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #3: If anonymized user #3 becomes unavailable, 4 significant file(s) lose their only recent owner: foreign/java/bench/src/main/java/org/apache/iggy/bench/cli/PinnedProducerCommand.java, foreign/java/bench/src/main/java/org/apache/iggy/bench/cli/IggyBenchCommand.java, foreign/java/bench/src/main/java/org/apache/iggy/bench/benchmarks/runners/tcp/async/TcpAsyncPinnedProducer.java, foreign/java/bench/src/main/java/org/apache/iggy/bench/models/cli/GlobalCliArgs.java. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0ea1d7acedcf4d22398bf3c8fa4854c20367d9a3b94f61c834d4d68f47c446dc"}},{"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: core/bench/dashboard/frontend/src/components/layout/hero.rs, core/bench/dashboard/frontend/src/components/layout/top_app_bar.rs, core/bench/dashboard/frontend/src/components/layout/main_content.rs. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"aa40346b0a4fdfa0cad7f7487461d0cd87c3bdf3a9da290ac01ba4547be8da0f"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #5: If anonymized user #5 becomes unavailable, 3 significant file(s) lose their only recent owner: core/system_stats/src/cgroup_memory.rs, foreign/java/java-sdk/src/main/java/org/apache/iggy/client/blocking/tcp/IggyTcpClientBuilder.java, foreign/java/java-sdk/src/main/java/org/apache/iggy/client/async/tcp/vsr/VsrLoginCodec.java. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"4b7501cb4dde9025368e434590fa7079fefffbcd6aca7c93f5602f4e26903ca8"}},{"ruleId":"D16","level":"note","message":{"text":"Further sole-owners (lower concentration): 6 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 (54 single-owned of 1199 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; 1199 of the 1968 production source files in this repository met that bar). They are anonymized user #6 (2 file(s)), anonymized user #7 (2 file(s)), anonymized user #8 (2 file(s)), anonymized user #9 (1 file(s)), anonymized user #10 (1 file(s)), anonymized user #11 (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: // 5004 - Consumer group already exists TODO: refactor 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":"foreign/csharp/Iggy_SDK/Consumers/IggyConsumer.cs"},"region":{"startLine":370}}}],"partialFingerprints":{"codehealthFindingId/v1":"87056d8fe5d2059cdc680aecb8452879ef61d88811d43fee600adb399fde1cb6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO - refactor whole error system, once the contract is set and stone. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a3076acc644b122015bbd8e7b0909642c04cd0a6ba56eb2335c5cbf00ffb415"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO - create mechanism for refreshing jwt token \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/IggyClient/Implementations/HttpMessageStream.cs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"9eb8588fd9cc5dce7b58e57b29a27cce0732ddbeeab2c4fda77ce8967574d329"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO - replace the HttpClient with IHttpClientFactory, when implementing support for ASP.NET Core DI \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/IggyClient/Implementations/HttpMessageStream.cs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"dec88d06e938f7298467fe5f28f1df4b349824112ebc60e447f7ddbc9599182c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO - the error handling pattern is pretty ugly, look into moving it into an extension 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":"foreign/csharp/Iggy_SDK/IggyClient/Implementations/HttpMessageStream.cs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e0be24c583ec7d9ada161624187f9c8298af238d2dacf4a6e7ce7889f7a9eac"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO - this doesn\u0027t work prob needs a custom json 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":"foreign/csharp/Iggy_SDK/IggyClient/Implementations/HttpMessageStream.cs"},"region":{"startLine":729}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d8e06f669b92c66d52405cf5d78ab31c7878475e8faeeabcd02cda47051eadc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add binary protocol version \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/IggyClient/Implementations/HttpMessageStream.cs"},"region":{"startLine":825}}}],"partialFingerprints":{"codehealthFindingId/v1":"5470cd5a19be947c5d570c56c91998411c8549b75867453a1ddabc9fc1d8adf1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo: change after error refactoring, error code 5 is for feature 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":"foreign/csharp/Iggy_SDK/IggyClient/Implementations/TcpMessageStream.Vsr.cs"},"region":{"startLine":488}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4635266eae3e61286668f543972a885295788d633e8e57b4c6f8f1ef69c12d9"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: ErrorFactory: NamedType ErrorFactory \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"4cec467ae993b4fd1eb130eda6625c46cb2324f74b4e78e12a2480b44764c1ae"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: IoError: Method IoError \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"6987e996ef2fb86bbaebd0246589827c87b161a0d5c0f2a03a64f858b0326a34"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotCreateStreamDirectory: Method CannotCreateStreamDirectory \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"68181f954d5d28c7b0d40174eb868c92ec45572ff2547ec6e947901e43ff9695"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotCreateStreamInfo: Method CannotCreateStreamInfo \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"15c84612702417d2c136a44abd266d92f0ba7ced0011a09a980c9b670e704907"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotUpdateStreamInfo: Method CannotUpdateStreamInfo \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"96c4740f920c0a0034e20f895b7ac7d26c98ca62e9cad353bc563a969270584a"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotOpenStreamInfo: Method CannotOpenStreamInfo \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"44d590ca784a6e476297f70fd9f6bc7dcadc61d6cf13e0f0cd06aa1bf6bb7c9b"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotReadStreamInfo: Method CannotReadStreamInfo \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"3877ae005b737242ae23b76338b970224a5eac1f831ca8c2ce48a59210f0da66"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotCreateStream: Method CannotCreateStream \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3fed4453fec41f92c0b7b60d210513858ef959f84fd8f5446bc571ad08aa70c"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotDeleteStream: Method CannotDeleteStream \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7bc095927f8469d80aa904822de310fd66fed448e814d9e06b62190fb048e20"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotDeleteStreamDirectory: Method CannotDeleteStreamDirectory \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e20d45bc0d34a0c8950b23c45fb33e57f01aa07c394b9113ea4b1b997822685"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: StreamNotFound: Method StreamNotFound \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"95de5ae75e182bbca2319c719b18351ee2fcdb6e6d2f7e07bf1bbec379a7872e"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: StreamAlreadyExists: Method StreamAlreadyExists \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f4aa77dd5e797596ad17ed2db94de7ed132e0d28cd74a52041a647c63c59209"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotCreateTopicsDirectory: Method CannotCreateTopicsDirectory \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"992852a4cf34a3f5f177d283ff6882088252a5911889eb2962aa50065fe96cfd"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotCreateTopicDirectory: Method CannotCreateTopicDirectory \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"2cfb2a9fe446239cf6ce33eca3298418a7bcdcd701192e770e1cbbb2bcea1dcd"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotCreateTopicInfo: Method CannotCreateTopicInfo \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"432895cbe051457c1a82f079d900c0632fb4aa9779c95cc25e40bacf79f91991"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotUpdateTopicInfo: Method CannotUpdateTopicInfo \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"31d3cdf7df64217fdc95f0487d003a87b36394ffc2191c09477866592bbb1821"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotOpenTopicInfo: Method CannotOpenTopicInfo \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"d76b10979e81d390c7615f098bce2b52375e63810d715a1411933e6b46653ea5"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotReadTopicInfo: Method CannotReadTopicInfo \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e9dd144713af67263d388e77dd49193aaf0bb834a5db6f205a01c1ce4a08c86"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotCreateTopic: Method CannotCreateTopic \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7201c30b9117b33cf03cc9dfafdaeb17e7816adf65b23267a1d388178ea96a5"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotDeleteTopic: Method CannotDeleteTopic \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebcfb195009d6a217f5303cb9e48748bd529aca267699c33b7e34a208c7a6b7b"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotDeleteTopicDirectory: Method CannotDeleteTopicDirectory \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"983c005848f7f96bf3333313b13fd06d1618f17853cd3f2128cee2125dec3563"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: TopicNotFound: Method TopicNotFound \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":212}}}],"partialFingerprints":{"codehealthFindingId/v1":"28edf4f5bbab828844676cc6699aaa40ff39a937288b95bfd9fd7a5ce4a65486"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: TopicAlreadyExists: Method TopicAlreadyExists \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a411dc35612c1a840b3ed38430dd7103fcf79545909a0cdfd037e36603bd20d"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotCreatePartition: Method CannotCreatePartition \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e6a9b5aa4ba6f69f9d14f946ae0025ca9c0ecd33610beab8263356d27b636aa"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotCreatePartitionDirectory: Method CannotCreatePartitionDirectory \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":230}}}],"partialFingerprints":{"codehealthFindingId/v1":"864e315ad72b279b58a805a011a9008373e0d9f57e82387a18b67fcaee676c7a"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotCreatePartitionSegmentLogFile: Method CannotCreatePartitionSegmentLogFile \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"074ff3fd22737fca7bfab6e66d4f226d14cc161f60f241ffe006e5ec48ce2ecd"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotCreatePartitionSegmentIndexFile: Method CannotCreatePartitionSegmentIndexFile \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"9117dd281bec469d21c60da5886a1ae0fb85367f233a6ce6377f7541b9b1f788"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotCreatePartitionSegmentTimeIndexFile: Method CannotCreatePartitionSegmentTimeIndexFile \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c320db0f6a7c71bd1e479935b00a727226433042eeeac04ac6210bc7b830bae"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotReadPartitions: Method CannotReadPartitions \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":254}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0b76d061ac42cb2b06e423119506f200a6536b4d3307b25779a00301d9a5415"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: PartitionNotFound: Method PartitionNotFound \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":260}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a7759e1545edca9dc101390214ae17be2c1839a8565334681a7a3b3dab314ad"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: SegmentClosed: Method SegmentClosed \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":265}}}],"partialFingerprints":{"codehealthFindingId/v1":"89753d131ab10a0674f0c9acb7e2368d5e45d3548087dd389b13e17218c6eded"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: InvalidSegmentSize: Method InvalidSegmentSize \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":271}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d89d7eb73d2a33990a1a67ee8efa973abc8223b4ea5515532823469607ca767"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotParseUtf8: Method CannotParseUtf8 \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":276}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fcd78b9ecfd5e13932583ae4c7c7146cdbb67a04be3b09bd4333b21b78f5b0d"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotParseInt: Method CannotParseInt \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a0bd88e75601d3986347b9ceee4e15f819acc0cd60e791384e31e9f0b10da1a"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotParseSlice: Method CannotParseSlice \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":286}}}],"partialFingerprints":{"codehealthFindingId/v1":"05a3bc3aa5f07ca0b70b5516d64e6e25605cf833e0c4df0d0e21689804f6deb7"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: WriteError: Method WriteError \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":291}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e0f9eebda61de7295e52c3a98fa49bb14a2278b01a8a1872a0d77c0a812c493"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: InvalidOffset: Method InvalidOffset \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":296}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8bb850e1bdb9a48e73054ee0a72948a31724ffb9e1392ff444ccb38ea8aac55"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotReadConsumerOffsets: Method CannotReadConsumerOffsets \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":301}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d7d41079a524881fdf1e3e8a33e53767c76b0de71992b64c4e7ae572fa32469"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotDeletePartition: Method CannotDeletePartition \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":307}}}],"partialFingerprints":{"codehealthFindingId/v1":"86532789e3d0a9e19c7a1a1222dbc78b0632f39d9b1def135ed6237dc1667901"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotDeletePartitionDirectory: Method CannotDeletePartitionDirectory \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":313}}}],"partialFingerprints":{"codehealthFindingId/v1":"3767239afc5f5e997bf986e8b31015e9adf430e5b314e6a8b656ecc43ff13080"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotReadTopics: Method CannotReadTopics \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":319}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bd46a399c42cb54f08cf9969fa1ae7973fc235a6a35f9a62ddbb865e060e9f2"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: InvalidMessageChecksum: Method InvalidMessageChecksum \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"a523d3b00d2201403ae5b1d7982f19996ff055f7831a5652e3babf4ab78eaffb"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: ConsumerGroupNotFound: Method ConsumerGroupNotFound \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":330}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f95cb2c4ada187370902b82dd6101dd7837a74ed7b3f2efef082913b5b8e4e3"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: ConsumerGroupAlreadyExists: Method ConsumerGroupAlreadyExists \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":336}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ea7ac909e4be5a04d020a3e4f42b7597853e8534f0610f78f7197c1d1aab1b5"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: ConsumerGroupMemberNotFound: Method ConsumerGroupMemberNotFound \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":342}}}],"partialFingerprints":{"codehealthFindingId/v1":"143019bd43d642745209bd375748eb318b8e0d2fab606472417203a32f5a6b51"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotCreatePartitionsDirectory: Method CannotCreatePartitionsDirectory \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":348}}}],"partialFingerprints":{"codehealthFindingId/v1":"89ea3135fddc1d28c12e91c985dfeb7d9fba713620f62400bb8e9e33782ab52c"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotCreateConsumerGroupsDirectory: Method CannotCreateConsumerGroupsDirectory \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":354}}}],"partialFingerprints":{"codehealthFindingId/v1":"be9f620eb48211ee9baed00c791c4f559fe657e05bde97f0c9a6971462da0c12"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotReadConsumerGroups: Method CannotReadConsumerGroups \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":360}}}],"partialFingerprints":{"codehealthFindingId/v1":"99159b6c08f74d24cb370df474d1a97cb19a11cce520d0e0ebad47690928ebcd"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotCreateConsumerGroupInfo: Method CannotCreateConsumerGroupInfo \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":366}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ba90a723dc8e885bfacda985838c744c426843555291b3c88ed8f45d1e2e275"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CannotDeleteConsumerGroupInfo: Method CannotDeleteConsumerGroupInfo \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":372}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b47c385bf4d4c3e321211eeaf695d1f37aa278a411fe4e316f08632da55377a"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: ClientNotFound: Method ClientNotFound \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Errors/ErrorFactory.cs"},"region":{"startLine":378}}}],"partialFingerprints":{"codehealthFindingId/v1":"87d066c5a8adb449ab38be066be4faae05d1b369adb97e365871170af76c16bb"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: DummyObjFactory: NamedType DummyObjFactory \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK_Tests(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK_Tests/Utils/DummyObj/DummyObjFactory.cs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b9b068190a0f40ba1c0e78206c59cfa6bdfea4610800bf31832294b2975dc81"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CreateDummyObject: Method CreateDummyObject \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK_Tests(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK_Tests/Utils/DummyObj/DummyObjFactory.cs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"5245094f8c0bcb89ee195634230758f7034911cb5b44530a61686c71e835b433"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: PermissionsFactory: NamedType PermissionsFactory \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK_Tests(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK_Tests/Utils/Users/PermissionsFactory.cs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"0368b97667662dbc5eca64f4905860f315b2490b8828916fae0735334c999a5e"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: PermissionsFromBytes: Method PermissionsFromBytes \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK_Tests(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK_Tests/Utils/Users/PermissionsFactory.cs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"03e9fbbc961a419a19c73ed1ccb5d00872a5126a7d6dbd578d311a7dc2701072"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CreateUserRequest: Method CreateUserRequest \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK_Tests(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK_Tests/Utils/Users/UsersFactory.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"44c1709f2cdee31eded8690a733fd36a0d74f984b74918d0d2a9bc3385bdadc8"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: NamedIdentifier: Method NamedIdentifier \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK_Tests(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK_Tests/VsrTests/VsrTestPayloads.cs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ddc7c28c3a6aecc4c4204adb199f241fc90fd183f2219f5d0b14d46dee763f4"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: AsBool: Method AsBool \u2014 Roslyn\u0027s SymbolFinder walked every project the solution loads, including Iggy_SDK.Tests.Integration(net8.0), and found no reference to it. That walk cannot see three kinds of caller, so check them before removing it: code outside the solution file (a solution is a curated list, not the repository \u2014 a sibling test tree with its own .sln is invisible), a call resolved by reflection or dependency injection from the symbol\u0027s name, and any project the workspace could not load. This is \u0027no caller found by this walk\u0027, not a verdict that the symbol is unused."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK.Tests.Integration/OptionsTests.cs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe02dfaa9a387e91d8945bd9909562f214acf7c991819fda803eb0762cba989a"}},{"ruleId":"D19","level":"note","message":{"text":"Documentation: no architecture or design documentation: The Running section describes how to run the server with cargo run but does not mention the architecture or design docs that accompany the core server component (thread-per-core io_uring, shared-nothing compio, VSR). Link to the architecture/design documentation for the core server."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/server/README.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"70e76731a3971217d1e5cda3952a82a9600e4457e509780ced2d40ca6e5c9398"}},{"ruleId":"D19","level":"warning","message":{"text":"Low XML-doc coverage: Shared(net8.0): Shared(net8.0): 3 % XML-doc coverage (1/39)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Shared/Shared.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b62b3d310983849b73aa838adbce5bf9643b5f5e89ad47d1cbcaef289656d0b"}},{"ruleId":"D19","level":"warning","message":{"text":"Low XML-doc coverage: Benchmarks(net8.0): Benchmarks(net8.0): 0 % XML-doc coverage (0/2)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Benchmarks/Benchmarks.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e0e2c4fbbdf834db87731bab01834771297b1f708b592a7f7200b071ceb2d45"}},{"ruleId":"D19","level":"warning","message":{"text":"Low XML-doc coverage: Iggy_SDK.Examples.Basic.Consumer: Iggy_SDK.Examples.Basic.Consumer: 0 % XML-doc coverage (0/9)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/csharp/src/Basic/Iggy_SDK.Examples.Basic.Consumer/Iggy_SDK.Examples.Basic.Consumer.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecd1d1b732cafa5f4ec082f5ddac0e7bb9245222c950481bac500f535bb48529"}},{"ruleId":"D19","level":"warning","message":{"text":"Low XML-doc coverage: Iggy_SDK.Examples.Shared: Iggy_SDK.Examples.Shared: 0 % XML-doc coverage (0/27)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/csharp/src/Iggy_SDK.Examples.Shared/Iggy_SDK.Examples.Shared.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8fb141fb8eeb2b780dc067893157bbf0ce22cc58f40b0821d07cdd856d342dbc"}},{"ruleId":"D19","level":"warning","message":{"text":"Low XML-doc coverage: Iggy_SDK.Examples.Basic.Producer: Iggy_SDK.Examples.Basic.Producer: 0 % XML-doc coverage (0/11)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/csharp/src/Basic/Iggy_SDK.Examples.Basic.Producer/Iggy_SDK.Examples.Basic.Producer.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3ad70cf4a61dcb29e6373702430be9817c901e1662e6fed16acc111c37cf6d5"}},{"ruleId":"D19","level":"warning","message":{"text":"Low XML-doc coverage: Iggy_SDK.Examples.GettingStarted.Consumer: Iggy_SDK.Examples.GettingStarted.Consumer: 0 % XML-doc coverage (0/3)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/csharp/src/GettingStarted/Iggy_SDK.Examples.GettingStarted.Consumer/Iggy_SDK.Examples.GettingStarted.Consumer.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6316dabbe4cb015b76f81a33e84d2944538212b13f610f6f430195a73648ffb5"}},{"ruleId":"D19","level":"warning","message":{"text":"Low XML-doc coverage: Iggy_SDK.Examples.GettingStarted.Producer: Iggy_SDK.Examples.GettingStarted.Producer: 0 % XML-doc coverage (0/4)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/csharp/src/GettingStarted/Iggy_SDK.Examples.GettingStarted.Producer/Iggy_SDK.Examples.GettingStarted.Producer.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9ed9d5c5de8d9d9d80cd650af38e7052276691e48a83548dfa23e1f009ff595"}},{"ruleId":"D19","level":"warning","message":{"text":"Low XML-doc coverage: Iggy_SDK.Examples.MessageEnvelope.Producer: Iggy_SDK.Examples.MessageEnvelope.Producer: 0 % XML-doc coverage (0/4)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/csharp/src/MessageEnvelope/Iggy_SDK.Examples.MessageEnvelope.Producer/Iggy_SDK.Examples.MessageEnvelope.Producer.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a4ed82ac45771fcb7c782d630c8523170c71e5741ae4b55dea12686cf00305a"}},{"ruleId":"D19","level":"warning","message":{"text":"Low XML-doc coverage: Iggy_SDK.Examples.MessageEnvelope.Consumer: Iggy_SDK.Examples.MessageEnvelope.Consumer: 0 % XML-doc coverage (0/3)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/csharp/src/MessageEnvelope/Iggy_SDK.Examples.MessageEnvelope.Consumer/Iggy_SDK.Examples.MessageEnvelope.Consumer.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"546572d3344131020797293640d0033411fad6cf7d7f99199085ded6a39fe76f"}},{"ruleId":"D19","level":"warning","message":{"text":"Low XML-doc coverage: Iggy_SDK.Examples.MessageHeaders.Consumer: Iggy_SDK.Examples.MessageHeaders.Consumer: 0 % XML-doc coverage (0/3)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/csharp/src/MessageHeaders/Iggy_SDK.Examples.MessageHeaders.Consumer/Iggy_SDK.Examples.MessageHeaders.Consumer.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c538140fcdb4445442a81820ba6f62c40f27d09531857dd832e5bbb6222e10a5"}},{"ruleId":"D19","level":"warning","message":{"text":"Low XML-doc coverage: Iggy_SDK.Examples.MessageHeaders.Producer: Iggy_SDK.Examples.MessageHeaders.Producer: 0 % XML-doc coverage (0/4)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/csharp/src/MessageHeaders/Iggy_SDK.Examples.MessageHeaders.Producer/Iggy_SDK.Examples.MessageHeaders.Producer.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"60f523b9b4194392b97b18e3c0f34eabd66b12d10c6704a35991ef32ee18e575"}},{"ruleId":"D19","level":"warning","message":{"text":"Low XML-doc coverage: Iggy_SDK.Examples.NewSdk.Consumer: Iggy_SDK.Examples.NewSdk.Consumer: 0 % XML-doc coverage (0/3)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/csharp/src/NewSdk/Iggy_SDK.Examples.NewSdk.Consumer/Iggy_SDK.Examples.NewSdk.Consumer.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cdb7a6661001e4fbe4f6dba1214371a379d9311694f229d69546bb8e2eacb9f2"}},{"ruleId":"D19","level":"warning","message":{"text":"Low XML-doc coverage: Iggy_SDK.Examples.NewSdk.Producer: Iggy_SDK.Examples.NewSdk.Producer: 0 % XML-doc coverage (0/3)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/csharp/src/NewSdk/Iggy_SDK.Examples.NewSdk.Producer/Iggy_SDK.Examples.NewSdk.Producer.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"602f497f52bf08968f36ae0580c9dab918323a366a331f56718e8d5718c8c254"}},{"ruleId":"D21","level":"note","message":{"text":"Inconsistent use of \u0027Stop\u0027 vs \u0027Return\u0027 for test outcomes. The first test uses \u0027ReturnImmediately\u0027 to describe the method\u0027s return behavior, while the second uses \u0027StopCleanly\u0027 to describe the termination of an async operation. In the context of async cancellation, \u0027Return\u0027 or \u0027Complete\u0027 is more consistent with the \u0027ReturnImmediately\u0027 pattern, whereas \u0027Stop\u0027 is less precise for a method named \u0027ReceiveDeserializedAsync\u0027.: Use \u0027Return\u0027 or \u0027Complete\u0027 consistently for async method termination scenarios (e.g., \u0027ReceiveDeserializedAsync_Should_ReturnImmediately_OnCancellation\u0027). (symbols: Method: Apache.Iggy.Tests.Integrations.IggyPublisherTests.WaitUntilAllSends_WithoutBackgroundSending_Should_ReturnImmediately, Method: Apache.Iggy.Tests.Integrations.IggyTypedConsumerTests.ReceiveDeserializedAsync_Should_StopCleanly_OnCancellation)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"ab238c7e39e9321e6b64e6c4ef018ac1f7be7819888bcb3eba588e91c4de53b9"}},{"ruleId":"D22","level":"warning","message":{"text":"Inconsistent factory method naming convention. One uses \u0027For\u0027 and the other uses \u0027ForPersonalAccessToken\u0027. Given that \u0027For\u0027 is already overloaded for credentials, \u0027ForToken\u0027 or \u0027ForAccessToken\u0027 would be more consistent with the existing \u0027For\u0027 pattern.: Rename \u0027ForPersonalAccessToken\u0027 to \u0027ForToken\u0027 or \u0027ForAccessToken\u0027 to align with the \u0027For\u0027 factory pattern used for username/password. (signatures: AutoLoginSettings.AutoLoginSettings.For(string username, string password) | AutoLoginSettings.AutoLoginSettings.ForPersonalAccessToken(string token))"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"9d02d566860c0f94365e4b212231aae62bd85902d6fe97582a5eac83a9da380f"}},{"ruleId":"D22","level":"warning","message":{"text":"Duplicate intent across generic and non-generic builders. The non-generic \u0060IggyConsumerBuilder\u0060 and generic \u0060IggyConsumerBuilder\u003CT\u003E\u0060 have nearly identical \u0060Create\u0060 signatures, differing only by the presence of a deserializer. This forces users to choose between two parallel builder hierarchies for essentially the same operation.: Consolidate into a single \u0060IggyConsumerBuilder\u003CT\u003E\u0060 where \u0060T\u0060 can be \u0060byte[]\u0060 or \u0060object\u0060 if deserialization is not desired, or ensure the non-generic builder is clearly deprecated/hidden in favor of the generic one. (signatures: IggyConsumerBuilder.IggyConsumerBuilder.Create(Identifier streamId, Identifier topicId, Consumer consumer) | IggyConsumerBuilder\u003CT\u003E.IggyConsumerBuilder\u003CT\u003E.Create(Identifier streamId, Identifier topicId, Consumer consumer, IDeserializer\u003CT\u003E deserializer))"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"c0e10ef42ee006de76e2d806a1a212a968ad54ecd9791fcb8b6b5668343f7df5"}},{"ruleId":"D22","level":"warning","message":{"text":"Ambiguous naming for similar operations. \u0060ReceiveAsync\u0060 returns \u0060ReceivedMessage\u0060 (which wraps \u0060MessageResponse\u0060), while \u0060ReceiveRentedAsync\u0060 returns \u0060ReceivedRentedMessage\u0060 (which wraps \u0060RentedMessageResponse\u0060). The distinction between \u0027Message\u0027 and \u0027RentedMessage\u0027 is not immediately obvious to a user and suggests a potential naming inconsistency regarding memory ownership semantics.: Rename \u0060ReceiveAsync\u0060 to \u0060ReceiveAsync\u0060 (keeping it as the standard) but ensure \u0060ReceiveRentedAsync\u0060 is clearly named to reflect its memory management contract, e.g., \u0060ReceiveRentedAsync\u0060 is okay, but consider if \u0060ReceiveAsync\u0060 should be the only public entry point and \u0060ReceiveRentedAsync\u0060 is an internal optimization, or if the naming should be \u0060Receive\u0060 vs \u0060ReceiveWithRental\u0060. (signatures: IggyConsumer.IggyConsumer.ReceiveAsync(CancellationToken ct) | IggyConsumer.IggyConsumer.ReceiveRentedAsync(CancellationToken ct))"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"06b2a63911dcedbbbda6b72516eb886b352ec046820ac735707af94674a36651"}},{"ruleId":"D26","level":"note","message":{"text":"Projects may be oversized for their cohesion: 1 of 19 project(s) overshoot their size bounds, lowering Project Cohesion to 8.9/10. The most over is \u0060Iggy_SDK(net8.0)\u0060 (20443 LoC, 126 public types across 20 namespaces). Review these for cohesion \u2014 draw the boundary inside the assembly first (group each responsibility into its own namespace/folder and keep the cross-boundary members internal), since splitting a published assembly 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":"c697ae76e7cd106885bdd71c611b8f75dcdb24d0a1bb773ef6963184dd2afd54"},"properties":{"commitSha":"1f232cb9572fcc994a9a3ab33d6d4060156a9b8c"}},{"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":"b5993752c25ac95a84ec5846c24334f3d44498e25923277f1db3c7a4e79478ae"},"taxa":[{"id":"CWE-321","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"1af46a016c5d2fc896cbcb787a1b4b9666ed6f009e41d3ffeafcca24dccd2bc7"},"properties":{"commitSha":"88bc91d14c869d54421149ef3c966b4f0b4adafa"}},{"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":"928eefa8eb40e9dbe49706ede7190782b5479709ba32e2be3456446385ecaac8"}},{"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":"406d681448b774edac9f88a8390c94a8c46cfc3be922cab80d2d10c5fe63607e"},"properties":{"commitSha":"063dee567aaf222c6d7506b3aa3b15dee287b3f3"}},{"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":"45246e76a00ca9ec75df0ad297235b6adb9c4a24d6bf80b8349501099aa934a7"},"properties":{"commitSha":"d33ae928f724502af931cd2bb1ceeec4199be86d"}},{"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":"94f54e119f0e9faeb15013a8a7cb76981af621f83dde11a8bf763324d2e622a3"},"properties":{"commitSha":"fed2bb995c7dc5bfd236684d07401f59bcf89928"}},{"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":"fe8d4976f999c0747c2c28b30bf313bf903ffb2b1ceb525d1b455be12fed6ed6"},"properties":{"commitSha":"fed2bb995c7dc5bfd236684d07401f59bcf89928"}},{"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":"1fe25f9ea3d3a18f73dd126b0ea9f755aa2074e523efe86183531835079e0ade"},"properties":{"commitSha":"fed2bb995c7dc5bfd236684d07401f59bcf89928"}},{"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":"904beb0e441c842d9abdefa356eafb47487480c0f6f16faf6f22f5721cbf9ad6"},"properties":{"commitSha":"fed2bb995c7dc5bfd236684d07401f59bcf89928"}},{"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":"0862ae35844925fc9141afb178217edbaa5374fa00d60720a6e53c0e98da76a8"},"properties":{"commitSha":"fed2bb995c7dc5bfd236684d07401f59bcf89928"}},{"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":"823957caecfc1e68c2809232f9efd4773f498b1d7498bf4b9602bfa94c4aacd0"},"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":"9dbab010466e3bb14865948329e132f6c1157ed3e934e0e6a4ce7f3be7915529"},"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":"f0c68fd993e2eb8025b3c132f9645f2b8c50e80348fe725d50f0ea3e0b952ac7"},"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":"a1a9d1c71d60acfda9093ab2a14c2a103b4380ca9f095a925c6e0a2c873d746e"},"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":"2f0401fcf591b3e0fd35ef25abdcd953b95199a19bf3bc7f4f90429be4a204f1"},"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":"592aa2d8953743678f7b7c800d34e6d9069924e2c0b1d4761e978580e9081661"},"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":"9534691797a97a5353c2cdf4753fc8255473c0f69967d17dbf19d47f47b0d6f0"},"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":"faf5d40be620c5caf3383368235c23462862b9335e321b607adaecb0766019c9"},"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":"19ad3e2fc285f4fcd732645ee55a026f73468e1ea3b90a9585a2e72650c97dac"},"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":"31abe94a086ba0bd6cccea5af4b8ecf73dae25d7f1f558e3cb279c0c5bfc1936"},"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":"945188213d1f319a511a4bc974954c79299ba6b90625d33603757709024462b1"},"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":"ad7b43bb74155c7ea5982e3e0a000e799b61a4ed28725ad244c9f672433fa79c"},"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":"672d63f801fb0ba0352c589c37a19bc25ad63f2bef30b4dcaebd7f4a5281ce10"},"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":"bf35e731a93bd37fc7137da8aef03727dc56ad58417198073c6cb76fe9e0fe07"},"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":"fde706fc706a677431161ed464a4eff910239174ecc2468064f86187d1f19ac0"},"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":"20597fe1a8a5b5a3d3abe842a5933bda8be5a9e97a5262c1623c3263eeb384a6"},"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":"e2fda98d9fa1554d8f46e2676f83e1596b33d0a0b7db6365851aa235e69d7411"},"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":"936882e8daec633de4f5a0e8858748c3e097846f3c2ccb3b2ccf9a38bc47cfc8"},"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":"f14ad8049dce09b4c06c0cd2400cd6c5c2f959d8739319705810e132d430368c"},"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":"22936a428ff8f0e70a1912ec20752eac05750479fb536337566793b9b044617a"},"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":"fdc5dfc320b01ab9aa53eed309595c32241de134249c3a6cea16261a299c8148"},"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":"a26a02c4ca1e939c776ad1bc6719cb5f0031f551755eaf08ee13d9143904cd06"},"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":"f5a889308f6b106c70bdf2ec98d4926f39d58f0a2f57f0d3639037986e51c939"},"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":"090b4404a597340056b7b3688d3ccb80b19f2edc6c5244344143ac23f3743d05"},"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":"f1c528d9f3eb9bd62178b6ee5228d79ae422a80b3569eead171ee23ff7d2300a"},"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":"a86ab7046b03afecc54914f2ea1d590538fd9f6721fddf22dc814523039719e9"},"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":"486d74fce08a1ef490ff6c1c349f3f5db6186bc7e041d29b9d35fc04bb312288"},"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":"5dc3d139dcbba1dbe5d12598982358981d8d7cd2cd43cf32ab0b8ddd166f19e2"},"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":"de4fb331a5f98f39b2ce3cda5c7f4390fcde151af798db98ebb545bea68af86d"},"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":"852c2dbab21b49ac56085a6d6af30d937dca58d28348c494e0148b7aae069979"},"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":"eb40ec294c870c704b8bf50839df03198907941a9f7e2151fb13b9b421d3b8fd"},"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":"60c707984205218c0a0e975149d96c1f87500e21a862776febb32271947af10c"},"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":"419bb622dc1bd5b76138607457fd4c1e6b442aa5b517998a34599a2463eda014"},"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":"b10f6d35d44f9621d1fdc7c07a318de4064ec392915747093f5a3d5c13a47653"},"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":"08dbb14fc89903447a511b0c522d1b05bb58b631bdfb5274c980500c7c940d6b"},"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":"02823f2a7ff51c8c66b82b0c0d67609b175b346189021702cfc83a87671603ef"},"taxa":[{"id":"CWE-1357","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":"926b5efec49ba0cae540ac3286291cf4cb7172f5038df0e1b87b076f99ac81fd"},"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":"e6d8adb4da95f820e16159628452fdb8406fc92507fb5c780c102932509c44f1"},"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":"c51fefcdf93bef3d39bc5ab3d52a110986153cf2d4d208f11113c575ebace55d"},"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":"9d42d909a265210a97f2b8271c5be8d39335a76e03c733bd886ad03d671151eb"},"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":"f45ed3148bb27ef6715daafb405673dc51d07a36af90ea67895fd1cdd4f7de86"},"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":"74129a16bf71b587d0afc0739209085aeb2d23ffa6a02b48e570e2294e95d377"},"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":"97c7111a5b1941bcec43251cd0bc46d9ec50a42635a58ffbe20820e73bef308d"},"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":"a3626671c27905e0a832c6bc282a389d471697b93fae144e4351504c71c01a21"},"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":"d481c6a26c1eefe302c9f03ed9ca7553a2f22cd6be5f76e947287e3ed37fa215"},"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":"346a5d6d75157fb6b22d2c1be81e02b06a778f2d8edbc5548eb10999617e866f"},"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":"cdd8a52fc002fdcd60264296f1be97db78a465a0bb55ae74d1a8d0af1b96f304"},"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":"6f10361c5f30a36007c3aa11b6fa9f5a05731420d369d092b6f9bde97ef10eee"},"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":"f2c8a0a0b6e1c8ace7933a516f636660faf8eef5698fcad1066b046b06c09278"},"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":"aacce333cd0fdcfdbfaae652aeda61592441a2cebb7884c2d6ce838572cc56ee"},"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":"8f38507577361304d264eee84d5d6866fa2f5397d9f162ed156467ef38c4b9b9"},"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":"525b1060515e621ace4c6f34a86b1483aa9d8c9cd9e47af5b2c9bbddb17fc7f2"},"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":"2333ba6513b2f170d29b4550282bdb476cc2e4cc810060da03629184f6b4b1af"},"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":"716df5744665990b53d51977a5ea9a7a21343e147a41988c8dfda388acf8db8e"},"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":"8652f7fc20498985758fc83855a65f51f341794bc57a75ade02ab99f65db3b74"},"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":"4e5b4c4a666c5023214402f9c29e40b7c8ec521502b7d346c5f8c2058931a4dc"},"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":"3d7791dcd3d1b96cc2d1f68274b8aa18d82e18429f6fe0d169dac43d2b61ed6b"},"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":"db031ded3e89a2ab737f5405f0458d3fdfccf231035d5b0ee1935eb731064816"},"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":"75843588b07801f9bda7271de42613a4eae5ee8d2316753de259368955996ec5"},"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":"77d841a5f433db6a2e1f28d235ed0d1360334519ba4c75ba2299f18958633f70"},"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":"e36a2a9d1a64511284181c7c5717a6b28a89d744e3087c529fefa2522a599ead"},"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":"3bb01f241a7662f3126c633f35a2aadeb347cf478ff277d58e2a3b617dd61021"},"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":"7e46926362b4f16237161883778cd7bca778020d50c96e3051de74f412726022"},"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":"a600ad6fd802aa30725e6448a9f5afe9549bf1e8cb8fdbd360a5fed9dcd3470e"},"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":"8c5f1a69e3495db14a9a5ecfefbae8efddc0e51117ae32e36f847f4115b615b4"},"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":"9b4bee2deb910c8f74af5230f6e7d92e40dfa97a755320d349695f3e05a14125"},"taxa":[{"id":"CWE-494","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":"390ae919ca1befb995712456238dc412c96e08104482cfdaf3b9410c79018a65"},"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":"cb0ed8ca7fa502efd02d817ec648258a2691ed7248f0020e326128e31aebd8a3"},"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":"356854857653133ea07d13177b88a2832973f25f185781ae5d84cefc4f668c7f"},"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":"f06e9a71ad01320915f1d0a986736a15a75932f38ed930211dbf24f4caa4f24c"},"taxa":[{"id":"CWE-494","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":"11a016a22b2dab4e363d73693543ab0aa6d89a9e3c2d9884a010f32a3357d086"},"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":"4ddc391690921d22d60a2b143a66bb2ac9a90530e39dcc876c64eaf649d9d005"},"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":"e58c7607333afff7805238bd347c96ac5d580ed101d3093acb528b1809d8d658"},"taxa":[{"id":"CWE-494","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":"356446ad38a48ae0e360d05e433e802a35354a29414be6f88dec333f764564e6"},"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":"6e1ac8c00a7a85764e502b340fb5facabeeddc2b33b5eba892f9b23bc0e28062"},"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":"4185234944f57e3f54ceefb8d3ac69e7928362292add46efff436280d747e69f"},"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":"7029ca60159c2b672d3cc141d9b790411ba9f03312d2c390464be71b919b1f95"},"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":"74dada25775e5161a587cb9512e8f42ebc62b569ee8509aaf8075eeb0641a316"},"taxa":[{"id":"CWE-494","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":"3c2056cf5e6c94f8c162d079a6aeff0e94ffaaed1b49a1f0339fc6363446cd92"},"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":"36cb3eb66d54700e617023686480e32866d805b037fcc40db294b597fb325108"},"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":"5fc4308698eb144fe1aa7e4997c9fbedb56574bdbfcbfa7befbc4782da12bc16"},"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":"2c33b6dec35a8ef95f7887b4e6c642bc7939c45c43b03e3ace57b92241f3632f"},"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":"1aae536b95bf54542ec169020dc6e6fd91c7192c44e09ad246ce1a6d1d49000f"},"taxa":[{"id":"CWE-494","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":"70cf90a1b3b3ffc55c69ca201ab6909d94febbc0b0fc89e79a9e762f89db361e"},"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":"14a320f3995ff92adccb2b2c3f861e467cc493f82208607927be4d557e3e67dc"},"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":"fcbb5d5063a3168739a303dcffba76189454b670667878728eb5546928956b17"},"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":"b55ee6e9edc2a040631a2a50d0ecced2969d310c48ed3016fba1fe54a062a72c"},"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":"54abcee55cdc8e766146766992102ff243787a286465c3874f61dbee91374420"},"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":"8621aa2ad9be05886a487727ed66c41fba884496d399a4813bde1b7253a2f42f"},"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":"fda64c0fc158bc00addf6a6f0ed90fb087e9198e08979c5dee61f7b45555ad28"},"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":"b43e7ca59858605c6eb759d96eba4a0811d03b60f75b43fe34b57e7fbec7367f"},"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":"31be401c420d386ad03e66f9a2cf7063bbc6360496659bcc8eab07738fbd4358"},"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":"53726ee73fbcd08a43e796be2b2a34a2545160af24344c1da02aada695de6fca"},"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":"49107243a02764a6b28442dd2f0d8c371947432eb6b8299a23ae71a01570fb6f"},"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":"b3684dc57557c649d65024f750efff2d991d24d3de0e2fb849b078c1d2d4666a"},"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":"fe1f4094699b17785af2100a4295642d1e8f753fab76cc5ae98c509dc4e5d1e7"},"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":"18bd1def631e1526bb241c12723804cbab5155f62461d6cf81072f487f84e84d"},"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":"d69698eee675b5f9e74579e102635f20cad0c06d104ac5d68f607c4489fd6ce2"},"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":"9108f3cc713d0a183d4942250967a7e27c7f0fa06e8d7b609b7ba3b8d19709bd"},"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":"3c3fc62bbb1060ff7d54f6cc3ac21834b89050dd48e70e087b4254bafd4d5564"},"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":"1c79f93f2b8ea0659b94ee301b61589b7a186f841b11d6e19cc929cd29b41a0d"},"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":"1e691773af3b9a8d556286034ca695bfaa4e1cc51d5526541949836992bc45a3"},"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":"45df2f675827e76dacbf7841c2961d5b2092ede64d2e1794fd83317cd2564736"},"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":"f565403e5d46ba42982d6bcb258c7e42e094e237271eacbd1505d41c9f79f7a2"},"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":"6cefa285c4fcd698047067335f67a9824fa4750e2d66e92bbb1575252f8f9f2e"},"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":"1f015db81fa0abb9e505e8d844b5e10b7e3fd9a2eaed9a5a03519dac41922e8d"},"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":"d483edf55c13a6625cd828962a807ab2841b181c4bba5da9942331fff8570cdf"},"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":"bf9b2b466fe37a7025d0033458b9ccc9dbc1d0d34bee026de0d909d72a2e9632"},"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":"af5e430226794a0d241d873ded201644ed860652ff4450ec42df84802aea9be3"},"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":"5341d16aa1d49b0c267cc723044f3175981cf3237f16a86b2e551efd943f832e"},"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":"dde799c12b64f225d4c5ef29016b0b5c66d91403d08153dfdf370b3b33d90c3d"},"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":"dc795c2f7cc71ed0331a05a4bfa1ee3addf5b819d617618d1f317994f0a59ee1"},"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":"c2951c06f1409f5d932cb0fdecead1591995e74eb99ed6409647fe5971bfacef"},"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":"4fbe9f942d0bb5d43140bffbb88f1f9ebf3cedc450a14dddd46b0d9d11b8f755"},"taxa":[{"id":"CWE-1357","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":"414db443e8e7e1f2b192a3ccc00ca1fcaf97cb601290773a4ff175e88e7ceddb"},"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":"99439d061a0f1d725b87c8f2dbd45038bb2b06f0022381dd6017299060e03fdf"},"taxa":[{"id":"CWE-494","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":"1b3e111f791106f07cef64e20fdb2c382371014225df0646f848935a23f626df"},"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":"83a6ecd67238bdf903ead85ba7abee2adb90d3609a1c630850060bcde6a4374a"},"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":"09d78b6f38b87b02b3ca5e827f5a993c1ee5ce65f5e06623324d1586a4dcb5b2"},"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":"9016a52d0f8039effa18df9d8117f7dd064915f209de0ce991c4a05b9dd2d71d"},"taxa":[{"id":"CWE-494","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":"29b1d27c18d53b6efc6aae8681d478f7007206eb99ff90c4b691ba24973a5625"},"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":"455a3d28caa8aff2b037d979d5aba282476fd0b1ec46aff454e164d11057469c"},"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":"027da97fd8a19fd945b0df81824fbd61f778df91281c4b59e5321689f8ab32d1"},"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":"943365fce5a0e90259c7a6b208079981cb6bebfc7355a69521dbe4a5c8ab5c7a"},"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":"8a986497e64474afba37c7b44d8d61b08ecb215ed9e1b1b614b72aa53a0db86f"},"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":"0558e582eeec2ec9f4898290e699b59f916bb69b206f4398fe8d2725982efba3"},"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":"e07ea556d87601e60171b12a79c0984162ced69f11e7b77090736522c5d818ee"},"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":"f3386ecfb834d0fbc894173012020566fb56d50a0a0aa7e35d30fe0e65d7bb25"},"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":"bff277a2e6da048583353e676870125acf35111f955b138c538c729eb776c4bf"},"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":"11f2a21ed842dd7b751f945e7e975e1ce36861f50188625de33b90ad30d78225"},"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":"dc1a444601b0210314c9b63614e8c7d65d10e6fed956b907fe736653119998ff"},"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":"a5365f97378eba6dda98b64f159aa95246fa93da128a43b1abe324d9243f3b12"},"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":"6e02ee8674fcbd2b60034eb327ef4f67f170e1230fa5fa2224adf98e7cc7b407"},"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":"3714e161662b71868697ce00c1913c1a1bff34a073aaa588bf8c319b78fef794"},"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":"a71923673b771d7b0e5232cfaa3ac191bc3a32c1afc68f80117de331ced49058"},"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":"882e671bbfe2e9ef2c92b80c83a2150454456b809baecdcaf2541ff267f95cee"},"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":"cf793f72b9a3075e60a78dca2fa6b49db6f8f369b491024a492c1db476862bca"},"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":"8cd491df0ea0dd32a8f781cbedd76b3b3920f4c8f5683b33a05605fdcbfa5ade"},"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":"434996d4efb710d671de7baa5c7a5a2fb4f8d567ce22578481a3e1fc73d6aada"},"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":"d514cb8570dac10c948b71264f04d5c3f25b9ed340eb8440f1ae6bcad9419e6e"},"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":"c70b43284f3b96f48c1b87c07b5778ccab43695d91a2bc24679e58e67f7d8f1d"},"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":"33d6c374e2aeb3e5d7ba5a4423a747537d90e2bcb953ec6a4d3c32d4aa7101cd"},"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":"8446b8a64a9ceb23e2e7e23604922cc739e2b310dc2872c4d9344efab63287dd"},"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":"27cea7935b6725c72fd85568f0bbf67f4c2c002ee90898b041b81c809e5e952a"},"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":"57c2ce449e2608e7e6e554ab274d35c1ae61d1eee8c2527bc6d477d3afbd1e8c"},"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":"aab3bf632264800bbf65c74c1628bb39458de4225c3cfcc60869d200fc3f8512"},"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":"688321a1d6c154064c950dab16def67fa68bae072ca188db0149bab2d2aab139"},"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":"81dcb0cc4de022385741d486be33ee520e18713d30d91a9fdf2d3c7be98801ad"},"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":"40501a67b9eef5f2a61d6f4003a8f50797746c3a3b18197d031d8205f0c88884"},"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":"55f51f3ae5b5644a80c501580244bda13484da7d9c582f223494f2285f427ba1"},"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":"98b74604f3157bdbf061d9fc5382d1882976694fed95bfe0534cb3f48582d7fb"},"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":"90a813bf5e48d9945cf338c6bc693b2e05ba24a295adb09f7da727a6658c6256"},"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":"16bcd1138028fb69264932b620a32327a52876b6edbf7c37eecc91a91bb6ecad"},"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":"f97e6be1345848bc03b38cd169269adef57269e3435ff1cdebc2aa31d11f7d99"},"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":"d184183ff5aaf86479be4880db99d325a9de8f2d28255075d900f1cb3ff6a661"},"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":"61241aef4f01cdbaa76980c4eb87083b2cbf734a4f5b07f9d88ab72895171372"},"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":"b4e726837ec0889d49a4992212a902f737afc03a0ea8e086c84073afba82b648"},"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":"df0c988054802e7d0e6b85272f9b58527793523334d0795b8652eaf861e4e301"},"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":"325efe6e2d1c06f2f4fb89dfffda36356ed3da79581a134e2bf9e83967858cd1"},"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":"78e02f56c4987630c24cc1ff846e5f32fb432f6a7a96b759900836529a29eb43"},"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":"98121839774103c321e10a34cc5f4fae2453ad1775ed8bf57817165dfe80d26e"},"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":"0da4b1f21f55da9fe11cd940e13c32fbcda130153d92b391516c7bc5d68fea45"},"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":"783eff09b151d78ca7ce4f1605dd48e8859d8c5a4fb03f7136848e4440fe76c6"},"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":"c095e50e85367505aa3b5fc37a50c8d6bfc171d548b415584e00d4bda9d5f262"},"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":"6fb26bd476576d9c4f8b5add71cf8a8f14d4ae84970e977e3defeefb6c6b6240"},"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":"08fe54a317dc8b15ce982d389ffe2987e887c507f5f38f9c772148958e2ecf3a"},"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":"ecb3d1cf5839a254288577dc0197128203d5070930947d508bd4981dd20ba96d"},"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":"0df481848bfb45598ddc5dd342b80537afa17a584f9ecb7950a82c6a14713397"},"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":"4ceb3f31ff064f42c295ed307b440a098a689ed98cd1e163a4baddccb56e5bb5"},"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":"3fc60efd28da8ad731abd12b29cd8e7d72c4c1cd8cd1c6c089c66af4601dd06e"},"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":"1e6cf8db750be110c15ccfc8397ffa8fc88108f925683b3fa7416e8127b5baf1"},"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":"c45f0f9315d32d9c776ee572cca8f849392e35d7d3eb9044978a2698241b38d0"},"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":"44bb2346f239b921eeb63f7e0205a0b437e2dae6ada4f9baf0ec6af618fd84cc"},"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":"741a167cb393be5c479293b8965146e931f13996f0438fe22da50328c669cfe6"},"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":"8a506a52095017c01bc8c04ac6a66662c70c194addeda0c54a77147bed7f916e"},"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":"5087ff90a886f97ccd3789ba7bcaf82ea9811aea2fd04a79a523cae63519f09c"},"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":"8c0c3b4ae9f40237d7a27641f04320fbc26d9ae4e8fe800a84248d91a268874f"},"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":"1914586a9016b60fa73372dd7c397883aceaf5a478d2f035a2cf90761cea6d10"},"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":"a4a554db36a01027065065f3da65d0c6579ecc080f7d2ce4b54c9ebe1fa56c5f"},"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":"266551df4f5e13f29574b1c2787a176293d87783b05705e5e1489bc79a70e7dc"},"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":"16390b3434942caac8a76da53110262e6c4558b1826f6f32954684d56b851c07"},"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":"4bd2fd041669b7bddb4dc2ca43942dd6e5e1f5f9a9548d201d56b19f53094a0b"},"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":"36c4452ec562d021104e90a44a0c0b87518939e7070959dc37577821287311c8"},"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":"5d8e5838db998cda1ada0e98b6bc748d2a1fa9da7c1942d11e5cca4f450bc160"},"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":"0a482500b2455064684669bde0a1e21110af1f4e1700aa11b3524585933baaa8"},"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":"70da6757582db391f054417ff7920fa9d6b8cc280824e1b8724590f343cc4f29"},"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":"e5c587daceab238cbdb9b385ed715d93ac028eeff6d7817174344453fe2d18c2"},"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":"6bc53f8e1cfc61ec5239e504fdf859b6acfca95eec4ba1230803db96d0f871ff"},"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":"9c1172eabdd7c42adb5bb15bb52bc870ffb2441ea6d94b75aea9b9c495930cf4"},"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":"a3cf540173940cda0923c1e2cac3deb2ba928e2093feabb405e22b6088cb18c7"},"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":"efbe343b7d29a2bf33850be6602f52385aa23beaf75068a9fc1fa85b2f9bafda"},"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":"42817446ac8e1ad9ec7e72067604bb55159363910499e081347a199fe26b9f38"},"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":"d98cca8adcf9faec4500e84639d7b7e87ebdd3a4d5d88996dc93e15fb72a0762"},"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":"182cb382b6d4ea8cd5e84b72696ab27f707ffa9baabda0e984f8532fc58dc33e"},"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":"54b124e7c7a7c916fdb9e2e339bb29ce8eca64e709cf5b44139c3354bf62390f"},"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":"abeb7b15c54b1df1e16a094659dddf452005e75551fc2422e0e628a3983eac48"},"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":"2041328fbc91fbd7cb9c0ed4a385b5fb5d54ab67562d34e2cc99c769faf224af"},"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":"153c88fb0374e98ea0ae7c41d230c6a04b0b2d357b157b43c6a2043f7c218337"},"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":"45873b5190c1f7db843a906de8be07b6ff9ede22df47c6fd905a2a8ef6f783ed"},"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":"b1f9870b87b149d2af658043f7b4513abd3122818cd90a7a2810211897da0465"},"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":"e8b68fae1114aa0e373f6a4e5a2130ba5e77e86c76d0fce1d93387692dac1b02"},"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":"702e3dc0462efc1970ec4ae759ed6d394f01cb610e92767a070605244a546824"},"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":"c7e6cf0b8a4d2a5ceb3a9a88cb41a7af2098b17ee24a156efccac8240d289661"},"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":"f972291b32422b1dfeeed74b42bf4b344e2442237b8fa625a3863dc17f07a14d"},"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":"3db5955d39c36e6e763e5a69947bcc562c9f65325a38047efa5904a7363aa019"},"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":"fb59dff2a3af9dbbed73630d3198db53392b0211d2e1a5135775f88474573aff"},"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":"e1a50ec0ba54e4544785ef9a19663278956fb843e1a17fd8f844052b3b75251e"},"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":"61e8b3413d4cd2d093f990889a33fc32dbd3639b72b699b26b59796bdf82b63e"},"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":"90a5c8d04c929534a610553c02fe9715ffa84c7173f09f5b44913b3cf33e9ebf"},"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":"fd0c6386a56bbcbfd3c5e77d2f54b12ab8af7ebf24752dda2f23daa0e6d6e3c1"},"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":"68807132421789813447b571a4adf38809ddf18a9362dd0e3878bd0548e74962"},"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":"4c087575a6e5d4550aea6f7af832f711c6d516329e3324d4131985bc473dd3ef"},"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":"49f76aec3620670ec261d835e4fa647b31b3944aece58df5a971d3f1c99cdeef"},"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":"d89ff8be40979a750f71a1b1785d33a78ab956aa773c1a40e692751cfa2edca2"},"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":"749eead476462e9e2be49e845922ad53d8a5c0477f5f27b1bdcb355760e37a30"},"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":"21292659969e62ffb8d004c5461a090ca9c36735adf7942a44c09a324b41241d"},"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":"55aba414e4213b549500b21e788ad39b6a74a263279538c7821228a26d4996d6"},"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":"a00bc7dcc8746cdbe3808fe1fc0c5ca28744fc6842683e0506964af768adf380"},"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":"76b4340744b12a615407520fb15d52c8d0886ba2a3a15101f0f5645d30711996"},"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":"afbeb4f301ffa36920be3484c7ed699a7d1332df7fff0afce2ea9d9d2652acd5"},"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":"6c137f7cb4cf578b0f1aaf09b1ef27e35fc95b50204694a3cb431fab268eb856"},"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":"df04854735f6784e4de0ceebcefa97579beaafefa80bfc9ecb1aa10d6939bd99"},"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":"b900cd88889014202785435297ec3af1bb79c79ec77a08d0aef0b02b64d42b42"},"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":"2eac72dda620709dfd8621a038b244af8a3651294a2f0498fb5b615fd397bdd0"},"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":"dda39a96efee20fc5627317ff7acc6cb2572a4fa0a351b4500e2a89d9876fbd4"},"taxa":[{"id":"CWE-89","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":"3c059ff388aaa72ae08e663c6b813ed0f35a8de9b8087012df8f9497ea067e07"},"taxa":[{"id":"CWE-338","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":"e7ab558a1a8c745a3f6023d6be144bdae3a1d2b981a20528f87ee4f6a36ed7da"},"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":"45a0afec76dc3342375ebe92ec882fea374bfe062dbc47ce1c2302723ca26232"},"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":"23c0c0922a6645648f80b448611f7e650aa9519db338987c73fc9965659087fd"},"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":"ec971490a8b7275ac5a46ecea36538a155870efe9b9aee94a627e74f4be22e3a"},"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":"580fb71c3b57000d427243c339e4cb492a25120c7eaaf40ce76a363b6601fa52"},"taxa":[{"id":"CWE-125","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"88b765b072d90b271558d1747fc3effa0936ffcf3cdadce539bf1481dc2bf90b"},"taxa":[{"id":"CWE-327","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":"c17f728d979e41a0d6cf9105c0626f616d209a26c4ae6ab5c0992d4fe6cce73c"},"properties":{"dependency":{"package":"brace-expansion","version":"5.0.9","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":"5c430f51c25d079e0fdc603f98de7a08790e1dfa5aeeb424f2d1aba5456169e1"},"properties":{"dependency":{"package":"thrift","version":"0.17.0","advisory":"[GHSA redacted]","aliases":["BIT-thrift-2026-43868","[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":"ac07f6d7edfd49261e66a0ecf670dc83aeb27f637d0eaec58b89ac41744f7835"},"properties":{"dependency":{"package":"rsa","version":"0.9.10","advisory":"RUSTSEC-2023-0071","aliases":["[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":"9d7e2f5e4e133844171b9412d83e460349b527553e21e4eb5d4f1e038ed6831f"},"properties":{"dependency":{"package":"atomic-polyfill","version":"1.0.3","advisory":"RUSTSEC-2023-0089","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":"95686d8e64236c3c2c566e482859faf67a5bbd9dbeebb6f4df8aab56c3496281"},"properties":{"dependency":{"package":"proc-macro-error","version":"1.0.4","advisory":"RUSTSEC-2024-0370","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":"f48cf8c9f415048128045caa118a1e03769d0b4fe18d7f036c2f3766e3e8d8fb"},"properties":{"dependency":{"package":"instant","version":"0.1.13","advisory":"RUSTSEC-2024-0384","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":"5922a5beeab5ac077ffb485a783ad545036e79b56239f83da38f3fb84336b113"},"properties":{"dependency":{"package":"paste","version":"1.0.15","advisory":"RUSTSEC-2024-0436","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":"b5524f25221308ec94b7206b58afaa59996104c20abaa242285d451f5344e44b"},"properties":{"dependency":{"package":"rustls-pemfile","version":"2.2.0","advisory":"RUSTSEC-2025-0134","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":"4975822701b3b96654c82dada9bad969e348a6adefa52cd3bba1b6cfd71c3bb7"},"properties":{"dependency":{"package":"bincode","version":"1.3.3","advisory":"RUSTSEC-2025-0141","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":"d469c4cdd0b2892278c4ee90c01a5a8ea4872a98733c483777e04c904cfebdfc"},"properties":{"dependency":{"package":"proc-macro-error2","version":"2.0.1","advisory":"RUSTSEC-2026-0173","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":"c356dafc2d2f879539349393edf47ceccc3e0771bf15e4dae816abd8594fd25c"},"properties":{"dependency":{"package":"ttf-parser","version":"0.25.1","advisory":"RUSTSEC-2026-0192","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":"be12c71023c43937a607a177a93163e0581c742a3255ef7103051bf074226b53"},"properties":{"dependency":{"package":"rustybuzz","version":"0.20.1","advisory":"RUSTSEC-2026-0206","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":"7a414286d7a72f852fc1d647870283225fee821d056a2b48d6f71f3f135ff422"},"properties":{"dependency":{"package":"quick-xml","version":"0.38.4","advisory":"RUSTSEC-2026-0194","aliases":["RUSTSEC-2026-0195"],"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":"ffc710964ea83f038fb51d30bc713cae7017e54acbaf9b79bfd17a9097e6fc92"},"properties":{"dependency":{"package":"quick-xml","version":"0.39.4","advisory":"RUSTSEC-2026-0194","aliases":["RUSTSEC-2026-0195"],"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":"80b5c22beae306eb623d7a60ec13361ab89285e1cc30fcf5b8daa2e87ffb5c69"},"properties":{"dependency":{"package":"h2","version":"0.3.27","advisory":"RUSTSEC-2026-0258","aliases":["[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":"b9388a5990a44796eec0d31cca128c4c44e3a81fbe81312091e4aa889cd8f196"},"properties":{"dependency":{"package":"stdlib","version":"1.25.0","advisory":"GO-2025-3955","aliases":["BIT-golang-2025-47910","BIT-golang-2025-47912","BIT-golang-2025-58183","BIT-golang-2025-58185","BIT-golang-2025-58186","BIT-golang-2025-58187","BIT-golang-2025-58188","BIT-golang-2025-58189","BIT-golang-2025-61723","BIT-golang-2025-61724","BIT-golang-2025-61725","BIT-golang-2025-61726","BIT-golang-2025-61727","BIT-golang-2025-61728","BIT-golang-2025-61729","BIT-golang-2025-61730","BIT-golang-2025-68121","BIT-golang-2026-25679","BIT-golang-2026-27139","BIT-golang-2026-27142","BIT-golang-2026-27145","BIT-golang-2026-32280","BIT-golang-2026-32281","BIT-golang-2026-32282","BIT-golang-2026-32283","BIT-golang-2026-32288","BIT-golang-2026-32289","BIT-golang-2026-33811","BIT-golang-2026-33814","BIT-golang-2026-33818","BIT-golang-2026-39820","BIT-golang-2026-39822","BIT-golang-2026-39823","BIT-golang-2026-39825","BIT-golang-2026-39826","BIT-golang-2026-39836","BIT-golang-2026-42499","BIT-golang-2026-42504","BIT-golang-2026-42505","BIT-golang-2026-42507","BIT-golang-2026-56853","BIT-golang-2026-56858","BIT-golang-2026-56859","BIT-golang-2026-56860","BIT-golang-2026-56862","[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]","[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]","GO-2025-4006","GO-2025-4007","GO-2025-4008","GO-2025-4009","GO-2025-4010","GO-2025-4011","GO-2025-4012","GO-2025-4013","GO-2025-4014","GO-2025-4015","GO-2025-4155","GO-2025-4175","GO-2026-4337","GO-2026-4340","GO-2026-4341","GO-2026-4342","GO-2026-4601","GO-2026-4602","GO-2026-4603","GO-2026-4864","GO-2026-4865","GO-2026-4869","GO-2026-4870","GO-2026-4918","GO-2026-4946","GO-2026-4947","GO-2026-4970","GO-2026-4971","GO-2026-4976","GO-2026-4977","GO-2026-4980","GO-2026-4981","GO-2026-4982","GO-2026-4986","GO-2026-5026","GO-2026-5037","GO-2026-5038","GO-2026-5039","GO-2026-5856","GO-2026-5972","GO-2026-6088","GO-2026-6089","GO-2026-6090","GO-2026-6091","GO-2026-6218"],"reachability":{"kind":"production","file":"bdd/go/tests/leader_redirection.go","line":444,"symbol":"net.ResolveTCPAddr"}}}},{"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":"325ca2eb7af7d8f7a26096fc006b7c3bf6bbedfb80d22add9a6e6986ea090472"},"properties":{"dependency":{"package":"golang.org/x/text","version":"0.38.0","advisory":"GO-2026-5970","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":"241fd56a6c90fa4b150010b055e7ab6e24769e24673cc08a09179a370b0e3991"},"properties":{"dependency":{"package":"golang.org/x/mod","version":"0.36.0","advisory":"GO-2026-6179","aliases":["BIT-golang-2026-56864","BIT-golang-2026-56865","[CVE redacted]","[CVE redacted]","GO-2026-6180"],"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":"8e178b7cd8eaf954af0084f67c5f62e521b45328fda0cb025ce33e98ba8a3d5a"},"properties":{"dependency":{"package":"golang.org/x/sys","version":"0.30.0","advisory":"GO-2026-5024","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":"20d19eda82ab26707b015601d96368f9577f5040f365bacda19e202e51a810da"},"properties":{"dependency":{"package":"fast-uri","version":"3.1.7","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"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":"fe2d688610b51e0a5a02c7c5dd1724a4986e40f2689fb84510e2ec0164c27d6a"}},{"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":"be6d8e168eb6a1034d6e862b45e5c4b1608ee419ad9c04b4eac0d204fee15a5b"}},{"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":"f6d499696b29979164d2299ac545042f29d1374a093a3876155e30b46b3a040c"}},{"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":"049dca8a00bedfde2938e830ec6889f54e7d23c00bdd4378c99bf493c0937114"}},{"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":"472bf8f124f396d145ba32f872b4d0c300aca08dd9cedc4c009c051db70b79ab"}},{"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":"0f5a7aa22ecfe381ca7d80f2d4e4b29a513b5e87c9707663c72da8f0e9175d27"}},{"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":"423fa1cd579013b6e943db7d079eb4dfc4e02af308bbdaaf46748826ed7152a1"}},{"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":"ad6eae16614110f0d788541f203c84b9a0a4c7e2f365fd97dd4d257dfebbb25c"}},{"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":"17813188619dead89dfbbfc693b277b879937f89316005fa8c34e03d87929392"}},{"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":"2a59d13e6992c85690856e3ac7dce8b7e28534880f9f5613a2867c9c59861677"}},{"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":"665e2094b553857de2a42296ba116bee34321debdd9bf9d64d4e34973e9c8ef4"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"91e2517c6d118032db74671f847cd027c8d8cff44f154723416e63beea8694f5"}},{"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":"d3fa2f36c589c59efb1da57b873cef22c6950befac2ae4299f69c7d9555aee47"}},{"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":"216aaa7ac0729a54603e4b0ebe456d260ecc957fff90c06ace24315845f4127b"}},{"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":"f226598ef4a6788202c46ca534ba9064a2d3107038c090efa9ebf49d94879112"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"86375137798bf920629b0be986f0c8e4177112b86ca83a02a1e01d8305520726"}},{"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":"590c6a05ad320a4d3425038e9707848e9dcadf03279970f730ca5bc74f145336"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e2e15a08c72c5a46c05692f73b1ea07cd9021e27fd7818bdda96193ad17def7f"}},{"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":"246a0a932d68aa09209259545b6da6de4790ca8712138017cbb3b397c27215f9"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6d247471bcbd765bcfa9a9312144712cfa1e0530f42ce5e73f4f6b7d0b0d835b"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9677a8b9b913f297499590ee808d6a151f055917278dbf66e88554d7edbd0472"}},{"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":"4b4de427d02399e9cba83f737fd23cd83e842d84541ae8c71f5e74c49e019a58"}},{"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":"e23e2d7bfeadd7076976cae5010a89a5a76d41e8a99da9c958f29afce36e0558"},"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":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d223f81ac1401f973a95ef9370bae5e211d441de9426066bfd6c4cdc42e23446"},"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":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"983c642f24adeefc549ead2abd7cb5e604ab262f3599eacd62587eb0d207990f"},"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":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c0f3d7371f8ad1b42b442e1ffd766d8eb375361c44f653e352ccfb4bd10f758a"},"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":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"bb0fccd805338cf257e83ecaae87de728e1f236fa3b5fbb94c41be38e27e25e8"},"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":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"39aa6c742344b7021459f2bc07496b54cf22d7257ef6e510a0b011a20d797cb2"}},{"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":"006578d7ea3b81ebe6f995d6c61930b1822f6bfdcbd43823f05dbf6ab500a610"}},{"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":"07d248ded0326c585621a730b1275f6089bd7bc346e07fc02b63f906b6d10a8f"}},{"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":"4e3d83b97fc29679ed18d0517cce602d17b56531d74b5abf2b0e79b149017d58"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"00509b870c2829114dbadd83af8461323ebf6f9baae5bfb71864c2c46f8d7887"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"656198a35097f9498f91e62d87d3e459ef53346e4e59722115a8d8797f9a3d2b"}},{"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":"e11630a389c9b999185c4c73f05d4d71750f48fe1e9bce29909bcc34aea8e5ec"}},{"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":"b18514e348be7b837909df44a30b57445d5ab990a2e23b8a8956cd294ff3f41c"},"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":"3de150b8f2e5888d6402cdd55c466c9669ad2eda6d670535b9a77a1cb49d70fd"},"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":"61ec132d6b39a769a894784a373c0a652cf888fe30d9c20e4ffc659a77e7239b"},"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":"07c316db17a7699404a19b8324ae41d1c67d86b0f0345cf897d66d3d3fe3b9f7"}},{"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":"bcfd974699ce4256470a288e8af8d494d03dc15cac1d562461e6a12d215c8c12"},"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":"39e6b0daa7dcbc4cc1a730cf59ea383f5d4e0fed319a87f116ffed9491d8dca6"},"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":"f8a7c91ad24ecff12cdc86db2ff0e6d68862f744023eb1bf80ad4079d8f6d758"},"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":"2d2c96a0b38491d1d3334bdcdb12297a4a085d9feb8a22bc56cf012c7c36ae64"},"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":"fe4543afbe411347c7e01fac36f022bae189655f56d01ff1049608128395d72f"},"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":"81598c2e3d015695fcb2289ca4003509d5282c790a016014a6712173f1919f93"},"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":"1202c54cde0f9dfd69159f57afc503be6d0b3aca7ab9f00e59c40da7118ae281"},"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":"bff73483d42caa9d64816e1cbe37bace3a074f5199fb097a0d8385686af3477a"},"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":"f5b50da7c26a432bfbe41151f8512107d61ae379cbbb08ba9898a1845a2d4c5f"},"taxa":[{"id":"CWE-1357","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":"c5a4ee7b6080311c80c0134ea81ee85283b9dbabcc50cf82f9467449fe9f7d6c"},"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":"149793a2935a7346577298e98b20c89a98a2e3c23fcf7b139d15acc1fda0c60f"},"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":"3543ff1becf708a38dc6975892d28e65ab90da7bee3d42daa0c68b2bdc6072e1"},"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":"3cbf7b9c4342d00ab46ffbccc576e0beff11efd5866fb312ce1a42d0d935bae2"},"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":"531a4f4070b49c813e2ffd18055ef3fc91cda1e7c58fc42b3bccc90a3fe7a840"},"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":"46274604f6d0e2a10f76820868bb8f6a616f8b4e32766ed4f8e085817f230cbc"},"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":"098d0051b8780e826453cf05db570446bf05ab8625067bcd1077cfdd38033622"},"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":"4fa883c445aeabb9293c284a2486e05171d8fd5ac48c1adfa1df9b3f3a06e2f6"},"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":"96210a702b34d5bb5390ec7583d86ac3eafbbb904d595e8929af2d95ae78b58e"}},{"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":"22c80862e2d7567366c1130ac48268d7e2714e74e92ea4d35c303d42610157d6"},"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":"3f18da7cdc83fe02c3e649e6b74a4fd325418d744897035861f4a669b6e2acda"},"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":"c55af786f0032dfc4e1fcaace93a5a5cc88da59d814697ef4cd7d3b0922e61a3"},"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":"ec665abf272d850d8b8c28941aa8e3fdffa5d9f339e24b5484e7dc63432ecc01"},"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":"1a4376b77b34a1c9e1c649793ad8d8d1207f4794897e49052e773daec509a6b5"},"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":"e61649817ce37fb95453cab3ac93cc664de8019bbd17f995217221e70d4a2dde"},"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":"b9efd24dd4c7567e6d90e68303250b950f097840afb3badfd3028c36d40b3b01"},"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":"3ba7bd93fdd131a7fbe36bced430099a7eb5a88811b7853d6194600759bc7655"},"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":"48d40edd52273f3f14d9309c3e2de67417f53cb7208b4e725552ba6d41016d90"},"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":"25c18cb6ab6c343d93d45fc6897d3025a390df05a46bf263e24fbe5d8fab36a8"}},{"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":"41d574494d5cde368b26e3ed4151f7adb8d14e9ddfcf129277315855e370d187"}},{"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":"00e88997d839be3623b37493e8b8d4a0cf8b343b7a6bf6333acd2ebdb59c2c45"}},{"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":"ab5aac0e1f9a11e6787a77aa781da4c33f5dc5b0d9003f9ebde9fc272dfd554b"}},{"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":"fbf9136306c8280ba6059044ae0df5d5d7b7a9721ccf3bf07257aabe859860b6"}},{"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":"d08c603990cf19413c550e55fd0f049d61a99087f8be6294eddc42e74789abad"}},{"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":"2d707d0f39e4c37187231d27aa41dc6bfe2c7a7e1fbab427facef3a7f06ffb2b"}},{"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":"92352d567ba19a06933c385a519da4be0401a394a5e0d5b3ccb3054e59391d6f"},"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":"ffa671c01c3d139d51583296d38cf2fc341209836d734c595ae34ab78d3d7a6c"},"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":"6b0f1d29f74ee0a074e9f7933dc76d590a3ad533663a8f71e46ee93599c7a0b2"},"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":"cde097f40277f305b3aa60fc03ed54d43dd639aedcc74aa3120a8e135b59f1d8"},"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":"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":"3b1568673c97a5ce9b1ec5a08dba083d705b7ca92047378b6f33333438b27491"},"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":"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":"a0253cdb433485d93f1259fe935cad7c5df0486a99bae72ae65dbbacb158f6f3"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"765ec371ea8d37ed4b3f0e639be0e6d748d9a6587af6de7600dcf4ad6482e661"}},{"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":"1f51a163f26d94ce6b6f473117dde579d091c8cbf9e59810475c94d9fc921120"}},{"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":"3d40b067c9deddfef1ed531c8a67671707a6cbf83e1e96b53a4f90fcbff715c2"}},{"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":"0be9a6537e3e97ff1c09434291508b01fc9abe82d7068e72f8557ecd2847817b"}},{"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":"cc0c38322022f7cd12d06dbe4893ce0fe83c4b5c8b2432377c088e73fc259185"}},{"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":"bb153fe369f55b10c69b6fdf456f5770641a9919f6942b55dcc178653d5b1bc0"}},{"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":"ac2c46606666c5b9c5da4bb11b71f3885dd64e77d12a81793dafe69505aa5a2e"}},{"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":"d1beb1d24c47edff778e953ec1e54d884bbd8c240d0bebdd9f6886f85256fad7"}},{"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":"fa698021bf8adfa40275c25d9475b0c3fcfa05cbd6b7fd59ed49e231621c3f29"}},{"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":"8a0464d54ec3d654147cfb264dd627b1c89bb94bd24f3cf6f57dc54faf64dd6f"}},{"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":"ef55f20961b099953a84fbfbe6c77714d5164fd400c854738c36c86fb43b9a55"}},{"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":"2baa8e083bb0f42ec471f1cbb9b87df36f80907e60b2bdfd82c6dd0fd46ad713"}},{"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":"c08d328e807fc336143d29f69679072e1ea30e809aaabd6911a7fa6ff650605e"}},{"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":"4d0307812983106151b941628863901b8a65fb322e8ff2410d3a720ef5aeb54f"}},{"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":"77517bd7935f462f3a68d08738ec545d69fa2cde0f8664a9745200d7220154c5"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away, so if it breaks, no one currently understands it. It does carry its own tests, so the behaviour is pinned even though the understanding is gone: schedule a read-through, using those tests as the specification, before the next change lands here."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/cli/src/args/permissions/stream.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b53857e8db33efdfa13a724303c6a604f5387726b8a477a3e58862b33ec6b94"}},{"ruleId":"D34","level":"note","message":{"text":"Further orphaned files (smaller): 110 smaller file(s) also have no living knowledge \u2014 folded into the freshness score and metrics rather than raised one row each \u2014 most significant first: core/connectors/sinks/s3_sink/src/lib.rs, core/cli/src/args/permissions/global.rs, core/connectors/sdk/src/encoders/flatbuffer.rs, core/cli/src/args/user.rs, core/connectors/sdk/src/transforms/json/filter_fields.rs, core/cli/src/args/permissions/topic.rs, foreign/java/external-processors/iggy-connector-flink/iggy-flink-examples/src/main/java/org/apache/iggy/flink/example/MultiStreamJoinJob.java, foreign/java/external-processors/iggy-connector-flink/iggy-connector-library/src/main/java/org/apache/iggy/connector/flink/source/IggySourceSplitEnumerator.java (and 102 more) (111 orphaned of 1199 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; 1199 of the 1968 production source files in this repository met that bar). 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":"warning","message":{"text":"Change coupling: partition_helpers.rs \u2194 lib.rs: \u0060core/server/src/partition_helpers.rs\u0060 and \u0060core/shard/src/lib.rs\u0060 change together 67% of the time (8 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 8 shared commits counted here, the most recent 3 are \u0060bad22c03\u0060 feat(server): dedup partition writes with per-group client table slic\u2026; \u0060e9b1c9a1\u0060 fix(cluster): stop a late partition materialiser from wedging its gro\u2026; \u0060db14a4b1\u0060 fix(cluster): make the advertised leader accept partition writes (#3985) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/server/src/partition_helpers.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"974b81f56ec569aec5ec2441cbd58252e360e8ba74fd0954b3562fd9961a0d1d"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: benchmark_producer.rs \u2194 common.rs: \u0060core/bench/src/actors/producer/benchmark_producer.rs\u0060 and \u0060core/bench/src/args/common.rs\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 \u0060fcc5a447\u0060 feat(bench): prettier table output (#3090); \u00608294ccef\u0060 feat(bench): add high-level consumer API for benchmarking (#1855); \u0060f859e170\u0060 Add cache metrics to \u0060Stats\u0060 and p9999 latency tracking to \u0060Benchmark\u2026 (at that commit the files were still \u0060bench/src/actors/producer.rs\u0060 and \u0060bench/src/args/common.rs\u0060) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/bench/src/actors/producer/benchmark_producer.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d93467b7f22b0601c886ea59fe92e4bc5ad8a162eac985d05cd31eddc589c6eb"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: iggy_partition.rs \u2194 metrics.rs: \u0060core/partitions/src/iggy_partition.rs\u0060 and \u0060core/shard/src/metrics.rs\u0060 change together 55% of the time (6 of the 11 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 \u006022778643\u0060 fix(shard): drive metadata repair and the commit walk from the tick (\u2026; \u00609914f5a8\u0060 fix(shard): drive partition repair and the commit walk from the tick \u2026; \u0060bad22c03\u0060 feat(server): dedup partition writes with per-group client table slic\u2026 \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/partitions/src/iggy_partition.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"65951eb1b52189005e2fa7acd5a503750ffc36b112ac7bd86ca4806bebb6702f"}},{"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":"06958a817882c05d16d7f093c6b645b7eddded3c82fff44d1fe5a0f5c31484fd"}},{"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":"9e708a83fb6f627ff4d53802dec0b9c4fc9303d20aa34f8ec6756850de0d22cf"}},{"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":"4f1e7684f8281bd255ddef97105c7055c2ebae06964c8745716b83e174debe83"}},{"ruleId":"D40","level":"note","message":{"text":"No network policy: No Kubernetes NetworkPolicy (or Cilium policy) found. Without one, every pod can talk to every other pod and reach out to the internet by default. Add a default-deny policy and open only the flows you need."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"295828650a2aaa1b03ae9b32ae6843a0c38011e5a70b1926442c4fa7187de5f0"}},{"ruleId":"D41","level":"note","message":{"text":"No AppArmor/SELinux confinement: Workloads declare no AppArmor or SELinux profile. A mandatory-access-control profile confines what a compromised container can touch on the host, complementing seccomp\u0027s syscall filter."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"e83fbc31033373d6c51983ed230eb4ba61f7775ed02afb30f5fc1840bde01d4f"}},{"ruleId":"GD1","level":"warning","message":{"text":"Unfinished stub \u2014 throws NotImplementedException: A shipped member still throws NotImplementedException \u2014 generated scaffolding that was never completed. Implement it or remove the dead surface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/JsonConverters/ConsumerConverter.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"63c58ca8e5666756bc7f637b5cf72c72687c44ba833aa4c1692822481a76d2ed"}},{"ruleId":"GD1","level":"warning","message":{"text":"Unfinished stub \u2014 throws NotImplementedException: A shipped member still throws NotImplementedException \u2014 generated scaffolding that was never completed. Implement it or remove the dead surface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/JsonConverters/ExpiryConverter.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b8e8e157b6a923011a7186b4f7d1b29e320f39adaabcb62fc820b6d36d1eb51"}},{"ruleId":"GD1","level":"warning","message":{"text":"Unfinished stub \u2014 throws NotImplementedException: A shipped member still throws NotImplementedException \u2014 generated scaffolding that was never completed. Implement it or remove the dead surface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/JsonConverters/MessageConverter.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"30a489aa94e01e6d24f999ff2b52d9f70ce96e23de222d647139eb8a3d681b34"}},{"ruleId":"GD1","level":"warning","message":{"text":"Unfinished stub \u2014 throws NotImplementedException: A shipped member still throws NotImplementedException \u2014 generated scaffolding that was never completed. Implement it or remove the dead surface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/JsonConverters/MessagesConverter.cs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"23fb942bf0e96911abff5a26331346a94b732429b7d4f04490f4d06f113d27b0"}},{"ruleId":"GD1","level":"warning","message":{"text":"Unfinished stub \u2014 throws NotImplementedException: A shipped member still throws NotImplementedException \u2014 generated scaffolding that was never completed. Implement it or remove the dead surface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/JsonConverters/SizeConverter.cs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"e216eac9e59c8f29c63ffd6c5a773550eb2ad69bffa8beee0580f027c957b8a0"}},{"ruleId":"IC1","level":"warning","message":{"text":"Unfinished stub \u2014 throws NotImplementedException: \u0060Write\u0060 is a shipped member whose whole body throws NotImplementedException \u2014 scaffolding that was never completed. Implement it or remove the dead surface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/JsonConverters/ExpiryConverter.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"a208aa1cafad379b627b97bde7f42b992f3a5371a7c507e60d65983a81fcf50a"}},{"ruleId":"IC1","level":"warning","message":{"text":"Unfinished stub \u2014 throws NotImplementedException: \u0060Write\u0060 is a shipped member whose whole body throws NotImplementedException \u2014 scaffolding that was never completed. Implement it or remove the dead surface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/JsonConverters/SizeConverter.cs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e7c3ca647e699c0c544263305669a7ecb731bf196973b541dddd6f9c5bea21f"}},{"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":"P12","level":"note","message":{"text":"Sleep-based test synchronization: 12 Task.Delay/Thread.Sleep call(s) in test code synchronize with background work by sleeping \u2014 a known flakiness precursor on slow runners. Prefer polling with a deadline or completion signals."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6a03a2c4f0cdb020131eedb5050e85716d2d15c3e6c049458617ddd83166de9e"}},{"ruleId":"P5","level":"warning","message":{"text":"No DR/backup evidence: A persistence guard (data volume / purge-protection) was found, but no backup, geo-recovery or RTO/RPO controls were evidenced \u2014 a volume that survives a container recreate is not a tested restore from catastrophic loss."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"5daabb38c90b07af65b8738cf94ce884e90a7d8fef810d341de5c186188c8fe0"}},{"ruleId":"P6","level":"note","message":{"text":"No changelog: No CHANGELOG/HISTORY/RELEASES file \u2014 what shipped when isn\u0027t easy to reconstruct for support or audit. (Versioning/tagging makes releases traceable, but a changelog records the what.)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"dda5aa5aed8cbb292c3ef2b733bc138f614293ae6426c85e98bf31ef330d9415"}},{"ruleId":"PF1","level":"note","message":{"text":"No performance benchmarks: No benchmark suite was found by the two searches this check runs. FIRST, a BenchmarkDotNet package reference in any project file \u2014 every project the workspace loaded, plus a walk of project files on disk that never loaded, because a benchmark suite is exactly the project a partial load drops. SECOND, a script harness: a file whose name contains \u0060benchmark\u0060 and ends \u0060.py\u0060, \u0060.sh\u0060, \u0060.ps1\u0060, \u0060.bash\u0060, \u0060.rb\u0060, \u0060.js\u0060 or \u0060.mjs\u0060, credited ONLY when this repository\u0027s CI text also mentions benchmarks \u2014 a harness no pipeline runs is read as a fixture, deliberately. Neither search can see a benchmark suite in another ecosystem\u0027s idiom (a Go \u0060testing.B\u0060 file, a JMH or criterion project, a pytest-benchmark run), so this is \u0027no benchmark found by those two searches\u0027, not a verdict that the repository has none. Where code is performance-sensitive, a benchmark guards against silent regressions \u2014 but it\u0027s a bonus here, not a deduction."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"fd90d18ee3bb127e8033d41e8efe4e131487a6d794a5730a72c56105ef7485ea"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060main\u0060 is async and calls readFileSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/node/src/tcp-tls/consumer.ts"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"1133420094be79e15af3feb737d9dcd969392dd080626cfbf3a2680e4203c533"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060main\u0060 is async and calls readFileSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/node/src/tcp-tls/producer.ts"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ad2a2a6cf9065fd0e84f40a5de733e49993c8d0ad62a59d2c65ce6f0503e844"}},{"ruleId":"PF3","level":"warning","message":{"text":"Awaits without ConfigureAwait(false): Only 0/423 awaits use ConfigureAwait(false). A library that captures the caller\u0027s context can stall or deadlock its host \u2014 the classic way a dependency drags an app down."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"9409e0163ea155fbf96ac6090b9aebd32c62808d0aee4aa2a31f3d049418befc"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplication concentrated across 9 sibling directories (17 clone groups): 17 duplicated blocks under foreign/node/src/wire/ have copies in at least two of the sibling directories client, consumer-group, partition, session, stream, system (\u002B3 more sibling(s) not listed) \u2014 11 of them are reported below, and 6 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 17 and which does not depend on how exactly each block\u0027s copies still match. That concentration is one structural fact, not 17 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 17 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":"foreign/node/src/wire/client/get-clients.command.ts"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"f272d8e35f6c229d7fb52b0dfc9e6b05b5d3fe8e7840900ea778580e1ef54559"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (65 lines \u00D7 2 locations): web/src/lib/components/Modals/AddPartitionsModal.svelte:49 \u00B7 web/src/lib/components/Modals/DeletePartitionsModal.svelte:65 \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":"web/src/lib/components/Modals/AddPartitionsModal.svelte"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"07222ef0a8220fe9afe546fb51bfa739deaa01ebcd35e357c2c03467b381c8ea"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (50 lines \u00D7 2 locations): web/src/lib/components/Modals/AddTopicModal.svelte:66 \u00B7 web/src/lib/components/Modals/AddUserModal.svelte:62 \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":"web/src/lib/components/Modals/AddTopicModal.svelte"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"4dacd0414feb0229440f8657e462571c42fc5028f5e6319e599a0a1c3b7e54d7"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (38 lines \u00D7 2 locations): web/src/lib/components/Modals/AddStreamModal.svelte:45 \u00B7 web/src/lib/components/Modals/StreamSettingsModal.svelte:57 \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":"web/src/lib/components/Modals/AddStreamModal.svelte"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"1376a2e98ef6ac3e91eda47b87c461de00aa7fc5c9a1d78abf1c5ba9305756bb"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (36 matched lines \u00D7 2 locations): foreign/node/src/wire/topic/create-topic.command.ts:61 \u00B7 foreign/node/src/wire/topic/update-topic.command.ts:41 \u2014 the two spans are one implementation copied and then locally edited \u2014 212 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":"foreign/node/src/wire/topic/create-topic.command.ts"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"916d8af555aa5a31a599d191e2399926f222bcc13b63462dd0ecb3e5d116cb50"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (29 lines \u00D7 2 locations): web/src/lib/components/RouteComponents/Settings/UsersTab.svelte:46 \u00B7 web/src/routes/dashboard/settings/users/\u002Bpage.svelte: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":"web/src/lib/components/RouteComponents/Settings/UsersTab.svelte"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9ad58fde76eeef4ea350c438263e75c96e6aa46b12d14b5c193254958e0cb86"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (27 matched lines \u00D7 2 locations): web/src/lib/components/SlimSortableList.svelte:24 \u00B7 web/src/lib/components/SortableList.svelte:27 \u2014 the two spans are one implementation copied and then locally edited \u2014 213 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":"web/src/lib/components/SlimSortableList.svelte"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcd49f9b6dbd6334b26a07777739609f0cceb292aba67ac8eff26f3988327834"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2 locations): foreign/node/src/debug-send.ts:94 \u00B7 foreign/node/src/debug.ts:92 \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":"foreign/node/src/debug-send.ts"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"7dabae5e482706e40b4fa787378ad59a32fa473d54ad220862946a503cb44072"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (20 matched lines \u00D7 2 locations): web/src/lib/components/Modals/StreamSettingsModal.svelte:103 \u00B7 web/src/lib/components/Modals/StreamSettingsModal.svelte:135 \u2014 the two spans are one implementation copied and then locally edited \u2014 75 tokens are still identical, in the same order in both spans, 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":"web/src/lib/components/Modals/StreamSettingsModal.svelte"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"f01c144015c910a902d35ac53f44f0d0fa416d13a5407b155319c18ef669d29f"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2 locations): foreign/node/src/wire/message/header.utils.ts:314 \u00B7 foreign/node/src/wire/message/header.utils.ts:333 \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":"foreign/node/src/wire/message/header.utils.ts"},"region":{"startLine":314}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb646fdfee71bfc2b400427d3d2d6eb0e13e152ec56ad4af3e6926242883c63d"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2 locations): foreign/node/src/wire/client/get-clients.command.ts:23 \u00B7 foreign/node/src/wire/stream/get-streams.command.ts:27 \u2014 the 2 copies are spread across 2 files, and the CITED SPAN is a run of MODULE-LEVEL DECLARATIONS \u2014 bindings the module declares and exports \u2014 rather than statements with a call site. Do not read this as an extract-a-helper row: a call expression cannot stand where a declaration was, and putting one there would delete the names themselves, which are what the rest of the codebase imports. What actually repeats here is the INITIALISER \u2014 the same expression shape written once per binding. So give that expression one name (a small helper the initialisers call, or a shared base value they are each derived from) and keep every binding under the name it already has. Where the run is an enumeration \u2014 one binding per distinct thing, differing precisely in the thing each one names \u2014 the repetition IS the enumeration and collapsing it would delete entries; consider instead whether the set belongs in one exported table the individual names are read out of. Reported because the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/node/src/wire/client/get-clients.command.ts"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e9da3efb7b63fce44c256a79a147ae63cf435e9bad66969e4a44379db4a7255"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2 locations): web/src/lib/components/Modals/StreamSettingsModal.svelte:45 \u00B7 web/src/lib/components/Modals/TopicSettingsModal.svelte:48 \u2014 the 2 copies are spread across 2 files, and the CITED SPAN is a run of MODULE-LEVEL DECLARATIONS \u2014 bindings the module declares and exports \u2014 rather than statements with a call site. Do not read this as an extract-a-helper row: a call expression cannot stand where a declaration was, and putting one there would delete the names themselves, which are what the rest of the codebase imports. What actually repeats here is the INITIALISER \u2014 the same expression shape written once per binding. So give that expression one name (a small helper the initialisers call, or a shared base value they are each derived from) and keep every binding under the name it already has. Where the run is an enumeration \u2014 one binding per distinct thing, differing precisely in the thing each one names \u2014 the repetition IS the enumeration and collapsing it would delete entries; consider instead whether the set belongs in one exported table the individual names are read out of. Reported because the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"web/src/lib/components/Modals/StreamSettingsModal.svelte"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"a19d879d6939ada46640a243424dc6e1c9cb4d0f57a29530678fda938eded99a"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (15 matched lines \u00D7 2 locations): foreign/node/src/duration.utils.ts:175 \u00B7 foreign/node/src/duration.utils.ts:258 \u2014 the two spans are one implementation copied and then locally edited \u2014 81 tokens are still identical, in the same order in both spans, 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":"foreign/node/src/duration.utils.ts"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"49b740c8f06ebc62187d3a9ca056bddf622c656d8e0409f652a3040a17f82b66"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2 locations): foreign/node/src/debug-send.ts:52 \u00B7 foreign/node/src/debug.ts:49 \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":"foreign/node/src/debug-send.ts"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"730323c71cde8956795257db85d31859061aa31608610fa7f7a35922faeba98e"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2 locations): foreign/node/src/wire/stream/get-stream.command.ts:27 \u00B7 foreign/node/src/wire/user/get-user.command.ts:28 \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":"foreign/node/src/wire/stream/get-stream.command.ts"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e6f4b7e818d9c5831b12238cc845eb2782c12673c75ce5dd601d14e97736d04"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2 locations): foreign/node/src/wire/system/get-stats.command.ts:67 \u00B7 foreign/node/src/wire/system/get-stats.command.ts:80 \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":"foreign/node/src/wire/system/get-stats.command.ts"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"54aa252f6404e8c4e49b08179ada387307025943c52d3e41fba6a62a9ab4fdf3"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2 locations): foreign/node/src/wire/user/permissions.utils.ts:291 \u00B7 foreign/node/src/wire/user/permissions.utils.ts:349 \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":"foreign/node/src/wire/user/permissions.utils.ts"},"region":{"startLine":291}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc3df1b447acc45f3041e97486642cf8b50c9728b0edfefe5e1dc16af9818dff"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2 locations): web/src/lib/components/Modals/InspectMessage.svelte:52 \u00B7 web/src/lib/components/Modals/InspectMessage.svelte:65 \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":"web/src/lib/components/Modals/InspectMessage.svelte"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"522274cce3d16d8d83b5cabd9e7c92c7b90307e6dd3e8663b44d9f325c541d2b"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (11 matched lines \u00D7 2 locations): foreign/node/src/client/client.frame.ts:140 \u00B7 foreign/node/src/client/client.frame.ts:158 \u2014 the two spans are one implementation copied and then locally edited \u2014 78 tokens are still identical, in the same order in both spans, 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":"foreign/node/src/client/client.frame.ts"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6c8c908e778006595ba5203a8fc6ca13e6c6d27ba19ad45e6f2a0e39a2dd266"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 5 locations): foreign/node/src/wire/stream/delete-stream.command.ts:20 \u00B7 foreign/node/src/wire/stream/get-stream.command.ts:21 \u00B7 foreign/node/src/wire/stream/purge-stream.command.ts:20 \u00B7 foreign/node/src/wire/topic/get-topics.command.ts:21 \u00B7 \u002B1 more site(s) not listed \u2014 the 5 copies are spread across 5 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":"foreign/node/src/wire/stream/delete-stream.command.ts"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"963b28dd82926dc171573c3262e0d7eb35a580d1f9b5de9082dccf6be376853f"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2 locations): web/src/lib/api/clientApi.ts:35 \u00B7 web/src/lib/api/fetchRouteApi.ts:28 \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":"web/src/lib/api/clientApi.ts"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"a83709b6e6a8eee4526ae4829b91211925c25bc8a455da6c85080dd7bf114900"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (11 matched lines \u00D7 2 locations): web/src/lib/auth/authStore.svelte.ts:58 \u00B7 web/src/lib/auth/authStore.svelte.ts:75 \u2014 the two spans are one implementation copied and then locally edited \u2014 65 tokens are still identical, in the same order in both spans, 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":"web/src/lib/auth/authStore.svelte.ts"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e957f86d0fc0321bda8a3aedf9d7fbb29c614df0b6ff610e768174fa1f73e3e"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 5 locations): foreign/node/src/wire/number.utils.ts:26 \u00B7 foreign/node/src/wire/number.utils.ts:50 \u00B7 foreign/node/src/wire/number.utils.ts:74 \u00B7 foreign/node/src/wire/number.utils.ts:98 \u00B7 \u002B1 more site(s) not listed \u2014 all 5 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":"foreign/node/src/wire/number.utils.ts"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"60af7af487de523cbb6f1121c67b79f60342e88590fd489cfd77e8d6f6e38b0d"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2 locations): foreign/node/src/wire/session/login.utils.ts:90 \u00B7 foreign/node/src/wire/token/delete-token.command.ts:38 \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":"foreign/node/src/wire/session/login.utils.ts"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d76d29782a4e27edf4bc81d505b1c442ad0ad58246cb69c2c052109b880c22f"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2 locations): foreign/node/src/wire/token/token.utils.ts:100 \u00B7 foreign/node/src/wire/user/user.utils.ts:139 \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":"foreign/node/src/wire/token/token.utils.ts"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0a53a030648fe1c3d83c8b046e61e9f60677c1cb82da0868b70d3dca44ffc53"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2 locations): foreign/node/src/debug-send.ts:68 \u00B7 foreign/node/src/debug.ts:67 \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":"foreign/node/src/debug-send.ts"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"2341efaa4ca996a4ee9a13468a25cbb71e33894f043bbd770e086e352468a527"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2 locations): foreign/node/src/wire/client/client.utils.ts:31 \u00B7 foreign/node/src/wire/user/user.utils.ts:67 \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":"foreign/node/src/wire/client/client.utils.ts"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"1df07e05d4be41c7b0b164fd130b085d65af5fd84503b7ab66f434977ca0ac3a"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2 locations): foreign/node/src/wire/consumer-group/get-group.command.ts:37 \u00B7 foreign/node/src/wire/topic/get-topic.command.ts:45 \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":"foreign/node/src/wire/consumer-group/get-group.command.ts"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecd4e8b60a54b3dd85eb10cb0a1296a5dccc79f4437a6a37ff43095b5f14329d"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2 locations): foreign/node/src/wire/vsr/register.ts:57 \u00B7 foreign/node/src/wire/vsr/register.ts:74 \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":"foreign/node/src/wire/vsr/register.ts"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"db2114869d38f3c0599d169d5b919715e11853ce8efa84f9eb5b39fea8703bd6"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2 locations): web/src/lib/api/clientApi.ts:47 \u00B7 web/src/lib/api/fetchApi.ts:37 \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":"web/src/lib/api/clientApi.ts"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"49f268788f13cffe8658fbd5b60f76e0d7457c54a66b3ba7dfbecf450467dfe7"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2 locations): foreign/node/src/wire/cluster/cluster.utils.ts:53 \u00B7 foreign/node/src/wire/cluster/cluster.utils.ts:127 \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":"foreign/node/src/wire/cluster/cluster.utils.ts"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"59b2c951f545fed4445a6cc69aa2341bb5e8eb08589545431e185c08d0dc13f1"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2 locations): foreign/node/src/wire/consumer-group/create-group.command.ts:43 \u00B7 foreign/node/src/wire/stream/create-stream.command.ts:40 \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":"foreign/node/src/wire/consumer-group/create-group.command.ts"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b5cc170e99c67f08a43111a26fe4609b19e167b5b5f8fa5c3a6c86ded2451b7"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2 locations): foreign/node/src/wire/session/login.utils.ts:49 \u00B7 foreign/node/src/wire/user/create-user.command.ts:47 \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":"foreign/node/src/wire/session/login.utils.ts"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d67608c933384d19c1b2a17bc7778c417556b5d783a42567fee37709093ce0e"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2 locations): foreign/node/src/wire/stream/stream.utils.ts:61 \u00B7 foreign/node/src/wire/topic/topic.utils.ts:136 \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":"foreign/node/src/wire/stream/stream.utils.ts"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"13d766b233dbf1c5aaa474a962cd06f51baf85c6b1d601a997179e4ffc003318"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2 locations): foreign/node/src/wire/user/permissions.utils.ts:251 \u00B7 foreign/node/src/wire/user/permissions.utils.ts:318 \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":"foreign/node/src/wire/user/permissions.utils.ts"},"region":{"startLine":251}}}],"partialFingerprints":{"codehealthFindingId/v1":"6632e99553013dc0aa2f260320055324f9cbb6367ffcc275f883fad127633504"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2 locations): foreign/node/src/wire/cluster/cluster.utils.ts:69 \u00B7 foreign/node/src/wire/cluster/cluster.utils.ts:133 \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":"foreign/node/src/wire/cluster/cluster.utils.ts"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f557a6ff5b53090c8b2334c6d458e853ff5fc6b579fcc3b79459908509335ef"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2 locations): foreign/node/src/wire/message/iggy-header.utils.ts:87 \u00B7 foreign/node/src/wire/message/iggy-header.utils.ts:157 \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":"foreign/node/src/wire/message/iggy-header.utils.ts"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"26b48f7c105c02f583505e0e49bb0a25110fb5175815167bdfaa7586f3bb6ca5"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2 locations): foreign/node/src/wire/user/permissions.utils.ts:159 \u00B7 foreign/node/src/wire/user/permissions.utils.ts:243 \u2014 all 2 copies are in the same file, and the CITED SPAN is a run of DECLARATIONS inside a construct \u2014 the members of a type, or the entries of an object or array literal \u2014 with no statement anywhere in it. Do not read this as an extract-a-helper row: nothing here executes, so there is no call site, and a call expression cannot stand where a member declaration or a literal\u0027s entry was. What repeats is a SHAPE, and which shape decides the move. Where the copies declare the same members, the repetition is a missing common ancestor: give it a base type, an interface both extend, a generic instantiated twice, or \u2014 where the copies are a literal\u0027s entries rather than a type\u0027s members \u2014 one shared constant each site spreads or refers to, so the set is written once. Where they declare DIFFERENT members and only the form is shared \u2014 a decorator and its options, an annotation, a registration table\u0027s keys \u2014 the form is prescribed by a framework or a schema rather than copied, and the only collapse available is to generate the declarations from that schema; where you do not own the generator, this is the cost of the framework and there is nothing to extract. Check which of the two it is before acting: these copies still drift apart the first time only one of them is edited, which is why the repetition is reported, but the sentence to act on is not the same in both cases."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/node/src/wire/user/permissions.utils.ts"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d794351d29139fdfd26f701a86ee950636bf5113b44fce0f1bcaad5caf49df4"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2 locations): foreign/node/scripts/check-vsr-protocol.mjs:104 \u00B7 foreign/node/scripts/check-vsr-protocol.mjs:110 \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":"foreign/node/scripts/check-vsr-protocol.mjs"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd6aaeb918fda27f432110e4afff5cb60fc0415827570964defb4027d361da23"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2 locations): foreign/node/scripts/check-vsr-protocol.mjs:255 \u00B7 foreign/node/scripts/check-vsr-protocol.mjs:261 \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":"foreign/node/scripts/check-vsr-protocol.mjs"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"cce4681c3ceea3e2d926880f92809bc853c1493d615396edb12dcaa3d42f5cb0"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function _pollOnPrimary (cyclomatic 40, cognitive 87): _pollOnPrimary has cyclomatic complexity 40 and cognitive complexity 87; 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":"foreign/node/src/client/client.socket.ts"},"region":{"startLine":586}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4a18f6fcc59e77857a638c68ee694c629a8ad06e95f7b7cf5661baa4e8008b9"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function sendCommand (cyclomatic 32, cognitive 50): sendCommand has cyclomatic complexity 32 and cognitive complexity 50; 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":"foreign/node/src/client/client.socket.ts"},"region":{"startLine":305}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0744c7d8b0a1c07c2a42cf0b07f8ab35089c6fc259bc876064c38a1868d9123"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function _processVsr (cyclomatic 29, cognitive 44): _processVsr has cyclomatic complexity 29 and cognitive complexity 44; 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":"foreign/node/src/client/client.socket.ts"},"region":{"startLine":879}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a97d59048ebd82632082fadb99cedf01ab9396df238b1fc37a491c7a40549fe"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function (anonymous) (cyclomatic 23, cognitive 22): (anonymous) has cyclomatic complexity 23 and cognitive complexity 22; 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":"foreign/node/src/client/client.connection-string.ts"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"c358d31c1c8ae9f28416d52c04b9aaebade65b7b3294bcffbbe9d99a08803c44"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function (anonymous) (cyclomatic 21, cognitive 19): (anonymous) has cyclomatic complexity 21 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 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":"foreign/node/src/client/client.config.ts"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"7615fa86d00bde22bf6bebe8678304d690532fcf9453c1228a7cfaac24873bc3"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function _reconnectUntilConnected (cyclomatic 19, cognitive 35): _reconnectUntilConnected has cyclomatic complexity 19 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 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":"foreign/node/src/client/client.connection.ts"},"region":{"startLine":408}}}],"partialFingerprints":{"codehealthFindingId/v1":"8570bb0645b7c8591060c37a7085de37909758a3d9df1602117c61c7865481af"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function (anonymous) (cyclomatic 19, cognitive 5): (anonymous) has cyclomatic complexity 19 and cognitive complexity 5; 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":"foreign/node/src/wire/vsr/reply.ts"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"280c2628ce1ca3a4cfd35dd8cf9f706d229d39555ab1d0ba3fb23a7eb1b7ed91"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function serialize (cyclomatic 18, cognitive 21): serialize has cyclomatic complexity 18 and cognitive complexity 21; 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":"foreign/node/src/wire/topic/create-topic.command.ts"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"1909eed398bd0c7c2b50361eda59a4ffc0ca7d83d3ddc6ac3804cb8b2237582e"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function (anonymous) (cyclomatic 18, cognitive 5): (anonymous) has cyclomatic complexity 18 and cognitive complexity 5; 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":"web/src/lib/components/Modals/InspectMessage.svelte"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f705d99c65adea3b46072cfc5a13b8c5b4a726a99ca0b588a4088e039f39ccc"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function parse (cyclomatic 15, cognitive 29): parse has cyclomatic complexity 15 and cognitive complexity 29; 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":"foreign/node/src/duration.utils.ts"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"c738e3a7da28a4d6f2a7fb08501760073506aadfb4b4885da1c60ec174e683a6"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function _rememberCredentials (cyclomatic 15, cognitive 20): _rememberCredentials has cyclomatic complexity 15 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":"foreign/node/src/client/client.socket.ts"},"region":{"startLine":748}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb4886af3ddf741138f44d8ccdcac6897fff5bc3fafc2dd654c2471480ecda18"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function onUpdate (cyclomatic 14, cognitive 19): onUpdate has cyclomatic complexity 14 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":"web/src/lib/components/Modals/AddPartitionsModal.svelte"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6f7dc0fc8fd616d53162aa6b5b7ac62aeda5a19503f1109b881763b07882ab3"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function onUpdate (cyclomatic 14, cognitive 19): onUpdate has cyclomatic complexity 14 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":"web/src/lib/components/Modals/DeletePartitionsModal.svelte"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"34124bffdc22d8c5809ba661cab6d7f6c36f0ba4bfab49b02e6df4e4f110b112"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function (anonymous) (cyclomatic 14, cognitive 14): (anonymous) has cyclomatic complexity 14 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 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":"foreign/node/src/client/client.connection-string.ts"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea1c3840f017d61d7765aa059ad8b213e04ca236a56bd78906908c4954ea393f"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function _processQueue (cyclomatic 13, cognitive 19): _processQueue has cyclomatic complexity 13 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":"foreign/node/src/client/client.socket.ts"},"region":{"startLine":796}}}],"partialFingerprints":{"codehealthFindingId/v1":"8df952ee4823505580a1051663a04e187ffa2b5a4de7ec366650e420231e8778"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function (anonymous) (cyclomatic 13, cognitive 18): (anonymous) has cyclomatic complexity 13 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":"foreign/node/src/client/client.socket.test.ts"},"region":{"startLine":358}}}],"partialFingerprints":{"codehealthFindingId/v1":"a45c909fe06a39f91d0b2a10e6b8f1a8da33c738260aabdab16bc2e3d6393699"}},{"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":"web/src/lib/components/PermissionsManager.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"07cb018680812c8638575e29fbf15ca61f7d201cdcde3f4a947c452ff0770568"}},{"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":"foreign/node/scripts/check-vsr-protocol.mjs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e8b013b15b7fd5e455c8f6790a979ed6a2bc38a2ef864e04faf78b8136b9783"}},{"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":"scripts/ci/render-node-licenses.mjs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"63ebbc8085148415a09ee6c9e9f84d85c327e21ad201533f26e59f66eab0dfab"}},{"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":"web/src/lib/actions/tooltip.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"afdbcfb579a4d36d76b21c29653b2ed1b139be64fd8230ca187f6f5dd0bcf964"}},{"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":"web/src/lib/domain/Stats.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4c594b8be57b3f8a53ef60a0ce9ff8f6289f47bb0633109de2a746655b8c203"}},{"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":"web/src/lib/components/Modals/StreamSettingsModal.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a52aef93bb49649d9610dcd2dfa56221e72c00f773c3cf8be418add7512fa99e"}},{"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":"web/src/lib/components/DurationInput.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7dcf2812f193c65dd6abad3e0ac9b189dfef3e7354ab4df006f33d8790d9f840"}},{"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":"web/src/lib/components/Modals/TopicSettingsModal.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7986dac3f80609bed77f980586067b5eeceaaa78784f9cbef0bc586e8db1cfb6"}},{"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":"web/src/lib/utils/addOnKeyDownListener.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6145134197a5ce9fa902a69a6c7e9fa41aafe02f704bfe87a8d76ebe53c9c87a"}},{"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":"web/src/lib/components/Modals/DeletePartitionsModal.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6a2deaf7259cc31709be4a6a5b76fb467c2b8558e4f71bb6f4097dbd4529b85"}},{"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":"foreign/node/src/debug-send.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"68cd449b178201b78b0198b031d69e931ed797f2e9a66cd23d5fb4ac6e51e751"}},{"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":"web/src/lib/auth/authStore.svelte.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1a4ef895edb5f2533b57d4b19a9829da7f928452a5dd496b6a6b31adcfae829"}},{"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":"web/src/lib/components/Modals/AddTopicModal.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd6d54d0f2732b2ff288cc8cd60551d01f7bdb921ae6d6c266186cffb6af20d9"}},{"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":"foreign/node/src/debug.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9c439188ea76e6cd51b363efbdb9cb20e9baea7a19ac530fce385f34aa3db2f"}},{"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":"web/src/lib/components/Modals/AddUserModal.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"31b82dfdbf4d4e3e7a723e5eebdb890bb678f32841ba58e12d5fe938f2d792b6"}},{"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":"web/src/lib/components/Modals/InspectMessage.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"42a70e7fc33c4dd930433b6e468820a1692bb87d10fb230b76be101550aed7f7"}},{"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":"foreign/node/src/bdd/message.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"27cce4ece703df20d5faff09ad1ac7c15076911c1d148252d2845bf6c0a3d327"}},{"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":"web/src/lib/components/Modals/AddPartitionsModal.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"88c2f026ec8e71f0e79852c3ca1350bcfb900476060260cb3eb59bc668fcdafc"}},{"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":"web/src/lib/components/SortableList.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0eb83181f3e5dda0933756b1c89ff1db0f1ba59ac3d65ea7801211bdd37eaad"}},{"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":"web/src/lib/api/clientApi.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"88db3689c22ef74adc6ed28be918100266f82f6980ec4952f60374777e06197c"}},{"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":"web/src/lib/components/Modals/AddStreamModal.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"76c72f840bf76beafab72cd0a0d7d2ed1b6189b9015290c38fa2be0b5d235a91"}},{"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":"web/src/routes/auth/sign-in/\u002Bpage.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"80a8ae3f2f89c2954fc1e9055f728f3e5655e94c06673ca1bf60f31f58d401a6"}},{"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":"web/src/lib/domain/Permissions.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6eb34ddccf5a6eb6a71d9736f05a236df2a0061d0247ec878f8519990c8dccc"}},{"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":"web/src/lib/domain/Message.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7997d0b8a2085922eb1863f7cbf68a9c467b1246e32703b099ce814d771dbf44"}},{"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":"web/src/routes/dashboard/streams/[streamId=i32]/topics/[topicId=i32]/partitions/[partitionId=i32]/messages/\u002Bpage.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e944c2fa967e1f1b5e87b5c65772f7852f196b3eb94fec01a48945a1093dfb99"}},{"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":"web/src/lib/components/Icon.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b30aced7c89518033cec95fbfed28a1403507819fbed03aa3ba6ca28fa5e9fa8"}},{"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":"web/src/lib/components/MessageDecoder/MessageDecoder.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"df37bdb80b933920c7de08d86f7b12f57936b56fd9508c1a8bf140600f629918"}},{"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":"web/src/routes/dashboard/settings/users/\u002Bpage.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bbe4eb35100f20b3d0f0d9cdbe117d9a3d2f2a46420a47e25425aa7a3ad1770"}},{"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":"web/src/lib/components/Combobox.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"12a6c80b2a06337f92fd29cdf6a26b378726fb76babbf303929661bf8fb429e0"}},{"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":"web/src/lib/components/Modals/AppModals.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d5895853a3daed3aa850ee210030ac3814d91db2612cf87ee7b5576ef02c9e9"}},{"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":"web/src/lib/components/RouteComponents/Settings/UsersTab.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6f01746c33452a8d11bf2a46c9c5cc5329b0f72842c9dc0a1ba05d3472a8ca4"}},{"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":"web/src/lib/api/handleFetchErrors.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"57b76b5dfb1af7a7eda4a8cef27b4a9dfa7d52d75fecded989882a33b29efa9e"}},{"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":"web/src/routes/dashboard/streams/[streamId=i32]/topics/[topicId=i32]/partitions/[partitionId=i32]/messages/\u002Bpage.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0a2ba12a0f1d773da1203dc64f364a5f6e32dbc51b46f9d4043fa786278ef96"}},{"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":"web/src/lib/components/AppToasts.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e4fb9496d78c758581627016affefc3c94a08d4d0eacdefc9876a524f0b6b50"}},{"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":"web/src/lib/api/getJson.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca8dcb7dbd81569d8dd837c7aa121f4e70952d1d5636f813aae00c8957e79ca1"}},{"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":"web/src/lib/components/Breadcrumbs.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b33526e7fc48b0d02c52816208ff4f40a8cf2cfc8bbd1c6279d889a2802d36ff"}},{"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":"web/src/lib/components/Button.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"336f7841fd5d0efb6f6a212d4316df18134ec3734bffdce2d403fe2d7eded32b"}},{"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":"web/src/lib/components/SlimSortableList.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"711c137d2cad795fc876c84957fd5c24a9c373ac39c33703cca2338ac7db4b38"}},{"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":"web/src/lib/components/PeriodicInvalidator.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"142ef667a80ec0ef3c4279dedefe979d2fcf3ea66c19ab17cd5a5ee1873a0213"}},{"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":"web/src/lib/components/Listbox.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b792f0fdebd902ba8e7e9f2e1ba56ba34a7f86efd1957fae8109806e7c48d9ae"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~363 LoC): no import path from any entry point (40 application, 11 tooling, 57 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (web/src/lib/components/Modals/AddUserModal.svelte) \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":"web/src/lib/components/PermissionsManager.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ef3c3855270ea8c31c4e1728c5f5831502b6838a46c41ff1ef578bde5293a5a"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~187 LoC): no import path from any entry point (40 application, 11 tooling, 57 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (web/src/lib/api/fetchRouteApi.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":"web/src/lib/api/ApiSchema.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"040d5755dd3956d68528a6c8c0d6845586e712325a21c012ce451faaa108b020"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~177 LoC): no import path from any entry point (40 application, 11 tooling, 57 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":"web/src/lib/actions/tooltip.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6009f8b1e4681a4faefc71c4a69d6124f77b184a1bceef0d4674808cbfd6e61"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~166 LoC): no import path from any entry point (40 application, 11 tooling, 57 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":"web/src/lib/domain/Stats.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"43c4351ed99dd800eee9061cce55cacde6dcb3872a448d8404923e25cff73ce8"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~157 LoC): no import path from any entry point (40 application, 11 tooling, 57 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (web/src/lib/components/Modals/AppModals.svelte) \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":"web/src/lib/components/Modals/StreamSettingsModal.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2cebffc1194440e64b325895f130c37b669da2680468a276fa28a84a0cb58f82"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~146 LoC): no import path from any entry point (40 application, 11 tooling, 57 test roots considered), but 2 in-repo import(s) from 2 other file(s) do name it (web/src/lib/components/Modals/AddTopicModal.svelte, web/src/lib/components/Modals/TopicSettingsModal.svelte) \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":"web/src/lib/components/DurationInput.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"235568c4c7f671d7dc11c2861702c80b4a7e8a4df5ac90cf82e929896a4781f1"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~145 LoC): no import path from any entry point (40 application, 11 tooling, 57 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (web/src/lib/components/Modals/AppModals.svelte) \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":"web/src/lib/components/Modals/TopicSettingsModal.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fb24d91de2fb1f3960b5903fcd2dd71320a2e4bea5cf90fbd58f77cc3033fed"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~145 LoC): no import path from any entry point (40 application, 11 tooling, 57 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":"web/src/lib/utils/addOnKeyDownListener.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e79767a3d593ef07f28445345c4c8b705fc5e14305b9a861537956ac6ec4810"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~134 LoC): no import path from any entry point (40 application, 11 tooling, 57 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (web/src/lib/components/Modals/AppModals.svelte) \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":"web/src/lib/components/Modals/DeletePartitionsModal.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f352289b367e9966a9e2c6820029e4add576327625487d5eda8c77846419ea4c"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~126 LoC): no import path from any entry point (40 application, 11 tooling, 57 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":"foreign/node/src/debug-send.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"800e0d75949661c2a20a88cd76beaeed18e17aa541bc409685d3a502354e1587"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~123 LoC): no import path from any entry point (40 application, 11 tooling, 57 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":"web/src/lib/auth/authStore.svelte.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cac3cb34d58a0a58cb7ee667627103a5edcaf0115b7d17f9f18299dc614eb785"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~123 LoC): no import path from any entry point (40 application, 11 tooling, 57 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (web/src/lib/components/Modals/AppModals.svelte) \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":"web/src/lib/components/Modals/AddTopicModal.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8d0da0fb4bc1daabbcd18d9a26b5455fecb08c1d8a0ec84f8e520894c0b6c2a"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~121 LoC): no import path from any entry point (40 application, 11 tooling, 57 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":"foreign/node/src/debug.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e57be3dfd952d6ae51282940dfd2fd6c6d504dda97413039fa378a9dc278e49"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~119 LoC): no import path from any entry point (40 application, 11 tooling, 57 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (web/src/lib/components/Modals/AppModals.svelte) \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":"web/src/lib/components/Modals/AddUserModal.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"352321e0e9f3dacf029dd710337ca1ac7d9b2ae5a3ff1dd745c428c52091580d"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~116 LoC): no import path from any entry point (40 application, 11 tooling, 57 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (web/src/lib/components/Modals/AppModals.svelte) \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":"web/src/lib/components/Modals/InspectMessage.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"302aa75ab2435c6dbdab8fa3f7a533e6cdb17603f2bf5e1b659d4fd5841395e6"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~114 LoC): no import path from any entry point (40 application, 11 tooling, 57 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":"foreign/node/src/bdd/message.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"66d60ec17b038000cecf16e30d29322e97b8ff5efdae6f0cb345d191f3eedcb3"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~114 LoC): no import path from any entry point (40 application, 11 tooling, 57 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (web/src/lib/components/Modals/AppModals.svelte) \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":"web/src/lib/components/Modals/AddPartitionsModal.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7deefc4585be6ac72d29dbeb7c025f11ea3f9d7d741e9fe5acb8a1e16db6bd8e"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~108 LoC): no import path from any entry point (40 application, 11 tooling, 57 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":"web/src/lib/components/SortableList.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d4c260194543d068aeee6299a404b3639a5881da19e7f632ca510e7a7cb967d"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~104 LoC): no import path from any entry point (40 application, 11 tooling, 57 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":"web/src/lib/api/clientApi.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"92b8fd56f8ba14bd8a784e0dcdf9e766f5a6080eed7f79d810da8c5601d6c160"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~100 LoC): no import path from any entry point (40 application, 11 tooling, 57 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (web/src/lib/components/Modals/AppModals.svelte) \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":"web/src/lib/components/Modals/AddStreamModal.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d58edfedb2649adf344b3881a14c9427444a313ab044864c195cc269222b473"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~92 LoC): no import path from any entry point (40 application, 11 tooling, 57 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (web/src/lib/domain/UserDetails.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":"web/src/lib/domain/Permissions.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec30abcd269e8d5e5828f26f31ddcc081c2dec54dedcc65d44bf3c2011d2f7f0"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~90 LoC): no import path from any entry point (40 application, 11 tooling, 57 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (web/src/lib/domain/MessageDetails.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":"web/src/lib/domain/Message.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5a0cf02ad8520e89a72f5c69d49f86f511ab73962fb9f1352a52e80816d58e5"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~89 LoC): no import path from any entry point (40 application, 11 tooling, 57 test roots considered), but 17 in-repo import(s) from 15 other file(s) do name it (web/src/lib/components/AppToasts.svelte, web/src/lib/components/Breadcrumbs.svelte, web/src/lib/components/Combobox.svelte and 12 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":"web/src/lib/components/Icon.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1250931d203d852b27911206e9717da142ab6e0dc01d6d7fc174a58654958645"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~88 LoC): no import path from any entry point (40 application, 11 tooling, 57 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":"web/src/lib/components/MessageDecoder/MessageDecoder.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d7a6f12b6329b22cfd3d1c9298d2025e2369a44db1688eb579b2ca1cda512cc"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~86 LoC): no import path from any entry point (40 application, 11 tooling, 57 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (web/src/lib/components/PermissionsManager.svelte) \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":"web/src/lib/components/Combobox.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"372e313ea139a99797e0a00e68d7e31bc991982d3fc249872194c83fa97fe1cb"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~86 LoC): no import path from any entry point (40 application, 11 tooling, 57 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":"web/src/lib/components/Modals/AppModals.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"27d6f0c4338dbe0a41dd1ec8c4d7b608c4472de7d3c60a38c97afeaf0f2c6952"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~85 LoC): no import path from any entry point (40 application, 11 tooling, 57 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (web/src/lib/components/RouteComponents/Settings/UsersTabActions.svelte) \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":"web/src/lib/components/RouteComponents/Settings/UsersTab.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fcb7381cfb4a8c3d8c554a3cc5783afdd31069b68397ace238419cb75619d83"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~84 LoC): no import path from any entry point (40 application, 11 tooling, 57 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":"web/src/lib/api/handleFetchErrors.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"50e74d3c872a3180bb5d3a808647dc2022d0a6c2998050a87d907739fd5d5af0"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~82 LoC): no import path from any entry point (40 application, 11 tooling, 57 test roots considered), but 8 in-repo import(s) from 8 other file(s) do name it (web/src/lib/components/Modals/AddPartitionsModal.svelte, web/src/lib/components/Modals/AddStreamModal.svelte, web/src/lib/components/Modals/AddTopicModal.svelte and 5 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":"web/src/lib/components/AppToasts.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"be6aeedc874d65d00ca2dd7cfbee94dc69b673206a48ccd1cc2be50d1bc03cbe"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~74 LoC): no import path from any entry point (40 application, 11 tooling, 57 test roots considered), but 3 in-repo import(s) from 3 other file(s) do name it (web/src/lib/api/clientApi.ts, web/src/lib/api/fetchRouteApi.ts, web/src/lib/api/handleFetchErrors.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":"web/src/lib/api/getJson.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"df475791ae43f08b4be203d5611b49e20618c7fc6ab124eec83aec4706eae929"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~71 LoC): no import path from any entry point (40 application, 11 tooling, 57 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (web/src/lib/components/Header.svelte) \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":"web/src/lib/components/Breadcrumbs.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f61c8bffc5d44f772d7bdbc226b3835fc9d0e265fa8e31397ddd79940e9286f6"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~70 LoC): no import path from any entry point (40 application, 11 tooling, 57 test roots considered), but 15 in-repo import(s) from 15 other file(s) do name it (web/src/lib/components/Combobox.svelte, web/src/lib/components/DeleteButtonWithConfirmation.svelte, web/src/lib/components/Header.svelte and 12 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":"web/src/lib/components/Button.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c0fd194e33746dc310922032d6a27eede9e9fa97551cfec160ddbce62c28eb3"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~70 LoC): no import path from any entry point (40 application, 11 tooling, 57 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":"web/src/lib/components/SlimSortableList.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8d1674d7ac112b8437837883a7ff0277451f48927d7047c8de18a541fe5fd0c"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~69 LoC): no import path from any entry point (40 application, 11 tooling, 57 test roots considered), but 8 in-repo import(s) from 8 other file(s) do name it (web/src/lib/components/Header.svelte, web/src/lib/components/Modals/AddPartitionsModal.svelte, web/src/lib/components/Modals/AddStreamModal.svelte and 5 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":"web/src/lib/components/PeriodicInvalidator.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9033f50dffa3d303d417074032dbd7962599abc7db25e80e04c179d8462e52c"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~67 LoC): no import path from any entry point (40 application, 11 tooling, 57 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (web/src/lib/components/Modals/AddUserModal.svelte) \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":"web/src/lib/components/Listbox.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"46c94effec94d94ba38620e739a454f11f2104f4cad9712cbda848d4f03666f6"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~63 LoC): no import path from any entry point (40 application, 11 tooling, 57 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":"web/src/lib/components/Paginator.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f71e217497faa0d4d5db7e3e5a56fa78691d3dd381eaf88a5f2157021d480a3"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~63 LoC): no import path from any entry point (40 application, 11 tooling, 57 test roots considered), but 2 in-repo import(s) from 1 other file(s) do name it (web/src/lib/components/Header.svelte) \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":"web/src/lib/components/ThemeController.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"06f63b6c7286fdf0ce65e19dd7df9264c399b53afb13537bc2dcfbe629ccbfd3"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~63 LoC): no import path from any entry point (40 application, 11 tooling, 57 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":"web/src/lib/utils/formatters/uuidFormatter.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"14746c218a0447775fea3ce0058b63e79091027dbe7d3d8a53477669346f3683"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~62 LoC): no import path from any entry point (40 application, 11 tooling, 57 test roots considered), but 2 in-repo import(s) from 2 other file(s) do name it (web/src/lib/components/MessageDecoder/MessageDecoder.svelte, web/src/lib/components/Modals/AddTopicModal.svelte) \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":"web/src/lib/components/Select.svelte"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"972b1b43c4453dd6640aa9afd51d28b8421db7a9c99ef0ca6caf9038e3a63215"}},{"ruleId":"R8","level":"warning","message":{"text":"Unused dependency \u0027ccusage\u0027: Declared in the root 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":"4f3e3b4e959e55304ec7bbd29b9081caaa0516aee0ea10fecae99bf3c553d4aa"}},{"ruleId":"R8","level":"warning","message":{"text":"Unused dependency \u0027d3-interpolate\u0027: Declared in web/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":"0428d78d49ce7b7411764e52986369a49a2605b8c93e8ef98cf1b8b84cb88f11"}},{"ruleId":"R8","level":"warning","message":{"text":"Unused dependency \u0027svelte-popperjs\u0027: Declared in web/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":"ad8be5881464b8c3f8f448d8e108fdefe85d40facf65c65fefc56c3b5781daac"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060recv_res.is_err() || recv_res.expect(\u0022timeout outer\u0022).is_err()\u0060 appears character-identically in 2 files \u2014 core/message_bus/src/transports/ws.rs, core/message_bus/src/transports/wss.rs. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/message_bus/src/transports/ws.rs"},"region":{"startLine":505}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ccf55ddaccb4b339259cd9d6c738e4193eb6d7fd29a66c0ad9728f3c2b442dc"}},{"ruleId":"X18","level":"warning","message":{"text":"Disposes a dependency it does not own: \u0060_client\u0060 is never created by \u0060IggyConsumer\u0060 \u2014 every assignment to it takes a constructor parameter \u2014 yet this type disposes it here (line 145). Its declared type \u0060IIggyClient\u0060 is an interface, so the instance came from whoever resolved it, and that owner decides when it ends. Disposing it from here reaches outside this object\u0027s lifetime: a dependency shared with the rest of the process is torn down when THIS instance goes away, and the real owner\u0027s later \u0060Dispose()\u0060 runs a second time on an object already disposed. Drop the call \u2014 a type disposes what it constructed, and only that. If this dependency genuinely is exclusive to this instance, construct it here (or take an owned factory) so the ownership is stated in the code rather than assumed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Consumers/IggyConsumer.cs"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa891c363ec7b67bbaaa159428995c9ccdbc696a8979cc95729f0925adb57bdd"}},{"ruleId":"X18","level":"warning","message":{"text":"Disposes a dependency it does not own: \u0060_owner\u0060 is never created by \u0060PolledMessagesRental\u0060 \u2014 every assignment to it takes a constructor parameter \u2014 yet this type disposes it here (line 71). Its declared type \u0060IMemoryOwner\u0060 is an interface, so the instance came from whoever resolved it, and that owner decides when it ends. Disposing it from here reaches outside this object\u0027s lifetime: a dependency shared with the rest of the process is torn down when THIS instance goes away, and the real owner\u0027s later \u0060Dispose()\u0060 runs a second time on an object already disposed. Drop the call \u2014 a type disposes what it constructed, and only that. If this dependency genuinely is exclusive to this instance, construct it here (or take an owned factory) so the ownership is stated in the code rather than assumed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/Contracts/PolledMessagesRental.cs"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"d14e4dd5a146af657cbcb2bace1d51049f1ea6e8f5248334d0da59f29c3128aa"}},{"ruleId":"X18","level":"warning","message":{"text":"Owned disposable field is never released: \u0060TcpMessageStream\u0060 implements \u0060IDisposable\u0060 \u2014 so it has told every caller it holds something worth releasing \u2014 and it constructs \u0060_connectGate\u0060 itself (line 59), which makes that instance its own. But \u0060_connectGate\u0060 is named in none of the methods the disposal search covered: \u0060Dispose\u0060 (line 119), \u0060SetConnectionState\u0060 (line 1476) \u2014 that is \u0060Dispose\u0060 plus every method \u0060Dispose\u0060 calls BY NAME, so a release reached through an interface, a delegate or a base class is not followed and is worth checking before acting. On what was read, the type\u0027s disposal releases everything except the one thing it owns. A disposable the owner never disposes is held until finalization if its type has a finalizer, and forever if it does not \u2014 which for a synchronisation primitive, a timer, a stream or a handle means the resource accumulates once per instance for the life of the process. Release it in \u0060Dispose\u0060 (\u0060_connectGate?.Dispose();\u0060), or, if it truly does not need releasing, drop \u0060IDisposable\u0060 from the type so the claim and the behaviour agree."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/IggyClient/Implementations/TcpMessageStream.cs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e3340bc703d42a5321433a1df9422c0bc867237b5c5ac38626cd68aeb2a01c0"}},{"ruleId":"X18","level":"warning","message":{"text":"Owned disposable field is never released: \u0060TcpMessageStream\u0060 implements \u0060IDisposable\u0060 \u2014 so it has told every caller it holds something worth releasing \u2014 and it constructs \u0060_connectionSemaphore\u0060 itself (line 61), which makes that instance its own. But \u0060_connectionSemaphore\u0060 is named in none of the methods the disposal search covered: \u0060Dispose\u0060 (line 119), \u0060SetConnectionState\u0060 (line 1476) \u2014 that is \u0060Dispose\u0060 plus every method \u0060Dispose\u0060 calls BY NAME, so a release reached through an interface, a delegate or a base class is not followed and is worth checking before acting. On what was read, the type\u0027s disposal releases everything except the one thing it owns. A disposable the owner never disposes is held until finalization if its type has a finalizer, and forever if it does not \u2014 which for a synchronisation primitive, a timer, a stream or a handle means the resource accumulates once per instance for the life of the process. Release it in \u0060Dispose\u0060 (\u0060_connectionSemaphore?.Dispose();\u0060), or, if it truly does not need releasing, drop \u0060IDisposable\u0060 from the type so the claim and the behaviour agree."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/IggyClient/Implementations/TcpMessageStream.cs"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"87746ab450d968b68c751c9863e536ff10f196528cd80d8c8dd9b15015fd9990"}},{"ruleId":"X18","level":"warning","message":{"text":"Owned disposable field is never released: \u0060TcpMessageStream\u0060 implements \u0060IDisposable\u0060 \u2014 so it has told every caller it holds something worth releasing \u2014 and it constructs \u0060_sendingSemaphore\u0060 itself (line 64), which makes that instance its own. But \u0060_sendingSemaphore\u0060 is named in none of the methods the disposal search covered: \u0060Dispose\u0060 (line 119), \u0060SetConnectionState\u0060 (line 1476) \u2014 that is \u0060Dispose\u0060 plus every method \u0060Dispose\u0060 calls BY NAME, so a release reached through an interface, a delegate or a base class is not followed and is worth checking before acting. On what was read, the type\u0027s disposal releases everything except the one thing it owns. A disposable the owner never disposes is held until finalization if its type has a finalizer, and forever if it does not \u2014 which for a synchronisation primitive, a timer, a stream or a handle means the resource accumulates once per instance for the life of the process. Release it in \u0060Dispose\u0060 (\u0060_sendingSemaphore?.Dispose();\u0060), or, if it truly does not need releasing, drop \u0060IDisposable\u0060 from the type so the claim and the behaviour agree."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"foreign/csharp/Iggy_SDK/IggyClient/Implementations/TcpMessageStream.cs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"85b891f1fa5ca79a3e836896cd40226f5d9bb883f634948a6575bb6587acbbc4"}},{"ruleId":"X2","level":"note","message":{"text":"Not all async methods take a CancellationToken: Only 157/176 async methods accept a CancellationToken, so in-flight work can\u0027t be stopped early when the caller gives up \u2014 whatever ends it in your host (shutdown signal, timeout, abandoned request, user cancel). Thread a token through the call chain and honour it at each await and loop; where a method genuinely cannot be interrupted, omitting it is a deliberate choice \u2014 judge against your hosting model."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"bf623a92fb752b336427856888a9b386c434e686662a2cdc1bba21832c0a048c"}},{"ruleId":"X5","level":"note","message":{"text":"Null-forgiving operator (\u0060!\u0060) suppressions reduce the NRT score: ~0.5 \u0060!\u0060 suppressions per 1k syntax nodes \u2014 37 suppression(s) across the 75382 syntax node(s) in code where nullable warnings are ENABLED, which is the only code a \u0060!\u0060 can suppress anything in (a \u0060!\u0060 under \u0060#nullable disable\u0060 is inert and is not counted, and its file\u0027s nodes are not in the denominator). Each one tells the compiler to trust you about null, suppressing the very safety NRTs provide."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"93cfe05d4ad8c8c171267603b23dfe289b74842e38edd1b7bfed59cc32bda337"}},{"ruleId":"X7","level":"note","message":{"text":"Silent fallback default on Err: \u0060relative_time\u0060 turns every \u0060Err\u0060 into \u0060\u0022-\u0022.to_string()\u0060 \u2014 a failure becomes a plausible value and a silent behavior change with no trail. Log the error or propagate it with \u0060?\u0060. If that constant is the correct answer rather than a stand-in for a value that could not be read, say so in a comment on the arm or in the doc comment, and the row stops firing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/bench/dashboard/frontend/src/components/selectors/dense_benchmark_row.rs"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee2c17c2bf40ca39be80761647fddd77dc9780402c3698a76e895cf358545524"}},{"ruleId":"X7","level":"note","message":{"text":"Silent fallback default on Err: \u0060to_string_value\u0060 turns every \u0060Err\u0060 into \u0060\u0022\u003Cmalformed int8\u003E\u0022.to_string()\u0060 \u2014 a failure becomes a plausible value and a silent behavior change with no trail. Log the error or propagate it with \u0060?\u0060. If that constant is the correct answer rather than a stand-in for a value that could not be read, say so in a comment on the arm or in the doc comment, and the row stops firing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/common/src/types/message/user_headers.rs"},"region":{"startLine":542}}}],"partialFingerprints":{"codehealthFindingId/v1":"be47e027c2e4ef0c508d299d9d300bc52efdb7cb6768d5a9227d28eadebec7b7"}},{"ruleId":"X7","level":"note","message":{"text":"Silent fallback default on Err: \u0060state_url_label\u0060 turns every \u0060Err\u0060 into \u0060\u0022\u003Cinvalid URL\u003E\u0022.to_string()\u0060 \u2014 a failure becomes a plausible value and a silent behavior change with no trail. Log the error or propagate it with \u0060?\u0060. If that constant is the correct answer rather than a stand-in for a value that could not be read, say so in a comment on the arm or in the doc comment, and the row stops firing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/runtime/src/configs/runtime.rs"},"region":{"startLine":451}}}],"partialFingerprints":{"codehealthFindingId/v1":"553e91431e8cbf3b780ac14fc1577d5ca41cf5dc334ac86bb8981f79010400fe"}},{"ruleId":"X7","level":"note","message":{"text":"Silent fallback default on Err: \u0060sanitize_url_for_log\u0060 turns every \u0060Err\u0060 into \u0060\u0022\u003Cinvalid-url\u003E\u0022.to_string()\u0060 \u2014 a failure becomes a plausible value and a silent behavior change with no trail. Log the error or propagate it with \u0060?\u0060. If that constant is the correct answer rather than a stand-in for a value that could not be read, say so in a comment on the arm or in the doc comment, and the row stops firing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/connectors/sinks/meilisearch_sink/src/lib.rs"},"region":{"startLine":968}}}],"partialFingerprints":{"codehealthFindingId/v1":"82d38e70f248d7074a7e8c6102f2e6666ca5a67f209a78f74fcfe4caf3ce9d48"}},{"ruleId":"X7","level":"note","message":{"text":"Silent fallback default on Err: \u0060stdout_plain\u0060 turns every \u0060Err\u0060 into \u0060String::new()\u0060 \u2014 a failure becomes a plausible value and a silent behavior change with no trail. Log the error or propagate it with \u0060?\u0060. If that constant is the correct answer rather than a stand-in for a value that could not be read, say so in a comment on the arm or in the doc comment, and the row stops firing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/integration/src/harness/handle/server.rs"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc30ddd5f924fce38eae2ddcecd904ffa16cffa3b33d7731da80c3c1df3bb311"}},{"ruleId":"X7","level":"note","message":{"text":"Silent fallback default on Err: \u0060encode_create_topic_reply\u0060 turns every \u0060Err\u0060 into \u0060Bytes::new()\u0060 \u2014 a failure becomes a plausible value and a silent behavior change with no trail. Log the error or propagate it with \u0060?\u0060. If that constant is the correct answer rather than a stand-in for a value that could not be read, say so in a comment on the arm or in the doc comment, and the row stops firing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/metadata/src/stm/stream.rs"},"region":{"startLine":2331}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e0ff08450c34c02c585f74876a2afd5cde2949865789f632d376973a0a36afc"}},{"ruleId":"X7","level":"note","message":{"text":"Silent fallback default on Err: \u0060offset_dir_entries\u0060 turns every \u0060Err\u0060 into \u0060Vec::new()\u0060 \u2014 a failure becomes a plausible value and a silent behavior change with no trail. Log the error or propagate it with \u0060?\u0060. If that constant is the correct answer rather than a stand-in for a value that could not be read, say so in a comment on the arm or in the doc comment, and the row stops firing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/partitions/src/state_transfer.rs"},"region":{"startLine":3924}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c9a57d5e7c6977efedec91604670c0affef62325b14d7f3a7b4e0c88227fc42"}}],"taxonomies":[{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d","organization":"MITRE","informationUri":"https://cwe.mitre.org/","isComprehensive":false,"shortDescription":{"text":"The MITRE Common Weakness Enumeration (CWE)."},"taxa":[{"id":"CWE-1032","guid":"5f21e517-68aa-a650-9a25-5771ef024637","name":"OWASP Top Ten \u2014 Security Misconfiguration category","shortDescription":{"text":"OWASP Top Ten \u2014 Security Misconfiguration category"},"helpUri":"https://cwe.mitre.org/data/definitions/1032.html"},{"id":"CWE-1059","guid":"a2381a08-60f6-9554-a8b8-f3018cfaaca5","name":"Insufficient Technical Documentation","shortDescription":{"text":"Insufficient Technical Documentation"},"helpUri":"https://cwe.mitre.org/data/definitions/1059.html"},{"id":"CWE-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-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-321","guid":"0ce564a5-a44c-3358-b3db-317712e6e019","name":"CWE-321","shortDescription":{"text":"CWE-321"},"helpUri":"https://cwe.mitre.org/data/definitions/321.html"},{"id":"CWE-327","guid":"e51910ff-67b5-3c51-aa3d-92837d9eab90","name":"CWE-327","shortDescription":{"text":"CWE-327"},"helpUri":"https://cwe.mitre.org/data/definitions/327.html"},{"id":"CWE-338","guid":"e89b7604-c3f7-8b53-bc8c-4d4718c28617","name":"CWE-338","shortDescription":{"text":"CWE-338"},"helpUri":"https://cwe.mitre.org/data/definitions/338.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-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-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":367,"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."]}]}