{"$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":"D13","name":"Secret Scanning","shortDescription":{"text":"Secret Scanning"},"helpUri":"https://codehealth.canine.dev/dimensions/D13","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D15","name":"Churn \u00D7 Complexity Hotspots","shortDescription":{"text":"Churn \u00D7 Complexity Hotspots"},"helpUri":"https://codehealth.canine.dev/dimensions/D15"},{"id":"D16","name":"Bus Factor","shortDescription":{"text":"Bus Factor"},"helpUri":"https://codehealth.canine.dev/dimensions/D16"},{"id":"D17","name":"Explicit Debt","shortDescription":{"text":"Explicit Debt"},"helpUri":"https://codehealth.canine.dev/dimensions/D17"},{"id":"D19","name":"Documentation Quality","shortDescription":{"text":"Documentation Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D19"},{"id":"D20","name":"ADR Quality","shortDescription":{"text":"ADR Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D20"},{"id":"D21","name":"Naming Consistency","shortDescription":{"text":"Naming Consistency"},"helpUri":"https://codehealth.canine.dev/dimensions/D21"},{"id":"D26","name":"Project Cohesion","shortDescription":{"text":"Project Cohesion"},"helpUri":"https://codehealth.canine.dev/dimensions/D26"},{"id":"D28","name":"Secrets (history)","shortDescription":{"text":"Secrets (history)"},"helpUri":"https://codehealth.canine.dev/dimensions/D28","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D29","name":"Static Analysis (SAST)","shortDescription":{"text":"Static Analysis (SAST)"},"helpUri":"https://codehealth.canine.dev/dimensions/D29","relationships":[{"target":{"id":"CWE-79","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-89","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-94","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-77","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-79","CWE-89","CWE-78","CWE-94","CWE-77"]}},{"id":"D30","name":"Dependency Vulnerabilities","shortDescription":{"text":"Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D30","relationships":[{"target":{"id":"CWE-1395","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-937","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1395","CWE-937"]}},{"id":"D31","name":"IaC \u0026 Container Security","shortDescription":{"text":"IaC \u0026 Container Security"},"helpUri":"https://codehealth.canine.dev/dimensions/D31","relationships":[{"target":{"id":"CWE-1032","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-732","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-16","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1032","CWE-732","CWE-16"]}},{"id":"D34","name":"Knowledge Freshness","shortDescription":{"text":"Knowledge Freshness"},"helpUri":"https://codehealth.canine.dev/dimensions/D34"},{"id":"D35","name":"Change Coupling","shortDescription":{"text":"Change Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D35"},{"id":"D36","name":"Supply-chain Provenance \u0026 Signing","shortDescription":{"text":"Supply-chain Provenance \u0026 Signing"},"helpUri":"https://codehealth.canine.dev/dimensions/D36","relationships":[{"target":{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1357","CWE-494"]}},{"id":"D43","name":"Malicious Dependencies","shortDescription":{"text":"Malicious Dependencies"},"helpUri":"https://codehealth.canine.dev/dimensions/D43","relationships":[{"target":{"id":"CWE-506","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-506"]}},{"id":"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":"AX5","name":"Architecture \u0026 structure","shortDescription":{"text":"Architecture \u0026 structure"},"helpUri":"https://codehealth.canine.dev/dimensions/AX5"},{"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":"DM4","name":"Rich vs anemic domain model","shortDescription":{"text":"Rich vs anemic domain model"},"helpUri":"https://codehealth.canine.dev/dimensions/DM4"},{"id":"DM5","name":"Encapsulated state","shortDescription":{"text":"Encapsulated state"},"helpUri":"https://codehealth.canine.dev/dimensions/DM5"},{"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":"P12","name":"CI test-gate honesty","shortDescription":{"text":"CI test-gate honesty"},"helpUri":"https://codehealth.canine.dev/dimensions/P12"},{"id":"P2","name":"Observability","shortDescription":{"text":"Observability"},"helpUri":"https://codehealth.canine.dev/dimensions/P2"},{"id":"P3","name":"Security \u0026 performance tooling","shortDescription":{"text":"Security \u0026 performance tooling"},"helpUri":"https://codehealth.canine.dev/dimensions/P3"},{"id":"P4","name":"Deployment \u0026 Rollback","shortDescription":{"text":"Deployment \u0026 Rollback"},"helpUri":"https://codehealth.canine.dev/dimensions/P4"},{"id":"P6","name":"Release Hygiene","shortDescription":{"text":"Release Hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/P6"},{"id":"P7","name":"Outbound HTTP resilience","shortDescription":{"text":"Outbound HTTP resilience"},"helpUri":"https://codehealth.canine.dev/dimensions/P7"},{"id":"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":"X10","name":"Duplicated predicate","shortDescription":{"text":"Duplicated predicate"},"helpUri":"https://codehealth.canine.dev/dimensions/X10"},{"id":"X6","name":"Hand-rolled structured-format parsing","shortDescription":{"text":"Hand-rolled structured-format parsing"},"helpUri":"https://codehealth.canine.dev/dimensions/X6"},{"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":"VectorIndex::search_layer0_with_simhash (cyclomatic 100): VectorIndex::search_layer0_with_simhash has cyclomatic complexity 100 (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":"crates/db/src/search/vector/hnsw/search.rs"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6b8c7625c1fde1eaf435d7212c02a2005213a5d9c39da812cc555ff2933897f"}},{"ruleId":"D1","level":"warning","message":{"text":"Cursor::next (cyclomatic 92): Cursor::next has cyclomatic complexity 92 (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":"crates/db/src/execution/interpreter/pull/poll.rs"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"2581cd6cf1517a76e0da1dd2cdad0985d79bb2d70bda74d5418e0075adb5b57f"}},{"ruleId":"D1","level":"warning","message":{"text":"Step.ToAST (cyclomatic 64): Step.ToAST has cyclomatic complexity 64 (threshold 15). Of this number, 63 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. 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":"sdks/go/dsl.go"},"region":{"startLine":1445}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa510b2415bff3d5ff9e7b5bb989fef46c64c68edbd64726626231a75acabb04"}},{"ruleId":"D1","level":"warning","message":{"text":"db::migrations::preflight_legacy_vector_reservations (cyclomatic 57): db::migrations::preflight_legacy_vector_reservations has cyclomatic complexity 57 (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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":1856}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0fc0c62f9b8675d6006d03330a2922b3416c81a349f308e4652e2e10156712e"}},{"ruleId":"D1","level":"warning","message":{"text":"Step.to_ast (cyclomatic 54): Step.to_ast has cyclomatic complexity 54 (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":"sdks/python/src/helixdb/dsl.py"},"region":{"startLine":2312}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5050b24d98dcfa8b33f3d6cd48ffa4c9e7fe07e444a42556ec9c43c5fb0052c"}},{"ruleId":"D1","level":"warning","message":{"text":"VectorRows::validate_simhash_directory (cyclomatic 49): VectorRows::validate_simhash_directory 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":"crates/db/src/search/vector/storage/mod.rs"},"region":{"startLine":1173}}}],"partialFingerprints":{"codehealthFindingId/v1":"41fbf4e574afe35fb8eaabacaef3bd7b334023434bb8dab17b369c7f24c4e506"}},{"ruleId":"D1","level":"warning","message":{"text":"validate-cargo-target-references.validate_codec_architecture (cyclomatic 48): validate-cargo-target-references.validate_codec_architecture has cyclomatic complexity 48 (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":"scripts/validate-cargo-target-references.py"},"region":{"startLine":491}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec0ffc09e4b5feae7b2b7d3379cdf22a3e7aba9f5cec5a3aa74ea95b008b437a"}},{"ruleId":"D1","level":"warning","message":{"text":"RuleApplicability::matches (cyclomatic 45): RuleApplicability::matches has cyclomatic complexity 45 (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":"crates/planner/src/rules/contracts/applicability/matching.rs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"02d8101897096f0493d8cf34d3e964d165f3a632fcb9c2c452ab8fe3e1af1ec2"}},{"ruleId":"D1","level":"warning","message":{"text":"helix.PropertyValueOf (cyclomatic 44): helix.PropertyValueOf has cyclomatic complexity 44 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function taking that case\u0027s concrete type, so the dispatch reads one line per case. These arms are selected by TYPE rather than by value, so there is no key a lookup table could be built on; where you own the matched types, giving them one shared interface method and calling that is the form a table would have taken, and where you do not, keep the cases \u2014 they stay explicit and reviewable."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sdks/go/dsl.go"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"878beb022ed6b389194c0d7694ec118d2ea3ddb5d2c997b8bf2163d803c78c38"}},{"ruleId":"D1","level":"warning","message":{"text":"VectorIndex::restricted_filter_aware_search (cyclomatic 41): VectorIndex::restricted_filter_aware_search has cyclomatic complexity 41 (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":"crates/db/src/search/vector/hnsw/restricted.rs"},"region":{"startLine":1106}}}],"partialFingerprints":{"codehealthFindingId/v1":"7385c263ad35ae06cfcf5711fbdf395ce346e353cae21499589a676f28af854a"}},{"ruleId":"D1","level":"warning","message":{"text":"image_archive.inspect_archive (cyclomatic 40): image_archive.inspect_archive 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":"docker-image/image_archive.py"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f793f70d9ca40904a6afdc558bbb602fe6ca007e16a847330c8e2ca16bb645b"}},{"ruleId":"D1","level":"warning","message":{"text":"ExecutionContext::count_cursor_leaf (cyclomatic 36): ExecutionContext::count_cursor_leaf has cyclomatic complexity 36 (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":"crates/db/src/execution/interpreter/count.rs"},"region":{"startLine":1274}}}],"partialFingerprints":{"codehealthFindingId/v1":"09466ac8e9b3e4303076b12c76ea57164a4d5d1315d3b1e15d4139c07befacf9"}},{"ruleId":"D1","level":"warning","message":{"text":"db::index_lifecycle::repository::scoped_cursor_is_valid (cyclomatic 36): db::index_lifecycle::repository::scoped_cursor_is_valid has cyclomatic complexity 36 (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":"crates/db/src/index_lifecycle/repository.rs"},"region":{"startLine":452}}}],"partialFingerprints":{"codehealthFindingId/v1":"b78c01eddfda3c9a39a05362d13c4c374a6fe6cb47097d066bbcbcc9e6aea41c"}},{"ruleId":"D1","level":"warning","message":{"text":"ExecutionContext::execute_count (cyclomatic 35): ExecutionContext::execute_count has cyclomatic complexity 35 (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":"crates/db/src/execution/interpreter/count.rs"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"81b103d79a19841944141316ea2c2c65c8c9500f0b30fcf816cb74c173786b4d"}},{"ruleId":"D1","level":"warning","message":{"text":"helix_cli::main (cyclomatic 34): helix_cli::main has cyclomatic complexity 34 (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":"crates/cli/src/main.rs"},"region":{"startLine":543}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb137e5a6751246a61849a0609596377f484efd7b3d5a5e439056b2513552c97"}},{"ruleId":"D1","level":"warning","message":{"text":"PreparedTextOperationStep::stage (cyclomatic 34): PreparedTextOperationStep::stage has cyclomatic complexity 34 (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":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":508}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0723e3d484566f3bae5b856daa762c8c319743eec035bdc7b0e085da46d649b"}},{"ruleId":"D1","level":"warning","message":{"text":"VectorRows::validate_legacy_physical (cyclomatic 34): VectorRows::validate_legacy_physical has cyclomatic complexity 34 (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":"crates/db/src/search/vector/storage/mod.rs"},"region":{"startLine":921}}}],"partialFingerprints":{"codehealthFindingId/v1":"24b1b4882418252fcc28003173c78ddec6905749c749d52a4c7b60fbcd1885b0"}},{"ruleId":"D1","level":"warning","message":{"text":"db::index_lifecycle::repository::operation_record_cursors_are_valid (cyclomatic 34): db::index_lifecycle::repository::operation_record_cursors_are_valid has cyclomatic complexity 34 (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":"crates/db/src/index_lifecycle/repository.rs"},"region":{"startLine":662}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ba402e581ca6963289f45aabf66951b24738025aa6ea72c04d1dccb08dc8ee5"}},{"ruleId":"D1","level":"warning","message":{"text":"Source::open (cyclomatic 33): Source::open has cyclomatic complexity 33 (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":"crates/db/src/execution/interpreter/pull/source.rs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"99efb440626b3e5e1f40563fe620b313e9d058375cb8dbd05644b815f31c1bfd"}},{"ruleId":"D1","level":"warning","message":{"text":"db::search::vector::cache::hydration::hydrate_active_generations (cyclomatic 32): db::search::vector::cache::hydration::hydrate_active_generations has cyclomatic complexity 32 (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":"crates/db/src/search/vector/cache/hydration.rs"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"757e1dfb4fe74f2a9b6698cafe0c38b9f66c72c0f3a5eaea2d68ad8c3afbbc73"}},{"ruleId":"D1","level":"warning","message":{"text":"VectorKey::parse_from_slice (cyclomatic 31): VectorKey::parse_from_slice has cyclomatic complexity 31 (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":"crates/db/src/encoding/v2/keys/indexes/vector/mod.rs"},"region":{"startLine":232}}}],"partialFingerprints":{"codehealthFindingId/v1":"c609321b7d3772fdadb7b4678344711d9590475eebbd0c2cb01f8c82b10681a9"}},{"ruleId":"D1","level":"warning","message":{"text":"StorageCostProfileOverrides::apply_to (cyclomatic 30): StorageCostProfileOverrides::apply_to 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":"crates/planner/src/cost/profile/overrides.rs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa419e6644ea025a632d4181ff8d863daaf47aa8dc6b750de8aaa946482d20d2"}},{"ruleId":"D1","level":"warning","message":{"text":"RuleSchedule::rules_for_expr (cyclomatic 30): RuleSchedule::rules_for_expr 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":"crates/planner/src/optimizer/driver/schedule/routing.rs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"2156db5a437a1afbfeb75e115241508fa7c7060425c3757f00220c592a7a1aeb"}},{"ruleId":"D1","level":"warning","message":{"text":"db::index_lifecycle::text::driver::scan_partition_documents (cyclomatic 29): db::index_lifecycle::text::driver::scan_partition_documents 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":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":2547}}}],"partialFingerprints":{"codehealthFindingId/v1":"f21ef5f0add74d53744bbb9011b30905b2f7185bbda468e1827a81785bcb44b4"}},{"ruleId":"D1","level":"warning","message":{"text":"RuleSchedule::compile_applicability (cyclomatic 29): RuleSchedule::compile_applicability 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":"crates/planner/src/optimizer/driver/schedule/compile.rs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"152dddabaf046e7cf396fe8804ea036dd831e0e277f7a1f1c8f95dfb3976ead8"}},{"ruleId":"D1","level":"warning","message":{"text":"db::index_lifecycle::text::driver::build_text_catch_up_plan (cyclomatic 28): db::index_lifecycle::text::driver::build_text_catch_up_plan has cyclomatic complexity 28 (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":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":2242}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5534565f4f261b8b37c9c87d3681702588a13fe53280ebca5f0bda9434a8959"}},{"ruleId":"D1","level":"warning","message":{"text":"db::index_lifecycle::secondary::scan_source (cyclomatic 28): db::index_lifecycle::secondary::scan_source 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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":1004}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0077ac13e1fa6dc6e566607f1b4a1229a95473b46f1b42da7dd3a4e31ff20fc"}},{"ruleId":"D1","level":"warning","message":{"text":"graph._decode_tagged_identity (cyclomatic 28): graph._decode_tagged_identity has cyclomatic complexity 28 (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":"sdks/python/src/helixdb/graph.py"},"region":{"startLine":1009}}}],"partialFingerprints":{"codehealthFindingId/v1":"75cc17879c4359eca29e1d68108a13ccf83dc94dc4dc22bf78684c945e3f068b"}},{"ruleId":"D1","level":"warning","message":{"text":"Client.Exec (cyclomatic 28): Client.Exec has cyclomatic complexity 28 (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":"sdks/go/client.go"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f87d4bcc9670eec6a0f8d5d72eeb3667767c9da9e983f2b3de749c77256dafb"}},{"ruleId":"D1","level":"warning","message":{"text":"db::encoding::v2::values::lifecycle::operation_record::take_operation_progress (cyclomatic 27): db::encoding::v2::values::lifecycle::operation_record::take_operation_progress has cyclomatic complexity 27 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/encoding/v2/values/lifecycle/operation_record.rs"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"fce9b034472588aa5d1f1c13d52974015212ed5b4b39a7f1fa14f38a20564779"}},{"ruleId":"D1","level":"warning","message":{"text":"db::index_lifecycle::vector::driver::step_cleanup (cyclomatic 27): db::index_lifecycle::vector::driver::step_cleanup 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":"crates/db/src/index_lifecycle/vector/driver.rs"},"region":{"startLine":643}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ae8cf8ef2902e0868a4d726c04bd4c06e9734f4baa9812299d932ff86c6262e"}},{"ruleId":"D1","level":"warning","message":{"text":"helix_planner::analysis::scalar::truth::static_predicate_value (cyclomatic 27): helix_planner::analysis::scalar::truth::static_predicate_value has cyclomatic complexity 27 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/planner/src/analysis/scalar/truth.rs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6da625a8a6315530ddaa934778e64d4a0160d99a0527be115df3b5f3dcc8158"}},{"ruleId":"D1","level":"warning","message":{"text":"helix.normalizeTypedQueryValue (cyclomatic 27): helix.normalizeTypedQueryValue 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":"sdks/go/dsl.go"},"region":{"startLine":2994}}}],"partialFingerprints":{"codehealthFindingId/v1":"621c1aa49479dba60c806485f8b7753bec1fb97c51a4e188f77b851012b6b47c"}},{"ruleId":"D1","level":"warning","message":{"text":"VectorIndex::load_uncached_items_for_layer (cyclomatic 26): VectorIndex::load_uncached_items_for_layer 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":"crates/db/src/search/vector/hnsw/index.rs"},"region":{"startLine":1084}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d5464dc116129d91fd69f8a1829a8a3790fd4e0f7ba3c140dae24746a2844c4"}},{"ruleId":"D1","level":"warning","message":{"text":"db::index_lifecycle::text::driver::scan_source (cyclomatic 26): db::index_lifecycle::text::driver::scan_source 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":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":2969}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b9d198977457cd2fd135719d12c156ed17903b9cb0a4fadcc47e9ca76ed136a"}},{"ruleId":"D1","level":"warning","message":{"text":"db::index_lifecycle::text::manifest::select_page (cyclomatic 26): db::index_lifecycle::text::manifest::select_page 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":"crates/db/src/index_lifecycle/text/manifest.rs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf6ce5fafa0454b3c75301d3bd7105d0025d41b3b53ae3fd2a0e71849502e958"}},{"ruleId":"D1","level":"warning","message":{"text":"db::migration_parity::scan_v2_state (cyclomatic 26): db::migration_parity::scan_v2_state 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":"crates/db/src/migration_parity.rs"},"region":{"startLine":1018}}}],"partialFingerprints":{"codehealthFindingId/v1":"87a12e493cc05ee9d772328e388a87e64b5d8322e1e3ee17224779dc4fbec601"}},{"ruleId":"D1","level":"warning","message":{"text":"db::index_lifecycle::text::validation::select_page (cyclomatic 25): db::index_lifecycle::text::validation::select_page 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":"crates/db/src/index_lifecycle/text/validation.rs"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"5cd3138b0597d3a77a5f0782e5ee8a20270491d162a3ba144b703a4cbb8e5e2b"}},{"ruleId":"D1","level":"warning","message":{"text":"GraphSelection.request (cyclomatic 25): GraphSelection.request has cyclomatic complexity 25 (threshold 15). Of this number, 20 points are the body\u0027s own statements and 5 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":"sdks/go/graph.go"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ca9d386ed49c3322322f537bf4eb94f9355ea22eec1ee9e0373925e7913b34d"}},{"ruleId":"D1","level":"warning","message":{"text":"ExecutionContext::eval_predicate_with_resolver (cyclomatic 24): ExecutionContext::eval_predicate_with_resolver has cyclomatic complexity 24 (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":"crates/db/src/execution/interpreter/stream/eval/predicate.rs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"e180509af53d603a74acea3bcde8feed6ee260c812f4178b70e69bde9edb7a3e"}},{"ruleId":"D1","level":"warning","message":{"text":"db::index_lifecycle::text::driver::plan_next_catch_up (cyclomatic 24): db::index_lifecycle::text::driver::plan_next_catch_up has cyclomatic complexity 24 (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":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":2012}}}],"partialFingerprints":{"codehealthFindingId/v1":"acbd932701c512b3dd80d05f663a34a3e122fe87b67149e451092f03719dd6bc"}},{"ruleId":"D1","level":"warning","message":{"text":"db::encoding::v2::values::property::equality_index_value::project_equality_value (cyclomatic 24): db::encoding::v2::values::property::equality_index_value::project_equality_value 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":"crates/db/src/encoding/v2/values/property/equality_index_value.rs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bf304a3a4577c9676d48d3ff79757df3160715f79077ded6af2251ca70469ce"}},{"ruleId":"D1","level":"warning","message":{"text":"db::encoding::v2::values::lifecycle::operation_record::put_operation_progress (cyclomatic 23): db::encoding::v2::values::lifecycle::operation_record::put_operation_progress 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":"crates/db/src/encoding/v2/values/lifecycle/operation_record.rs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"11c379e1e832d53e80357b4f5a51e58e5e442d814c553363da331b5b9964f7ef"}},{"ruleId":"D1","level":"warning","message":{"text":"db::index_lifecycle::text::validation::select_entity_state (cyclomatic 23): db::index_lifecycle::text::validation::select_entity_state 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":"crates/db/src/index_lifecycle/text/validation.rs"},"region":{"startLine":696}}}],"partialFingerprints":{"codehealthFindingId/v1":"7abedbeeb3899693bcc7b151a3cd1fb61dd93c0b1a28b71e7f331afe017b3bff"}},{"ruleId":"D1","level":"warning","message":{"text":"db::index_lifecycle::text::active_compaction::compact_once (cyclomatic 23): db::index_lifecycle::text::active_compaction::compact_once 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":"crates/db/src/index_lifecycle/text/active_compaction.rs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fce9db5cbfd2644cc49654f6f2ca32fe7e195ec2f6956c40c2137bbd5c92546"}},{"ruleId":"D1","level":"warning","message":{"text":"Analyzer::analyze_access_leaf (cyclomatic 23): Analyzer::analyze_access_leaf 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":"crates/planner/src/diagnostics/analyze.rs"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"90d48c60e826a6b58671772de472cc1c37c8dee7bf7ca87df5180f62f2ade57e"}},{"ruleId":"D1","level":"warning","message":{"text":"HelixError.remote (cyclomatic 23): HelixError.remote 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":"sdks/typescript/src/index.ts"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"f63c1f3d359363e5471430c47e0f403eee8cbc1e9c8dc464b331eb8e484a4850"}},{"ruleId":"D1","level":"warning","message":{"text":"VectorRows::backfill_missing_simhash_directory (cyclomatic 22): VectorRows::backfill_missing_simhash_directory 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":"crates/db/src/search/vector/storage/mod.rs"},"region":{"startLine":1517}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7b6af70a961603464ec3459e0925ad60a2ec08be6ba9543ed33470da65eac6f"}},{"ruleId":"D1","level":"warning","message":{"text":"db::index_lifecycle::secondary::catch_up_exact (cyclomatic 22): db::index_lifecycle::secondary::catch_up_exact 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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":1408}}}],"partialFingerprints":{"codehealthFindingId/v1":"a59b1f0fa52fae0738a296a51444edb42013120a44c3eab5d392337ba8cbc16a"}},{"ruleId":"D1","level":"warning","message":{"text":"db::migrations::process_loaded_job (cyclomatic 22): db::migrations::process_loaded_job has cyclomatic complexity 22 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This is NOT this file\u0027s highest cyclomatic complexity: MigrationFailpoint::as_str (cyclomatic 42) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/migrations/mod.rs"},"region":{"startLine":3166}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed14be7d9fdb517c838dc716d74c2a67d4db38b4b591afb01f8b380ba5c56b42"}},{"ruleId":"D1","level":"warning","message":{"text":"Runner::random_step (cyclomatic 22): Runner::random_step has cyclomatic complexity 22 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db-testkit/src/lifecycle_workload.rs"},"region":{"startLine":376}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbaa8a6c84ca11ae55ccd6bd111d5e10c857118e99a7e4bd1d5530fd4285187e"}},{"ruleId":"D1","level":"warning","message":{"text":"OracleState::read_indexed (cyclomatic 22): OracleState::read_indexed 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":"crates/db-testkit/src/model.rs"},"region":{"startLine":653}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdef01f02d5a8a8b217cace1677e5b389a03962b452cc179391a2fe0214e9209"}},{"ruleId":"D1","level":"warning","message":{"text":"dsl.convertParamValue (cyclomatic 22): dsl.convertParamValue 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. This is NOT this file\u0027s highest cyclomatic complexity: Step.toAst (cyclomatic 86) 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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":2902}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce3c69b3b22d27dd8570240309fb24e6aa88abca3896a91d398b6a291cb55b58"}},{"ruleId":"D1","level":"warning","message":{"text":"dsl.normalizeTypedQueryValue (cyclomatic 22): dsl.normalizeTypedQueryValue 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. This is NOT this file\u0027s highest cyclomatic complexity: Step.toAst (cyclomatic 86) 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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":2966}}}],"partialFingerprints":{"codehealthFindingId/v1":"b78fcd8584017b32bc97eab4b543643086fbc2ff1cd0cbc118c1826ed3d79f00"}},{"ruleId":"D1","level":"warning","message":{"text":"Branch::next (cyclomatic 21): Branch::next 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":"crates/db/src/execution/interpreter/pull/branch.rs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c6a29e06a6582f5a02364cf9d220e05b6e70f3d3dd25dfc0f1ac1a481b330b1"}},{"ruleId":"D1","level":"warning","message":{"text":"Source::next (cyclomatic 21): Source::next 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":"crates/db/src/execution/interpreter/pull/source.rs"},"region":{"startLine":452}}}],"partialFingerprints":{"codehealthFindingId/v1":"e654aba9990dbf756461c98bf56a8439d42342f2d330232bdffce86e7e4b729f"}},{"ruleId":"D1","level":"warning","message":{"text":"IndexOperationProgress::cursors_are_valid (cyclomatic 21): IndexOperationProgress::cursors_are_valid has cyclomatic complexity 21 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/index_lifecycle/operation.rs"},"region":{"startLine":587}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c1bd7293b83db6a3ceb15a57cb65c9adf1a0e1294ec988ce628a8ad2d7ba0a8"}},{"ruleId":"D1","level":"warning","message":{"text":"db::index_lifecycle::worker::dispatch_worker_cycle (cyclomatic 21): db::index_lifecycle::worker::dispatch_worker_cycle 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":"crates/db/src/index_lifecycle/worker.rs"},"region":{"startLine":588}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5da12c956ce0c47163187078b500c5d89c770a8752168b29c9243aedfa87cf5"}},{"ruleId":"D1","level":"warning","message":{"text":"db::index_lifecycle::secondary::delete_generation_rows (cyclomatic 21): db::index_lifecycle::secondary::delete_generation_rows 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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":1862}}}],"partialFingerprints":{"codehealthFindingId/v1":"b22e2a5ddd6df0b007776bd9b96c01a95cb5dc02c85833bcef133b22d4f4fe28"}},{"ruleId":"D1","level":"warning","message":{"text":"helix_planner::rules::cardinality::fold_cursor (cyclomatic 21): helix_planner::rules::cardinality::fold_cursor 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. This is NOT this file\u0027s highest cyclomatic complexity: helix_planner::rules::cardinality::count_plan_cursor (cyclomatic 29) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/planner/src/rules/cardinality.rs"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"045731845d0f929fdc10a7f6ad6945620cdb0e619c2298e5a2c94bd40d9daf3c"}},{"ruleId":"D1","level":"warning","message":{"text":"PropertyValue.from_value (cyclomatic 21): PropertyValue.from_value 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":"sdks/python/src/helixdb/dsl.py"},"region":{"startLine":375}}}],"partialFingerprints":{"codehealthFindingId/v1":"44c1d3b862730fe4b660aac2c1fa524e062a182cc3a6d247634d0597b10e4633"}},{"ruleId":"D1","level":"warning","message":{"text":"dsl._convert_param_value (cyclomatic 21): dsl._convert_param_value 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":"sdks/python/src/helixdb/dsl.py"},"region":{"startLine":3698}}}],"partialFingerprints":{"codehealthFindingId/v1":"59b68da844e94140cc5a740421c3da5910f461842fb900a2b0882af3a5254b56"}},{"ruleId":"D1","level":"warning","message":{"text":"helix.UnmarshalIndexOperationStatus (cyclomatic 21): helix.UnmarshalIndexOperationStatus has cyclomatic complexity 21 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sdks/go/dsl.go"},"region":{"startLine":1252}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bd1b6788a4140a34c175889739cc32d090419cdfa3db5fa3a13135074c516a1"}},{"ruleId":"D1","level":"warning","message":{"text":"IndexOperationProgress::try_map_cursors (cyclomatic 20): IndexOperationProgress::try_map_cursors has cyclomatic complexity 20 (threshold 15). Of this number, 19 points are the body\u0027s own statements and 1 belongs to one function item inside it that branches. 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":"crates/db/src/index_lifecycle/operation.rs"},"region":{"startLine":667}}}],"partialFingerprints":{"codehealthFindingId/v1":"607cf725584cc09b533534e1a69c2970ce43d50f6f48a340c38da0f9c1744447"}},{"ruleId":"D1","level":"warning","message":{"text":"db::index_lifecycle::secondary::exact::ordered::scan_active_range_generation_ordered (cyclomatic 20): db::index_lifecycle::secondary::exact::ordered::scan_active_range_generation_ordered 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":"crates/db/src/index_lifecycle/secondary/exact/ordered.rs"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e98cff7bbd6c913cea05d78a1e5ead4ee2166d39d314bd5b963e8842c5e08f2"}},{"ruleId":"D1","level":"warning","message":{"text":"ExternalId::from_tagged_value (cyclomatic 20): ExternalId::from_tagged_value has cyclomatic complexity 20 (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":"crates/graph-algorithms/src/identity.rs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"e68b033cbb26b2d8e1b1da9423e986f1a70f468801996983a873715940c59699"}},{"ruleId":"D1","level":"warning","message":{"text":"helix_planner::rules::physical_contracts::support::pipeline::stream_pipeline_op_contract (cyclomatic 20): helix_planner::rules::physical_contracts::support::pipeline::stream_pipeline_op_contract 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":"crates/planner/src/rules/physical_contracts/support/pipeline.rs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c6d40ea8525853ee8c43afff79781844af0b3897216cc7d429f0eb16c0fca72"}},{"ruleId":"D1","level":"warning","message":{"text":"helix.UnmarshalIndexDdlReceipt (cyclomatic 20): helix.UnmarshalIndexDdlReceipt has cyclomatic complexity 20 (threshold 15). Of this number, 16 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":"sdks/go/dsl.go"},"region":{"startLine":1147}}}],"partialFingerprints":{"codehealthFindingId/v1":"12411d82a47d8e64dbf0b97a190d927f8203a7e9c83329fbb50bb99d5e3ab765"}},{"ruleId":"D1","level":"warning","message":{"text":"PropertyValue.from (cyclomatic 20): PropertyValue.from has cyclomatic complexity 20 (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. This is NOT this file\u0027s highest cyclomatic complexity: Step.toAst (cyclomatic 86) 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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":405}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f8256e29606ba6b73461a19096871d1da6cfd7d2bc1246930c0cb894b9bc28a"}},{"ruleId":"D1","level":"warning","message":{"text":"db::index_lifecycle::text::active_batch::prepare_destination (cyclomatic 19): db::index_lifecycle::text::active_batch::prepare_destination 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":"crates/db/src/index_lifecycle/text/active_batch.rs"},"region":{"startLine":560}}}],"partialFingerprints":{"codehealthFindingId/v1":"4db011e0e95c693913d9eeae1026553640d0ef6dcdc2231d28e0408b7525770c"}},{"ruleId":"D1","level":"warning","message":{"text":"db::index_lifecycle::secondary::secondary_range_scan_bounds (cyclomatic 19): db::index_lifecycle::secondary::secondary_range_scan_bounds 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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":3239}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f1a9c007a674cad7ce8ff19a6bc29831be237ea76d08f0d9f5da2596b3fc239"}},{"ruleId":"D1","level":"warning","message":{"text":"db::index_lifecycle::outbox::execute_claimed_step_with_evidence (cyclomatic 19): db::index_lifecycle::outbox::execute_claimed_step_with_evidence 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":"crates/db/src/index_lifecycle/outbox.rs"},"region":{"startLine":1019}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4db6abac12d82ecabc906503adb3a0cab8921c6158d939a51e83faa3ee0acb1"}},{"ruleId":"D1","level":"warning","message":{"text":"db::index_lifecycle::outbox::validate_link (cyclomatic 19): db::index_lifecycle::outbox::validate_link 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":"crates/db/src/index_lifecycle/outbox.rs"},"region":{"startLine":1731}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6221f88b87863c41550a3e34527b845f6b889a9988fe428f13b7509197fedbb"}},{"ruleId":"D1","level":"warning","message":{"text":"Runner::validate_invariants (cyclomatic 19): Runner::validate_invariants 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":"crates/db-testkit/src/lifecycle_workload.rs"},"region":{"startLine":905}}}],"partialFingerprints":{"codehealthFindingId/v1":"d555a2cb8ded3031fe8b89b39141a86722cde7b576977e67b1368f6f726b8d08"}},{"ruleId":"D1","level":"warning","message":{"text":"helix_planner::exec::returns::semantic_multiplicity (cyclomatic 19): helix_planner::exec::returns::semantic_multiplicity 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":"crates/planner/src/exec/returns.rs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"e77760f5aa1d2e67ebf32c4a48e10e2adfde4ae0dfa48db46eed06dd763cf6d4"}},{"ruleId":"D1","level":"warning","message":{"text":"run_embedded_parity.main (cyclomatic 19): run_embedded_parity.main 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":"sdks/python/scripts/run_embedded_parity.py"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"95e2d616bea7ffcfa896697d5425da49221288c7141d1c24ccda5cd5ac81c398"}},{"ruleId":"D1","level":"warning","message":{"text":"Predicate.to_json (cyclomatic 19): Predicate.to_json 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":"sdks/python/src/helixdb/dsl.py"},"region":{"startLine":931}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc477eac76ec0b209279d443cbd57df557ef2d0c2a7f458ef9b40a9858da515b"}},{"ruleId":"D1","level":"warning","message":{"text":"helix_cli::commands::cloud::database::run (cyclomatic 18): helix_cli::commands::cloud::database::run 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":"crates/cli/src/commands/cloud/database.rs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"52a7941d90618338a511b47c04ed67e406b6ae6a1d8e0e93b5151ed040eae5e9"}},{"ruleId":"D1","level":"warning","message":{"text":"Repeat::next (cyclomatic 18): Repeat::next 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":"crates/db/src/execution/interpreter/pull/repeat.rs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"91c376ca1043323d7526f6d943aa9daf530138929c73602cb87a60b545553684"}},{"ruleId":"D1","level":"warning","message":{"text":"ExecutionContext::search_vector_index_with_candidates (cyclomatic 18): ExecutionContext::search_vector_index_with_candidates 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":"crates/db/src/execution/interpreter/access/search/storage.rs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"603d713bdb85b14d111bf1cb668617eb789e7fc32e746ce355b18b9bd1f451d7"}},{"ruleId":"D1","level":"warning","message":{"text":"ExecutionContext::eval_expr_with_resolver (cyclomatic 18): ExecutionContext::eval_expr_with_resolver 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":"crates/db/src/execution/interpreter/stream/eval/expr.rs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"58863ee8ebaf3bcd8e6b6e3b8c911cd18962d6651b67fc53a1f382859709356c"}},{"ruleId":"D1","level":"warning","message":{"text":"db::search::hash_property_value_component (cyclomatic 18): db::search::hash_property_value_component 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":"crates/db/src/search/mod.rs"},"region":{"startLine":318}}}],"partialFingerprints":{"codehealthFindingId/v1":"64d0efbfdc0e67eaad1ab671ed9d7ef750f330be4abf810aa92270a76fbaae91"}},{"ruleId":"D1","level":"warning","message":{"text":"db::migrations::vector_retirement::release_reservations_batch (cyclomatic 18): db::migrations::vector_retirement::release_reservations_batch 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":"crates/db/src/migrations/vector_retirement.rs"},"region":{"startLine":778}}}],"partialFingerprints":{"codehealthFindingId/v1":"e954f29608219b624a40a7d958163c00ee13f256e6b7af1adc5875ecd9ad326e"}},{"ruleId":"D1","level":"warning","message":{"text":"db::index_lifecycle::text::validation::select_root (cyclomatic 18): db::index_lifecycle::text::validation::select_root 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":"crates/db/src/index_lifecycle/text/validation.rs"},"region":{"startLine":501}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1ef3cb914fd979187d9897eda89d65d4dbdf1a5c0b8b830c0299f661e6b496f"}},{"ruleId":"D1","level":"warning","message":{"text":"db::migrations::migrate_legacy_definitions (cyclomatic 18): db::migrations::migrate_legacy_definitions 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. This is NOT this file\u0027s highest cyclomatic complexity: MigrationFailpoint::as_str (cyclomatic 42) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/migrations/mod.rs"},"region":{"startLine":1553}}}],"partialFingerprints":{"codehealthFindingId/v1":"52268653f1ac3a2c6477131eac7bf6573bd5795ae68621192bb67db67e3e5a5a"}},{"ruleId":"D1","level":"warning","message":{"text":"Graph::with_attributes (cyclomatic 18): Graph::with_attributes 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":"crates/graph-algorithms/src/model.rs"},"region":{"startLine":438}}}],"partialFingerprints":{"codehealthFindingId/v1":"4dcfcd283007b00fae2768a88c6f1a05cbdc5027e908860ca218ff3669958083"}},{"ruleId":"D1","level":"warning","message":{"text":"image_archive.scan_archive_for_secrets (cyclomatic 18): image_archive.scan_archive_for_secrets 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":"docker-image/image_archive.py"},"region":{"startLine":323}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7ca22f705d54c1278fff1fb410f5740d085601a6a5aaceba8667a90a11938ec"}},{"ruleId":"D1","level":"warning","message":{"text":"dsl._normalize_typed_query_value (cyclomatic 18): dsl._normalize_typed_query_value 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":"sdks/python/src/helixdb/dsl.py"},"region":{"startLine":3837}}}],"partialFingerprints":{"codehealthFindingId/v1":"95e657f6904dfa60d163c44ef0f6351ea2e1df238049fdc502894143b31f842d"}},{"ruleId":"D1","level":"warning","message":{"text":"IndexPrefix::from_slice (cyclomatic 17): IndexPrefix::from_slice has cyclomatic complexity 17 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/encoding/v2/keys/indexes/prefix.rs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"b17bbb0ef9590a9a38fbee8b2913323ce6f9087bbb311aaaa752033d287ee3c1"}},{"ruleId":"D1","level":"warning","message":{"text":"ExecutionContext::node_secondary_ids (cyclomatic 17): ExecutionContext::node_secondary_ids has cyclomatic complexity 17 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/execution/interpreter/access/secondary_set.rs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5487b8b5fef2c687468331cdf70f4baa6526d4a8c021a8568ff414b1096a29e"}},{"ruleId":"D1","level":"warning","message":{"text":"HelixDB::close (cyclomatic 17): HelixDB::close 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":"crates/db/src/lib.rs"},"region":{"startLine":2196}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ce9f5295fa1e2672200917405a3dd8642a05a211a931cea4dd2e3206b0a03a2"}},{"ruleId":"D1","level":"warning","message":{"text":"VectorMemoryStore::load_from_read_inner (cyclomatic 17): VectorMemoryStore::load_from_read_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":"crates/db/src/search/vector/cache/store.rs"},"region":{"startLine":764}}}],"partialFingerprints":{"codehealthFindingId/v1":"159f42e03816263e154e3403d712889d21b2398a3c93ae3b62232d67918d043f"}},{"ruleId":"D1","level":"warning","message":{"text":"VectorIndex::relink_neighbor (cyclomatic 17): VectorIndex::relink_neighbor 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":"crates/db/src/search/vector/hnsw/mutation/mod.rs"},"region":{"startLine":1933}}}],"partialFingerprints":{"codehealthFindingId/v1":"6936e7ad4f34dda27b38a4af353bbe488a0d25eaa6ac13a99040ecfcd2fae9f7"}},{"ruleId":"D1","level":"warning","message":{"text":"db::encoding::v2::values::property::range_index_value::project_range_value (cyclomatic 17): db::encoding::v2::values::property::range_index_value::project_range_value has cyclomatic complexity 17 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/encoding/v2/values/property/range_index_value.rs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f69bd6b041ee1e3680bf55c6b842b387ed19c35216c460eb085a2683e509713"}},{"ruleId":"D1","level":"warning","message":{"text":"db::index_lifecycle::repository::require_reader_bootstrap_or_legacy (cyclomatic 17): db::index_lifecycle::repository::require_reader_bootstrap_or_legacy 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":"crates/db/src/index_lifecycle/repository.rs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"cdbdb00df02211be204495c6988eb5efa86d2b34f7fdca15a61512e5fb20f923"}},{"ruleId":"D1","level":"warning","message":{"text":"db::migrations::vector_properties::materialize_batch (cyclomatic 17): db::migrations::vector_properties::materialize_batch 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":"crates/db/src/migrations/vector_properties.rs"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3521998f970b85be36666f6b0199cd534812929aedc357130d33caef6a5f63e"}},{"ruleId":"D1","level":"warning","message":{"text":"db::index_lifecycle::outbox::reconcile_legacy_reader_coordination_operations (cyclomatic 17): db::index_lifecycle::outbox::reconcile_legacy_reader_coordination_operations 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":"crates/db/src/index_lifecycle/outbox.rs"},"region":{"startLine":746}}}],"partialFingerprints":{"codehealthFindingId/v1":"95aae1a2178267b78bf6f086c4293ec5813bf4924af09a67ca6a6003ceb269e1"}},{"ruleId":"D1","level":"warning","message":{"text":"db::index_lifecycle::vector::driver::delete_physical_namespace (cyclomatic 17): db::index_lifecycle::vector::driver::delete_physical_namespace 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":"crates/db/src/index_lifecycle/vector/driver.rs"},"region":{"startLine":1089}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fd70497923896d4857e6a9b121b2707b025edf51c73983118b99b14b72e7a96"}},{"ruleId":"D1","level":"warning","message":{"text":"db::index_lifecycle::vector::driver::step_build (cyclomatic 17): db::index_lifecycle::vector::driver::step_build 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":"crates/db/src/index_lifecycle/vector/driver.rs"},"region":{"startLine":1402}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2a26334386108a24a5a9d51c1384f42688df6b9c858d6261e9c806281966358"}},{"ruleId":"D1","level":"warning","message":{"text":"db::index_lifecycle::vector::driver::adopt_legacy (cyclomatic 17): db::index_lifecycle::vector::driver::adopt_legacy has cyclomatic complexity 17 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/index_lifecycle/vector/driver.rs"},"region":{"startLine":1682}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d7b0405372b308a4aa3df75fb25978fe0ebe755393b82d697e8760da31ad8c1"}},{"ruleId":"D1","level":"warning","message":{"text":"db::index_lifecycle::vector::driver::catch_up (cyclomatic 17): db::index_lifecycle::vector::driver::catch_up 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":"crates/db/src/index_lifecycle/vector/driver.rs"},"region":{"startLine":2279}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c494d2bfc7da4c4e3517253a3e2553f11132221657475a9dd369e103be37505"}},{"ruleId":"D1","level":"warning","message":{"text":"ExecPullCapability::of (cyclomatic 17): ExecPullCapability::of has cyclomatic complexity 17 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/planner/src/exec/pull/mod.rs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e8dc6fb6691e2d924d2ab2d11d9b9c854a30dcc6667ed0663585bf0eb823ee7"}},{"ruleId":"D1","level":"warning","message":{"text":"ExecProgram::derive (cyclomatic 17): ExecProgram::derive 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":"crates/planner/src/exec/pull/mod.rs"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"86a0e6c8fea949cbcacc7d51dd6a3a58bc048e8371d51eb8badc949d0fe1baae"}},{"ruleId":"D1","level":"warning","message":{"text":"HelixConfig::validate (cyclomatic 16): HelixConfig::validate 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":"crates/cli/src/config.rs"},"region":{"startLine":551}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7ca5e078fc471b576f56d66cc97578c072bdb30fd0712ad684247b312f431c1"}},{"ruleId":"D1","level":"warning","message":{"text":"ExecutionContext::execute_branch_with_context (cyclomatic 16): ExecutionContext::execute_branch_with_context 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":"crates/db/src/execution/interpreter/control/branch.rs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"57f303972c9af2de51c1da3148bdd3780ac9987f501f818b063c655e11d2b9e0"}},{"ruleId":"D1","level":"warning","message":{"text":"ExecutionContext::execute_shortest_path (cyclomatic 16): ExecutionContext::execute_shortest_path 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":"crates/db/src/execution/interpreter/shortest_path.rs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bf630f3bcdee152841917810613768cb9f2c918bb8123acf67db69cb0589b98"}},{"ruleId":"D1","level":"warning","message":{"text":"OrderedRangeCursor::next (cyclomatic 16): OrderedRangeCursor::next 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":"crates/db/src/index_lifecycle/secondary/exact/ordered.rs"},"region":{"startLine":417}}}],"partialFingerprints":{"codehealthFindingId/v1":"41aeb2ad720614ca8d0c1f62ab3d8fe310138b8b3aee679ed330837f2c8faceb"}},{"ruleId":"D1","level":"warning","message":{"text":"db::migrations::vector_retirement::fence_sources_batch (cyclomatic 16): db::migrations::vector_retirement::fence_sources_batch 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":"crates/db/src/migrations/vector_retirement.rs"},"region":{"startLine":246}}}],"partialFingerprints":{"codehealthFindingId/v1":"4eb7fcc1655ed3f17c19fd8fa69ab84556f6e09b0f35bc34c80e12c0edb54517"}},{"ruleId":"D1","level":"warning","message":{"text":"db::migrations::vector_retirement::delete_dedicated_lane_batch (cyclomatic 16): db::migrations::vector_retirement::delete_dedicated_lane_batch 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":"crates/db/src/migrations/vector_retirement.rs"},"region":{"startLine":406}}}],"partialFingerprints":{"codehealthFindingId/v1":"d41dd0dba1d0213e4e0cc4e2c84c67da9001eaec24d0509da58ddf6181b1c8b2"}},{"ruleId":"D1","level":"warning","message":{"text":"db::migrations::vector_retirement::delete_core_batch (cyclomatic 16): db::migrations::vector_retirement::delete_core_batch 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":"crates/db/src/migrations/vector_retirement.rs"},"region":{"startLine":533}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e71c5c6345b17c117c3f10284c57097e78f330e87b320e6139204c4fe647bd2"}},{"ruleId":"D1","level":"warning","message":{"text":"db::migrations::startup::bootstrap::preflight_writer_bootstrap (cyclomatic 16): db::migrations::startup::bootstrap::preflight_writer_bootstrap 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":"crates/db/src/migrations/startup/bootstrap.rs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d013db75cff8c2e41e54afb1642d36b7c64ea546a65975f0e4da3e7a4a705d3"}},{"ruleId":"D1","level":"warning","message":{"text":"db::index_lifecycle::text::statistics::prepare_transition (cyclomatic 16): db::index_lifecycle::text::statistics::prepare_transition has cyclomatic complexity 16 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/index_lifecycle/text/statistics.rs"},"region":{"startLine":613}}}],"partialFingerprints":{"codehealthFindingId/v1":"dabbb15be07a4c26ba71589d2f80fab7a4f7529033d0a4cd5930c44cd5a6e8d4"}},{"ruleId":"D1","level":"warning","message":{"text":"db::index_lifecycle::secondary::validate_and_release_applied (cyclomatic 16): db::index_lifecycle::secondary::validate_and_release_applied 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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":1649}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd3fc3ea499e6d08af9fa473508436e634b2b98bf914ecc0646732192a7a15ad"}},{"ruleId":"D1","level":"warning","message":{"text":"db::index_lifecycle::text::compaction::select_artifacts (cyclomatic 16): db::index_lifecycle::text::compaction::select_artifacts 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":"crates/db/src/index_lifecycle/text/compaction.rs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"abc109a92cd77be51495d40b8f05709af3815f86fda01864e5649aeeddf0b874"}},{"ruleId":"D1","level":"warning","message":{"text":"db::migration_parity::text_search_from_read (cyclomatic 16): db::migration_parity::text_search_from_read 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":"crates/db/src/migration_parity.rs"},"region":{"startLine":565}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b1fbdc72b9cbc03ad57f4c1e86fd8a691037ce6b1497f78485f5cdd6ef59b45"}},{"ruleId":"D1","level":"warning","message":{"text":"db::search::text::search_manifest_with_state_source (cyclomatic 16): db::search::text::search_manifest_with_state_source 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":"crates/db/src/search/text/mod.rs"},"region":{"startLine":505}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bf1957d72b65ae122855b0f0d9bbde821ed63fe272213da37c4366b83425853"}},{"ruleId":"D1","level":"warning","message":{"text":"Graph::spring_layout (cyclomatic 16): Graph::spring_layout 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":"crates/graph-algorithms/src/algorithms/layout.rs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a05052dc1239b965247d0735631cc9802d047d7fda5fb3d82a53fa0cf9d1a56"}},{"ruleId":"D1","level":"warning","message":{"text":"ExecutableDagBuilder::push_selected_stream_pipeline_op (cyclomatic 16): ExecutableDagBuilder::push_selected_stream_pipeline_op has cyclomatic complexity 16 (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":"crates/planner/src/exec/selected/lowering/access/pipeline.rs"},"region":{"startLine":4}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d8df51b98f1e67047610a45a2bf6735f8d78c7bb8630ce44ddd8f749c161dea"}},{"ruleId":"D1","level":"warning","message":{"text":"ExecutableDagBuilder::push_selected_range_pipeline (cyclomatic 16): ExecutableDagBuilder::push_selected_range_pipeline 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":"crates/planner/src/exec/selected/lowering/access/stream/pipeline.rs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"516cc8e22ea1b1882a14d3fb27fc6f63db45aaa3d3e26347b894692701aa716e"}},{"ruleId":"D1","level":"warning","message":{"text":"helix_planner::rules::physical_contracts::pipeline::delivered::delivered_after_pipeline_op (cyclomatic 16): helix_planner::rules::physical_contracts::pipeline::delivered::delivered_after_pipeline_op has cyclomatic complexity 16 (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":"crates/planner/src/rules/physical_contracts/pipeline/delivered.rs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"32efc000c0ace6a2e03f372d99e4fd84f290a8efa4a240d1f3f5e92c651b106c"}},{"ruleId":"D1","level":"warning","message":{"text":"helix_planner::exec::selected::lowering::contracts::delivered::pipeline::selected_stream_pipeline_delivered_properties (cyclomatic 16): helix_planner::exec::selected::lowering::contracts::delivered::pipeline::selected_stream_pipeline_delivered_properties has cyclomatic complexity 16 (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":"crates/planner/src/exec/selected/lowering/contracts/delivered/pipeline.rs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"e89ab6b239dc9ebe741f7d73026828ddef0bb9ed233c5d2bea268105781c73b5"}},{"ruleId":"D1","level":"warning","message":{"text":"run_embedded_parity.async_main (cyclomatic 16): run_embedded_parity.async_main 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":"sdks/python/scripts/run_embedded_parity.py"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"59ec1c0e4c40208333fc11b82a9eaa42d865db997db4301ae63002d2db1a734e"}},{"ruleId":"D1","level":"warning","message":{"text":"dsl.parse_index_operation_status (cyclomatic 16): dsl.parse_index_operation_status 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":"sdks/python/src/helixdb/dsl.py"},"region":{"startLine":1673}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0c315878d2d848042a564b74631e592710802ea8f34ea449e55e80f64981d25"}},{"ruleId":"D1","level":"warning","message":{"text":"GraphSelection.__post_init__ (cyclomatic 16): GraphSelection.__post_init__ 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":"sdks/python/src/helixdb/graph.py"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f946ffe6d338780e88e4413d2a62d2272c03447eb9c171c42234c3262e0c033"}},{"ruleId":"D1","level":"warning","message":{"text":"BatchCondition.UnmarshalJSON (cyclomatic 16): BatchCondition.UnmarshalJSON 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: Predicate.ast (cyclomatic 20) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sdks/go/dsl.go"},"region":{"startLine":2120}}}],"partialFingerprints":{"codehealthFindingId/v1":"8017169f9ecc38e8c2c5f2276c0b6f7f6ddc1f0f58887e21c4f22338f2970aea"}},{"ruleId":"D1","level":"warning","message":{"text":"dsl.stringifyEncoded (cyclomatic 16): dsl.stringifyEncoded 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. This is NOT this file\u0027s highest cyclomatic complexity: Step.toAst (cyclomatic 86) 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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ea7bbedf9ea72c9180b005aa6330937d343c20bc048b3c1bde5595e9081733e"}},{"ruleId":"D1","level":"warning","message":{"text":"dsl.parseIndexOperationStatus (cyclomatic 16): dsl.parseIndexOperationStatus 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. This is NOT this file\u0027s highest cyclomatic complexity: Step.toAst (cyclomatic 86) 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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":1302}}}],"partialFingerprints":{"codehealthFindingId/v1":"62d69c6fe6daa325d5290acaf129c0b53cd567f749689ba07b1a860c2442f332"}},{"ruleId":"D2","level":"warning","message":{"text":"VectorIndex::search_layer0_with_simhash (cognitive 241): VectorIndex::search_layer0_with_simhash has cognitive complexity 241 (threshold 15). Drivers by points: if/else 85 (206 pts), loops 8 (19 pts), boolean chains 12, match/switch 2 (4 pts) (nesting depth added 134). 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":"crates/db/src/search/vector/hnsw/search.rs"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5d29bfe947f531aaaa7d9d52039e4d8e52182d514923b9d7298662973207d98"}},{"ruleId":"D2","level":"warning","message":{"text":"Cursor::next (cognitive 207): Cursor::next has cognitive complexity 207 (threshold 15). Drivers by points: if/else 49 (156 pts), match/switch 11 (30 pts), loops 6 (19 pts), boolean chains 2 (nesting depth added 139). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/execution/interpreter/pull/poll.rs"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"249da44178745945acd5f6c04f6d5867cc3bbc3bc85a6371e7b7c16c3c8afd25"}},{"ruleId":"D2","level":"warning","message":{"text":"VectorRows::validate_simhash_directory (cognitive 110): VectorRows::validate_simhash_directory has cognitive complexity 110 (threshold 15). Drivers by points: if/else 37 (91 pts), match/switch 8 (17 pts), boolean chains 1, loops 1 (nesting depth added 63). 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":"crates/db/src/search/vector/storage/mod.rs"},"region":{"startLine":1173}}}],"partialFingerprints":{"codehealthFindingId/v1":"684f237be762f77be32b93cdd1058f69891287e0d252d168edc3f1a354f6be8a"}},{"ruleId":"D2","level":"warning","message":{"text":"VectorIndex::restricted_filter_aware_search (cognitive 97): VectorIndex::restricted_filter_aware_search has cognitive complexity 97 (threshold 15). Drivers by points: if/else 24 (62 pts), loops 10 (27 pts), boolean chains 8 (nesting depth added 55). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/search/vector/hnsw/restricted.rs"},"region":{"startLine":1106}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d9506f53b6b837b76d788f6580f9378d006321c3de99d0213701da417796733"}},{"ruleId":"D2","level":"warning","message":{"text":"db::migrations::preflight_legacy_vector_reservations (cognitive 87): db::migrations::preflight_legacy_vector_reservations has cognitive complexity 87 (threshold 15). Drivers by points: if/else 24 (54 pts), match/switch 6 (13 pts), boolean chains 10, loops 9 (10 pts) (nesting depth added 38). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/migrations/mod.rs"},"region":{"startLine":1856}}}],"partialFingerprints":{"codehealthFindingId/v1":"dffe34a1c59afb5f4ce97a272b7d23e4cb7fd7a46182fd5df63a8a03d8e7aa78"}},{"ruleId":"D2","level":"warning","message":{"text":"validate-cargo-target-references.validate_codec_architecture (cognitive 77): validate-cargo-target-references.validate_codec_architecture has cognitive complexity 77 (threshold 15). Drivers by points: if/else 19 (42 pts), loops 20 (27 pts), boolean chains 8 (nesting depth added 30). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/validate-cargo-target-references.py"},"region":{"startLine":491}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e4696f78902a4d999e4b37672e5e98c0dd18dffce4140cb1f9c3531a138f00e"}},{"ruleId":"D2","level":"warning","message":{"text":"VectorRows::validate_legacy_physical (cognitive 67): VectorRows::validate_legacy_physical has cognitive complexity 67 (threshold 15). Drivers by points: if/else 19 (45 pts), match/switch 9 (18 pts), boolean chains 3, loops 1 (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":"crates/db/src/search/vector/storage/mod.rs"},"region":{"startLine":921}}}],"partialFingerprints":{"codehealthFindingId/v1":"95f32c8c22a20cdf5e293de99173e612e4f312a675a1608da79137d716782a88"}},{"ruleId":"D2","level":"warning","message":{"text":"db::search::vector::cache::hydration::hydrate_active_generations (cognitive 67): db::search::vector::cache::hydration::hydrate_active_generations has cognitive complexity 67 (threshold 15). Drivers by points: if/else 15 (37 pts), match/switch 11 (24 pts), loops 3 (5 pts), boolean chains 1 (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":"crates/db/src/search/vector/cache/hydration.rs"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"3dc277554c512cc89584d530746dc5ef19a37c4870119c1e8c40f25f2adc040d"}},{"ruleId":"D2","level":"warning","message":{"text":"PreparedTextOperationStep::stage (cognitive 58): PreparedTextOperationStep::stage has cognitive complexity 58 (threshold 15). Drivers by points: if/else 16 (37 pts), loops 6 (12 pts), match/switch 5 (8 pts), boolean chains 1 (nesting depth added 30). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":508}}}],"partialFingerprints":{"codehealthFindingId/v1":"e47122011ee39d379048434b5f68a81f0be88a728ed52bbdb7e75cd8f4b27302"}},{"ruleId":"D2","level":"warning","message":{"text":"RuleSchedule::rules_for_expr (cognitive 58): RuleSchedule::rules_for_expr has cognitive complexity 58 (threshold 15). Drivers by points: if/else 38 (57 pts), match/switch 1 (nesting depth added 19). 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":"crates/planner/src/optimizer/driver/schedule/routing.rs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"8774f25dde504edefed89f8de940d17b1ab029474b3e399e46c3a86a30aa35c6"}},{"ruleId":"D2","level":"warning","message":{"text":"Step.to_ast (cognitive 56): Step.to_ast has cognitive complexity 56 (threshold 15). Drivers by points: if/else 50, ternaries 3 (6 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sdks/python/src/helixdb/dsl.py"},"region":{"startLine":2312}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbc30ab70477fb1decf1d78b4f9b42e9dda8e4827c73f45a9e583505340a3c26"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::text::driver::scan_partition_documents (cognitive 55): db::index_lifecycle::text::driver::scan_partition_documents has cognitive complexity 55 (threshold 15). Drivers by points: if/else 22 (43 pts), match/switch 4 (10 pts), boolean chains 1, 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":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":2547}}}],"partialFingerprints":{"codehealthFindingId/v1":"c62e93a93cb7e40258937bef3f582f9ebcbad97d8063e8257ac15e0d5f82fc98"}},{"ruleId":"D2","level":"warning","message":{"text":"VectorIndex::load_uncached_items_for_layer (cognitive 54): VectorIndex::load_uncached_items_for_layer has cognitive complexity 54 (threshold 15). Drivers by points: if/else 11 (28 pts), loops 8 (18 pts), boolean chains 4, match/switch 2 (4 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":"crates/db/src/search/vector/hnsw/index.rs"},"region":{"startLine":1084}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7157320b914b9034fef91cdb449ef277e71974f04e6676c2c7ae081c79975af"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::secondary::scan_source (cognitive 54): db::index_lifecycle::secondary::scan_source has cognitive complexity 54 (threshold 15). Drivers by points: if/else 14 (26 pts), match/switch 8 (17 pts), loops 5 (10 pts), boolean chains 1 (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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":1004}}}],"partialFingerprints":{"codehealthFindingId/v1":"797715041577b2ed19d18a4b65c24b206987b7a735f9f4171aa9e3deed2fe483"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::vector::driver::step_cleanup (cognitive 54): db::index_lifecycle::vector::driver::step_cleanup has cognitive complexity 54 (threshold 15). Drivers by points: if/else 13 (36 pts), match/switch 6 (16 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":"crates/db/src/index_lifecycle/vector/driver.rs"},"region":{"startLine":643}}}],"partialFingerprints":{"codehealthFindingId/v1":"98477bf33db9fd8c233ca4032da5871c4b090aa2a1e090452b588ea9efbb1f1e"}},{"ruleId":"D2","level":"warning","message":{"text":"image_archive.inspect_archive (cognitive 52): image_archive.inspect_archive has cognitive complexity 52 (threshold 15). Drivers by points: if/else 26 (37 pts), boolean chains 7, loops 5 (6 pts), error handling 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":"docker-image/image_archive.py"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"a32da4319dfcdfc65a7b58a9ed6000ad0093bb37cfa04d58ff130dc99c9eeffa"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::secondary::secondary_range_scan_bounds (cognitive 46): db::index_lifecycle::secondary::secondary_range_scan_bounds has cognitive complexity 46 (threshold 15). Drivers by points: if/else 18 (36 pts), match/switch 4 (7 pts), boolean chains 3 (nesting depth added 21). 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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":3239}}}],"partialFingerprints":{"codehealthFindingId/v1":"8be6467ad94ce4605d27d309b81d9237b49e28e729abfb0fc8c0eb4ee755d702"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::text::driver::scan_source (cognitive 45): db::index_lifecycle::text::driver::scan_source has cognitive complexity 45 (threshold 15). Drivers by points: if/else 18 (36 pts), match/switch 3 (5 pts), boolean chains 2, loops 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":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":2969}}}],"partialFingerprints":{"codehealthFindingId/v1":"e367e23303a513188545456f5b061e494a403ece8d25a330f23778075f94ce5b"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::outbox::reconcile_legacy_reader_coordination_operations (cognitive 45): db::index_lifecycle::outbox::reconcile_legacy_reader_coordination_operations has cognitive complexity 45 (threshold 15). Drivers by points: if/else 10 (33 pts), loops 4 (8 pts), match/switch 1 (4 pts) (nesting depth added 30). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/index_lifecycle/outbox.rs"},"region":{"startLine":746}}}],"partialFingerprints":{"codehealthFindingId/v1":"c91b33625eb8870e4823ba6ee7e8a44e03e93be4cbe30295da5e48ba6573d858"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::text::validation::select_page (cognitive 44): db::index_lifecycle::text::validation::select_page has cognitive complexity 44 (threshold 15). Drivers by points: if/else 15 (31 pts), loops 3 (5 pts), boolean chains 4, match/switch 2 (4 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":"crates/db/src/index_lifecycle/text/validation.rs"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f3d392c323285174a36df7e4e9d50aeb6cc8603d53b9a572bf56a84a7b0c8bf"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::worker::dispatch_worker_cycle (cognitive 40): db::index_lifecycle::worker::dispatch_worker_cycle has cognitive complexity 40 (threshold 15). Drivers by points: if/else 10 (27 pts), match/switch 3 (7 pts), boolean chains 3, loops 2 (3 pts) (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":"crates/db/src/index_lifecycle/worker.rs"},"region":{"startLine":588}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9aba791acbe610b10b0250f11039f816d4a276e308fe3ca29e02a0e7466afa7"}},{"ruleId":"D2","level":"warning","message":{"text":"db::migration_parity::scan_v2_state (cognitive 40): db::migration_parity::scan_v2_state has cognitive complexity 40 (threshold 15). Drivers by points: if/else 9 (26 pts), match/switch 3 (7 pts), boolean chains 4, loops 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":"crates/db/src/migration_parity.rs"},"region":{"startLine":1018}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e43221dfc510b295cae6dc7d80f6cbd17f411c5053afd73e51c07b3b2700953"}},{"ruleId":"D2","level":"warning","message":{"text":"Source::next (cognitive 39): Source::next has cognitive complexity 39 (threshold 15). Drivers by points: if/else 10 (28 pts), match/switch 4 (10 pts), loops 1 (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":"crates/db/src/execution/interpreter/pull/source.rs"},"region":{"startLine":452}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a4611d3b3dd0de4e3f62f2b62f4bd392aa7103cca6549f22c8e943152685cb4"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::text::driver::build_text_catch_up_plan (cognitive 39): db::index_lifecycle::text::driver::build_text_catch_up_plan has cognitive complexity 39 (threshold 15). Drivers by points: if/else 9 (18 pts), match/switch 9 (16 pts), boolean chains 4, loops 1 (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":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":2242}}}],"partialFingerprints":{"codehealthFindingId/v1":"be0969bf9ca58b3d53a7f109acc362a14439e7aa40c014a6daf877ed79cbdf93"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::secondary::delete_generation_rows (cognitive 39): db::index_lifecycle::secondary::delete_generation_rows has cognitive complexity 39 (threshold 15). Drivers by points: if/else 11 (24 pts), match/switch 3 (8 pts), boolean chains 4, loops 2 (3 pts) (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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":1862}}}],"partialFingerprints":{"codehealthFindingId/v1":"753185d12752789f590824afc35ac1d998e0da47d3c77809ed49b01e430db415"}},{"ruleId":"D2","level":"warning","message":{"text":"Branch::next (cognitive 38): Branch::next has cognitive complexity 38 (threshold 15). Drivers by points: if/else 9 (27 pts), loops 2 (5 pts), boolean chains 3, match/switch 2 (3 pts) (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":"crates/db/src/execution/interpreter/pull/branch.rs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"79aaa6b17f298525f28de73b5d732d996e368dc0fc7650708d6e58cb8f29aa79"}},{"ruleId":"D2","level":"warning","message":{"text":"Repeat::next (cognitive 38): Repeat::next has cognitive complexity 38 (threshold 15). Drivers by points: if/else 11 (30 pts), loops 2 (5 pts), match/switch 1 (2 pts), boolean chains 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":"crates/db/src/execution/interpreter/pull/repeat.rs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bbc31b5e20bdf64771e78fedb3c0a9cc11a695f64fd0e29aff0fb9559095421"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle_testing::contracts::family_shapes (cognitive 38): db::index_lifecycle_testing::contracts::family_shapes has cognitive complexity 38 (threshold 15). Drivers by points: if/else 8 (22 pts), loops 7 (16 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":"crates/db/src/index_lifecycle_testing/contracts.rs"},"region":{"startLine":4076}}}],"partialFingerprints":{"codehealthFindingId/v1":"f18b83ff15df7b593c6a1ef0a5550d4ddd8804958d592d14ebf234917f946cc9"}},{"ruleId":"D2","level":"warning","message":{"text":"image_archive.scan_archive_for_secrets (cognitive 38): image_archive.scan_archive_for_secrets has cognitive complexity 38 (threshold 15). Drivers by points: if/else 10 (25 pts), loops 6 (11 pts), error handling 1 (2 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":"docker-image/image_archive.py"},"region":{"startLine":323}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf896c6e900e15ce2cd53a0952591c35b8d8d1dc3afd8d35e27cdc56cf393be2"}},{"ruleId":"D2","level":"warning","message":{"text":"helix_cli::commands::chef::launch_claude_streaming (cognitive 37): helix_cli::commands::chef::launch_claude_streaming has cognitive complexity 37 (threshold 15). Drivers by points: if/else 6 (22 pts), match/switch 4 (11 pts), loops 2 (3 pts), boolean chains 1 (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":"crates/cli/src/commands/chef.rs"},"region":{"startLine":1942}}}],"partialFingerprints":{"codehealthFindingId/v1":"eba803c431908fc54a4981be2760f1b72fde219c3ecad48fa4033eccc557995a"}},{"ruleId":"D2","level":"warning","message":{"text":"VectorRows::backfill_missing_simhash_directory (cognitive 37): VectorRows::backfill_missing_simhash_directory has cognitive complexity 37 (threshold 15). Drivers by points: if/else 15 (28 pts), match/switch 4 (6 pts), boolean chains 2, loops 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/search/vector/storage/mod.rs"},"region":{"startLine":1517}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f53e66484bafb50b02774b19a2ccfe8adccc924a68705f014968c41b5cf03cc"}},{"ruleId":"D2","level":"warning","message":{"text":"db::migrations::vector_retirement::release_reservations_batch (cognitive 37): db::migrations::vector_retirement::release_reservations_batch has cognitive complexity 37 (threshold 15). Drivers by points: if/else 13 (28 pts), loops 3 (7 pts), match/switch 1 (2 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":"crates/db/src/migrations/vector_retirement.rs"},"region":{"startLine":778}}}],"partialFingerprints":{"codehealthFindingId/v1":"848ba4eec62b677bded8e5e99010c2b5b0d0413edf4bea8806173902910a5074"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::secondary::catch_up_exact (cognitive 37): db::index_lifecycle::secondary::catch_up_exact has cognitive complexity 37 (threshold 15). Drivers by points: if/else 8 (18 pts), match/switch 4 (10 pts), loops 4 (5 pts), boolean chains 4 (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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":1408}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee519dab59b4d44965555009dd6a85f21104780710a1fbb2570e3694273d0a69"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::text::manifest::select_page (cognitive 36): db::index_lifecycle::text::manifest::select_page has cognitive complexity 36 (threshold 15). Drivers by points: if/else 16 (28 pts), match/switch 5 (6 pts), boolean chains 1, 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":"crates/db/src/index_lifecycle/text/manifest.rs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c11d63dc1e116a251df76a2d8091a502b420667fdf663ce64b6f31ca5840691"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::secondary::exact::run_production_contracts (cognitive 35): db::index_lifecycle::secondary::exact::run_production_contracts has cognitive complexity 35 (threshold 15). Drivers by points: loops 6 (16 pts), if/else 8 (13 pts), match/switch 2 (5 pts), boolean chains 1 (nesting depth added 18). Of this number, 25 points are the body\u0027s own statements and 10 belong to one function item inside it that branches. 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":"crates/db/src/index_lifecycle/secondary/exact.rs"},"region":{"startLine":502}}}],"partialFingerprints":{"codehealthFindingId/v1":"49a34a54a19a9669956ed068867459deb335f9605274f795a102b75efcabd8b2"}},{"ruleId":"D2","level":"warning","message":{"text":"generate-llms.build (cognitive 35): generate-llms.build has cognitive complexity 35 (threshold 15). Drivers by points: if/else 9 (25 pts), loops 6 (10 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":"docs/scripts/generate-llms.mjs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f32f25b47210c946728ce6e8641b8fd23823b2d3da3ffd3385f426da42d89cf"}},{"ruleId":"D2","level":"warning","message":{"text":"db::migrations::vector_retirement::delete_core_batch (cognitive 34): db::migrations::vector_retirement::delete_core_batch has cognitive complexity 34 (threshold 15). Drivers by points: if/else 16 (30 pts), loops 2 (4 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":"crates/db/src/migrations/vector_retirement.rs"},"region":{"startLine":533}}}],"partialFingerprints":{"codehealthFindingId/v1":"a05633999c85fc957c2231efc512829faf97fb3ce7ce316cc9651359a12bb144"}},{"ruleId":"D2","level":"warning","message":{"text":"run_embedded_parity.main (cognitive 34): run_embedded_parity.main has cognitive complexity 34 (threshold 15). Drivers by points: if/else 8 (18 pts), loops 5 (8 pts), error handling 2 (5 pts), boolean chains 3 (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":"sdks/python/scripts/run_embedded_parity.py"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd683b8e883ad2cd14d3e0897007335419e417d865b3b07458c6e9d40c00e303"}},{"ruleId":"D2","level":"warning","message":{"text":"helix.PropertyValueOf (cognitive 34): helix.PropertyValueOf has cognitive complexity 34 (threshold 15). Drivers by points: if/else 6 (18 pts), loops 6 (13 pts), boolean chains 2, match/switch 1 (nesting depth added 19). 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":"sdks/go/dsl.go"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a54dc02b489d16aee8784db684356028889351d568b082602fc5e94da079479"}},{"ruleId":"D2","level":"warning","message":{"text":"OrderedRangeCursor::next (cognitive 33): OrderedRangeCursor::next has cognitive complexity 33 (threshold 15). Drivers by points: if/else 9 (25 pts), loops 2 (3 pts), match/switch 2 (3 pts), boolean chains 2 (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":"crates/db/src/index_lifecycle/secondary/exact/ordered.rs"},"region":{"startLine":417}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee53dda0dcc4d74706f5a761a82dfa444612667828d964d0253b2592b64a728a"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::secondary::exact::ordered::scan_active_range_generation_ordered (cognitive 33): db::index_lifecycle::secondary::exact::ordered::scan_active_range_generation_ordered has cognitive complexity 33 (threshold 15). Drivers by points: if/else 12 (25 pts), match/switch 4 (5 pts), boolean chains 2, 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":"crates/db/src/index_lifecycle/secondary/exact/ordered.rs"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad9f7ab31c86ef5a65bc274b2699068dd61f6761c3580d27367f124cffe5f7c1"}},{"ruleId":"D2","level":"warning","message":{"text":"RuleApplicability::matches (cognitive 33): RuleApplicability::matches has cognitive complexity 33 (threshold 15). Drivers by points: match/switch 22 (33 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":"crates/planner/src/rules/contracts/applicability/matching.rs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ecb1a72cac4d13f7a711f68c8bb17057a7d32a83f73dacae63225418a7a4619"}},{"ruleId":"D2","level":"warning","message":{"text":"Client.Exec (cognitive 33): Client.Exec has cognitive complexity 33 (threshold 15). Drivers by points: if/else 22 (28 pts), boolean chains 4, 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":"sdks/go/client.go"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c555e1042fee5b1a1f1eba36f789a4510d5ab12442b0a220123cc44634596bd"}},{"ruleId":"D2","level":"warning","message":{"text":"VectorMemoryStore::load_from_read_inner (cognitive 32): VectorMemoryStore::load_from_read_inner has cognitive complexity 32 (threshold 15). Drivers by points: if/else 9 (17 pts), match/switch 5 (14 pts), loops 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":"crates/db/src/search/vector/cache/store.rs"},"region":{"startLine":764}}}],"partialFingerprints":{"codehealthFindingId/v1":"c08130edf977ea50fd406bc7cb5c57372992774cd7452103142689deb3c12002"}},{"ruleId":"D2","level":"warning","message":{"text":"VectorIndex::relink_neighbor (cognitive 32): VectorIndex::relink_neighbor has cognitive complexity 32 (threshold 15). Drivers by points: if/else 11 (24 pts), loops 5 (8 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":"crates/db/src/search/vector/hnsw/mutation/mod.rs"},"region":{"startLine":1933}}}],"partialFingerprints":{"codehealthFindingId/v1":"0794ed22def79506e2d6358799dc3d2fcb7e0469311bb15f2b2b412c7e42eb69"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::repository::operation_record_cursors_are_valid (cognitive 32): db::index_lifecycle::repository::operation_record_cursors_are_valid has cognitive complexity 32 (threshold 15). Drivers by points: match/switch 9 (19 pts), if/else 2 (8 pts), boolean chains 5 (nesting depth added 16). 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":"crates/db/src/index_lifecycle/repository.rs"},"region":{"startLine":662}}}],"partialFingerprints":{"codehealthFindingId/v1":"27188a7777059e618d499e0fbab03a74e7bc0b600fe54798d4b0edacc31a8afe"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::text::validation::select_entity_state (cognitive 32): db::index_lifecycle::text::validation::select_entity_state has cognitive complexity 32 (threshold 15). Drivers by points: if/else 12 (22 pts), boolean chains 5, match/switch 2 (4 pts), 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":"crates/db/src/index_lifecycle/text/validation.rs"},"region":{"startLine":696}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6d24bcd3ed8ec24e7d046e7c112649a9ee6ab39a53c883e2e2bdebf4b29420a"}},{"ruleId":"D2","level":"warning","message":{"text":"db::migrations::vector_properties::materialize_batch (cognitive 32): db::migrations::vector_properties::materialize_batch has cognitive complexity 32 (threshold 15). Drivers by points: if/else 13 (25 pts), match/switch 4 (6 pts), 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":"crates/db/src/migrations/vector_properties.rs"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"135e6c7ae094363377a58888dd682a821384ba274ed8d0d1c7ab3aa785e096ca"}},{"ruleId":"D2","level":"warning","message":{"text":"OracleState::read_indexed (cognitive 32): OracleState::read_indexed has cognitive complexity 32 (threshold 15). Drivers by points: if/else 13 (25 pts), match/switch 3 (4 pts), loops 1 (2 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":"crates/db-testkit/src/model.rs"},"region":{"startLine":653}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f9b5f81681a814c010de226e4f10290878727e978856eb5550fe64bdccdf6b8"}},{"ruleId":"D2","level":"warning","message":{"text":"ExecProgram::derive (cognitive 32): ExecProgram::derive has cognitive complexity 32 (threshold 15). Drivers by points: if/else 8 (20 pts), loops 6 (10 pts), boolean chains 2 (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":"crates/planner/src/exec/pull/mod.rs"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"095c91b8e9dc1831d95e2583eefc87dbdd8f7632fe71772a2415687c9ac96b65"}},{"ruleId":"D2","level":"warning","message":{"text":"ExecutionContext::execute_shortest_path (cognitive 31): ExecutionContext::execute_shortest_path has cognitive complexity 31 (threshold 15). Drivers by points: if/else 11 (24 pts), loops 4 (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":"crates/db/src/execution/interpreter/shortest_path.rs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"d76e28236e0078e5227ec4eddcf8113b5a84ded435b9190ba567f5c3c3e15761"}},{"ruleId":"D2","level":"warning","message":{"text":"graph._decode_tagged_identity (cognitive 31): graph._decode_tagged_identity has cognitive complexity 31 (threshold 15). Drivers by points: if/else 16 (20 pts), boolean chains 10, ternaries 1 (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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sdks/python/src/helixdb/graph.py"},"region":{"startLine":1009}}}],"partialFingerprints":{"codehealthFindingId/v1":"8879d28047025a7da1d1b8600032fe5b6f0786e83311e6a02b9fb1f986135d6e"}},{"ruleId":"D2","level":"warning","message":{"text":"ExecutionContext::execute_steps (cognitive 30): ExecutionContext::execute_steps has cognitive complexity 30 (threshold 15). Drivers by points: if/else 6 (17 pts), match/switch 2 (6 pts), loops 2 (4 pts), boolean chains 3 (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":"crates/db/src/execution/interpreter/scheduler.rs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"274d3ece496a4ec1e7db45d0ce0c135b81b2728e1b18be3c61edcc6ded64a3dd"}},{"ruleId":"D2","level":"warning","message":{"text":"VectorIndex::search_layer_beam (cognitive 30): VectorIndex::search_layer_beam has cognitive complexity 30 (threshold 15). Drivers by points: if/else 10 (23 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":"crates/db/src/search/vector/hnsw/mutation/mod.rs"},"region":{"startLine":936}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b6b6dfd21c8ff7c63e2ba21463db2ca3097548ff160054cdcb5686bb8a75ace"}},{"ruleId":"D2","level":"warning","message":{"text":"db::migrations::vector_retirement::fence_sources_batch (cognitive 30): db::migrations::vector_retirement::fence_sources_batch has cognitive complexity 30 (threshold 15). Drivers by points: if/else 12 (27 pts), match/switch 1 (2 pts), loops 1 (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":"crates/db/src/migrations/vector_retirement.rs"},"region":{"startLine":246}}}],"partialFingerprints":{"codehealthFindingId/v1":"08e21ffab2233ba3db0bcd59de394b5d04dc6ba4a851ac84cbbcc2e68cf8370b"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::vector::driver::catch_up (cognitive 30): db::index_lifecycle::vector::driver::catch_up has cognitive complexity 30 (threshold 15). Drivers by points: if/else 9 (19 pts), match/switch 3 (8 pts), boolean chains 2, loops 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/index_lifecycle/vector/driver.rs"},"region":{"startLine":2279}}}],"partialFingerprints":{"codehealthFindingId/v1":"92e4a32284f9c666be2609cb7dd7bd17cdfa55519f967b24f2583d4201b472bb"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::text::active_compaction::compact_once (cognitive 30): db::index_lifecycle::text::active_compaction::compact_once has cognitive complexity 30 (threshold 15). Drivers by points: if/else 16 (23 pts), boolean chains 3, loops 2 (3 pts), match/switch 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":"crates/db/src/index_lifecycle/text/active_compaction.rs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"015440502658c083bfff9d303c50f640114221cdaa3256c1a55e375a451370bf"}},{"ruleId":"D2","level":"warning","message":{"text":"ExecutionContext::execute_branch_with_context (cognitive 29): ExecutionContext::execute_branch_with_context has cognitive complexity 29 (threshold 15). Drivers by points: if/else 7 (15 pts), loops 5 (12 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":"crates/db/src/execution/interpreter/control/branch.rs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"a243477692e475d3a5d2a5c5dce90b0c0fcdcea0625aeeb924fea8e63643fecd"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::text::validation::select_root (cognitive 29): db::index_lifecycle::text::validation::select_root has cognitive complexity 29 (threshold 15). Drivers by points: if/else 11 (20 pts), boolean chains 4, match/switch 2 (4 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":"crates/db/src/index_lifecycle/text/validation.rs"},"region":{"startLine":501}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b3c6b68332a57b440c4741f4dd491377959a0b6411c4e85e237142a0e557e4d"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::secondary::validate_and_release_applied (cognitive 29): db::index_lifecycle::secondary::validate_and_release_applied has cognitive complexity 29 (threshold 15). Drivers by points: if/else 13 (26 pts), boolean chains 2, 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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":1649}}}],"partialFingerprints":{"codehealthFindingId/v1":"88301c0ac42df62121cec686b86538ec1b45909a9c247ff0ec01b7acfe35d1b6"}},{"ruleId":"D2","level":"warning","message":{"text":"db::migration_parity::text_search_from_read (cognitive 29): db::migration_parity::text_search_from_read has cognitive complexity 29 (threshold 15). Drivers by points: if/else 7 (18 pts), loops 3 (7 pts), match/switch 2 (4 pts) (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":"crates/db/src/migration_parity.rs"},"region":{"startLine":565}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbd6c6b1177d969c20beb0ddb8ac85db750240a76a790d3bfca81603617448b3"}},{"ruleId":"D2","level":"warning","message":{"text":"Graph::spring_layout (cognitive 29): Graph::spring_layout has cognitive complexity 29 (threshold 15). Drivers by points: if/else 6 (15 pts), loops 7 (12 pts), boolean chains 1, match/switch 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":"crates/graph-algorithms/src/algorithms/layout.rs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7c0c1a8974aede4634a2982c52f9fc6667167cd1744779336b180cfdeabf2b1"}},{"ruleId":"D2","level":"warning","message":{"text":"StorageCostProfileOverrides::apply_to (cognitive 29): StorageCostProfileOverrides::apply_to has cognitive complexity 29 (threshold 15). Drivers by points: if/else 29. 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":"crates/planner/src/cost/profile/overrides.rs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e4fa1c20cb3867a8bd5ad765daddf66a7aecacda9c151f084aafaea7826750a"}},{"ruleId":"D2","level":"warning","message":{"text":"helix_planner::rules::cardinality::fold_cursor (cognitive 29): helix_planner::rules::cardinality::fold_cursor has cognitive complexity 29 (threshold 15). Drivers by points: if/else 10 (26 pts), match/switch 1 (2 pts), loops 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":"crates/planner/src/rules/cardinality.rs"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"55f96fc2542972c41dcd4fe78bf4ff319095d4812227a7c4b01e02e866d0aa64"}},{"ruleId":"D2","level":"warning","message":{"text":"helix.normalizeTypedQueryValue (cognitive 29): helix.normalizeTypedQueryValue has cognitive complexity 29 (threshold 15). Drivers by points: if/else 11 (23 pts), boolean chains 3, loops 1 (2 pts), match/switch 1 (nesting depth added 13). 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":"sdks/go/dsl.go"},"region":{"startLine":2994}}}],"partialFingerprints":{"codehealthFindingId/v1":"22610b5e275aec5743921035cb8f40a1f3652c836c1da19a0aa0388cc6afba75"}},{"ruleId":"D2","level":"warning","message":{"text":"BatchCondition.UnmarshalJSON (cognitive 29): BatchCondition.UnmarshalJSON has cognitive complexity 29 (threshold 15). Drivers by points: if/else 11 (26 pts), match/switch 1 (2 pts), loops 1 (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":"sdks/go/dsl.go"},"region":{"startLine":2120}}}],"partialFingerprints":{"codehealthFindingId/v1":"5197ae21395f16b58207be305c914543cb4d3a80f26fde8e91d9c2e27c234773"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::secondary::reconciliation_plan_from_observations (cognitive 28): db::index_lifecycle::secondary::reconciliation_plan_from_observations has cognitive complexity 28 (threshold 15). Drivers by points: if/else 13 (27 pts), match/switch 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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":2425}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c1838ab357283f8ac992ca453aff3de152c8085943d7c8e0d200d543ddbdca5"}},{"ruleId":"D2","level":"warning","message":{"text":"db::migrations::migrate_legacy_definitions (cognitive 28): db::migrations::migrate_legacy_definitions has cognitive complexity 28 (threshold 15). Drivers by points: if/else 11 (20 pts), loops 4, match/switch 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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":1553}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbbc5d2a2cd67825efa133f6d509a7dce629bbccc60ea37b53d3bc0bff4bdf96"}},{"ruleId":"D2","level":"warning","message":{"text":"db::search::text::search_manifest_with_state_source (cognitive 28): db::search::text::search_manifest_with_state_source has cognitive complexity 28 (threshold 15). Drivers by points: if/else 8 (17 pts), loops 4 (7 pts), boolean chains 4 (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":"crates/db/src/search/text/mod.rs"},"region":{"startLine":505}}}],"partialFingerprints":{"codehealthFindingId/v1":"106ce72bbbb287f2f1edc57f7a7e878dc228a2e6ee9c6f877c33de1f0be31d8b"}},{"ruleId":"D2","level":"warning","message":{"text":"dsl.quoteUnsafeIntegerTokens (cognitive 28): dsl.quoteUnsafeIntegerTokens has cognitive complexity 28 (threshold 15). Drivers by points: if/else 10 (20 pts), boolean chains 4, loops 2 (4 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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2f452b5acfd8d9da30e0ce2ac1760e5b4d1ab8cf705141b62345d047b26e5c6"}},{"ruleId":"D2","level":"warning","message":{"text":"HelixError.remote (cognitive 28): HelixError.remote has cognitive complexity 28 (threshold 15). Drivers by points: if/else 7 (10 pts), boolean chains 9, ternaries 4 (8 pts), error handling 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":"sdks/typescript/src/index.ts"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"408a70cd9d73c9664ec58c58308a856052be7f91ded946304da08465ba7f4bf9"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::vector::driver::validate_descriptor (cognitive 27): db::index_lifecycle::vector::driver::validate_descriptor has cognitive complexity 27 (threshold 15). Drivers by points: if/else 9 (22 pts), boolean chains 2, loops 1 (2 pts), match/switch 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":"crates/db/src/index_lifecycle/vector/driver.rs"},"region":{"startLine":2845}}}],"partialFingerprints":{"codehealthFindingId/v1":"81bec4c3071583916e5d1736975fdb94f68c846fa2811bfe5980dee507b41c79"}},{"ruleId":"D2","level":"warning","message":{"text":"ExecutableDagBuilder::push_selected_range_pipeline (cognitive 27): ExecutableDagBuilder::push_selected_range_pipeline has cognitive complexity 27 (threshold 15). Drivers by points: if/else 9 (18 pts), match/switch 2 (5 pts), boolean chains 2, loops 2 (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":"crates/planner/src/exec/selected/lowering/access/stream/pipeline.rs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"dad676db305730540c9b36c8dd4241796670e2489a40399e7f671dfe6d303b68"}},{"ruleId":"D2","level":"warning","message":{"text":"GraphSelection.request (cognitive 27): GraphSelection.request has cognitive complexity 27 (threshold 15). Drivers by points: if/else 12 (16 pts), boolean chains 7, loops 3, match/switch 1 (nesting depth added 4). Of this number, 23 points are the body\u0027s own statements and 4 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":"sdks/go/graph.go"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"145504e3c98ca185dda7c83e8e42c330cb85cccebccdc749c7fac943e93f4524"}},{"ruleId":"D2","level":"warning","message":{"text":"LegacyVectorRetirementCatalog::load (cognitive 26): LegacyVectorRetirementCatalog::load has cognitive complexity 26 (threshold 15). Drivers by points: if/else 11 (22 pts), loops 2, match/switch 1 (2 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":"crates/db/src/migrations/vector_retirement.rs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"9eefa1fcc6c6017a72caaf8dd6f37cde785a7582cd45efef947db0406aadd87e"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::vector::driver::step_build (cognitive 26): db::index_lifecycle::vector::driver::step_build has cognitive complexity 26 (threshold 15). Drivers by points: if/else 8 (20 pts), match/switch 3 (5 pts), boolean chains 1 (nesting depth added 14). 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":"crates/db/src/index_lifecycle/vector/driver.rs"},"region":{"startLine":1402}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab04c7fa479f61b92770ef3648805c6c0beb2998c68c32bbffed6a60e196bfd1"}},{"ruleId":"D2","level":"warning","message":{"text":"db::encoding::v2::values::property::equality_index_value::project_equality_value (cognitive 26): db::encoding::v2::values::property::equality_index_value::project_equality_value has cognitive complexity 26 (threshold 15). Drivers by points: if/else 8 (18 pts), loops 3 (6 pts), boolean chains 1, match/switch 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":"crates/db/src/encoding/v2/values/property/equality_index_value.rs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"629747cb1638385152895578a102b3af4c85c7b5dd405a106504e92ecff73816"}},{"ruleId":"D2","level":"warning","message":{"text":"Graph::with_attributes (cognitive 26): Graph::with_attributes has cognitive complexity 26 (threshold 15). Drivers by points: if/else 10 (17 pts), loops 5 (6 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":"crates/graph-algorithms/src/model.rs"},"region":{"startLine":438}}}],"partialFingerprints":{"codehealthFindingId/v1":"b70736200bbf0bf816b917b53cb225ea2f041a1ff400ed2277847d933488e031"}},{"ruleId":"D2","level":"warning","message":{"text":"helix.UnmarshalIndexDdlReceipt (cognitive 26): helix.UnmarshalIndexDdlReceipt has cognitive complexity 26 (threshold 15). Drivers by points: if/else 16 (25 pts), match/switch 1 (nesting depth added 9). Of this number, 22 points are the body\u0027s own statements and 4 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":"sdks/go/dsl.go"},"region":{"startLine":1147}}}],"partialFingerprints":{"codehealthFindingId/v1":"5620501909655513943f6ed14ac4ed874066ab822acb9d8099d4ad2f7ccca468"}},{"ruleId":"D2","level":"warning","message":{"text":"Step.ToAST (cognitive 26): Step.ToAST has cognitive complexity 26 (threshold 15). Drivers by points: if/else 13 (25 pts), match/switch 1 (nesting depth added 12). Of this number, 25 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sdks/go/dsl.go"},"region":{"startLine":1445}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ddfbfbe7b51bc4b650be0b342fe9095f177f1790168b92e34f8d7a4699e8c5e"}},{"ruleId":"D2","level":"warning","message":{"text":"RangeScan::resolve_group (cognitive 25): RangeScan::resolve_group has cognitive complexity 25 (threshold 15). Drivers by points: if/else 6 (20 pts), loops 2 (4 pts), boolean chains 1 (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":"crates/db/src/index_lifecycle/secondary/exact/ordered.rs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f5f1748f5fcce39bb60ed91d2cd00a278988ee65c74e9eb9a542fb7d36a6a52"}},{"ruleId":"D2","level":"warning","message":{"text":"db::encoding::v2::values::property::range_index_value::validate_encoded (cognitive 25): db::encoding::v2::values::property::range_index_value::validate_encoded has cognitive complexity 25 (threshold 15). Drivers by points: if/else 7 (16 pts), loops 2 (6 pts), match/switch 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":"crates/db/src/encoding/v2/values/property/range_index_value.rs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9bffe677103f7d5cc289e9c721a9bb636b2b383d3733fa631c40d8d16f3ef3c"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::text::active_batch::prepare_destination (cognitive 25): db::index_lifecycle::text::active_batch::prepare_destination has cognitive complexity 25 (threshold 15). Drivers by points: if/else 12 (17 pts), boolean chains 3, match/switch 3, loops 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":"crates/db/src/index_lifecycle/text/active_batch.rs"},"region":{"startLine":560}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf5683cd15da9b6f997c62bf1bd2e7235e4c9b0e9a79593fb1c2eb05ac1cc820"}},{"ruleId":"D2","level":"warning","message":{"text":"Graph::enumerate_cycles_from (cognitive 25): Graph::enumerate_cycles_from has cognitive complexity 25 (threshold 15). Drivers by points: if/else 8 (18 pts), match/switch 1 (4 pts), boolean chains 2, 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":"crates/graph-algorithms/src/algorithms/cycles.rs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7fd7be6820846eb8e7da7f26d1f4771032f32430245b8aa4a29b662c85414df"}},{"ruleId":"D2","level":"warning","message":{"text":"helix_graph_algorithms::algorithms::leiden::refine_connected (cognitive 25): helix_graph_algorithms::algorithms::leiden::refine_connected has cognitive complexity 25 (threshold 15). Drivers by points: if/else 9 (19 pts), loops 3 (5 pts), boolean chains 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/graph-algorithms/src/algorithms/leiden.rs"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"f27f49e0a0312aeb3e2084ee836bd36facb97ffb71dc2f8a57a9c4e7dec7cc82"}},{"ruleId":"D2","level":"warning","message":{"text":"run_embedded_parity.async_main (cognitive 25): run_embedded_parity.async_main has cognitive complexity 25 (threshold 15). Drivers by points: if/else 9 (16 pts), loops 4 (6 pts), error handling 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":"sdks/python/scripts/run_embedded_parity.py"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc3c38b20b3a5eb9bedddc0e9a931522dab0c37d788cd3b798d3f006326f8732"}},{"ruleId":"D2","level":"warning","message":{"text":"dsl._convert_param_value (cognitive 25): dsl._convert_param_value has cognitive complexity 25 (threshold 15). Drivers by points: if/else 17 (23 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":"sdks/python/src/helixdb/dsl.py"},"region":{"startLine":3698}}}],"partialFingerprints":{"codehealthFindingId/v1":"56ab33b2244fc3398ef8a86892367f442601386964d513edd0e15636711b730a"}},{"ruleId":"D2","level":"warning","message":{"text":"ExecutionContext::expansion_ids (cognitive 24): ExecutionContext::expansion_ids has cognitive complexity 24 (threshold 15). Drivers by points: match/switch 7 (19 pts), if/else 2 (5 pts) (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":"crates/db/src/execution/interpreter/access/expand.rs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bfcefc6c9bd2140738727337ff30c3ec183a73664e4e53e803dc9798a422f53"}},{"ruleId":"D2","level":"warning","message":{"text":"ExecutionContext::count_cursor_leaf (cognitive 24): ExecutionContext::count_cursor_leaf has cognitive complexity 24 (threshold 15). Drivers by points: match/switch 6 (14 pts), if/else 2 (6 pts), loops 2 (4 pts) (nesting depth added 14). 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":"crates/db/src/execution/interpreter/count.rs"},"region":{"startLine":1274}}}],"partialFingerprints":{"codehealthFindingId/v1":"e79391489035764f9a8435f3c109a0b19a0fb63b6245af1172a29f328d0484db"}},{"ruleId":"D2","level":"warning","message":{"text":"RowValueResolver::row_property (cognitive 24): RowValueResolver::row_property has cognitive complexity 24 (threshold 15). Drivers by points: if/else 10 (22 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":"crates/db/src/execution/interpreter/stream/eval/property.rs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"e564780fdabc74bf88a48d689bc6453048c1f35625960bf1c884aeec69e32059"}},{"ruleId":"D2","level":"warning","message":{"text":"SecondaryMutationRuntime::flush (cognitive 24): SecondaryMutationRuntime::flush has cognitive complexity 24 (threshold 15). Drivers by points: if/else 7 (16 pts), loops 3 (4 pts), match/switch 2 (3 pts), 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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":370}}}],"partialFingerprints":{"codehealthFindingId/v1":"9cd64411debdde27aae6e1ea470c2a0f13de8be7cd8a38d545c54776379b1dc9"}},{"ruleId":"D2","level":"warning","message":{"text":"db::migrations::vector_retirement::delete_dedicated_lane_batch (cognitive 24): db::migrations::vector_retirement::delete_dedicated_lane_batch has cognitive complexity 24 (threshold 15). Drivers by points: if/else 11 (20 pts), match/switch 2 (3 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":"crates/db/src/migrations/vector_retirement.rs"},"region":{"startLine":406}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bd6c0f054f207eadc1868f32f1c3a4557f55abd7d64513547a2b1c609ebef1a"}},{"ruleId":"D2","level":"warning","message":{"text":"db::migrations::vector_retirement::delete_definitions_batch (cognitive 24): db::migrations::vector_retirement::delete_definitions_batch has cognitive complexity 24 (threshold 15). Drivers by points: if/else 12 (23 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":"crates/db/src/migrations/vector_retirement.rs"},"region":{"startLine":667}}}],"partialFingerprints":{"codehealthFindingId/v1":"192aead76ddc9149586c47699cebce55134b86e346a4978b63869c52da7076b0"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::text::cleanup::delete_metadata (cognitive 24): db::index_lifecycle::text::cleanup::delete_metadata has cognitive complexity 24 (threshold 15). Drivers by points: if/else 6 (17 pts), loops 2 (3 pts), match/switch 2 (3 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":"crates/db/src/index_lifecycle/text/cleanup.rs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"2831c04d9556a56ed69a64a74ae635852e22716f0636c6125c906b54133ba598"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::text::driver::plan_next_catch_up (cognitive 24): db::index_lifecycle::text::driver::plan_next_catch_up has cognitive complexity 24 (threshold 15). Drivers by points: if/else 9 (12 pts), match/switch 8 (9 pts), 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":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":2012}}}],"partialFingerprints":{"codehealthFindingId/v1":"59fe930c26772253395612d894b2aaba32c9777284a105aa201b96fd88b8cbb0"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::secondary::catch_up (cognitive 24): db::index_lifecycle::secondary::catch_up has cognitive complexity 24 (threshold 15). Drivers by points: if/else 7 (15 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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":1281}}}],"partialFingerprints":{"codehealthFindingId/v1":"b563b574be1d09ba6b0dd51ef0179185e249ae0c7d74f6f647df1ad100e3f22b"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::vector::driver::delete_delta_and_applied_rows (cognitive 24): db::index_lifecycle::vector::driver::delete_delta_and_applied_rows has cognitive complexity 24 (threshold 15). Drivers by points: if/else 7 (20 pts), loops 2 (3 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":"crates/db/src/index_lifecycle/vector/driver.rs"},"region":{"startLine":1225}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d51f0847944d5b6e2186e228383a10b94eb99e627f9749c6a9dfed8abfa6309"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::vector::driver::scan_source (cognitive 24): db::index_lifecycle::vector::driver::scan_source has cognitive complexity 24 (threshold 15). Drivers by points: if/else 10 (18 pts), match/switch 3 (5 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":"crates/db/src/index_lifecycle/vector/driver.rs"},"region":{"startLine":2082}}}],"partialFingerprints":{"codehealthFindingId/v1":"8095f12a002a3a4884a2599456ec61e72b496468723baca56a161eaaa16c9df1"}},{"ruleId":"D2","level":"warning","message":{"text":"db::migrations::indexes::equality_bitmap::verify_graph_to_bitmaps (cognitive 24): db::migrations::indexes::equality_bitmap::verify_graph_to_bitmaps has cognitive complexity 24 (threshold 15). Drivers by points: if/else 7 (19 pts), loops 3 (5 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":"crates/db/src/migrations/indexes/equality_bitmap.rs"},"region":{"startLine":452}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc4ddbaee1f42bdbd41b9729bfd5c8d56a2ca82378919209deccdca0e006e278"}},{"ruleId":"D2","level":"warning","message":{"text":"db::migrations::indexes::equality_bitmap::verify_bitmaps_to_graph (cognitive 24): db::migrations::indexes::equality_bitmap::verify_bitmaps_to_graph has cognitive complexity 24 (threshold 15). Drivers by points: if/else 6 (17 pts), loops 3 (6 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":"crates/db/src/migrations/indexes/equality_bitmap.rs"},"region":{"startLine":504}}}],"partialFingerprints":{"codehealthFindingId/v1":"cde733557c76f9edc9be03d6df8dad0dc7a594c97be7a668bf28b8b5c6804f27"}},{"ruleId":"D2","level":"warning","message":{"text":"helix_planner::optimizer::driver::exploration::optimize_many (cognitive 24): helix_planner::optimizer::driver::exploration::optimize_many has cognitive complexity 24 (threshold 15). Drivers by points: if/else 5 (16 pts), match/switch 2 (4 pts), loops 2 (3 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":"crates/planner/src/optimizer/driver/exploration.rs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"df961733de5660391480faa1c884b8d59022b9c36b22fa2d1ecd8d6727518712"}},{"ruleId":"D2","level":"warning","message":{"text":"generate-llms-full.build (cognitive 24): generate-llms-full.build has cognitive complexity 24 (threshold 15). Drivers by points: if/else 3 (11 pts), loops 4 (9 pts), ternaries 1 (4 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":"docs/scripts/generate-llms-full.mjs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"7746b886d6c4d4e3b9d02c8e749668272eba032debc4e0aab5e10f92fec2caee"}},{"ruleId":"D2","level":"warning","message":{"text":"VectorKey::parse_from_slice (cognitive 23): VectorKey::parse_from_slice has cognitive complexity 23 (threshold 15). Drivers by points: if/else 8 (13 pts), match/switch 5 (10 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":"crates/db/src/encoding/v2/keys/indexes/vector/mod.rs"},"region":{"startLine":232}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb129044eba193a52db39861bfef6f620c25b9fbdc210387dd36ac188675bf69"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle_testing::contracts::run_building_drop_stage_matrix (cognitive 23): db::index_lifecycle_testing::contracts::run_building_drop_stage_matrix has cognitive complexity 23 (threshold 15). Drivers by points: loops 4 (11 pts), if/else 2 (6 pts), match/switch 2 (6 pts) (nesting depth added 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/index_lifecycle_testing/contracts.rs"},"region":{"startLine":3408}}}],"partialFingerprints":{"codehealthFindingId/v1":"536f8e0ed41f82082c7d3a365a0955d710e1fbb50a0e07a924ad004512568ef1"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::text::statistics::prepare_transition (cognitive 23): db::index_lifecycle::text::statistics::prepare_transition has cognitive complexity 23 (threshold 15). Drivers by points: if/else 7 (10 pts), loops 4 (6 pts), match/switch 4 (6 pts), boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/index_lifecycle/text/statistics.rs"},"region":{"startLine":613}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fcc6eac61c478453acecfbf59a407d461f481d87614e407a42e2970252d5b46"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::secondary::delete_delta_and_applied_rows (cognitive 23): db::index_lifecycle::secondary::delete_delta_and_applied_rows has cognitive complexity 23 (threshold 15). Drivers by points: if/else 5 (14 pts), match/switch 1 (5 pts), loops 2 (3 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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":2009}}}],"partialFingerprints":{"codehealthFindingId/v1":"c88a93e6f443074c54a1b99b08b9bef3c661ca3fcc88a505ec547fd1708f9334"}},{"ruleId":"D2","level":"warning","message":{"text":"db::migrations::rewrite_legacy_edge_pair_batch (cognitive 23): db::migrations::rewrite_legacy_edge_pair_batch has cognitive complexity 23 (threshold 15). Drivers by points: if/else 8 (16 pts), loops 5 (7 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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":3469}}}],"partialFingerprints":{"codehealthFindingId/v1":"478292d1ea482f33a500db38beaf815cc3ef378b67b77a3fab82124f5b6fd14d"}},{"ruleId":"D2","level":"warning","message":{"text":"Runner::validate_invariants (cognitive 23): Runner::validate_invariants has cognitive complexity 23 (threshold 15). Drivers by points: if/else 8 (15 pts), boolean chains 3, loops 3, 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":"crates/db-testkit/src/lifecycle_workload.rs"},"region":{"startLine":905}}}],"partialFingerprints":{"codehealthFindingId/v1":"46c5d6cb6b09c60da98c3a07a4a6deed3d2a341479188b7568e0a58cf8839a0e"}},{"ruleId":"D2","level":"warning","message":{"text":"helix_planner::exec::validation::contracts::validate_step_contracts (cognitive 23): helix_planner::exec::validation::contracts::validate_step_contracts has cognitive complexity 23 (threshold 15). Drivers by points: if/else 6 (14 pts), boolean chains 3, loops 2 (3 pts), match/switch 1 (3 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":"crates/planner/src/exec/validation/contracts.rs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"38dace0dc4df4d7c823d0f489fe11c04191da604a04819c70e260fe832db6994"}},{"ruleId":"D2","level":"warning","message":{"text":"PropertyValue.from_value (cognitive 23): PropertyValue.from_value has cognitive complexity 23 (threshold 15). Drivers by points: if/else 18 (21 pts), boolean chains 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":"sdks/python/src/helixdb/dsl.py"},"region":{"startLine":375}}}],"partialFingerprints":{"codehealthFindingId/v1":"2819546d95718fc159cc9c3fc3b8aa85056b841d3c11ae43c32e165c685248ed"}},{"ruleId":"D2","level":"warning","message":{"text":"dsl._normalize_typed_query_value (cognitive 23): dsl._normalize_typed_query_value has cognitive complexity 23 (threshold 15). Drivers by points: if/else 16 (22 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":"sdks/python/src/helixdb/dsl.py"},"region":{"startLine":3837}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d861dc638bdd2fafeba6d8c6217bde00fa83b125abdda35eb03a827b8b8ea11"}},{"ruleId":"D2","level":"warning","message":{"text":"PropertyValue.from (cognitive 23): PropertyValue.from has cognitive complexity 23 (threshold 15). Drivers by points: if/else 17 (20 pts), ternaries 1 (2 pts), boolean chains 1 (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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sdks/typescript/src/dsl.ts"},"region":{"startLine":405}}}],"partialFingerprints":{"codehealthFindingId/v1":"c68ce350b24665f564497bbc1f9bda48decd62d3fcc4ca24b6cb4202c93b47d0"}},{"ruleId":"D2","level":"warning","message":{"text":"ExecutionContext::search_vector_index_with_candidates (cognitive 22): ExecutionContext::search_vector_index_with_candidates has cognitive complexity 22 (threshold 15). Drivers by points: if/else 11, match/switch 8 (11 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":"crates/db/src/execution/interpreter/access/search/storage.rs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"10f5dad88d86ca0bbd13972e9127300c9b867d7728d3e6adea82ee450c829218"}},{"ruleId":"D2","level":"warning","message":{"text":"db::migrations::startup::bootstrap::preflight_writer_bootstrap (cognitive 22): db::migrations::startup::bootstrap::preflight_writer_bootstrap has cognitive complexity 22 (threshold 15). Drivers by points: if/else 9 (14 pts), boolean chains 6, loops 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":"crates/db/src/migrations/startup/bootstrap.rs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3d3081b3aebb05a875d70e9aebc04500b43aa6e220d43015689c6b01d6558c4"}},{"ruleId":"D2","level":"warning","message":{"text":"db::search::vector::select_diverse (cognitive 22): db::search::vector::select_diverse has cognitive complexity 22 (threshold 15). Drivers by points: if/else 7 (16 pts), loops 3 (5 pts), 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":"crates/db/src/search/vector/mod.rs"},"region":{"startLine":802}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0090fc5ba252f01ffc84848a3aaad9b51d5addd849e373fd6fbb714ef5d698e"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::text::active_batch::prepare_active_text_epoch (cognitive 22): db::index_lifecycle::text::active_batch::prepare_active_text_epoch has cognitive complexity 22 (threshold 15). Drivers by points: if/else 6 (15 pts), loops 3 (4 pts), match/switch 1 (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":"crates/db/src/index_lifecycle/text/active_batch.rs"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"d68c370c14b4b3dccd8270cf118a8692e6e84ba41ead831c3473e1915e57434b"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::vector::driver::delete_physical_namespace (cognitive 22): db::index_lifecycle::vector::driver::delete_physical_namespace has cognitive complexity 22 (threshold 15). Drivers by points: if/else 10 (15 pts), boolean chains 5, loops 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":"crates/db/src/index_lifecycle/vector/driver.rs"},"region":{"startLine":1089}}}],"partialFingerprints":{"codehealthFindingId/v1":"e41fd7ca9dfa9ac9842d0512df026859198a2e9a74efd53cd0ef857761826d2f"}},{"ruleId":"D2","level":"warning","message":{"text":"GraphModel::apply_inner (cognitive 22): GraphModel::apply_inner has cognitive complexity 22 (threshold 15). Drivers by points: if/else 5 (12 pts), match/switch 3 (6 pts), boolean chains 2, loops 1 (2 pts) (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":"crates/db-testkit/src/model.rs"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1007cae8a357b8810835e1d09a310cabc376ebb49ccc6b2f443124718fae78a"}},{"ruleId":"D2","level":"warning","message":{"text":"ReplayTrace::validate (cognitive 22): ReplayTrace::validate has cognitive complexity 22 (threshold 15). Drivers by points: if/else 8 (18 pts), match/switch 1 (2 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":"crates/db-testkit/src/trace.rs"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"602b070a043212a1e00c8f849916fbe91e4cc29a6c697288608b1aa4a3f95788"}},{"ruleId":"D2","level":"warning","message":{"text":"LevelGraph::local_move_observed (cognitive 22): LevelGraph::local_move_observed has cognitive complexity 22 (threshold 15). Drivers by points: if/else 4 (10 pts), loops 5 (10 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":"crates/graph-algorithms/src/algorithms/louvain.rs"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"646a9ff38a60c915460b9d407d4efd0d31919fc2615c1c185faf6d7184640667"}},{"ruleId":"D2","level":"warning","message":{"text":"validate-cargo-target-references.validate_references (cognitive 22): validate-cargo-target-references.validate_references has cognitive complexity 22 (threshold 15). Drivers by points: if/else 4 (16 pts), loops 3 (6 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":"scripts/validate-cargo-target-references.py"},"region":{"startLine":303}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4a810e4aade878e58e30c2c1a89c29a78e1bc3602010f9d77713ff2c9e8ed71"}},{"ruleId":"D2","level":"warning","message":{"text":"HelixDB::run_configured_vector_memory_warm (cognitive 21): HelixDB::run_configured_vector_memory_warm has cognitive complexity 21 (threshold 15). Drivers by points: if/else 3 (10 pts), match/switch 5 (8 pts), loops 1 (2 pts), boolean chains 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":"crates/db/src/lib.rs"},"region":{"startLine":2690}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3b1ee47c3ca518081406d36e45b6d834c1f69ed3b604a9c943835f91054b5de"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::repository::scoped_cursor_is_valid (cognitive 21): db::index_lifecycle::repository::scoped_cursor_is_valid has cognitive complexity 21 (threshold 15). Drivers by points: boolean chains 16, match/switch 2 (3 pts), if/else 2 (nesting depth added 1). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/index_lifecycle/repository.rs"},"region":{"startLine":452}}}],"partialFingerprints":{"codehealthFindingId/v1":"65c4fe82fd51ed250251ea61c867d1e7e154cd3f711e591c7b6ed9cd09002aaf"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::text::compaction::select_artifacts (cognitive 21): db::index_lifecycle::text::compaction::select_artifacts has cognitive complexity 21 (threshold 15). Drivers by points: if/else 10 (16 pts), boolean chains 3, loops 1, 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":"crates/db/src/index_lifecycle/text/compaction.rs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e3732521de0ebe686758d97895ce40175220f2b86e40c237bd9d9f3ce25c633"}},{"ruleId":"D2","level":"warning","message":{"text":"db::migration_parity::record_consistency_findings (cognitive 21): db::migration_parity::record_consistency_findings has cognitive complexity 21 (threshold 15). Drivers by points: if/else 6 (13 pts), loops 3 (4 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":"crates/db/src/migration_parity.rs"},"region":{"startLine":1522}}}],"partialFingerprints":{"codehealthFindingId/v1":"d905a8b428712ab10f378dce04845d8df5807b8c9661c6cff08eb24dae71632a"}},{"ruleId":"D2","level":"warning","message":{"text":"NormalizedPlannerCase::complete (cognitive 21): NormalizedPlannerCase::complete has cognitive complexity 21 (threshold 15). Drivers by points: loops 6 (21 pts) (nesting depth added 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db-testkit/src/planner_domain.rs"},"region":{"startLine":400}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1f5d194068c7dae51b6c9fe68c90bcc046480d6693796365d10a35623cc6a59"}},{"ruleId":"D2","level":"warning","message":{"text":"helix_metrics::cli::spool::cleanup_obsolete (cognitive 21): helix_metrics::cli::spool::cleanup_obsolete has cognitive complexity 21 (threshold 15). Drivers by points: if/else 5 (13 pts), loops 2 (5 pts), boolean chains 3 (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":"crates/metrics/src/cli/spool.rs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fb0a48eb2e55fda9d463379d93198d2dc14d1209cad0c090840b8ea40822d05"}},{"ruleId":"D2","level":"warning","message":{"text":"validate-cargo-target-references.referenced_test_filters (cognitive 21): validate-cargo-target-references.referenced_test_filters has cognitive complexity 21 (threshold 15). Drivers by points: if/else 4 (12 pts), loops 3 (7 pts), boolean chains 2 (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":"scripts/validate-cargo-target-references.py"},"region":{"startLine":383}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f11ad7ccff8f5e3edbe19935b3b8ed24a3ec930c7f21bc3994905aa66405f18"}},{"ruleId":"D2","level":"warning","message":{"text":"dsl.convertParamValue (cognitive 21): dsl.convertParamValue has cognitive complexity 21 (threshold 15). Drivers by points: if/else 6 (12 pts), ternaries 2 (5 pts), loops 1 (2 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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":2902}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bf95cf09d0e29b15981f84def2ac9944af401334ef80ccabb71b7deb1bc366f"}},{"ruleId":"D2","level":"warning","message":{"text":"helix_cli::commands::cloud::service_credential::run (cognitive 20): helix_cli::commands::cloud::service_credential::run has cognitive complexity 20 (threshold 15). Drivers by points: if/else 6 (12 pts), match/switch 2 (4 pts), boolean chains 2, loops 1 (2 pts) (nesting depth added 9). 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":"crates/cli/src/commands/cloud/service_credential.rs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"a07c2f64f8af2cd514b540dad10da8d6f0688467e20506980fb220264938f5d4"}},{"ruleId":"D2","level":"warning","message":{"text":"HelixDB::run_configured_startup_cache_warm (cognitive 20): HelixDB::run_configured_startup_cache_warm has cognitive complexity 20 (threshold 15). Drivers by points: if/else 9 (18 pts), match/switch 2 (nesting depth added 9). 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":"crates/db/src/lib.rs"},"region":{"startLine":2790}}}],"partialFingerprints":{"codehealthFindingId/v1":"911b5ac59f7d7a9cb9cf4021eaa163405efc749bb7f2adde113555adafe557a9"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::secondary::apply_active_change_from_overlay (cognitive 20): db::index_lifecycle::secondary::apply_active_change_from_overlay has cognitive complexity 20 (threshold 15). Drivers by points: if/else 8 (20 pts) (nesting depth added 12). 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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":2212}}}],"partialFingerprints":{"codehealthFindingId/v1":"85b95cb6cbfecdd4d880dc75b91b87c7cd8a51123abe6cc6233c10a366933d6e"}},{"ruleId":"D2","level":"warning","message":{"text":"db::migrations::wait_for_index_operation (cognitive 20): db::migrations::wait_for_index_operation has cognitive complexity 20 (threshold 15). Drivers by points: if/else 5 (12 pts), match/switch 2 (6 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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":2498}}}],"partialFingerprints":{"codehealthFindingId/v1":"bffa261274dc476754da273d97bd03d05df6a0339ef4732a671096bb9e4f065d"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::lifecycle::create_index_operation_in_transaction_with_physical (cognitive 20): db::index_lifecycle::lifecycle::create_index_operation_in_transaction_with_physical has cognitive complexity 20 (threshold 15). Drivers by points: if/else 6 (11 pts), match/switch 4 (9 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":"crates/db/src/index_lifecycle/lifecycle.rs"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0aed3330d2f8751d429dcd050359946076bf0651433ed13fb8ff056d15f06ed"}},{"ruleId":"D2","level":"warning","message":{"text":"helix_planner::exec::validation::order::execution_order (cognitive 20): helix_planner::exec::validation::order::execution_order has cognitive complexity 20 (threshold 15). Drivers by points: loops 6 (10 pts), if/else 3 (9 pts), boolean chains 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":"crates/planner/src/exec/validation/order.rs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcc2d62b33bdaf9ac1a205465b13725bd9b8256c612f9d4886a8647e70b7f067"}},{"ruleId":"D2","level":"warning","message":{"text":"PropertyIndexKey::encoded_len (cognitive 19): PropertyIndexKey::encoded_len has cognitive complexity 19 (threshold 15). Drivers by points: if/else 6 (12 pts), match/switch 4 (7 pts) (nesting depth added 9). 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":"crates/db/src/encoding/v2/keys/indexes/property.rs"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"2aacd736b423b9a698c1cc9331cfbfcd22274c0c50ec2b8b7b497a5ab423c035"}},{"ruleId":"D2","level":"warning","message":{"text":"db::search::edge_range_scan_bounds_with_direction (cognitive 19): db::search::edge_range_scan_bounds_with_direction has cognitive complexity 19 (threshold 15). Drivers by points: if/else 6 (10 pts), match/switch 7 (9 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":"crates/db/src/search/mod.rs"},"region":{"startLine":2548}}}],"partialFingerprints":{"codehealthFindingId/v1":"6eb7220ab7545c5e2f00a842bd936a76f6c50316c03dbb4f2bc5e0d6c1918a7e"}},{"ruleId":"D2","level":"warning","message":{"text":"db::search::text::hot_directory::write_hotcache (cognitive 19): db::search::text::hot_directory::write_hotcache has cognitive complexity 19 (threshold 15). Drivers by points: if/else 3 (8 pts), loops 5 (8 pts), match/switch 1 (2 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":"crates/db/src/search/text/hot_directory.rs"},"region":{"startLine":436}}}],"partialFingerprints":{"codehealthFindingId/v1":"892c5afb0587dd8dabd0f791108c4bb7ffc44f152ff04f715182d28d3f6780b9"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::repository::require_reader_bootstrap_or_legacy (cognitive 19): db::index_lifecycle::repository::require_reader_bootstrap_or_legacy has cognitive complexity 19 (threshold 15). Drivers by points: if/else 8 (10 pts), boolean chains 6, match/switch 1 (2 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":"crates/db/src/index_lifecycle/repository.rs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd5937f41a3ee21a82610a3649acfff26fcfaad79c1dd7b24252466e312bef07"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::worker::schedule_operation_task (cognitive 19): db::index_lifecycle::worker::schedule_operation_task has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10 (16 pts), match/switch 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":"crates/db/src/index_lifecycle/worker.rs"},"region":{"startLine":815}}}],"partialFingerprints":{"codehealthFindingId/v1":"d68c9c3d87ddb01952218088ba0cdb47cf166d6bc2fb6f187987b15a21b4e16b"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::text::mutation::prepare_text_build_deltas_from (cognitive 19): db::index_lifecycle::text::mutation::prepare_text_build_deltas_from has cognitive complexity 19 (threshold 15). Drivers by points: if/else 6 (10 pts), match/switch 3 (6 pts), loops 2, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/index_lifecycle/text/mutation.rs"},"region":{"startLine":441}}}],"partialFingerprints":{"codehealthFindingId/v1":"e69fce9f8c7f5ef921b40129a9cc1859ca958cf658bb10cb5b220bc13a0be589"}},{"ruleId":"D2","level":"warning","message":{"text":"db::search::text::compaction::build_synthetic_meta_json (cognitive 19): db::search::text::compaction::build_synthetic_meta_json has cognitive complexity 19 (threshold 15). Drivers by points: if/else 6 (14 pts), loops 2 (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":"crates/db/src/search/text/compaction.rs"},"region":{"startLine":644}}}],"partialFingerprints":{"codehealthFindingId/v1":"3429a2952db92a27e84d8a105b0ac25cfc2d7ac31abb4e1b3b7dd5e3f9a4dcd1"}},{"ruleId":"D2","level":"warning","message":{"text":"GraphSelection.__post_init__ (cognitive 19): GraphSelection.__post_init__ has cognitive complexity 19 (threshold 15). Drivers by points: if/else 7 (11 pts), boolean chains 5, loops 2, ternaries 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":"sdks/python/src/helixdb/graph.py"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"08a649a367fd4fbe4e039740f4d5401a4a6d1669491f558b9bafe4ab158adb4d"}},{"ruleId":"D2","level":"warning","message":{"text":"dsl.stringifyEncoded (cognitive 19): dsl.stringifyEncoded has cognitive complexity 19 (threshold 15). Drivers by points: if/else 11 (14 pts), ternaries 4 (5 pts) (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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sdks/typescript/src/dsl.ts"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1107d2f1830d524f692de0c9118bcdcd73abfed3cccd2bdfab3ccba58439062"}},{"ruleId":"D2","level":"warning","message":{"text":"dsl.normalizeTypedQueryValue (cognitive 19): dsl.normalizeTypedQueryValue has cognitive complexity 19 (threshold 15). Drivers by points: if/else 8 (16 pts), boolean chains 2, match/switch 1 (nesting depth added 8). 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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":2966}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6e1ce9f8a82ffbd81179743e253dcf6e30de4a97bfebf38d7b445cf2e835cfa"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexOperationProgress::cursors_are_valid (cognitive 18): IndexOperationProgress::cursors_are_valid has cognitive complexity 18 (threshold 15). Drivers by points: match/switch 8 (16 pts), boolean chains 2 (nesting depth added 8). 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":"crates/db/src/index_lifecycle/operation.rs"},"region":{"startLine":587}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d139f3d7d28dd0f9e9ecc967e9bf6ee2b59b5fb4c3e5c75b9b761aa6b0931af"}},{"ruleId":"D2","level":"warning","message":{"text":"HelixDB::close (cognitive 18): HelixDB::close has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12 (13 pts), match/switch 2 (3 pts), loops 2 (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":"crates/db/src/lib.rs"},"region":{"startLine":2196}}}],"partialFingerprints":{"codehealthFindingId/v1":"65d38831a07ad3fc19feea5fad69bb610952bec159e8f1f661a5c76f5effdbe2"}},{"ruleId":"D2","level":"warning","message":{"text":"VectorIndex::stage_delete_with_metadata (cognitive 18): VectorIndex::stage_delete_with_metadata has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9 (12 pts), loops 5 (6 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":"crates/db/src/search/vector/hnsw/mutation/mod.rs"},"region":{"startLine":1675}}}],"partialFingerprints":{"codehealthFindingId/v1":"a46912a32ade0c8ddb084a6e14105c501693b55c8bacf868d22a3d46a46e15f9"}},{"ruleId":"D2","level":"warning","message":{"text":"VectorIndex::search_layer_greedy (cognitive 18): VectorIndex::search_layer_greedy has cognitive complexity 18 (threshold 15). Drivers by points: if/else 7 (15 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":"crates/db/src/search/vector/hnsw/search.rs"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0e62c5dfb91162d55c0bab97d88b3fff0fc125fd9f3d2dff581a29f9f952934"}},{"ruleId":"D2","level":"warning","message":{"text":"SimHasherRegistry::get (cognitive 18): SimHasherRegistry::get has cognitive complexity 18 (threshold 15). Drivers by points: match/switch 3 (8 pts), if/else 3 (6 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":"crates/db/src/search/vector/simhash/registry.rs"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"76766623ec008920b340e93d8e1fdbf09efa5c313e75471bb95b115c41cc9c12"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle_testing::contracts::run_secondary_vector_public_boundaries (cognitive 18): db::index_lifecycle_testing::contracts::run_secondary_vector_public_boundaries has cognitive complexity 18 (threshold 15). Drivers by points: if/else 3 (9 pts), loops 3 (6 pts), match/switch 1 (3 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":"crates/db/src/index_lifecycle_testing/contracts.rs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"213ee590cf468448f3a8b309192c69fa4f8107564c1da094ef026141398aa3ab"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::worker::process_secondary_once (cognitive 18): db::index_lifecycle::worker::process_secondary_once has cognitive complexity 18 (threshold 15). Drivers by points: if/else 5 (12 pts), loops 2 (3 pts), match/switch 1 (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":"crates/db/src/index_lifecycle/worker.rs"},"region":{"startLine":439}}}],"partialFingerprints":{"codehealthFindingId/v1":"55878e1a46f979f94fc3df711bac0a7c1f206a43196075497adffc19c6e5f3cf"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::vector::driver::adopt_legacy (cognitive 18): db::index_lifecycle::vector::driver::adopt_legacy has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9 (10 pts), match/switch 5 (7 pts), loops 1 (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":"crates/db/src/index_lifecycle/vector/driver.rs"},"region":{"startLine":1682}}}],"partialFingerprints":{"codehealthFindingId/v1":"942d82c76783cc26f5092ffe99ea7483c2da11de7ff445118ab87a8e044eada5"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::vector::driver::validate_mappings_or_finish (cognitive 18): db::index_lifecycle::vector::driver::validate_mappings_or_finish has cognitive complexity 18 (threshold 15). Drivers by points: if/else 8 (14 pts), match/switch 1 (2 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":"crates/db/src/index_lifecycle/vector/driver.rs"},"region":{"startLine":2995}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc222af0e7ed8673c3f6460caf48b1a58e8a3581b257d4851cc2d8eb623670cf"}},{"ruleId":"D2","level":"warning","message":{"text":"db::migrations::indexes::equality_bitmap::rebuild_active_generation (cognitive 18): db::migrations::indexes::equality_bitmap::rebuild_active_generation has cognitive complexity 18 (threshold 15). Drivers by points: if/else 5 (13 pts), loops 3 (5 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":"crates/db/src/migrations/indexes/equality_bitmap.rs"},"region":{"startLine":402}}}],"partialFingerprints":{"codehealthFindingId/v1":"6277e3d0ae3ee8623cc1993f367b668f74b0ed87220d4febb60adfe3b325d8fd"}},{"ruleId":"D2","level":"warning","message":{"text":"ExecPullCapability::of (cognitive 18): ExecPullCapability::of has cognitive complexity 18 (threshold 15). Drivers by points: match/switch 6 (12 pts), if/else 4 (6 pts) (nesting depth added 8). 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":"crates/planner/src/exec/pull/mod.rs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"a64556e14543f68ec529f2ff79f2e27e41aca3149fe0df34309776b0a1d1df44"}},{"ruleId":"D2","level":"warning","message":{"text":"RuleSchedule::compile_applicability (cognitive 18): RuleSchedule::compile_applicability has cognitive complexity 18 (threshold 15). Drivers by points: loops 6 (16 pts), match/switch 1 (2 pts) (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":"crates/planner/src/optimizer/driver/schedule/compile.rs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"af4ce9c8fed2d48c06b7b1559026c3e15f97b9a60f846baa0817e0abc83b361e"}},{"ruleId":"D2","level":"warning","message":{"text":"Predicate.to_json (cognitive 18): Predicate.to_json has cognitive complexity 18 (threshold 15). Drivers by points: if/else 18. 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":"sdks/python/src/helixdb/dsl.py"},"region":{"startLine":931}}}],"partialFingerprints":{"codehealthFindingId/v1":"214b498712157ac14bbc85227f40fb602dcc4c5962d4539995e08589aa7c74b7"}},{"ruleId":"D2","level":"warning","message":{"text":"HelixConfig::validate (cognitive 17): HelixConfig::validate has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9 (12 pts), loops 2, match/switch 1 (2 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":"crates/cli/src/config.rs"},"region":{"startLine":551}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ee6abce20bdde877421f7c0da16461ffb2bd72da0bf036f0d087c77c29c9da4"}},{"ruleId":"D2","level":"warning","message":{"text":"helix_cli::commands::cloud::database::run (cognitive 17): helix_cli::commands::cloud::database::run has cognitive complexity 17 (threshold 15). Drivers by points: match/switch 5 (9 pts), if/else 3 (6 pts), loops 1 (2 pts) (nesting depth added 8). 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":"crates/cli/src/commands/cloud/database.rs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc86653d86e1c3e9e7d3ed818b619d0dee3b922897902804b0fa6c2673681e39"}},{"ruleId":"D2","level":"warning","message":{"text":"MutationRouteCatalog::targets_for (cognitive 17): MutationRouteCatalog::targets_for has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (12 pts), match/switch 2 (3 pts), loops 1 (2 pts) (nesting depth added 8). 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":"crates/db/src/index_lifecycle/mutation_catalog.rs"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8e8c236bb2e79653d6042588edfc49398d94730f3ef0bd6d51f24db0feae9d9"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexOperationProgress::try_map_cursors (cognitive 17): IndexOperationProgress::try_map_cursors has cognitive complexity 17 (threshold 15). Drivers by points: match/switch 8 (16 pts), if/else 1 (nesting depth added 8). Of this number, 16 points are the body\u0027s own statements and 1 belongs to one function item inside it that branches. 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":"crates/db/src/index_lifecycle/operation.rs"},"region":{"startLine":667}}}],"partialFingerprints":{"codehealthFindingId/v1":"75fd31064f8a97a02e910caea8ef6dbd77b302a593c68d45cd3551604c50cb8c"}},{"ruleId":"D2","level":"warning","message":{"text":"EdgeMergeOperator::merge_batch (cognitive 17): EdgeMergeOperator::merge_batch has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (15 pts), loops 1, match/switch 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":"crates/db/src/needed_in_future/merge_operator.rs"},"region":{"startLine":229}}}],"partialFingerprints":{"codehealthFindingId/v1":"9cb324336cd2eefc50c984e02f78fec564bd45f7fea51be27fa5341ec986c6a5"}},{"ruleId":"D2","level":"warning","message":{"text":"FtsCache::cleanup_disk (cognitive 17): FtsCache::cleanup_disk has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (12 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":"crates/db/src/search/text/cache.rs"},"region":{"startLine":913}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3b6cfdd0c758f0a0ab3e547a59282b3ee97776c54b88625419ef6b416d5080b"}},{"ruleId":"D2","level":"warning","message":{"text":"VectorIndex::insert_hnsw (cognitive 17): VectorIndex::insert_hnsw has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (10 pts), loops 4 (7 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":"crates/db/src/search/vector/hnsw/mutation/mod.rs"},"region":{"startLine":819}}}],"partialFingerprints":{"codehealthFindingId/v1":"a789c4dc0479917ae7b81f4f8aed047fe731579e195ec0045874a81e8e29898d"}},{"ruleId":"D2","level":"warning","message":{"text":"VectorIndex::add_bidirectional_link (cognitive 17): VectorIndex::add_bidirectional_link has cognitive complexity 17 (threshold 15). Drivers by points: if/else 5 (11 pts), loops 2 (4 pts), 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":"crates/db/src/search/vector/hnsw/mutation/mod.rs"},"region":{"startLine":1528}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed302b04fd88f6fddc462a89e8d68c2f56226f85ac8f974f1650f573efb14497"}},{"ruleId":"D2","level":"warning","message":{"text":"db::search::range_scan_bounds_with_direction (cognitive 17): db::search::range_scan_bounds_with_direction has cognitive complexity 17 (threshold 15). Drivers by points: match/switch 7 (9 pts), if/else 4 (8 pts) (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. This shape REPEATS in the file: one other method here (db::search::global_edge_range_scan_bounds_with_direction) 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":"crates/db/src/search/mod.rs"},"region":{"startLine":1070}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bb7dce3e2f424c6401137088f36fc09adc8fcafcaecc5f610472e10bef5de5b"}},{"ruleId":"D2","level":"warning","message":{"text":"db::search::global_edge_range_scan_bounds_with_direction (cognitive 17): db::search::global_edge_range_scan_bounds_with_direction has cognitive complexity 17 (threshold 15). Drivers by points: match/switch 7 (9 pts), if/else 4 (8 pts) (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. This shape REPEATS in the file: one other method here (db::search::range_scan_bounds_with_direction) 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":"crates/db/src/search/mod.rs"},"region":{"startLine":2418}}}],"partialFingerprints":{"codehealthFindingId/v1":"78ca424fef481605263785cc1342c2ece9656b471dce40678a2f07a4b6ce051a"}},{"ruleId":"D2","level":"warning","message":{"text":"db::migration_parity::scan_vector_non_metadata_digests (cognitive 17): db::migration_parity::scan_vector_non_metadata_digests has cognitive complexity 17 (threshold 15). Drivers by points: if/else 4 (10 pts), match/switch 1 (4 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":"crates/db/src/migration_parity.rs"},"region":{"startLine":804}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b51c23e9de5cee9905456edf40ffa71f4d84db6968c35af3c73c05baf76b969"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::outbox::execute_claimed_step_with_evidence (cognitive 17): db::index_lifecycle::outbox::execute_claimed_step_with_evidence has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8 (10 pts), match/switch 5 (6 pts), boolean chains 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":"crates/db/src/index_lifecycle/outbox.rs"},"region":{"startLine":1019}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3c95ab5b73455889f7d9102f86ac0d552a6c431630b69c0ec7283c2a7ed2c02"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::vector::driver::validate_adopted_directory (cognitive 17): db::index_lifecycle::vector::driver::validate_adopted_directory has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12 (14 pts), match/switch 1 (2 pts), boolean chains 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":"crates/db/src/index_lifecycle/vector/driver.rs"},"region":{"startLine":1898}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b19afd1a9c259fc2303204e1b25e41358bf48132b2f1ed449378f2cf7ab69eb"}},{"ruleId":"D2","level":"warning","message":{"text":"db::search::vector::cache::reader_refresh::run_reader_refreshes (cognitive 17): db::search::vector::cache::reader_refresh::run_reader_refreshes has cognitive complexity 17 (threshold 15). Drivers by points: if/else 3 (8 pts), match/switch 2 (5 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":"crates/db/src/search/vector/cache/reader_refresh.rs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e2a92aa7cc957c0bdc7b2c77499cc9ec732c800c3640b2e2dbfef53de1f32cf"}},{"ruleId":"D2","level":"warning","message":{"text":"Memo::from_groups (cognitive 17): Memo::from_groups has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (13 pts), loops 3 (4 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":"crates/planner/src/memo/store/serialization.rs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"efe3de0b3cff243a79c121f14391eb4261bc72b952abce59f34d6c62dbaaf450"}},{"ruleId":"D2","level":"warning","message":{"text":"helix_planner::rules::physical_contracts::support::pipeline::stream_pipeline_op_contract (cognitive 17): helix_planner::rules::physical_contracts::support::pipeline::stream_pipeline_op_contract has cognitive complexity 17 (threshold 15). Drivers by points: match/switch 10 (17 pts) (nesting depth added 7). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/planner/src/rules/physical_contracts/support/pipeline.rs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"87cb5fa3a87afdd1e3520038ebe9a0d3a3c7a272b5ab4003e0e5c95d216e38b3"}},{"ruleId":"D2","level":"warning","message":{"text":"helix_planner::analysis::prune::prune_statically_impossible_branches_inner (cognitive 17): helix_planner::analysis::prune::prune_statically_impossible_branches_inner has cognitive complexity 17 (threshold 15). Drivers by points: match/switch 4 (9 pts), if/else 3 (4 pts), loops 2 (4 pts) (nesting depth added 8). 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":"crates/planner/src/analysis/prune.rs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5a92b1b191893d6e3bee0da2610f8eaacc60a0bc664891fc5ae26e1504bbde5"}},{"ruleId":"D2","level":"warning","message":{"text":"dsl.parse_index_operation_status (cognitive 17): dsl.parse_index_operation_status has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12 (14 pts), boolean chains 3 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sdks/python/src/helixdb/dsl.py"},"region":{"startLine":1673}}}],"partialFingerprints":{"codehealthFindingId/v1":"87fed85aac49edaf9fa0e9cc7db3ff31396d2fb51a39370fdd9897835ddeecc4"}},{"ruleId":"D2","level":"warning","message":{"text":"QueryExecutionRequest.execute (cognitive 17): QueryExecutionRequest.execute has cognitive complexity 17 (threshold 15). Drivers by points: if/else 5 (6 pts), error handling 4 (5 pts), ternaries 2 (4 pts), boolean chains 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":"sdks/typescript/src/index.ts"},"region":{"startLine":394}}}],"partialFingerprints":{"codehealthFindingId/v1":"a133b40767165c2f2fe4255a3374ad6cce044751b67c007b9f70b09fa5216af4"}},{"ruleId":"D2","level":"warning","message":{"text":"helix_cli::commands::status::run (cognitive 16): helix_cli::commands::status::run has cognitive complexity 16 (threshold 15). Drivers by points: match/switch 5 (11 pts), loops 3, if/else 1 (2 pts) (nesting depth added 7). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/cli/src/commands/status.rs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6ef0908b9479cdf5bd4f00b5f3c3b617aa1a75a3757c977ee6da3708a97bc3b"}},{"ruleId":"D2","level":"warning","message":{"text":"EdgeRangeIndexKey::parse_from_slice (cognitive 16): EdgeRangeIndexKey::parse_from_slice has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6 (12 pts), loops 1 (2 pts), match/switch 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. This shape REPEATS in the file: one other method here (GlobalEdgeRangeIndexKey::parse_from_slice) 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":"crates/db/src/encoding/v2/keys/indexes/range/edge.rs"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a834f29acbdde459a93769515c7a71d4dba27bc1f714b59b6e19ac94ea5bfc4"}},{"ruleId":"D2","level":"warning","message":{"text":"GlobalEdgeRangeIndexKey::parse_from_slice (cognitive 16): GlobalEdgeRangeIndexKey::parse_from_slice has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6 (12 pts), loops 1 (2 pts), match/switch 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. This shape REPEATS in the file: one other method here (EdgeRangeIndexKey::parse_from_slice) 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":"crates/db/src/encoding/v2/keys/indexes/range/edge.rs"},"region":{"startLine":341}}}],"partialFingerprints":{"codehealthFindingId/v1":"7116646e5df781ae23ea331d2d11b2e0d22f6355afd9995a5056ff1fc09ec380"}},{"ruleId":"D2","level":"warning","message":{"text":"MutationIndexCatalog::load (cognitive 16): MutationIndexCatalog::load has cognitive complexity 16 (threshold 15). Drivers by points: match/switch 4 (9 pts), if/else 3 (6 pts), loops 1 (nesting depth added 8). 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":"crates/db/src/index_lifecycle/mutation_catalog.rs"},"region":{"startLine":310}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d40cf4da18c6d5adfa6ba42dd20d1e1948aa317f917a4aa732997756521adb0"}},{"ruleId":"D2","level":"warning","message":{"text":"VectorIndex::insert_with_mutation_cache (cognitive 16): VectorIndex::insert_with_mutation_cache has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8 (9 pts), loops 2 (3 pts), match/switch 2 (3 pts), boolean chains 1 (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":"crates/db/src/search/vector/hnsw/mutation/mod.rs"},"region":{"startLine":674}}}],"partialFingerprints":{"codehealthFindingId/v1":"5849b66fcc6b92a4bdb31ac54c7db8c7b63c0e7728d8571f807da5706e5cd13c"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::text::serving::load_active_manifest_roots (cognitive 16): db::index_lifecycle::text::serving::load_active_manifest_roots has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (12 pts), boolean chains 3, 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":"crates/db/src/index_lifecycle/text/serving.rs"},"region":{"startLine":234}}}],"partialFingerprints":{"codehealthFindingId/v1":"f88363a91107b06018840fc1cae4478f9166b460be54c768ec05757839e52713"}},{"ruleId":"D2","level":"warning","message":{"text":"db::encoding::v2::values::lifecycle::operation_record::put_operation_progress (cognitive 16): db::encoding::v2::values::lifecycle::operation_record::put_operation_progress has cognitive complexity 16 (threshold 15). Drivers by points: match/switch 7 (16 pts) (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":"crates/db/src/encoding/v2/values/lifecycle/operation_record.rs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ab7f6e0a34a21f7e190bf047993c7af9c934e6936ee1e50136bd36ab081bdb0"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::secondary::step_cleanup (cognitive 16): db::index_lifecycle::secondary::step_cleanup has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8 (11 pts), match/switch 3 (5 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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":1776}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0ed478501111e2bf197d946a8d591a6810493819973b0fd18400dbdbbcedb05"}},{"ruleId":"D2","level":"warning","message":{"text":"db::index_lifecycle::secondary::lookup_active_equality_generations_with_compatibility (cognitive 16): db::index_lifecycle::secondary::lookup_active_equality_generations_with_compatibility has cognitive complexity 16 (threshold 15). Drivers by points: loops 5 (9 pts), if/else 6 (7 pts) (nesting depth added 5). 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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":3036}}}],"partialFingerprints":{"codehealthFindingId/v1":"2414ba7602660dba1733b32a53258fcda2d01dbb7d4b8007111909ce9437227f"}},{"ruleId":"D2","level":"warning","message":{"text":"Graph::compose (cognitive 16): Graph::compose has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (9 pts), match/switch 2 (4 pts), loops 2, 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":"crates/graph-algorithms/src/transform.rs"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d420d60e9ca6c892b995e94e83ec3a1bfc5ab4875c0817a9519430fb1a8daa5"}},{"ruleId":"D2","level":"warning","message":{"text":"helix_planner::rules::access::filter::atoms::collect::access_filter_index_atom (cognitive 16): helix_planner::rules::access::filter::atoms::collect::access_filter_index_atom has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (11 pts), match/switch 3 (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":"crates/planner/src/rules/access/filter/atoms/collect.rs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"43aa461ad909fd5eada34e4dd24b57ed570896ede314b637a674b58660edfdaf"}},{"ruleId":"D2","level":"warning","message":{"text":"helix_planner::rules::stream::window::compose::compose_static_stream_windows (cognitive 16): helix_planner::rules::stream::window::compose::compose_static_stream_windows has cognitive complexity 16 (threshold 15). Drivers by points: match/switch 3 (9 pts), if/else 4 (6 pts), loops 1 (nesting depth added 8). 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":"crates/planner/src/rules/stream/window/compose.rs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"47edf24c3cc3e1c834a9d0b2f01b70cee14b136e50ded0cc76e37502c8518540"}},{"ruleId":"D2","level":"warning","message":{"text":"Catalog.add_metadata (cognitive 16): Catalog.add_metadata has cognitive complexity 16 (threshold 15). Drivers by points: if/else 3 (9 pts), error handling 1 (4 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":"scripts/validate-cargo-target-references.py"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"22f62dccd0af5a13b48d616ee76a772f64e7b730f8a363a558e808d28c0a481e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: migrations/mod.rs: FileTooLong \u2014 5838 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 5338 over it, 11.68\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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3e352f59e333540b085465eabddd5e82200bd3cc2386d6b8b5637afcd53e78a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ExecutionContext: TooManyMethods \u2014 258 methods, declared across 63 files: interpreter/count.rs (18), access/rows.rs (14), access/indexes.rs (11), mutation/tx.rs (10), \u002B59 more file(s). The bar is 30 methods; this is 228 over it, 8.60\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":"crates/db/src/execution/interpreter/runtime_context.rs"},"region":{"startLine":270}}}],"partialFingerprints":{"codehealthFindingId/v1":"50621a391d95436714ba3f224ce3330c8048fc308779cb405825578d21fe5d48"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: index_lifecycle_testing/contracts.rs: FileTooLong \u2014 3790 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 80 free functions. The bar is 500 significant lines; this is 3290 over it, 7.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":"crates/db/src/index_lifecycle_testing/contracts.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d9c4ee89735878165bc00b717cad029d647b6a24f6daacac78c23773820afb9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: interpreter/count.rs: FileTooLong \u2014 3554 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 3054 over it, 7.11\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/execution/interpreter/count.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4f815b2d732d8fc1147e821e55fc75e4d30f449a52b3d667afb6d78ed702468"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: helixdb/dsl.py: FileTooLong \u2014 3250 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 2750 over it, 6.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":"sdks/python/src/helixdb/dsl.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8abd19992bfb4b27c19b13b4f2cd556e779e79b1d95299a14d25d0993eaeacd1"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: VectorIndex.search_layer0_with_simhash: MethodTooLong \u2014 search_layer0_with_simhash runs 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) in one body. The bar is 100 significant lines; this is 516 over it, 6.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":"crates/db/src/search/vector/hnsw/search.rs"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"e92e654accd5ca2a0ae3ff0b6e1af431dd7d82d32b8c54e5df23aaf27b9eaab8"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: vector/driver.rs: FileTooLong \u2014 2844 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 43 free functions. The bar is 500 significant lines; this is 2344 over it, 5.69\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":"crates/db/src/index_lifecycle/vector/driver.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d326fea7d1a7ea2616c2c3a5e02dd461347351c15625ab8f61b3f6d9de451230"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: index_lifecycle/secondary.rs: FileTooLong \u2014 2779 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 49 free functions. The bar is 500 significant lines; this is 2279 over it, 5.56\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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f821d3df7ba476934e6dd3e1ee085ec6711c2b955460f0e9c629bcd70c6813f7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: mutation/mod.rs: FileTooLong \u2014 2557 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 2057 over it, 5.11\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/search/vector/hnsw/mutation/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"59a3ea626ab2a11a1a5fbc3894a20cfb39b7857b385c8288a4cbf1d774041cc6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: text/driver.rs: FileTooLong \u2014 2488 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 1988 over it, 4.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":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b246032274a68d0eb38e12c475bc933bfd96e5085f3b375d711bdf10eb94779"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/dsl.ts: FileTooLong \u2014 2413 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 1913 over it, 4.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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5461b2cb8c57a55371f0ada1bea35c22af6e7bffae22d361c06f6ffb4aee66b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: go/dsl.go: FileTooLong \u2014 2261 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 1761 over it, 4.52\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":"sdks/go/dsl.go"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3f30bfebd02eeba49cf5f6d05f66eaf7cbb4ba236502f4a58c4912f1f9d2f43"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 2115 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 1615 over it, 4.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":"crates/db/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b042648732022095f5aa900ff8d43ad087e2f727a63aa8b7753e31a55c04600"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle_testing::contracts::run_secondary_mutation_interleaving: FunctionTooLong \u2014 db::index_lifecycle_testing::contracts::run_secondary_mutation_interleaving runs 416 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 316 over it, 4.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":"crates/db/src/index_lifecycle_testing/contracts.rs"},"region":{"startLine":1510}}}],"partialFingerprints":{"codehealthFindingId/v1":"92c27e26094489f5897473bb20cd7fcbeeb73a81c88d89d0d77deef38eb2b917"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: search/mod.rs: FileTooLong \u2014 2047 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 142 free functions. The bar is 500 significant lines; this is 1547 over it, 4.09\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":"crates/db/src/search/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"386fa05e96b972b1a3c0524f0f24a6f826db55f16ac34c5f7f8ddf0945ec4c65"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Cursor.next: MethodTooLong \u2014 next runs 389 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 289 over it, 3.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":"crates/db/src/execution/interpreter/pull/poll.rs"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"ddb0e7ab5b5f70268fee28da5303f84bd2112f328abda5a991d17a4e566f8dd6"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: VectorIndex: TooManyMethods \u2014 114 methods, declared across 4 files: hnsw/index.rs (59), mutation/mod.rs (40), hnsw/restricted.rs (9), hnsw/search.rs (6). The bar is 30 methods; this is 84 over it, 3.80\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":"crates/db/src/search/vector/hnsw/index.rs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb4aebf109c343055e36b64b0bd6b823cc61ce473820a5da534291e3b09277bf"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::migrations::vector_scale::run_inner: FunctionTooLong \u2014 db::migrations::vector_scale::run_inner runs 371 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 271 over it, 3.71\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/migrations/vector_scale.rs"},"region":{"startLine":274}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f7e322cccf5be5f04df794e57283900d3fc12fbfc6022dbbf932016a310823f"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::secondary::exact::run_production_contracts: FunctionTooLong \u2014 db::index_lifecycle::secondary::exact::run_production_contracts runs 360 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 260 over it, 3.60\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":"crates/db/src/index_lifecycle/secondary/exact.rs"},"region":{"startLine":502}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff173a1b04ddc51cd990bfb1a5d1bf6c5e87ebca283f3109f71d75fcee231f65"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Traversal: TooManyMethods \u2014 106 methods. The bar is 30 methods; this is 76 over it, 3.53\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":"sdks/go/dsl.go"},"region":{"startLine":1634}}}],"partialFingerprints":{"codehealthFindingId/v1":"625fb060634b8090058d8058c466dda22416c3c92007abfb9d94dde5b9215f8f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Traversal: TooManyMethods \u2014 102 methods. The bar is 30 methods; this is 72 over it, 3.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":"crates/ast/src/traversal.rs"},"region":{"startLine":1344}}}],"partialFingerprints":{"codehealthFindingId/v1":"e94d4094bbdfa15bc6095c9082a8af292cc14945f983b0c066bfec7b97cb9515"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Traversal: TooManyMethods \u2014 100 methods. The bar is 30 methods; this is 70 over it, 3.33\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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":1886}}}],"partialFingerprints":{"codehealthFindingId/v1":"15bae4247059f2ca7d0b3dcbdd329e1146b4c3d1bdcd5980d3af4dc51744466d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: storage/mod.rs: FileTooLong \u2014 1653 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 61% of them inside a single declaration: VectorRows (3 blocks, 242-2228). The bar is 500 significant lines; this is 1153 over it, 3.31\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":"crates/db/src/search/vector/storage/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1302f54ca94fbd7f4707ba69f267ee2837a97011d583d1cc5e9bce922c691967"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: HelixDB: TooManyMethods \u2014 98 methods, declared across 3 files: src/lib.rs (82), src/index_lifecycle_testing.rs (9), src/migration_parity.rs (7). 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":"crates/db/src/lib.rs"},"region":{"startLine":779}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ea120d8ef3e967f13ec4b915702062957a234d313c0ec86e04d1db5ab0d1b61"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: text/mod.rs: FileTooLong \u2014 1603 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 74 free functions. The bar is 500 significant lines; this is 1103 over it, 3.21\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":"crates/db/src/search/text/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"19256b55cda173c3ba038a85ac578ce6ae41cb3eb91ad6bb637f47b681ce6417"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: commands/chef.rs: FileTooLong \u2014 1512 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 1012 over it, 3.02\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":"crates/cli/src/commands/chef.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"83af04a9fd78d2f5cb5d8e0991ad24cf541cd81c38cd0b2a1a1d6c76d742ee6e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Step: TooManyMethods \u2014 90 methods. The bar is 30 methods; this is 60 over it, 3.00\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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":1336}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdd8fd939d0fb5bf75d4a770009bca38b0d983a9bc32ad1a392267c00dd9f701"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/traversal.rs: FileTooLong \u2014 1493 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 993 over it, 2.99\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":"crates/ast/src/traversal.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"af8f4dbe1647009884cef6d197214c7d4e78c8d3c7387ebb1f9ee40ee0e0edf2"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::migrations::production_contracts::run_vector_adoption_contract: FunctionTooLong \u2014 db::migrations::production_contracts::run_vector_adoption_contract runs 281 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 181 over it, 2.81\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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":6167}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9b869cf5626a23c69fdf798cfd635604b053be918eabe241b58943a6bb56816"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::text::manifest::select_page: FunctionTooLong \u2014 db::index_lifecycle::text::manifest::select_page runs 277 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 177 over it, 2.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":"crates/db/src/index_lifecycle/text/manifest.rs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d0a98f400615271c0fa56b1493dd79e14997c91c7b561094dbd682ee3f5ee65"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: rules/cardinality.rs: FileTooLong \u2014 1383 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 49 free functions. The bar is 500 significant lines; this is 883 over it, 2.77\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":"crates/planner/src/rules/cardinality.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c857ee82e34dc5327f989ddded232ba9bb811680bbac0c52c063ae73c3797820"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: index_lifecycle/outbox.rs: FileTooLong \u2014 1371 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 32 free functions. The bar is 500 significant lines; this is 871 over it, 2.74\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":"crates/db/src/index_lifecycle/outbox.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cfae1ac26f9ee82b6adb3990e56d6ec466114b7c43edf62a28abab9a5df46018"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/index_lifecycle_testing.rs: FileTooLong \u2014 1360 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 860 over it, 2.72\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":"crates/db/src/index_lifecycle_testing.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e02cd40cbd27e606d3653c30a2f55fb98374091fe401e1ef6eb5a4e9c69dcb26"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::text::driver::scan_source: FunctionTooLong \u2014 db::index_lifecycle::text::driver::scan_source 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":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":2969}}}],"partialFingerprints":{"codehealthFindingId/v1":"abd9937c4f518abb94506e994cfaedb5407188b5c4d9659ecbaa2e453bc3da3f"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::migrations::preflight_legacy_vector_reservations: FunctionTooLong \u2014 db::migrations::preflight_legacy_vector_reservations runs 270 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 170 over it, 2.70\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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":1856}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9340ec3ffdd0aa4f4b9706c46b88a7a846f215cea95f5c1bfeeb86bfa54ee45"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::text::active_batch::prepare_destination: FunctionTooLong \u2014 db::index_lifecycle::text::active_batch::prepare_destination runs 265 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 165 over it, 2.65\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":"crates/db/src/index_lifecycle/text/active_batch.rs"},"region":{"startLine":560}}}],"partialFingerprints":{"codehealthFindingId/v1":"a85935098547f04818d4f9a92ff5d35b8ccff53789a6da9170bede75a51f98df"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::text::driver::scan_partition_documents: FunctionTooLong \u2014 db::index_lifecycle::text::driver::scan_partition_documents runs 263 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 163 over it, 2.63\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":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":2547}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6907c3be59f4d74b3eea04323a2e5858f7ab5bd26d806b8c2e2eb02a4f54c2e"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ExecutionContext.execute_count: MethodTooLong \u2014 execute_count runs 254 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 154 over it, 2.54\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":"crates/db/src/execution/interpreter/count.rs"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bd626c024f30e760a16c2184d08119798b2f1ba942df0a1fb9c954528565b4d"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: VectorRows: ClassTooLong \u2014 1005 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), 25 methods, 3 blocks, lines 242-2228. The bar is 400 significant lines; this is 605 over it, 2.51\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":"crates/db/src/search/vector/storage/mod.rs"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"14177bba1dcbde4bc517d4db7d0346861b978bbf5be21dc81c78f96ea17b4318"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ExecutionContext.count_cursor_leaf: MethodTooLong \u2014 count_cursor_leaf runs 249 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 149 over it, 2.49\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/execution/interpreter/count.rs"},"region":{"startLine":1274}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a3cf71217ac4b976a35248abd0c1c3a37b13bbea41cf20eb59cbfd061e1e777"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: VectorIndex.restricted_filter_aware_search: MethodTooLong \u2014 restricted_filter_aware_search runs 249 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 149 over it, 2.49\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/search/vector/hnsw/restricted.rs"},"region":{"startLine":1106}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbfe59c777b2908070674645277511fcd01c697f3b8ef9992842c397d7b4c3f8"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: db::migrations: TooManyFunctions \u2014 74 free functions. The bar is 30 free functions; this is 44 over it, 2.47\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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"b332ca5a0903ef22e707e0705dc21f6a54a6890fc2ae0abc23cac0dea0721a0f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/migration_parity.rs: FileTooLong \u2014 1222 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 722 over it, 2.44\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":"crates/db/src/migration_parity.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c67fae6571ff0b693744928773d6c90e6dfa79854230134fe81594a0baefacfe"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::migration_parity::scan_v2_state: FunctionTooLong \u2014 db::migration_parity::scan_v2_state runs 243 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 143 over it, 2.43\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":"crates/db/src/migration_parity.rs"},"region":{"startLine":1018}}}],"partialFingerprints":{"codehealthFindingId/v1":"8885fcf3c2f031999b4e523df2a8c483a0c48cd61c2378f0ad4a654ea2d610b8"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: VectorRows.validate_simhash_directory: MethodTooLong \u2014 validate_simhash_directory runs 241 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 141 over it, 2.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":"crates/db/src/search/vector/storage/mod.rs"},"region":{"startLine":1173}}}],"partialFingerprints":{"codehealthFindingId/v1":"1280beaccae6e85fd9a977292a5497ba99f0fd9d88ca0a71df3e59f50d309c31"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: VectorIndex: ClassTooLong \u2014 935 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), 114 methods, 2 blocks, lines 110-1650. The bar is 400 significant lines; this is 535 over it, 2.34\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":"crates/db/src/search/vector/hnsw/index.rs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"717eace6f6d6f4d8a2cbce05bb8accbfb9dc5d3d146bbb7c79a61083441ff1c7"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::text::driver::build_text_catch_up_plan: FunctionTooLong \u2014 db::index_lifecycle::text::driver::build_text_catch_up_plan runs 230 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 130 over it, 2.30\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":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":2242}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c01b5c6c65c9549d6dbaf52d77452b83c53b9db3759b5c5895a36645ef2dc9b"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ExecutionContext.count_cursor_cardinality: MethodTooLong \u2014 count_cursor_cardinality runs 223 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 123 over it, 2.23\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/execution/interpreter/count.rs"},"region":{"startLine":849}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f550893cbe5b0ffa515d360d274829cc272c4189c174fceb84c75560e5b122c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: diagnostics/analyze.rs: FileTooLong \u2014 1113 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 613 over it, 2.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":"crates/planner/src/diagnostics/analyze.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"214d7a1e43ee7a5d997cded5b806aadbcfbc4bdd9d8fb57067994778be7d2694"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::vector::driver::step_build: FunctionTooLong \u2014 db::index_lifecycle::vector::driver::step_build runs 220 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 120 over it, 2.20\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/index_lifecycle/vector/driver.rs"},"region":{"startLine":1402}}}],"partialFingerprints":{"codehealthFindingId/v1":"af4256ec6231e0b42b2ae927219fa658aadb09935de56369136cd666080a95cb"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::text::driver::prepare_compaction_step: FunctionTooLong \u2014 db::index_lifecycle::text::driver::prepare_compaction_step runs 219 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 119 over it, 2.19\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":1177}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc76447e8d734e53be56291574880afdf3898810b2b3eda606dfefc0b526d126"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::vector::driver::step_cleanup: FunctionTooLong \u2014 db::index_lifecycle::vector::driver::step_cleanup runs 218 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 118 over it, 2.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":"crates/db/src/index_lifecycle/vector/driver.rs"},"region":{"startLine":643}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca6c3fb3a54c75a535ca10916d68a68e5fd75b201b8671ca5c701928a65d0b1e"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Source.open: MethodTooLong \u2014 open runs 217 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 117 over it, 2.17\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":"crates/db/src/execution/interpreter/pull/source.rs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"5450c77b14453ed018cdbac24dedd9b86ae4398fe13fa07f22734267098c8ba7"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::secondary::scan_source: FunctionTooLong \u2014 db::index_lifecycle::secondary::scan_source 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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":1004}}}],"partialFingerprints":{"codehealthFindingId/v1":"530b7f80addfdb3932761dfb8e754be74f18a0538183ac58a1e0cfc0a6505a19"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::migrations::production_contracts::run_vector_ineligible_contracts: FunctionTooLong \u2014 db::migrations::production_contracts::run_vector_ineligible_contracts runs 212 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 112 over it, 2.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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":6865}}}],"partialFingerprints":{"codehealthFindingId/v1":"9138c702fb94e9b57c354b0fd851e573badf78b596d233e006f58c3a6c23fb3f"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle_testing::contracts::all_index_validation::run_case: FunctionTooLong \u2014 db::index_lifecycle_testing::contracts::all_index_validation::run_case runs 211 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 111 over it, 2.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":"crates/db/src/index_lifecycle_testing/contracts/all_index_validation.rs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8d2a2560fee66c5d5dea178ec766424a458aaa13feb3a9ca67a79212363a9af"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: migrations/vector_simhash_directory.rs: FileTooLong \u2014 1048 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 548 over it, 2.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":"crates/db/src/migrations/vector_simhash_directory.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2215b0a09b0e02e45c6b39d74e0b7b98d3c25daf9d85655deeb3eedcf4a68011"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/local_runtime.rs: FileTooLong \u2014 1012 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 35 free functions. The bar is 500 significant lines; this is 512 over it, 2.02\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":"crates/cli/src/local_runtime.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"20559c3fe726039bb9530f8697e54d5fefefc63873472f997f635bca57a47c96"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::outbox::execute_claimed_step_with_evidence: FunctionTooLong \u2014 db::index_lifecycle::outbox::execute_claimed_step_with_evidence runs 202 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 102 over it, 2.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":"crates/db/src/index_lifecycle/outbox.rs"},"region":{"startLine":1019}}}],"partialFingerprints":{"codehealthFindingId/v1":"fdebccc78ada568a23ff516ab886ecbaa872f173645133dbd750b888f9c8101c"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::migrations::production_contracts::prepare_vector_recovery: FunctionTooLong \u2014 db::migrations::production_contracts::prepare_vector_recovery runs 202 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 102 over it, 2.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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":8099}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6c6917ba272b4d5d790c57a98dfdf33f0fef7df975f939f1cf524c8c6bda225"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: contracts/all_index_validation.rs: FileTooLong \u2014 1003 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 503 over it, 2.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":"crates/db/src/index_lifecycle_testing/contracts/all_index_validation.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3044a9176c602a5e0a418750a4b0e73621a9b687779ad0ede4b8557f20c85ab"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Graph: TooManyMethods \u2014 60 methods, declared across 8 files: src/model.rs (20), algorithms/traversal.rs (19), src/transform.rs (7), algorithms/centrality.rs (6), \u002B4 more file(s). The bar is 30 methods; this is 30 over it, 2.00\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":"crates/graph-algorithms/src/model.rs"},"region":{"startLine":400}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec2c1eb0d8c02934a70b36809d052c7317a6e63c1daefbc8c7e586b2c114aeae"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: hnsw/restricted.rs: FileTooLong \u2014 1000 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 500 over it, 2.00\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":"crates/db/src/search/vector/hnsw/restricted.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8c9b712dacb2c0bfb9cbb60ea93d6ef7869929a37b443496a427c0d3247f755"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::text::validation::select_page: FunctionTooLong \u2014 db::index_lifecycle::text::validation::select_page runs 200 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 100 over it, 2.00\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":"crates/db/src/index_lifecycle/text/validation.rs"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c88126fc467d5748580dcc0033d39b29896965966c5d229c8766ef96dba89a5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: access/indexes.rs: FileTooLong \u2014 985 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 485 over it, 1.97\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":"crates/db/src/execution/interpreter/access/indexes.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"31583c6b008b0053ed467eed99b15e25005aaf19e677abf894b2e66e8260b40f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: index_lifecycle/model.rs: FileTooLong \u2014 979 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 479 over it, 1.96\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":"crates/db/src/index_lifecycle/model.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1428e03406e86bb0f9ba2e044f728b575a7b513edf3b3d62cd8229313fe210d6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: hnsw/index.rs: FileTooLong \u2014 975 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: VectorIndex (2 blocks, 110-1650). The bar is 500 significant lines; this is 475 over it, 1.95\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":"crates/db/src/search/vector/hnsw/index.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a98b90cabf67fcf495eb3fd1a0de15d1ba0d22a2c32b1f7b61783124936af7fb"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::secondary::catch_up_exact: FunctionTooLong \u2014 db::index_lifecycle::secondary::catch_up_exact runs 195 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 95 over it, 1.95\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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":1408}}}],"partialFingerprints":{"codehealthFindingId/v1":"aefb6066e776c9b640a8f6d91e8bdfee448a59792f387f5527d5a762506d3421"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::text::active_compaction::compact_once: FunctionTooLong \u2014 db::index_lifecycle::text::active_compaction::compact_once runs 193 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 93 over it, 1.93\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":"crates/db/src/index_lifecycle/text/active_compaction.rs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bc3d96a3b02531a52087698ddf16dbe48e6d5f8333f775190bccde8e496319e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/model.rs: FileTooLong \u2014 955 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 455 over it, 1.91\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":"crates/db-testkit/src/model.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea2857d2b44af768fc5953149a6e05044130d42ac8ddd1079a437e1406f2a2c5"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::text::validation::select_entity_state: FunctionTooLong \u2014 db::index_lifecycle::text::validation::select_entity_state runs 191 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 91 over it, 1.91\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":"crates/db/src/index_lifecycle/text/validation.rs"},"region":{"startLine":696}}}],"partialFingerprints":{"codehealthFindingId/v1":"839b693869cb308e354f118d38df99d5460a517e24a39f61ca3e32d0c07263f7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: hnsw/search.rs: FileTooLong \u2014 933 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 76% of them inside a single declaration: VectorIndex (2 blocks, 119-1070). The bar is 500 significant lines; this is 433 over it, 1.87\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":"crates/db/src/search/vector/hnsw/search.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4481a1a1873cbfb7b6d757ed1ecb5503fb9eac1de3462f641349f24eb931c1f1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: index_lifecycle/operation.rs: FileTooLong \u2014 930 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 430 over it, 1.86\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":"crates/db/src/index_lifecycle/operation.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"19433db20e3e0f34c7e2a8a96152ec16ffdf4cdcee343cabcd6093481ea78c1d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: helixdb/graph.py: FileTooLong \u2014 910 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 410 over it, 1.82\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":"sdks/python/src/helixdb/graph.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3747281e9dc7a39daa42bbabb66218fc17186adeca68b28a666b86cac6ca915e"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::migrations::production_contracts::run_vector_adoption_failpoint_recovery_contracts: FunctionTooLong \u2014 db::migrations::production_contracts::run_vector_adoption_failpoint_recovery_contracts 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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":6502}}}],"partialFingerprints":{"codehealthFindingId/v1":"b61611e5120ea9e5bc940e46a28f3adccddbfaf1cac4d821fda0448891548648"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::migrations::production_contracts::run_migration_contracts: FunctionTooLong \u2014 db::migrations::production_contracts::run_migration_contracts 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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":7337}}}],"partialFingerprints":{"codehealthFindingId/v1":"d94865e298cd21cde64384f97b41aa7a0d2b2eeafe20d46d6fe4e7ef65bb122a"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::search::vector::cache::hydration::hydrate_active_generations: FunctionTooLong \u2014 db::search::vector::cache::hydration::hydrate_active_generations 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":"crates/db/src/search/vector/cache/hydration.rs"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1ff4a080c6f5f0d83ccffaa6ce80cd5a888e475aae4d727b13dbc21716461c9"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::text::active_batch::prepare_active_text_epoch: FunctionTooLong \u2014 db::index_lifecycle::text::active_batch::prepare_active_text_epoch runs 176 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 76 over it, 1.76\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":"crates/db/src/index_lifecycle/text/active_batch.rs"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"31618ec202e002de29789d1c2e051b3e3454e97601ed6f1d9cfd90727df5e2c7"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: VectorRows.validate_legacy_physical: MethodTooLong \u2014 validate_legacy_physical runs 176 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 76 over it, 1.76\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":"crates/db/src/search/vector/storage/mod.rs"},"region":{"startLine":921}}}],"partialFingerprints":{"codehealthFindingId/v1":"406aa3ace352d71e80c231210ebbed9fd4623d5882b3bd4bae25a03f3eebeaec"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: text/active_batch.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":"crates/db/src/index_lifecycle/text/active_batch.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0580f08ea7b6a08cd83b0ddf0e622c4be7cdd051f77ce0cf9d22da8863b27515"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: text/cache.rs: FileTooLong \u2014 859 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 359 over it, 1.72\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":"crates/db/src/search/text/cache.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"37dded5b575d4f4a8cebe794a978ee3de9037e6ee80476df362f8cfc87dcbd29"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/graph.rs: FileTooLong \u2014 856 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 356 over it, 1.71\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":"bindings/uniffi/src/graph.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7253a370ab4f3a04e72de615b5e5598c4a7fa244f7b9235a43b82a6edec8b2da"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::text::driver::plan_next_catch_up: FunctionTooLong \u2014 db::index_lifecycle::text::driver::plan_next_catch_up runs 171 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 71 over it, 1.71\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":2012}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a8cd1ee12aa5d7df9e1923cc4ab06bed8322befa563337bd1364ccb032ecdbc"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Traversal: ClassTooLong \u2014 666 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), 102 methods, 6 blocks, lines 1344-2485. The bar is 400 significant lines; this is 266 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":"crates/ast/src/traversal.rs"},"region":{"startLine":1344}}}],"partialFingerprints":{"codehealthFindingId/v1":"4dacd70a888829f02c5efd55ec8f55ad51b6c7d01b92ea57f542089685a4a38c"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::vector::driver::adopt_legacy: FunctionTooLong \u2014 db::index_lifecycle::vector::driver::adopt_legacy runs 166 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 66 over it, 1.66\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":"crates/db/src/index_lifecycle/vector/driver.rs"},"region":{"startLine":1682}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf80957febbd7955a07fb113cd1141ad87e7922f66c1f80ce5f3bd516e83879f"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::migrations::production_contracts::run_vector_ownership_conflict_contracts: FunctionTooLong \u2014 db::migrations::production_contracts::run_vector_ownership_conflict_contracts runs 164 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 64 over it, 1.64\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/migrations/mod.rs"},"region":{"startLine":7121}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d7593cb2df78897390d9a195d17a0115401ce67fa7f1282547e190430d5acad"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: db::migrations::production_contracts: TooManyFunctions \u2014 49 free functions. The bar is 30 free functions; this is 19 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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":5292}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb4a2ecfceea69a29396f32c856c47f59d87c8b7d7076303bc8a6478fa0cb86b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ExecutableDagBuilder: TooManyMethods \u2014 49 methods, declared across 30 files: exec/lowering.rs (5), access/leaf.rs (4), lowering/batch.rs (4), mutation/emit.rs (3), \u002B26 more file(s). The bar is 30 methods; this is 19 over it, 1.63\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":"crates/planner/src/exec/lowering.rs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"544ed9263cc0e11db8a651f9bb3cef499d51f9bcd65894f3e84b877fefccc8ae"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: text/validation.rs: FileTooLong \u2014 812 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 312 over it, 1.62\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":"crates/db/src/index_lifecycle/text/validation.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"10405479b1d8f4019b0ea7268978e02a3ac5365c5d61aad2a23c60b5cbd838d4"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: SeedRuleSet: TooManyFields \u2014 48 stored fields beside 2 methods. The bar is 30 stored fields; this is 18 over it, 1.60\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":"crates/planner/src/rules/registry.rs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"eaf7bdb979d3ffc9419af6c6cd2dd32367cbbc4c7365b3a748a5affc005241f2"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ExecutableDagBuilder.push_selected_stream_pipeline_op: MethodTooLong \u2014 push_selected_stream_pipeline_op runs 160 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 60 over it, 1.60\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":"crates/planner/src/exec/selected/lowering/access/pipeline.rs"},"region":{"startLine":4}}}],"partialFingerprints":{"codehealthFindingId/v1":"603d8c3d63104128481b4787d595a2374e384705f012ca4d2757e01d1fba7b7d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: index_lifecycle/repository.rs: FileTooLong \u2014 798 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 34 free functions. The bar is 500 significant lines; this is 298 over it, 1.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":"crates/db/src/index_lifecycle/repository.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ead24b370a2c3b8784ceb79c53b08bf7f68bf2a9bca099eadbed0a790e2bf0ac"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Runner: ClassTooLong \u2014 636 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, 2 blocks, lines 196-1026. The bar is 400 significant lines; this is 236 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":"crates/db-testkit/src/lifecycle_workload.rs"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"99d8e1a6e4ecb44ffe4214910d1f7f8a316bb93814f3ce116ab539818bdb77f6"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::vector::driver::scan_source: FunctionTooLong \u2014 db::index_lifecycle::vector::driver::scan_source runs 158 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 58 over it, 1.58\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":"crates/db/src/index_lifecycle/vector/driver.rs"},"region":{"startLine":2082}}}],"partialFingerprints":{"codehealthFindingId/v1":"300054ae4eb2e664136b07d8dc220bd4b34546a1b03631719680f05ea9dddd20"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Operation.apply: MethodTooLong \u2014 apply runs 157 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 57 over it, 1.57\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":"crates/ast/src/traversal.rs"},"region":{"startLine":908}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3adb9b8fae5a4eeeb33d14664d92c5b61a2b76e2294455e1c4f1fe00d5a31c2"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: helix_cli::commands::cloud::service_credential::run: FunctionTooLong \u2014 helix_cli::commands::cloud::service_credential::run runs 157 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 57 over it, 1.57\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":"crates/cli/src/commands/cloud/service_credential.rs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"77a3d3517764eabe0c0bba87e0f6908fd3bbf233e8e1fe439a23c5b1a1763698"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: values/codec.rs: FileTooLong \u2014 782 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 62 free functions. The bar is 500 significant lines; this is 282 over it, 1.56\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":"crates/db/src/encoding/v2/values/codec.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"53fbbca9c463d76689216421feca342216ee87ff168b88b735332a538f675157"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: mutation/active.rs: FileTooLong \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). The bar is 500 significant lines; this is 263 over it, 1.53\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":"crates/db/src/search/vector/hnsw/mutation/active.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"62034e6d282aea1407856f40f897b25f4b6cd87f9b09f973a6e6ffa5562ae207"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lifecycle_workload.rs: FileTooLong \u2014 761 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: Runner (2 blocks, 196-1026). The bar is 500 significant lines; this is 261 over it, 1.52\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":"crates/db-testkit/src/lifecycle_workload.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f71bccad833995f37f1f27de36df11b0ef48d29431b3162613afb7263ae5849f"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::text::mutation::prepare_text_build_deltas_from: FunctionTooLong \u2014 db::index_lifecycle::text::mutation::prepare_text_build_deltas_from 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":"crates/db/src/index_lifecycle/text/mutation.rs"},"region":{"startLine":441}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8b60161c4c2e4cda967da5c33ca655fd5516c09b2f441fc8783f37713f0b4ef"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::migrations::process_loaded_job: FunctionTooLong \u2014 db::migrations::process_loaded_job 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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":3166}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7099d2451d59ecb50659d464e0b84f0af07d7a96af19223916f42f7b9e1b684"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::search::edge_range_scan_bounds_with_direction: FunctionTooLong \u2014 db::search::edge_range_scan_bounds_with_direction 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":"crates/db/src/search/mod.rs"},"region":{"startLine":2548}}}],"partialFingerprints":{"codehealthFindingId/v1":"d186e1316387bf872034ac3f2155cf04a241981a213f52f5730b320e1795f08e"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Step.ToAST: MethodTooLong \u2014 ToAST runs 151 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 51 over it, 1.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":"sdks/go/dsl.go"},"region":{"startLine":1445}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5428bcf3e481f49791f48556ba19b901a110cb6f23918ee41bb8a469ab55ca6"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: helix_cli::commands::cloud::database::run: FunctionTooLong \u2014 helix_cli::commands::cloud::database::run runs 151 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 51 over it, 1.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":"crates/cli/src/commands/cloud/database.rs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a0109d75e10c835a3051d309b405cd79bec62f13f0cdf9007ea4e950b5c3188"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle_testing::contracts::run_create_drop_state_matrix: FunctionTooLong \u2014 db::index_lifecycle_testing::contracts::run_create_drop_state_matrix runs 151 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 51 over it, 1.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":"crates/db/src/index_lifecycle_testing/contracts.rs"},"region":{"startLine":3177}}}],"partialFingerprints":{"codehealthFindingId/v1":"46fda468b8c539fa5c2979f35d733d75562de314bc0c5884168d11e29c91d72c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: migrations/vector_scale.rs: FileTooLong \u2014 754 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 254 over it, 1.51\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":"crates/db/src/migrations/vector_scale.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8485c4ae767546e2aff148f051749f2f805f09f3b0522a52be74ea669502d246"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Step.toAst: MethodTooLong \u2014 toAst runs 150 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 50 over it, 1.50\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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":1703}}}],"partialFingerprints":{"codehealthFindingId/v1":"50fe6fc279cb7a4f11750a96bd33abd2b540dc8cbd6d2f51195ddd792259184a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: index_lifecycle/vector.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":"crates/db/src/index_lifecycle/vector.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"25ab3e7be4ea0de4dc1e27101563d410babbf4a13957cd6b3964c166db9c91c1"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::migrations::production_contracts::run_vector_zero_cosine_recovery_contract: FunctionTooLong \u2014 db::migrations::production_contracts::run_vector_zero_cosine_recovery_contract runs 149 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 49 over it, 1.49\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/migrations/mod.rs"},"region":{"startLine":8469}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc9de2fe1de866a961c8c3d0226deee1ad7b6ce9271a635cbbb21f1dc6c6ccf1"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::text::validation::select_root: FunctionTooLong \u2014 db::index_lifecycle::text::validation::select_root 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":"crates/db/src/index_lifecycle/text/validation.rs"},"region":{"startLine":501}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9f45d64d7b3e7edf3001da7d130d6562ea2196f54f2a02b73244466ee46eb21"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: LifecycleTestController.install_donor_split_for_search_race: MethodTooLong \u2014 install_donor_split_for_search_race 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":"crates/db/src/index_lifecycle_testing.rs"},"region":{"startLine":1335}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a410d1485b6877bbbd9bf822a39823ec732f25bfcd5945e387ade013dc2b5b5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: text/statistics.rs: FileTooLong \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). The bar is 500 significant lines; this is 229 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":"crates/db/src/index_lifecycle/text/statistics.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"10a8e0113a413b8de122d58ab304484891bfaacebd03a2492f463f859174772e"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: helix_planner::rules::physical_contracts::support::pipeline::stream_pipeline_op_contract: FunctionTooLong \u2014 helix_planner::rules::physical_contracts::support::pipeline::stream_pipeline_op_contract runs 145 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 45 over it, 1.45\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":"crates/planner/src/rules/physical_contracts/support/pipeline.rs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb11db41334ece63ae7853c3fefe6f1b79c1ccb98c7abf6536f15e4fa6b13aa7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: exec/count.rs: FileTooLong \u2014 724 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 224 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":"crates/planner/src/exec/count.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"05083c0c183e6cccda94ac67f019b1694f3463b8e62a2daadfd161f76f20a6a7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: cache/registry.rs: FileTooLong \u2014 723 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 223 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":"crates/db/src/search/vector/cache/registry.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e7b82601ed76b0b1eef59d0fb56c64d84594d698eb1468a779ef74ffb722aee"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: secondary/exact.rs: FileTooLong \u2014 722 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 222 over it, 1.44\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":"crates/db/src/index_lifecycle/secondary/exact.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c463a4356bac58038df1cb826000755bc408a000fc587bf65ca5c3f7531dc049"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: NativeGraph: 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":"bindings/uniffi/src/graph.rs"},"region":{"startLine":400}}}],"partialFingerprints":{"codehealthFindingId/v1":"b39dded2bfed56ada0fd725d003100870d919f66adaeb3b02244ce03af32d305"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: helix_db_testkit::planner_domain::cardinality_inputs: FunctionTooLong \u2014 helix_db_testkit::planner_domain::cardinality_inputs runs 143 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 43 over it, 1.43\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":"crates/db-testkit/src/planner_domain.rs"},"region":{"startLine":444}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9d27ce9580149ea92c099d0fde29765dfd53a5669e303a0865978a4742d7bbc"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: OracleState.read_indexed: MethodTooLong \u2014 read_indexed 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":"crates/db-testkit/src/model.rs"},"region":{"startLine":653}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c5e16dc2b39528f32ce540e77d2792e82604eb47dcdc7bcae7b555ffbce73f4"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::vector::driver::validate_adopted_directory: FunctionTooLong \u2014 db::index_lifecycle::vector::driver::validate_adopted_directory 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":"crates/db/src/index_lifecycle/vector/driver.rs"},"region":{"startLine":1898}}}],"partialFingerprints":{"codehealthFindingId/v1":"89d4e00fc84a1cfe0d597fbac8b1497ff33418faef7a70a9477335bae240dac8"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::vector::driver::catch_up: FunctionTooLong \u2014 db::index_lifecycle::vector::driver::catch_up 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":"crates/db/src/index_lifecycle/vector/driver.rs"},"region":{"startLine":2279}}}],"partialFingerprints":{"codehealthFindingId/v1":"9835f34bfad35e459dd5fe07d31e703ac3cdd403333c4c6cf0ec3a71586ca01e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: migrations/vector_retirement.rs: FileTooLong \u2014 692 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 192 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":"crates/db/src/migrations/vector_retirement.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"943db7cc8119690c531ebd82a45c0c8c445a7b88306f60ae03b8840c780d8b54"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::repository::operation_record_cursors_are_valid: FunctionTooLong \u2014 db::index_lifecycle::repository::operation_record_cursors_are_valid 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":"crates/db/src/index_lifecycle/repository.rs"},"region":{"startLine":662}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f39558319622256ba854c673c09bfdda38ac614a12cd7ed57122e7d10f7e889"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Analyzer: ClassTooLong \u2014 549 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, 2 blocks, lines 12-710. The bar is 400 significant lines; this is 149 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":"crates/planner/src/diagnostics/analyze.rs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2d7a34731cfcbb456d3ce495c8ff4a79ef5c6a630403050a25e4adcb6b796e9"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ExecutionContext.eval_predicate_with_resolver: MethodTooLong \u2014 eval_predicate_with_resolver runs 136 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 36 over it, 1.36\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":"crates/db/src/execution/interpreter/stream/eval/predicate.rs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c46f9074d2f87a53ead04911325877307db74d37d94ab2a102247f5676bc2ee"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::text::statistics::prepare_transition: FunctionTooLong \u2014 db::index_lifecycle::text::statistics::prepare_transition runs 136 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 36 over it, 1.36\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":"crates/db/src/index_lifecycle/text/statistics.rs"},"region":{"startLine":613}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d05f21e5568eea1f9f20a3b39c66a5c3a5669583cfe0a3c5ccc59b699e74cb3"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::search::text::search_manifest_with_state_source: FunctionTooLong \u2014 db::search::text::search_manifest_with_state_source runs 136 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 36 over it, 1.36\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":"crates/db/src/search/text/mod.rs"},"region":{"startLine":505}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d759c073fdb48714fcb0bce6b7f857fa86d560896c2765ba72f59f353bce9ea"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle_testing::contracts::run_secondary_vector_public_boundaries: FunctionTooLong \u2014 db::index_lifecycle_testing::contracts::run_secondary_vector_public_boundaries 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":"crates/db/src/index_lifecycle_testing/contracts.rs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba874d089e6af3f652a78af26e7a12886137f32e88b05c5f60a01c59d775b7e8"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: helix_planner::planning::selected::native::pipeline::ops::search::pipeline_op_from_ast: FunctionTooLong \u2014 helix_planner::planning::selected::native::pipeline::ops::search::pipeline_op_from_ast runs 134 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 34 over it, 1.34\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":"crates/planner/src/planning/selected/native/pipeline/ops/search.rs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"a59ab24628acba0e5e02320caee237485f98df7c3cc9b888fc5d39c4e702ae44"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle_testing::contracts::run_family_tenant_reopen_recovery: FunctionTooLong \u2014 db::index_lifecycle_testing::contracts::run_family_tenant_reopen_recovery runs 133 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 33 over it, 1.33\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":"crates/db/src/index_lifecycle_testing/contracts.rs"},"region":{"startLine":660}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b642510a7958fca25490633cfc2557d3bf277dedb8940b25b77da0556429a01"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::migration_parity::text_search_from_read: FunctionTooLong \u2014 db::migration_parity::text_search_from_read runs 133 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 33 over it, 1.33\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":"crates/db/src/migration_parity.rs"},"region":{"startLine":565}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea2854f3e9c2e3aaefff12151069d97c0a5bfdd7e736708c2376d3f3945e9fdd"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::migrations::migrate_legacy_definitions: FunctionTooLong \u2014 db::migrations::migrate_legacy_definitions runs 133 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 33 over it, 1.33\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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":1553}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf18ab1f1050e150a316ef3ba5b35d32fdc5de58dbc509ed667da22d81a29d3d"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: LocalRuntime: ClassTooLong \u2014 531 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 58-862. The bar is 400 significant lines; this is 131 over it, 1.33\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":"crates/cli/src/local_runtime.rs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"1255d57666b5bc6fcd07bb2ba2a3dfb9bd0caf9f8c07a0fefc0bdec846b0e828"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: VectorRows.backfill_missing_simhash_directory: MethodTooLong \u2014 backfill_missing_simhash_directory 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":"crates/db/src/search/vector/storage/mod.rs"},"region":{"startLine":1517}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3756d68a014ccb9882d9ef8f69db1aec77ac9d7f9d9305122c7e0fc2d5dfd38"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: RuleSchedule.rules_for_expr: MethodTooLong \u2014 rules_for_expr 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":"crates/planner/src/optimizer/driver/schedule/routing.rs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"161ccd384cbe9d1d39ddaea91931ed1401bf7e98dadee5bbe1e5127e2a201fa5"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: helix_planner::planning::selected::native::context_usage::validate_after_bind_with_context: FunctionTooLong \u2014 helix_planner::planning::selected::native::context_usage::validate_after_bind_with_context 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":"crates/planner/src/planning/selected/native/context_usage.rs"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"b86f2c5d538c7c8d1b0e8a0a7fa51e3965e4bf44150f4d162e55ac6fcc8cccc3"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle_testing::contracts::run_building_drop_stage_matrix: FunctionTooLong \u2014 db::index_lifecycle_testing::contracts::run_building_drop_stage_matrix runs 129 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 29 over it, 1.29\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/index_lifecycle_testing/contracts.rs"},"region":{"startLine":3408}}}],"partialFingerprints":{"codehealthFindingId/v1":"4cc9f5e21935cb4b71cb842cdbb099f00fdd2159983d812d94c10f7d3d009791"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::migrations::vector_properties::materialize_batch: FunctionTooLong \u2014 db::migrations::vector_properties::materialize_batch runs 128 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 28 over it, 1.28\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":"crates/db/src/migrations/vector_properties.rs"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"c63b4b984711074b2c37bb375e744b95fd9c464058cb55edd5d523d561164b19"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: access/dispatch.rs: FileTooLong \u2014 639 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 139 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":"crates/db/src/execution/interpreter/access/dispatch.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"becd7e83c8026e2c5b55618be9ccd65c3a516936722a7d15ef60a7b153d0e891"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: index_lifecycle/worker.rs: FileTooLong \u2014 637 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 137 over it, 1.27\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":"crates/db/src/index_lifecycle/worker.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"11eb45358b272364807cab484c1a6b763a46c8bbaf58c31456289b2d7d458e84"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: LifecycleTestController: ClassTooLong \u2014 508 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), 15 methods. The bar is 400 significant lines; this is 108 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":"crates/db/src/index_lifecycle_testing.rs"},"region":{"startLine":871}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ea01214f1ce0d64f04b908fda391bc69da0164b3896611c1f769967268ea518"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle_testing::contracts::run_partitioned_search_edge_tenant_moves: FunctionTooLong \u2014 db::index_lifecycle_testing::contracts::run_partitioned_search_edge_tenant_moves 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":"crates/db/src/index_lifecycle_testing/contracts.rs"},"region":{"startLine":2468}}}],"partialFingerprints":{"codehealthFindingId/v1":"2edd4eb3f7b177dc24ee9de81dbdbd7e81331389a8557345c04bb0500b0d7f7c"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ExecutionContext.count_cursor: MethodTooLong \u2014 count_cursor runs 126 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 26 over it, 1.26\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/execution/interpreter/count.rs"},"region":{"startLine":1113}}}],"partialFingerprints":{"codehealthFindingId/v1":"0eeaa91e3c40b474ea7e3f44df5e54025a94b4a71678cbe1bfb74213ec4b254d"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: FtsCache: ClassTooLong \u2014 499 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. The bar is 400 significant lines; this is 99 over it, 1.25\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":"crates/db/src/search/text/cache.rs"},"region":{"startLine":342}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3e5718d104195708f07cf712d391723098bb82ac46cd43da20f4c826a446f20"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle_testing::contracts::run_secondary_edge_mutation_interleaving: FunctionTooLong \u2014 db::index_lifecycle_testing::contracts::run_secondary_edge_mutation_interleaving 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":"crates/db/src/index_lifecycle_testing/contracts.rs"},"region":{"startLine":2003}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d1588c7eb3eb00b7ddbf5229eca2c6913c7edbe4d939c848942328dd746e6b7"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: MutationOpCache: 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":"crates/db/src/search/vector/hnsw/mutation/mod.rs"},"region":{"startLine":2284}}}],"partialFingerprints":{"codehealthFindingId/v1":"80de5f1fdf8af2d368de8bad99ad81a6ae6f6c65cee21046a7aa0fbf84a4e93e"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::migrations::vector_retirement::fence_sources_batch: FunctionTooLong \u2014 db::migrations::vector_retirement::fence_sources_batch runs 123 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 23 over it, 1.23\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/migrations/vector_retirement.rs"},"region":{"startLine":246}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f87ef5fe788485255d7dc13cd7338be066dc9d910fb511d0388e657b03b7123"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: MutationOpCache: ClassTooLong \u2014 491 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), 37 methods, 3 blocks, lines 2284-2975. The bar is 400 significant lines; this is 91 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":"crates/db/src/search/vector/hnsw/mutation/mod.rs"},"region":{"startLine":2284}}}],"partialFingerprints":{"codehealthFindingId/v1":"9947adde0c25036765f6ef1706473fec972df056543c267e9b3be2f2bf9af3d4"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: PreparedTextOperationStep.stage: MethodTooLong \u2014 stage runs 122 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 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":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":508}}}],"partialFingerprints":{"codehealthFindingId/v1":"082c6c8fb4f4d603fb640705b0862c620b0663601e946e95ea62e10d62d31b5e"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::migrations::vector_retirement::release_reservations_batch: FunctionTooLong \u2014 db::migrations::vector_retirement::release_reservations_batch runs 122 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 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":"crates/db/src/migrations/vector_retirement.rs"},"region":{"startLine":778}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e50be2a73e0b7591a2fc4b924f6539ed97ca38ab756736d0c1c531d69ee9d6c"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::text::compaction::select_artifacts: FunctionTooLong \u2014 db::index_lifecycle::text::compaction::select_artifacts 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":"crates/db/src/index_lifecycle/text/compaction.rs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b3393cce3b4d1e38903955cadea335f1708b7f19a04459dbed982bc0ad691c7"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::text::driver::prepare_build_upload: FunctionTooLong \u2014 db::index_lifecycle::text::driver::prepare_build_upload 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":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":1018}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed148669fc44f296c1fb774d6c2d5dcc44e486e003fd907fceaf4b1c80fc9a5b"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Analyzer.analyze_access_leaf: MethodTooLong \u2014 analyze_access_leaf 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":"crates/planner/src/diagnostics/analyze.rs"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"022d38c9aa0801d91a2d30b1ba2fb63cef16726b0314ff404aef3e32d6f07f74"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::text::active_batch::append_split: FunctionTooLong \u2014 db::index_lifecycle::text::active_batch::append_split runs 119 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 19 over it, 1.19\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/index_lifecycle/text/active_batch.rs"},"region":{"startLine":956}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5e5bd085ecff6008f955b0fa944146ba3561fbeaac3aefaec7196b9918d3657"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::vector::driver::plan_and_apply: FunctionTooLong \u2014 db::index_lifecycle::vector::driver::plan_and_apply runs 119 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 19 over it, 1.19\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/index_lifecycle/vector/driver.rs"},"region":{"startLine":2456}}}],"partialFingerprints":{"codehealthFindingId/v1":"28184ad1788f462539bcbcc6d346e48c2135feff164fb4ef38e513d5fa8b992c"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::vector::driver::validate_descriptor: FunctionTooLong \u2014 db::index_lifecycle::vector::driver::validate_descriptor runs 119 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 19 over it, 1.19\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/index_lifecycle/vector/driver.rs"},"region":{"startLine":2845}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a72056499d540c3d86578c5151d6bd39ab4d0be6bfeaa9d46a35547cbff2816"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::secondary::delete_generation_rows: FunctionTooLong \u2014 db::index_lifecycle::secondary::delete_generation_rows runs 117 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 17 over it, 1.17\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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":1862}}}],"partialFingerprints":{"codehealthFindingId/v1":"b067a39de88ce99979c8d97b796210ff7c27f472ca57470facdc82fe937c4441"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: helix_planner::planning::selected::native::context_usage::validate_ast_context: FunctionTooLong \u2014 helix_planner::planning::selected::native::context_usage::validate_ast_context runs 117 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 17 over it, 1.17\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":"crates/planner/src/planning/selected/native/context_usage.rs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"82d40637770609db3e1f49eed9f50904013eea32edbc0cf2cd5ebf727be0888e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: LegacyVectorIndexConfig: TooManyFields \u2014 35 stored fields. The bar is 30 stored fields; this is 5 over it, 1.17\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":"crates/db/src/encoding/v2/legacy/vector/metadata.rs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"442e3430103012f2503de01c11a420f1f1a2a2e8dcb853daec31d273d968882c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: SearchStats: TooManyFields \u2014 35 stored fields. The bar is 30 stored fields; this is 5 over it, 1.17\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":"crates/db/src/search/vector/mod.rs"},"region":{"startLine":622}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc323deb5a3421a3f254955f370f8c969b5293930d608623bccb3a3262feb769"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: VectorIndexDriver.step: MethodTooLong \u2014 step 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":"crates/db/src/index_lifecycle/vector/driver.rs"},"region":{"startLine":440}}}],"partialFingerprints":{"codehealthFindingId/v1":"db6ad56e75a917c0dbf6a26e57829584bfbdd0316e2b2bfe2bf4048d21680e80"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: config/indexes.rs: FileTooLong \u2014 573 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 73 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":"crates/db/src/config/indexes.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ae16cea1d4866c6b11d91f8c920c108a68e23f899bcae725b826f9890da9fc1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: cache/store.rs: FileTooLong \u2014 573 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 73 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":"crates/db/src/search/vector/cache/store.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a89314d965fc83d6c5b8810204e0a6a92685965c872e9e3e1066a783ba6ae4d4"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: config/cache.rs: FileTooLong \u2014 568 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 68 over it, 1.14\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":"crates/db/src/config/cache.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"278cbfc49561f6afe5b3c7c000f7f9e52645785e3f01be652beab88d3193a8c0"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: LocalRuntime: 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":"crates/cli/src/local_runtime.rs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"a86216b9db45876afd2c470c98bf5580d5d4105d867bfb2c4db46fc049bd81d8"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: StorageCostProfile: TooManyMethods \u2014 34 methods, declared across 3 files: profile/formulas.rs (30), profile/overrides.rs (2), profile/residual.rs (2). The bar is 30 methods; this is 4 over it, 1.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":"crates/planner/src/cost/profile.rs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"50a8f3ca9d537a2fe3fae79bb294b26e4e21754f93271f10cd6c939ca175336b"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: VectorIndex.relink_neighbor: MethodTooLong \u2014 relink_neighbor 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":"crates/db/src/search/vector/hnsw/mutation/mod.rs"},"region":{"startLine":1933}}}],"partialFingerprints":{"codehealthFindingId/v1":"64d7da41ad908af420abed135a57fdcf2074060ced003fe687e0221c11de136f"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: NativeGraph: ClassTooLong \u2014 451 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, 4 blocks, lines 400-1066. The bar is 400 significant lines; this is 51 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":"bindings/uniffi/src/graph.rs"},"region":{"startLine":400}}}],"partialFingerprints":{"codehealthFindingId/v1":"977fa17be38169435b89a3ac49edf09619fd02e7801cb645f5f5128b99284e1b"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::lifecycle::create_index_operation_in_transaction_with_physical: FunctionTooLong \u2014 db::index_lifecycle::lifecycle::create_index_operation_in_transaction_with_physical 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":"crates/db/src/index_lifecycle/lifecycle.rs"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"c71d3e413d6c1dc0c988b6347110b2a5cdb6277649b6e495820a85adfcc2cd13"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: NativeGraph: TooManyMethods \u2014 33 methods. The bar is 30 methods; this is 3 over it, 1.10\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sdks/go/graph.go"},"region":{"startLine":366}}}],"partialFingerprints":{"codehealthFindingId/v1":"9890fdb41e97b5bd15b27902deaca1638853b3dfc2914b87b829d1921c428694"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DbConfig: TooManyMethods \u2014 33 methods. The bar is 30 methods; this is 3 over it, 1.10\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/config/db.rs"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b8fc31e39863f988b48812074818894179cf3f14c84a61657abc659e4588345"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SubTraversal: TooManyMethods \u2014 33 methods. The bar is 30 methods; this is 3 over it, 1.10\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sdks/typescript/src/dsl.ts"},"region":{"startLine":2411}}}],"partialFingerprints":{"codehealthFindingId/v1":"d16de503c3d6033cdecf2c0e29a97d148b20a4a542eac2edc1964911d5c886b8"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: helix_cli::commands::cloud::project::run: FunctionTooLong \u2014 helix_cli::commands::cloud::project::run 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":"crates/cli/src/commands/cloud/project.rs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd99ba148661cb51b3c034e283a4b110a829c4831d067d6a5ac70095c568c37a"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ExecutionContext.node_secondary_ids: MethodTooLong \u2014 node_secondary_ids 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":"crates/db/src/execution/interpreter/access/secondary_set.rs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"f58fca678923c3c1599b980494f39721f2907d3b55c9c17bcf02764a19fb4265"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: HelixDB.advance_lifecycle_operation: MethodTooLong \u2014 advance_lifecycle_operation 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":"crates/db/src/index_lifecycle_testing.rs"},"region":{"startLine":1686}}}],"partialFingerprints":{"codehealthFindingId/v1":"6309bbc3d36e24fd41faff5a3c9cef8decdc7899091b344d9a809062f19806f8"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: helix_planner::planning::envelope::write_contract::validate_write_root: FunctionTooLong \u2014 helix_planner::planning::envelope::write_contract::validate_write_root 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":"crates/planner/src/planning/envelope/write_contract.rs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1486be0119bde7092b98b4ad315a4914ed2840e54e7b645a603f2daa7d27adb"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::vector::driver::validate_mappings_or_finish: FunctionTooLong \u2014 db::index_lifecycle::vector::driver::validate_mappings_or_finish 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":"crates/db/src/index_lifecycle/vector/driver.rs"},"region":{"startLine":2995}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc4b8d15a5b715ae348c2ef20119227f1fb9084e3ae9b74cee1f055aaae7fa24"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle::worker::dispatch_worker_cycle: FunctionTooLong \u2014 db::index_lifecycle::worker::dispatch_worker_cycle 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":"crates/db/src/index_lifecycle/worker.rs"},"region":{"startLine":588}}}],"partialFingerprints":{"codehealthFindingId/v1":"1bd0938af999fc3b43a6ceffd3bade545ea9284d72b944de1a1be854e7a6b668"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::search::text::search_reader_candidates_with_statistics: FunctionTooLong \u2014 db::search::text::search_reader_candidates_with_statistics 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":"crates/db/src/search/text/mod.rs"},"region":{"startLine":1745}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8a3663b398634284b5a050c6295aa9fb2e71588087a4d3ea92b5d3f43a2d7b3"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: scripts/run_embedded_parity.py: FileTooLong \u2014 539 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 39 over it, 1.08\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":"sdks/python/scripts/run_embedded_parity.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f816c96adbacf75d0c6495a9dcdbd7b9c7b4eb312ffbe71c5932b490da9ce1a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: scripts/check-docs.mjs: FileTooLong \u2014 535 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 35 over it, 1.07\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":"docs/scripts/check-docs.mjs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc3655384625ddd9e9f2e19684903d949b60746b87b69c31d2ac29e5ce700d26"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle_testing::contracts::run_active_drop_snapshot_survival: FunctionTooLong \u2014 db::index_lifecycle_testing::contracts::run_active_drop_snapshot_survival runs 107 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 7 over it, 1.07\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":"crates/db/src/index_lifecycle_testing/contracts.rs"},"region":{"startLine":3575}}}],"partialFingerprints":{"codehealthFindingId/v1":"ceb0d7bce6eca33879423a30fb0f29e40480e08ad55998c687565c097f7fac63"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::migrations::production_contracts::run_vector_corruption_contracts: FunctionTooLong \u2014 db::migrations::production_contracts::run_vector_corruption_contracts runs 107 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 7 over it, 1.07\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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":6726}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d1a44bdcb2955a236652c858b0f8b1aa9fbdad9cf9e1b42e18fba1e3c480d8b"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: SearchSession.run: MethodTooLong \u2014 run runs 107 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 7 over it, 1.07\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":"crates/db/src/search/vector/hnsw/search.rs"},"region":{"startLine":1103}}}],"partialFingerprints":{"codehealthFindingId/v1":"544b52a768e0d2cee49664ec223b65dad56ea96a41c23d644868142b5880a2c4"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: cloud/resolve.rs: FileTooLong \u2014 531 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: Scope (2 blocks, 298-810). The bar is 500 significant lines; this is 31 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":"crates/cli/src/cloud/resolve.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"93ce4dc77e1cefec54b0df95ca98b0803bcbb31edfd500f0d7fb03867a57836b"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Step: ClassTooLong \u2014 423 significant lines (blank, comment-only and punctuation-only lines excluded), 90 methods. The bar is 400 significant lines; this is 23 over it, 1.06\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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":1336}}}],"partialFingerprints":{"codehealthFindingId/v1":"41fd4ce69642631570a133f5d28a45c8f16b902f189a1003df48a11e76712b78"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: VectorKey.parse_from_slice: MethodTooLong \u2014 parse_from_slice runs 105 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 5 over it, 1.05\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/encoding/v2/keys/indexes/vector/mod.rs"},"region":{"startLine":232}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7e74d16bc0a2bfe20556667df7f33b04fa1c258b60a7ba7e0f4febf0fe76ace"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Program.new: MethodTooLong \u2014 new runs 105 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 5 over it, 1.05\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/execution/interpreter/pull/count.rs"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce87b5d02178388a43363a0179fc44ad1a28238256c9e6ddcbf8bfe9f08a8190"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle_testing::contracts::run_active_vector_drop_snapshot_survival: FunctionTooLong \u2014 db::index_lifecycle_testing::contracts::run_active_vector_drop_snapshot_survival runs 105 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 5 over it, 1.05\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/index_lifecycle_testing/contracts.rs"},"region":{"startLine":3702}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8805961219a0f3db68d2039e83dab83ca235434e3d99711afef2829015462f4"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: VectorIndex.insert_with_mutation_cache: MethodTooLong \u2014 insert_with_mutation_cache runs 105 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 5 over it, 1.05\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/search/vector/hnsw/mutation/mod.rs"},"region":{"startLine":674}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc44e51ce0a6b123ec3909e7411f431651ddae261949cb1fbf9442e53e6ab1c0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: scripts/validate-cargo-target-references.py: FileTooLong \u2014 524 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 24 over it, 1.05\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":"scripts/validate-cargo-target-references.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc5f2bd2869c87690e734eeaa6b306d3c88cddfad4ce71f161c22454c159df06"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/merge_operator.rs: FileTooLong \u2014 523 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 23 over it, 1.05\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":"crates/db/src/merge_operator.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4cc398c2a025b9fc7ddb43e2136192e2414c068bfd4b53212a2e918e5239a5c7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: vector/mod.rs: FileTooLong \u2014 520 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 20 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":"crates/db/src/search/vector/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f025e0dc4f9e18e915375c757b63abaa575d8480b3c342970302ca33e3bf3b2"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ExecutableDagBuilder.push_classified_selected_executable_alternative: MethodTooLong \u2014 push_classified_selected_executable_alternative 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":"crates/planner/src/exec/selected/lowering/alternative/dispatch.rs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b631c646fd8b593b0becc6997af977c2f320f7bb5cac12aa1f6fbf89664b5bb"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: NativeGraph: 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":"sdks/python/src/helixdb/graph.py"},"region":{"startLine":471}}}],"partialFingerprints":{"codehealthFindingId/v1":"66a966d2a38912db5433608532be3b477fd8b232771ff6eed4f708211cba8217"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SubTraversal: 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":"crates/ast/src/traversal.rs"},"region":{"startLine":1085}}}],"partialFingerprints":{"codehealthFindingId/v1":"e117501d241a796aa2d0be2d82372484176343c97728af448b34157fb4640a03"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::index_lifecycle_testing::contracts::run_concurrent_create_convergence: FunctionTooLong \u2014 db::index_lifecycle_testing::contracts::run_concurrent_create_convergence runs 103 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 3 over it, 1.03\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/index_lifecycle_testing/contracts.rs"},"region":{"startLine":819}}}],"partialFingerprints":{"codehealthFindingId/v1":"449d13c9800a9b976296b94fcecb36f6c08c057034e5511c3f8d4560239eb612"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ExecutionContext.execute_branch_with_context: MethodTooLong \u2014 execute_branch_with_context 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":"crates/db/src/execution/interpreter/control/branch.rs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"29a3cded620c86c41ce1bea0826857765a972b5bb8d323d84e035c59c3d0d556"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: helix_planner::exec::returns::semantic_multiplicity: FunctionTooLong \u2014 helix_planner::exec::returns::semantic_multiplicity 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":"crates/planner/src/exec/returns.rs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"75e7a9cdc6c32697cd9e2603c47458956faa7b78dfbd03d712527c4c42595823"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: helix_cli::commands::add::run: FunctionTooLong \u2014 helix_cli::commands::add::run 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":"crates/cli/src/commands/add.rs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"36f035292f86f7e22da3f97a2f4555f6eb4b63e416808e34eb292077d9b7bff4"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: helix_cli::main: FunctionTooLong \u2014 helix_cli::main 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":"crates/cli/src/main.rs"},"region":{"startLine":543}}}],"partialFingerprints":{"codehealthFindingId/v1":"810ac44bf588b35e19f95e1e3416dff3cddcce97eb0422bc2ed488b0c9915941"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::migrations::vector_retirement::delete_dedicated_lane_batch: FunctionTooLong \u2014 db::migrations::vector_retirement::delete_dedicated_lane_batch 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":"crates/db/src/migrations/vector_retirement.rs"},"region":{"startLine":406}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3fc6a664722756179635c74317ba379e67b072f677b58bbc8f67bf9cbe9cd8f"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: db::migrations::vector_retirement::delete_core_batch: FunctionTooLong \u2014 db::migrations::vector_retirement::delete_core_batch 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":"crates/db/src/migrations/vector_retirement.rs"},"region":{"startLine":533}}}],"partialFingerprints":{"codehealthFindingId/v1":"e15d5d4b5f633a6e7a1b125e8ce707d2964ecbad7fc68b29a6ade19cb8ff3e8f"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: SimHasherRegistry.get: MethodTooLong \u2014 get 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":"crates/db/src/search/vector/simhash/registry.rs"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"754f42128c344667ed75d9cb1c21d5ed6fc791ed470d33f873bf8b796d52e8cb"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: index_lifecycle/lifecycle.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). The bar is 500 significant lines; this is 4 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":"crates/db/src/index_lifecycle/lifecycle.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"11ea89558064d4ab591baddf71705e1dde68d7245e58a0fce084f3ca069e7345"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: text/compaction.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). The bar is 500 significant lines; this is 1 over it, 1.00\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":"crates/db/src/search/text/compaction.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a7a8822573caee35676237b7b5a9c3901e6ea33d4a921d5a562af68bc6afc24"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member family (6 members, 24 shared lines): crates/db/src/migrations/vector_properties.rs:144-300 | crates/db/src/migrations/vector_retirement.rs:252-403 | crates/db/src/migrations/vector_retirement.rs:412-530 | crates/db/src/migrations/vector_retirement.rs:538-664 | crates/db/src/migrations/vector_retirement.rs:673-775 | crates/db/src/migrations/vector_retirement.rs:784-934 \u2014 These 6 members are variants of one another: a block of 24 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 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":"crates/db/src/migrations/vector_properties.rs"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f81d6c3294b5b42f77496eaab86a22bba0026dc83a48f1ae44698ca94a4a96e"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member family (4 members, 32 shared lines): crates/db/src/migrations/vector_retirement.rs:252-403 | crates/db/src/migrations/vector_retirement.rs:412-530 | crates/db/src/migrations/vector_retirement.rs:538-664 | crates/db/src/migrations/vector_retirement.rs:784-934 \u2014 These 4 members are variants of one another: a block of 32 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 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":"crates/db/src/migrations/vector_retirement.rs"},"region":{"startLine":252}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fc360fb7c0ec6dd8889c9cb17510fd6b9293db0283faa7b9a3ce91b041daf34"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (60 shared lines): crates/db/src/index_lifecycle_testing.rs:1215-1327 | crates/db/src/index_lifecycle_testing.rs:1341-1512 \u2014 These two members are variants of one another: 60 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":"crates/db/src/index_lifecycle_testing.rs"},"region":{"startLine":1215}}}],"partialFingerprints":{"codehealthFindingId/v1":"936a1e8f6d4d5468e165bd614be0c13cfab0ba9cae53eb50f7be701dd114f268"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (54 shared lines): crates/db/src/index_lifecycle/text/validation.rs:248-498 | crates/db/src/index_lifecycle/text/validation.rs:702-942 \u2014 These two members are variants of one another: 54 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":"crates/db/src/index_lifecycle/text/validation.rs"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1a4fdb294a6806dfe514b10f8e5df3a62ef6c82a23b0a474e2e3f520ba5633d"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (50 shared lines): crates/db/src/execution/interpreter/access/indexes.rs:138-203 | crates/db/src/execution/interpreter/access/indexes.rs:212-277 \u2014 These two members are variants of one another: 50 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":"crates/db/src/execution/interpreter/access/indexes.rs"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"eaa056b9754f383c2a26d76a9840abeed0aacb34e742dba7812d2ddd3174041c"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (43 shared lines): crates/planner/src/rules/cardinality.rs:1200-1271 | crates/planner/src/rules/cardinality.rs:1277-1348 \u2014 These two members are variants of one another: 43 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":"crates/planner/src/rules/cardinality.rs"},"region":{"startLine":1200}}}],"partialFingerprints":{"codehealthFindingId/v1":"a974d41f33dfae1b3595c6a60e7b6b14a3e772908f229525b12a45645c9bba60"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (34 shared lines): crates/db/src/search/mod.rs:1590-1630 | crates/db/src/search/mod.rs:1661-1701 \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":"crates/db/src/search/mod.rs"},"region":{"startLine":1590}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbbb35be0da45eece9b2be420f22baa1a97f48f4a635f719dcaac45b79557766"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (33 shared lines): crates/planner/src/exec/access/edge.rs:242-291 | crates/planner/src/exec/access/node.rs:295-351 \u2014 These two members are variants of one another: 33 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":"crates/planner/src/exec/access/edge.rs"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7b6e043b2bf89107ea7bbc866f0617a69ff2dcdb2d060214f3fb87dc8d2333a"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (24 corresponding lines): crates/db/src/index_lifecycle/text/statistics.rs:311-336 | crates/db/src/index_lifecycle/text/statistics.rs:281-306 \u2014 These two members are one piece of code written twice and then edited apart: 24 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":"crates/db/src/index_lifecycle/text/statistics.rs"},"region":{"startLine":311}}}],"partialFingerprints":{"codehealthFindingId/v1":"d066dfaf29988479084d88fd3500e1abd42552064bf04d3001822b05a8c9bb88"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (11 members, 50\u002B identical tokens): crates/db/src/encoding/v2/keys/graph.rs:30-57 | crates/db/src/encoding/v2/keys/graph.rs:101-128 | crates/db/src/encoding/v2/keys/graph.rs:172-202 | crates/db/src/encoding/v2/keys/graph.rs:252-279 | crates/db/src/encoding/v2/keys/graph.rs:322-349 | crates/db/src/encoding/v2/keys/indexes/equality/edge.rs:103-182 | crates/db/src/encoding/v2/keys/indexes/equality/edge.rs:249-293 | crates/db/src/encoding/v2/keys/indexes/equality/node.rs:58-107 | crates/db/src/encoding/v2/keys/indexes/label.rs:39-79 | crates/db/src/encoding/v2/keys/indexes/label.rs:142-195 | crates/db/src/encoding/v2/legacy/edge_property_pair.rs:25-53 \u2014 These 11 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 11 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 11 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/encoding/v2/keys/graph.rs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"786ad3f995c92d9d0f3d6fbd41e9d631b73ce67bb4faab41368a2304978d2254"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (8 members, 50\u002B identical tokens): crates/db/src/search/vector/spaces/simple_avx.rs:15-67 | crates/db/src/search/vector/spaces/simple_avx.rs:70-124 | crates/db/src/search/vector/spaces/simple_avx.rs:128-180 | crates/db/src/search/vector/spaces/simple_avx.rs:184-238 | crates/db/src/search/vector/spaces/simple_neon.rs:10-52 | crates/db/src/search/vector/spaces/simple_neon.rs:56-89 | crates/db/src/search/vector/spaces/simple_sse.rs:17-66 | crates/db/src/search/vector/spaces/simple_sse.rs:69-123 \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":"crates/db/src/search/vector/spaces/simple_avx.rs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f676268f5b2d240f9b0eaa22c2a5a2650a8f72a07113bf42359ce89d533081c"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (7 members, 50\u002B identical tokens): crates/db/src/migrations/mod.rs:6167-6498 | crates/db/src/migrations/mod.rs:6502-6722 | crates/db/src/migrations/mod.rs:6726-6861 | crates/db/src/migrations/mod.rs:6865-7117 | crates/db/src/migrations/mod.rs:7121-7333 | crates/db/src/migrations/mod.rs:8101-8337 | crates/db/src/migrations/mod.rs:8469-8649 \u2014 These 7 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 7 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 7 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/migrations/mod.rs"},"region":{"startLine":6167}}}],"partialFingerprints":{"codehealthFindingId/v1":"cfc7b0c99021d4adf504562b95003e77402ed995ce76b5779f6e0864b10b55de"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (7 members, 50\u002B identical tokens): crates/planner/src/exec/lowering/contracts/access/cardinality.rs:58-79 | crates/planner/src/exec/selected/lowering/contracts/matching/access/source/node.rs:17-89 | crates/planner/src/rules/access/sets/canonical/node.rs:8-26 | crates/planner/src/rules/access/sets/canonical/node.rs:59-75 | crates/planner/src/rules/access/sets/canonical/node.rs:79-95 | crates/planner/src/rules/cardinality.rs:1025-1059 | crates/planner/src/rules/physical_contracts/access/source/node.rs:12-37 \u2014 These 7 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 7 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 7 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/planner/src/exec/lowering/contracts/access/cardinality.rs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3aef81c3246872dd5d0afe3f58c6f34669ec4747c3eee1b3f94eeaff0c85632"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (6 members, 50\u002B identical tokens): crates/db/src/encoding/v2/keys/indexes/vector/entry_candidates.rs:168-207 | crates/db/src/encoding/v2/keys/indexes/vector/layer0.rs:17-56 | crates/db/src/encoding/v2/keys/indexes/vector/reverse_edges.rs:20-59 | crates/db/src/encoding/v2/keys/indexes/vector/reverse_edges.rs:106-157 | crates/db/src/encoding/v2/keys/indexes/vector/simhash.rs:162-201 | crates/db/src/encoding/v2/keys/indexes/vector/upper_layers.rs:106-145 \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":"crates/db/src/encoding/v2/keys/indexes/vector/entry_candidates.rs"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"9aea29059dcbc0b6fcf0de99970e50dff7153cd6a2c7ba3a91b3c54b466045fa"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (6 members, 50\u002B identical tokens): crates/planner/src/exec/lowering/contracts/access/cardinality.rs:81-97 | crates/planner/src/exec/selected/lowering/contracts/matching/access/source/edge.rs:17-89 | crates/planner/src/rules/access/sets/canonical/edge.rs:8-26 | crates/planner/src/rules/access/sets/canonical/edge.rs:59-75 | crates/planner/src/rules/access/sets/canonical/edge.rs:79-95 | crates/planner/src/rules/physical_contracts/access/source/edge.rs:12-37 \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":"crates/planner/src/exec/lowering/contracts/access/cardinality.rs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a09c58fb8e3f0b58643214aed72232570eb297ab9170fe30025129e40772db2"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): crates/db/src/execution/interpreter/mutation/edge.rs:221-271 | crates/db/src/execution/interpreter/mutation/edge.rs:298-344 | crates/db/src/execution/interpreter/mutation/node.rs:133-217 | crates/db/src/execution/interpreter/mutation/node.rs:253-301 \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":"crates/db/src/execution/interpreter/mutation/edge.rs"},"region":{"startLine":221}}}],"partialFingerprints":{"codehealthFindingId/v1":"337a716367024af808116754435110d1ebfac53b2f30767d194e1cf46a682671"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): crates/db/src/execution/interpreter/stream/filter.rs:333-371 | crates/planner/src/cost/profile/residual.rs:71-119 | crates/planner/src/diagnostics/analyze.rs:1259-1304 | crates/planner/src/ir/expr/validation.rs:34-84 \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":"crates/db/src/execution/interpreter/stream/filter.rs"},"region":{"startLine":333}}}],"partialFingerprints":{"codehealthFindingId/v1":"623624a162abcca5fe179979ab4c16e94ff1d8289842a25a465fbb4ad60c49e9"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): crates/db/src/index_lifecycle/text/driver.rs:950-1015 | crates/db/src/index_lifecycle/text/driver.rs:1184-1457 | crates/db/src/index_lifecycle/text/driver.rs:1585-1662 | crates/db/src/index_lifecycle/text/driver.rs:1864-1921 \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":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":950}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5f90dc20336123fa950fa624cd83ad771303c4de3a962da92aaea02b2cb5d6a"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): crates/db/src/search/mod.rs:1260-1272 | crates/db/src/search/mod.rs:1288-1301 | crates/db/src/search/mod.rs:1333-1343 | crates/db/src/search/mod.rs:1397-1408 \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":"crates/db/src/search/mod.rs"},"region":{"startLine":1260}}}],"partialFingerprints":{"codehealthFindingId/v1":"d52bd34dda6abb1da183783f82e04e43ab625da5f44c9873fcff73a366cb191f"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): crates/planner/src/exec/returns.rs:94-207 | crates/planner/src/planning/envelope/write_contract.rs:22-142 | crates/planner/src/planning/selected/native/context_usage.rs:21-152 | crates/planner/src/planning/selected/native/context_usage.rs:214-370 \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":"crates/planner/src/exec/returns.rs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"e15d560185bb3d63acb0c3575f48ba8b6d51de55b23a327c931ce7eb1aa2548a"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): crates/planner/src/rules/access/sets/equality_range/intersection/mod.rs:12-21 | crates/planner/src/rules/access/sets/equality_range/range_union/mod.rs:12-21 | crates/planner/src/rules/access/sets/range/mod.rs:11-20 | crates/planner/src/rules/access/sets/subsumption/mod.rs:16-25 \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":"crates/planner/src/rules/access/sets/equality_range/intersection/mod.rs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb93759209b3674741e0402dee47d12a65fcdf0720d5ba3565b77b40f3eccf0b"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): sdks/python/scripts/run_embedded_parity.py:291-311 | sdks/python/scripts/run_embedded_parity.py:322-344 | sdks/python/scripts/run_server_parity.py:399-413 | sdks/python/scripts/run_server_parity.py:417-431 \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":"sdks/python/scripts/run_embedded_parity.py"},"region":{"startLine":291}}}],"partialFingerprints":{"codehealthFindingId/v1":"493562089d29a9aa2e14081618aa082c434ee80ea76acddebe556e9bcc23791a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (32 lines \u00D7 2): crates/planner/src/planning/envelope/write_contract.rs:78-109 | crates/planner/src/planning/selected/native/context_usage.rs:79-110 \u2014 before extracting anything, compare \u0060crates/planner/src/planning/envelope/write_contract.rs\u0060 and \u0060crates/planner/src/planning/selected/native/context_usage.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":"crates/planner/src/planning/envelope/write_contract.rs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdd7ff643988eb3ed153f8a8204d3b7d1f1c1f7b9da85b0dea9a3ccc141e4293"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (30 lines \u00D7 2): crates/db/src/search/vector/hnsw/mutation/mod.rs:558-587 | crates/db/src/search/vector/hnsw/mutation/mod.rs:618-647 \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":"crates/db/src/search/vector/hnsw/mutation/mod.rs"},"region":{"startLine":558}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a6077d1e26be61c8fe2db2a242824b9ce78b5fd231bf97213a482922af850ac"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (28\u201329 lines \u00D7 2): crates/cli/src/local_runtime.rs:329-357 | crates/cli/src/local_runtime.rs:379-406 \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":"crates/cli/src/local_runtime.rs"},"region":{"startLine":329}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca90f65f87adbf3f1fcda15271ddf99a4181550ef00ca9d0f80f13469c29dfaa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (29 lines \u00D7 2): crates/db/src/index_lifecycle/repository.rs:200-228 | crates/db/src/migrations/startup/bootstrap.rs:273-301 \u2014 before extracting anything, compare \u0060crates/db/src/index_lifecycle/repository.rs\u0060 and \u0060crates/db/src/migrations/startup/bootstrap.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. 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":"crates/db/src/index_lifecycle/repository.rs"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"9144528a3bdb796ea672ee2d582ce7d772d0ae60f33a0becda6fc47308292e52"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (28 lines \u00D7 2): crates/db/src/migrations/vector_scale.rs:436-463 | crates/db/src/migrations/vector_scale.rs:583-610 \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":"crates/db/src/migrations/vector_scale.rs"},"region":{"startLine":436}}}],"partialFingerprints":{"codehealthFindingId/v1":"af1620f76a926bff042d006f76c1471d5dbbe2edfa0f967b6a7d40784bf06596"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 2): crates/db/src/index_lifecycle/text/driver.rs:1078-1104 | crates/db/src/index_lifecycle/text/driver.rs:1379-1405 \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":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":1078}}}],"partialFingerprints":{"codehealthFindingId/v1":"44062b2136a8d2abb0611ed42d9edc39153803abb1c217070e760a6872059acd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24\u201325 lines \u00D7 2): crates/db/src/encoding/v2/keys/indexes/vector/metadata.rs:28-52 | crates/db/src/encoding/v2/legacy/vector/transaction_guard.rs:28-51 \u2014 before extracting anything, compare \u0060crates/db/src/encoding/v2/keys/indexes/vector/metadata.rs\u0060 and \u0060crates/db/src/encoding/v2/legacy/vector/transaction_guard.rs\u0060 as WHOLE FILES: this scan already matched 3 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":"crates/db/src/encoding/v2/keys/indexes/vector/metadata.rs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"880c9b0ae110f7ddb038b949168f2e6a296e2a864219ad5d4ddb0f8cccc28b36"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24\u201325 lines \u00D7 2): crates/db/src/index_lifecycle/text/driver.rs:2657-2681 | crates/db/src/index_lifecycle/text/driver.rs:2799-2822 \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":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":2657}}}],"partialFingerprints":{"codehealthFindingId/v1":"5903f012ac624e777f57b350410e8024386b01f444ac807830214fecd45d06bc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): crates/db/src/search/text/mod.rs:1096-1120 | crates/db/src/search/text/mod.rs:1126-1150 \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":"crates/db/src/search/text/mod.rs"},"region":{"startLine":1096}}}],"partialFingerprints":{"codehealthFindingId/v1":"c27c26d089ed2bf7e3bcdfe8bd05efeecbab4be49ce55bc41d1f9697cda4be26"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): crates/db/src/encoding/v2/keys/indexes/range/edge.rs:204-227 | crates/db/src/encoding/v2/keys/indexes/range/node.rs:29-52 \u2014 before extracting anything, compare \u0060crates/db/src/encoding/v2/keys/indexes/range/edge.rs\u0060 and \u0060crates/db/src/encoding/v2/keys/indexes/range/node.rs\u0060 as WHOLE FILES: this scan already matched 6 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":"crates/db/src/encoding/v2/keys/indexes/range/edge.rs"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2b420d2a1cf1e0d22254a9f179341172137afbdcafe731596083c4aea5402ab"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): crates/db/src/execution/interpreter/mutation/edge.rs:308-331 | crates/db/src/execution/interpreter/mutation/node.rs:265-288 \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":"crates/db/src/execution/interpreter/mutation/edge.rs"},"region":{"startLine":308}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac8fc15c78b1a4366532467ed52f8fc00254f557482458b704fb6f2784123194"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22\u201324 lines \u00D7 2): crates/db/src/index_lifecycle_testing.rs:289-310 | crates/db/src/index_lifecycle_testing.rs:834-857 \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":"crates/db/src/index_lifecycle_testing.rs"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f34607b90722984c1934944a92da128e56b745d4c7b773e858fd67386ee945e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): crates/db/src/execution/interpreter/access/indexes.rs:167-190 | crates/db/src/execution/interpreter/access/indexes.rs:241-264 \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":"crates/db/src/execution/interpreter/access/indexes.rs"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdb5ce6f0a5766052768df563aba23e2d983627b188813532b03658a476a9deb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): crates/planner/src/diagnostics/analyze.rs:1262-1285 | crates/planner/src/ir/expr/validation.rs:35-58 \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":"crates/planner/src/diagnostics/analyze.rs"},"region":{"startLine":1262}}}],"partialFingerprints":{"codehealthFindingId/v1":"247857ebaa0dc28437fc203bcc17956c36f10cd541c690dc9d19b203772c440d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): crates/planner/src/planning/envelope/write_contract.rs:50-73 | crates/planner/src/planning/selected/native/context_usage.rs:50-73 \u2014 before extracting anything, compare \u0060crates/planner/src/planning/envelope/write_contract.rs\u0060 and \u0060crates/planner/src/planning/selected/native/context_usage.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":"crates/planner/src/planning/envelope/write_contract.rs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"290712389ba3dd1947a6a66247f12bd4be8a62569f6a207b560643ff65857bda"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): crates/db/src/encoding/v2/keys/indexes/vector/reverse_edges.rs:33-55 | crates/db/src/encoding/v2/keys/indexes/vector/reverse_edges.rs:119-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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/encoding/v2/keys/indexes/vector/reverse_edges.rs"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"10e7da7e043cdcb4ff338d9eeb16eb2964953f24b55d334edd15b08c46437635"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): crates/db/src/index_lifecycle_testing/contracts/all_index_validation.rs:299-321 | crates/db/src/index_lifecycle_testing/contracts/all_index_validation.rs:325-347 \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":"crates/db/src/index_lifecycle_testing/contracts/all_index_validation.rs"},"region":{"startLine":299}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdf24201fb96336bbe85adccdf7a8e869dc8303b8d2d70c4e08249d94bb1cf07"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): crates/db/src/index_lifecycle_testing.rs:1216-1238 | crates/db/src/index_lifecycle_testing.rs:1342-1364 \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":"crates/db/src/index_lifecycle_testing.rs"},"region":{"startLine":1216}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e15f0b35a05db83e2298ea89a30ea6b9966dc95da9929ec4d60a3dedd8786f4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): crates/db/src/migrations/vector_retirement.rs:495-517 | crates/db/src/migrations/vector_retirement.rs:897-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":"crates/db/src/migrations/vector_retirement.rs"},"region":{"startLine":495}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9001a25630ddfe019d424f9f5fc0e15b8aacc6215be813defa50609a4103f8a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): crates/db/src/search/vector/hnsw/mutation/mod.rs:1976-1998 | crates/db/src/search/vector/hnsw/mutation/mod.rs:2034-2056 \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":"crates/db/src/search/vector/hnsw/mutation/mod.rs"},"region":{"startLine":1976}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a3ef623adda128247806f5848f2913118df2792848b1c1172b52424d287d993"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): crates/db/src/search/vector/hnsw/restricted.rs:1043-1065 | crates/db/src/search/vector/hnsw/restricted.rs:1069-1091 \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":"crates/db/src/search/vector/hnsw/restricted.rs"},"region":{"startLine":1043}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a4b6782dbfb345d83b8650cb4e48c942c4015a0caf5e6d59c96efb390adb778"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20\u201323 lines \u00D7 2): crates/db/src/search/vector/hnsw/search.rs:394-413 | crates/db/src/search/vector/hnsw/search.rs:437-459 \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":"crates/db/src/search/vector/hnsw/search.rs"},"region":{"startLine":394}}}],"partialFingerprints":{"codehealthFindingId/v1":"2454e8ea4d8f5cbecd0cae29aaaa0f62e403027c5c30a863fb730838a8554812"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): crates/planner/src/exec/count.rs:1251-1273 | crates/planner/src/exec/count.rs:1314-1336 \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":"crates/planner/src/exec/count.rs"},"region":{"startLine":1251}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f4d77e0ce2b0b4374afbf13e7f5de0066227b9054ecefe567f86cf64dcce5a6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): crates/planner/src/rules/access/sets/equality_range/intersection/edge.rs:85-107 | crates/planner/src/rules/access/sets/equality_range/intersection/node.rs:85-107 \u2014 before extracting anything, compare \u0060crates/planner/src/rules/access/sets/equality_range/intersection/edge.rs\u0060 and \u0060crates/planner/src/rules/access/sets/equality_range/intersection/node.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 54 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":"crates/planner/src/rules/access/sets/equality_range/intersection/edge.rs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"95565956a1811ff8b24f16410a3f42f6290d00b7f15e1110d658525e8050ff6b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): crates/db/src/search/vector/spaces/simple_avx.rs:103-124 | crates/db/src/search/vector/spaces/simple_avx.rs:217-238 \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":"crates/db/src/search/vector/spaces/simple_avx.rs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"9398d58f3a8cdc320c28ca80ce834f4a82641f43427b073960aa6ea2983c7ff2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 4): crates/db/src/execution/interpreter/mutation/edge.rs:244-264 | crates/db/src/execution/interpreter/mutation/edge.rs:317-337 | crates/db/src/execution/interpreter/mutation/node.rs:190-210 | crates/db/src/execution/interpreter/mutation/node.rs:274-294 \u2014 there are 4 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 4 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/execution/interpreter/mutation/edge.rs"},"region":{"startLine":244}}}],"partialFingerprints":{"codehealthFindingId/v1":"772e82f52c13fda2ded3a861a1c582fe763bfb726c3c5bef2c3be5b50000ffb1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17\u201321 lines \u00D7 3): crates/db/src/encoding/v2/keys/indexes/equality/edge.rs:108-128 | crates/db/src/encoding/v2/keys/indexes/equality/edge.rs:251-267 | crates/db/src/encoding/v2/keys/indexes/equality/node.rs:60-78 \u2014 before extracting anything, compare \u0060crates/db/src/encoding/v2/keys/indexes/equality/edge.rs\u0060 and \u0060crates/db/src/encoding/v2/keys/indexes/equality/node.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":"crates/db/src/encoding/v2/keys/indexes/equality/edge.rs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"29c8233cc468c2450da24304e6d4e6ef29cdc3bafe71d4456c56a1ba60880753"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): crates/db/src/index_lifecycle_testing/contracts.rs:4525-4545 | crates/db/src/index_lifecycle_testing/contracts/all_index_validation.rs:1182-1202 \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":"crates/db/src/index_lifecycle_testing/contracts.rs"},"region":{"startLine":4525}}}],"partialFingerprints":{"codehealthFindingId/v1":"068e11acd7672290e36188b4eb65c38035b9512e70d2e2788cae23576c376ef2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): crates/db/src/migrations/indexes/equality_bitmap.rs:404-424 | crates/db/src/migrations/indexes/equality_bitmap.rs:453-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":"crates/db/src/migrations/indexes/equality_bitmap.rs"},"region":{"startLine":404}}}],"partialFingerprints":{"codehealthFindingId/v1":"98ed20e546ed8fc4ca0aefbdc0644a4d22f4605869644a1f09d192483e589396"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): crates/db/src/search/mod.rs:2698-2718 | crates/db/src/search/mod.rs:2720-2740 \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":"crates/db/src/search/mod.rs"},"region":{"startLine":2698}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a63cecbde4c20d410c1c2a5f4b047ce91d739c667c83d1d225dcc486e0f5def"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): crates/db/src/encoding/v2/keys/indexes/label.rs:46-65 | crates/db/src/encoding/v2/keys/indexes/label.rs:153-172 \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":"crates/db/src/encoding/v2/keys/indexes/label.rs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"baa54daabcdac35afb7b99fce4a69a1bf975aae9fe1ca0f0d26910e71b28a3f9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): crates/db/src/execution/interpreter/access/indexes.rs:664-683 | crates/db/src/execution/interpreter/access/range.rs:340-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":"crates/db/src/execution/interpreter/access/indexes.rs"},"region":{"startLine":664}}}],"partialFingerprints":{"codehealthFindingId/v1":"39fa635fc6748a31cda7a0961ea9d070a4437f619cee4556322224c089b1288b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): crates/db/src/execution/interpreter/count.rs:575-594 | crates/db/src/execution/interpreter/count.rs:622-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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/execution/interpreter/count.rs"},"region":{"startLine":575}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff48e0cbae9f8de05a10c0f494b8f7294f229d1215408687a2ea872912a02196"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): crates/db/src/migrations/mod.rs:3480-3499 | crates/db/src/migrations/mod.rs:3590-3609 \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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":3480}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6aecd588826dbc7e8a2643dad1d2fdf86090da4b51c514e69416806eeb4491c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18\u201320 lines \u00D7 2): crates/planner/src/planning/index_ddl/create.rs:18-37 | crates/planner/src/planning/index_ddl/drop.rs:16-33 \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":"crates/planner/src/planning/index_ddl/create.rs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"2eaa2539bd0aed9b215c701b8bb5602c105dda93b9a1cede049aa86236ce6a41"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 4): crates/db/src/migrations/mod.rs:6171-6189 | crates/db/src/migrations/mod.rs:6741-6759 | crates/db/src/migrations/mod.rs:6869-6887 | crates/db/src/migrations/mod.rs:7141-7159 \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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":6171}}}],"partialFingerprints":{"codehealthFindingId/v1":"133aca3f40b04cfd90c01c0d1fd935795e123089694b21fad412b2da64618ce0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18\u201319 lines \u00D7 3): crates/db/src/encoding/v2/keys/indexes/vector/entry_candidates.rs:17-35 | crates/db/src/encoding/v2/keys/indexes/vector/items.rs:17-34 | crates/db/src/encoding/v2/keys/indexes/vector/simhash.rs:17-34 \u2014 before extracting anything, compare \u0060crates/db/src/encoding/v2/keys/indexes/vector/entry_candidates.rs\u0060 and \u0060crates/db/src/encoding/v2/keys/indexes/vector/simhash.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 53 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":"crates/db/src/encoding/v2/keys/indexes/vector/entry_candidates.rs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"3abcbb321752188bf814d70b21134d3c2393f34647e93c89ccbd8020515ada10"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): crates/db/src/encoding/v2/keys/indexes/property.rs:210-228 | crates/db/src/encoding/v2/keys/indexes/property.rs:275-293 \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":"crates/db/src/encoding/v2/keys/indexes/property.rs"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b59747a86312c15d23c1ed8d7ff622d6d80ba5ee0dcf167388fba1987074da4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16\u201319 lines \u00D7 2): crates/db/src/encoding/v2/keys/indexes/vector/items.rs:29-44 | crates/db/src/encoding/v2/keys/indexes/vector/items.rs:93-111 \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":"crates/db/src/encoding/v2/keys/indexes/vector/items.rs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"43251edd8c94348da0ae4bc91a9621b83fc83f2e80f08b4eec987b53c9ed2677"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18\u201319 lines \u00D7 2): crates/db/src/encoding/v2/keys/indexes/vector/items.rs:81-99 | crates/db/src/encoding/v2/keys/indexes/vector/simhash.rs:81-98 \u2014 before extracting anything, compare \u0060crates/db/src/encoding/v2/keys/indexes/vector/items.rs\u0060 and \u0060crates/db/src/encoding/v2/keys/indexes/vector/simhash.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 64 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":"crates/db/src/encoding/v2/keys/indexes/vector/items.rs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f6039f4e0ed4b3d22c9eb431c2e7a63563a7c6fecf45b0468d0e24db163eeb8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): crates/db/src/encoding/v2/keys/indexes/vector/items.rs:107-125 | crates/db/src/encoding/v2/keys/indexes/vector/simhash.rs:105-123 \u2014 before extracting anything, compare \u0060crates/db/src/encoding/v2/keys/indexes/vector/items.rs\u0060 and \u0060crates/db/src/encoding/v2/keys/indexes/vector/simhash.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 64 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":"crates/db/src/encoding/v2/keys/indexes/vector/items.rs"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"71669dcabe7e88aeb149cbb82a0e055ec96880f4f69b268775a90a3b38751f39"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18\u201319 lines \u00D7 2): crates/db/src/index_lifecycle/secondary/exact.rs:379-397 | crates/db/src/index_lifecycle/secondary/exact/ordered.rs:183-200 \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":"crates/db/src/index_lifecycle/secondary/exact.rs"},"region":{"startLine":379}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b70b99ccf5889174cfce69d14666eb78042758ee2cc3b325002fb564edcafdf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18\u201319 lines \u00D7 2): crates/db/src/merge_operator.rs:281-298 | crates/db/src/merge_operator.rs:310-328 \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":"crates/db/src/merge_operator.rs"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"1aed8296569124ee29c468765f8205e36c5dcba1c06da78c796b92723873937f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18\u201319 lines \u00D7 2): crates/db/src/search/vector/hnsw/search.rs:479-497 | crates/db/src/search/vector/hnsw/search.rs:1039-1056 \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":"crates/db/src/search/vector/hnsw/search.rs"},"region":{"startLine":479}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c56f1e49277fce4a26bd8cf87652751a5ae5ceb3f83d21d7f5cfb6d491231e7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): crates/db/src/search/vector/spaces/simple_avx.rs:49-67 | crates/db/src/search/vector/spaces/simple_avx.rs:162-180 \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":"crates/db/src/search/vector/spaces/simple_avx.rs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"4702cec0263d9e699459bb05d0ee44059c20f69db473c856afeeb0302b19c145"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): crates/db/src/encoding/v2/values/indexes/equality.rs:226-243 | crates/db/src/encoding/v2/values/indexes/range.rs:66-83 \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":"crates/db/src/encoding/v2/values/indexes/equality.rs"},"region":{"startLine":226}}}],"partialFingerprints":{"codehealthFindingId/v1":"56fa33361f2fe1918765e09668dcdcf7ec89da9576c731bbeaf8c63b15506cbc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201318 lines \u00D7 2): crates/db/src/index_lifecycle_testing/contracts.rs:3125-3136 | crates/db/src/index_lifecycle_testing/contracts.rs:3151-3168 \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":"crates/db/src/index_lifecycle_testing/contracts.rs"},"region":{"startLine":3125}}}],"partialFingerprints":{"codehealthFindingId/v1":"96711b92b65088d672338326ea49a63db84202a0873437df7365dca2d1f0805d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): crates/db/src/search/vector/hnsw/mutation/mod.rs:251-268 | crates/db/src/search/vector/hnsw/search.rs:54-71 \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":"crates/db/src/search/vector/hnsw/mutation/mod.rs"},"region":{"startLine":251}}}],"partialFingerprints":{"codehealthFindingId/v1":"66787924ee9a0ea469d2744ae5df3a7f3348ea7d8e258e7d8125d3b61e5ac3d1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15\u201317 lines \u00D7 2): crates/db/src/encoding/v2/keys/indexes/equality/edge.rs:279-293 | crates/db/src/encoding/v2/keys/indexes/equality/node.rs:91-107 \u2014 before extracting anything, compare \u0060crates/db/src/encoding/v2/keys/indexes/equality/edge.rs\u0060 and \u0060crates/db/src/encoding/v2/keys/indexes/equality/node.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":"crates/db/src/encoding/v2/keys/indexes/equality/edge.rs"},"region":{"startLine":279}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb45abae9c56d8eae6b967cc84590b559ba9021adc9048606b3dec8af4a7f5f0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16\u201317 lines \u00D7 2): crates/db/src/encoding/v2/keys/indexes/vector/simhash.rs:29-44 | crates/db/src/encoding/v2/keys/indexes/vector/simhash.rs:93-109 \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":"crates/db/src/encoding/v2/keys/indexes/vector/simhash.rs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"22d3f224682f19b0e4fd94f662c4214fb95082914aa44c38d8e51b53ae0ce82a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): crates/db/src/index_lifecycle/outbox.rs:1094-1110 | crates/db/src/index_lifecycle/outbox.rs:1121-1137 \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":"crates/db/src/index_lifecycle/outbox.rs"},"region":{"startLine":1094}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9b1df5c5b6426a47cdb38a566776f2ca940342b0ec1f92cd5aad1ebb213be8d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): crates/db/src/index_lifecycle/text/active_batch.rs:668-684 | crates/db/src/index_lifecycle/text/active_batch.rs:693-709 \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":"crates/db/src/index_lifecycle/text/active_batch.rs"},"region":{"startLine":668}}}],"partialFingerprints":{"codehealthFindingId/v1":"9afeca0c96a7e7236d3cdec7f2c597ff14f2679000fe709ac822b6eb5745b1ca"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): crates/db/src/index_lifecycle/text/driver.rs:2372-2388 | crates/db/src/index_lifecycle/text/driver.rs:2405-2421 \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":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":2372}}}],"partialFingerprints":{"codehealthFindingId/v1":"9cc5141e2364ded537ba449d42456abf47d04f200e521d76e28bf9fb1d1cbc5e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): crates/db/src/index_lifecycle/text/serving.rs:192-208 | crates/db/src/index_lifecycle/text/serving.rs:278-294 \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":"crates/db/src/index_lifecycle/text/serving.rs"},"region":{"startLine":192}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d32d3612795a560b0dfb523db71aaddbf611b04f1cbb1780fdf71facb50e1a4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16\u201317 lines \u00D7 2): crates/db/src/lib.rs:2016-2032 | crates/db/src/lib.rs:3113-3128 \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":"crates/db/src/lib.rs"},"region":{"startLine":2016}}}],"partialFingerprints":{"codehealthFindingId/v1":"b964abb874a7ad6edec7219907afffb16fd9a088ab4a2a3502d8e97468f1bb49"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): crates/db-testkit/src/model.rs:972-988 | crates/db-testkit/src/model.rs:995-1011 \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":"crates/db-testkit/src/model.rs"},"region":{"startLine":972}}}],"partialFingerprints":{"codehealthFindingId/v1":"e05aa801649a21bc5b1d19893d0e3587fc025e1cc274e373015a97523f5bb218"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): crates/planner/src/exec/access/edge.rs:275-291 | crates/planner/src/exec/access/node.rs:335-351 \u2014 before extracting anything, compare \u0060crates/planner/src/exec/access/edge.rs\u0060 and \u0060crates/planner/src/exec/access/node.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":"crates/planner/src/exec/access/edge.rs"},"region":{"startLine":275}}}],"partialFingerprints":{"codehealthFindingId/v1":"8785bd1da99f2b1d6af0306064a23a30015fd92d96d57f6207602fb0d7d07a02"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): crates/value-semantics/src/lib.rs:93-109 | crates/value-semantics/src/lib.rs:117-133 \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":"crates/value-semantics/src/lib.rs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e133c3974b898e06df2bd3a349a950e52bd2cd4881d12ea7c3a963360e0d10f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15\u201316 lines \u00D7 5): crates/db/src/encoding/v2/keys/indexes/equality/edge.rs:109-124 | crates/db/src/encoding/v2/keys/indexes/equality/edge.rs:251-265 | crates/db/src/encoding/v2/keys/indexes/equality/node.rs:60-74 | crates/db/src/encoding/v2/keys/indexes/label.rs:41-55 | crates/db/src/encoding/v2/keys/indexes/label.rs:147-162 \u2014 before extracting anything, compare \u0060crates/db/src/encoding/v2/keys/indexes/equality/edge.rs\u0060 and \u0060crates/db/src/encoding/v2/keys/indexes/equality/node.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":"crates/db/src/encoding/v2/keys/indexes/equality/edge.rs"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d2cfe11644755750affb58dad6775b5338fa5f332a0ccf9926fde4af5a70005"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13\u201316 lines \u00D7 4): crates/db/src/search/vector/spaces/simple_avx.rs:49-61 | crates/db/src/search/vector/spaces/simple_avx.rs:104-119 | crates/db/src/search/vector/spaces/simple_avx.rs:162-174 | crates/db/src/search/vector/spaces/simple_avx.rs:218-233 \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":"crates/db/src/search/vector/spaces/simple_avx.rs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"86301f1b4356165c8c5ac68345b731722b4008d115b0f03a3bb94f2fb4c5e573"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): crates/db/src/encoding/v2/keys/indexes/equality/edge.rs:150-165 | crates/db/src/encoding/v2/keys/indexes/range/edge.rs:169-184 \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":"crates/db/src/encoding/v2/keys/indexes/equality/edge.rs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe360df8e18a30fec70088b1b60c95834c0d50a31a0b3e020454a0aff04ca323"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201316 lines \u00D7 2): crates/db/src/encoding/v2/keys/indexes/range/edge.rs:219-234 | crates/db/src/encoding/v2/keys/indexes/range/edge.rs:401-414 \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":"crates/db/src/encoding/v2/keys/indexes/range/edge.rs"},"region":{"startLine":219}}}],"partialFingerprints":{"codehealthFindingId/v1":"a26b0b714421fe90a75575ed7d2462b47b9dbda6aeafb4bf1252a839dad6ea41"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201316 lines \u00D7 2): crates/db/src/index_lifecycle/secondary.rs:1244-1259 | crates/db/src/index_lifecycle/secondary.rs:1616-1629 \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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":1244}}}],"partialFingerprints":{"codehealthFindingId/v1":"515e3554a0dbba7204707f23f33cfa85ea59e44b51df37e925c85f839a33a752"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15\u201316 lines \u00D7 2): crates/db/src/index_lifecycle_testing/contracts.rs:3217-3232 | crates/db/src/index_lifecycle_testing/contracts.rs:3298-3312 \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":"crates/db/src/index_lifecycle_testing/contracts.rs"},"region":{"startLine":3217}}}],"partialFingerprints":{"codehealthFindingId/v1":"0cfb0b075adb02abddf3ce903d70b83702999997bb869b2fb8d069010eb93a8f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): crates/db/src/index_lifecycle_testing.rs:1270-1285 | crates/db/src/index_lifecycle_testing.rs:1454-1469 \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":"crates/db/src/index_lifecycle_testing.rs"},"region":{"startLine":1270}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e0e0482c36fc1a458550d3223895f73071a80fe23bce7e471103788c79ac849"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15\u201316 lines \u00D7 2): crates/db/src/migrations/mod.rs:1875-1890 | crates/db/src/migrations/mod.rs:2114-2128 \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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":1875}}}],"partialFingerprints":{"codehealthFindingId/v1":"192a8c7e17f53ccb227de1db7a9d87b1388670a0530131c248a89edf37f40709"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): crates/db/src/migrations/mod.rs:6182-6197 | crates/db/src/migrations/mod.rs:6530-6545 \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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":6182}}}],"partialFingerprints":{"codehealthFindingId/v1":"90e1b6477ae7dcd5b45c547df6fe57c8eea24ecca58c25a4c6a4b40aff950e89"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201316 lines \u00D7 2): crates/db/src/needed_in_future/merge_operator.rs:196-211 | crates/db/src/needed_in_future/merge_operator.rs:236-249 \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":"crates/db/src/needed_in_future/merge_operator.rs"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"65252eb192ee387962581349d6e80db76dc2533feeb743852f17b1a3d6fb5b47"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13\u201316 lines \u00D7 2): crates/db/src/search/vector/hnsw/index.rs:1397-1409 | crates/db/src/search/vector/hnsw/index.rs:1464-1479 \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":"crates/db/src/search/vector/hnsw/index.rs"},"region":{"startLine":1397}}}],"partialFingerprints":{"codehealthFindingId/v1":"d435f08e8847bc64eef275f9d5eadb5419afcd346169c1fbb8bd88067baf0a1e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): crates/planner/src/rules/access/order/direction/edge.rs:11-26 | crates/planner/src/rules/access/order/direction/node.rs:11-26 \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":"crates/planner/src/rules/access/order/direction/edge.rs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"03e94cb83acccc8edb37d1248efae094f8d75814a9b9a27483e471de42a88941"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 5): crates/db/src/encoding/v2/keys/indexes/vector/entry_candidates.rs:169-183 | crates/db/src/encoding/v2/keys/indexes/vector/layer0.rs:18-32 | crates/db/src/encoding/v2/keys/indexes/vector/reverse_edges.rs:21-35 | crates/db/src/encoding/v2/keys/indexes/vector/simhash.rs:163-177 | crates/db/src/encoding/v2/keys/indexes/vector/upper_layers.rs:107-121 \u2014 before extracting anything, compare \u0060crates/db/src/encoding/v2/keys/indexes/vector/entry_candidates.rs\u0060 and \u0060crates/db/src/encoding/v2/keys/indexes/vector/layer0.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":"crates/db/src/encoding/v2/keys/indexes/vector/entry_candidates.rs"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"c08186d6a4aebf7793cc9f5b4e27a1cb98115b5e67344f4e4bec5273c2683b27"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): crates/db/src/encoding/v2/keys/indexes/vector/entry_candidates.rs:83-97 | crates/db/src/encoding/v2/keys/indexes/vector/upper_layers.rs:23-37 \u2014 before extracting anything, compare \u0060crates/db/src/encoding/v2/keys/indexes/vector/entry_candidates.rs\u0060 and \u0060crates/db/src/encoding/v2/keys/indexes/vector/upper_layers.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 49 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":"crates/db/src/encoding/v2/keys/indexes/vector/entry_candidates.rs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"5de49d7abbcfe843a3784a9bfdd6c7a8b6577e220875a62b3b97c3e3a73dc83f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): crates/db/src/encoding/v2/keys/indexes/vector/storage_prefixes.rs:181-195 | crates/db/src/encoding/v2/keys/indexes/vector/storage_prefixes.rs:234-248 \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":"crates/db/src/encoding/v2/keys/indexes/vector/storage_prefixes.rs"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"80b5d3ad24eac7a8693edbbb6929b746250ea37d51da53856fb4a96d8a453dae"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13\u201315 lines \u00D7 2): crates/db/src/index_lifecycle/text/driver.rs:2391-2403 | crates/db/src/index_lifecycle/text/driver.rs:2423-2437 \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":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":2391}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c4d12799ef08af6b53e8b2bc3b5e258b2e522a952d47ff9a2179c58690d6a78"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): crates/db/src/index_lifecycle_testing/contracts.rs:3876-3890 | crates/db/src/index_lifecycle_testing/contracts.rs:3959-3973 \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":"crates/db/src/index_lifecycle_testing/contracts.rs"},"region":{"startLine":3876}}}],"partialFingerprints":{"codehealthFindingId/v1":"83a743dfe1ba55ce7a15f299881b3505d152c510da19f3e9500c48acd7681b01"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): crates/db/src/merge_operator.rs:97-111 | crates/db/src/merge_operator.rs:123-137 \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":"crates/db/src/merge_operator.rs"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"547c9265e3110ff67037d6a97a173776b6eb2b4a8b0ca82eeb71b49aec4d5a7b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201315 lines \u00D7 2): crates/db/src/migration_parity.rs:914-927 | crates/db/src/migration_parity.rs:963-977 \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":"crates/db/src/migration_parity.rs"},"region":{"startLine":914}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ab52c8ba5375c7289cb5f86377f0507733b4d6fbc6e858ef311af70d3b1ab26"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): crates/db/src/search/text/mod.rs:1054-1068 | crates/db/src/search/text/mod.rs:1076-1090 \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":"crates/db/src/search/text/mod.rs"},"region":{"startLine":1054}}}],"partialFingerprints":{"codehealthFindingId/v1":"08449787470c947916b8b40c250c69fbfaaed6b3de3223e460b5a94553decf8a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): crates/db/src/search/vector/hnsw/restricted.rs:1088-1102 | crates/db/src/search/vector/hnsw/restricted.rs:1401-1415 \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":"crates/db/src/search/vector/hnsw/restricted.rs"},"region":{"startLine":1088}}}],"partialFingerprints":{"codehealthFindingId/v1":"c364cfbbf1d5b1a7e347e96cba8a85a6c8779eb486f7c6d9d066c2eee321c91c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13\u201315 lines \u00D7 2): crates/db/src/search/vector/spaces/simple_sse.rs:48-60 | crates/db/src/search/vector/spaces/simple_sse.rs:104-118 \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":"crates/db/src/search/vector/spaces/simple_sse.rs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"20e1919d0786a13b1c69e1a96c8a202a1d8ec3c9df9029fb575cce3b8745f2ac"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201315 lines \u00D7 2): crates/planner/src/planning/envelope/write_contract.rs:34-47 | crates/planner/src/planning/selected/native/context_usage.rs:25-39 \u2014 before extracting anything, compare \u0060crates/planner/src/planning/envelope/write_contract.rs\u0060 and \u0060crates/planner/src/planning/selected/native/context_usage.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":"crates/planner/src/planning/envelope/write_contract.rs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"39e92af78275999a9ada9ce7dd626d62dac10d44a971b66e0f3bfed9978aacb6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): crates/planner/src/rules/cardinality.rs:1217-1231 | crates/planner/src/rules/cardinality.rs:1294-1308 \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":"crates/planner/src/rules/cardinality.rs"},"region":{"startLine":1217}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf81461689586c7123b129516a8726aeb8dabbd3e274c5503db00c23f7ce4d9b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201315 lines \u00D7 2): crates/planner/src/analysis.rs:48-61 | crates/planner/src/rules/access/filter/atoms/mod.rs:30-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":"crates/planner/src/analysis.rs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b2b732376ed9d2c424383c6ee3ea109f5550ac7e1bf0faad99e213af5f0a5b1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): crates/planner/src/exec/lowering/secondary_set.rs:295-309 | crates/planner/src/exec/lowering/secondary_set.rs:357-371 \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":"crates/planner/src/exec/lowering/secondary_set.rs"},"region":{"startLine":295}}}],"partialFingerprints":{"codehealthFindingId/v1":"a003162281d83c674041aef3729a917489990d931a322d3cc3899d54e074bc7f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 6): crates/db/src/encoding/v2/keys/graph.rs:33-46 | crates/db/src/encoding/v2/keys/graph.rs:104-117 | crates/db/src/encoding/v2/keys/graph.rs:175-188 | crates/db/src/encoding/v2/keys/graph.rs:255-268 | crates/db/src/encoding/v2/keys/graph.rs:325-338 | crates/db/src/encoding/v2/legacy/edge_property_pair.rs:28-41 \u2014 before extracting anything, compare \u0060crates/db/src/encoding/v2/keys/graph.rs\u0060 and \u0060crates/db/src/encoding/v2/legacy/edge_property_pair.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. 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":"crates/db/src/encoding/v2/keys/graph.rs"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f6d24b6d3167ee537cfc046536ffd4ab5e8d2565a1c0613d7ba9ad96ef0a544"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 4): crates/db/src/migrations/mod.rs:6540-6553 | crates/db/src/migrations/mod.rs:6761-6774 | crates/db/src/migrations/mod.rs:6890-6903 | crates/db/src/migrations/mod.rs:8284-8297 \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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":6540}}}],"partialFingerprints":{"codehealthFindingId/v1":"fed43ae8a789d732e1efa6633a961b66dc1127bb4941f8444d57bf9c48d3b4ab"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): crates/cli/src/commands/add.rs:150-163 | crates/cli/src/commands/start.rs:99-112 \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":"crates/cli/src/commands/add.rs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c039b95b88c211aa73e8c209996750f3febbeb0e7e04256a3ebe3bb0469b59e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): crates/db/src/execution/interpreter/mutation/node.rs:308-321 | crates/db/src/execution/interpreter/mutation/node.rs:340-353 \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":"crates/db/src/execution/interpreter/mutation/node.rs"},"region":{"startLine":308}}}],"partialFingerprints":{"codehealthFindingId/v1":"c35caaf2772a4a648b7a3f38de3c493317b029fcf95f7a4b8e5ead191aa94f77"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): crates/db/src/index_lifecycle/text/driver.rs:1041-1054 | crates/db/src/index_lifecycle/text/driver.rs:1102-1115 \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":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":1041}}}],"partialFingerprints":{"codehealthFindingId/v1":"91ca306a2f9017b5ef7a0b97a2bc5e55673a4f71eeef2da972797fb1a6ebf4b3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201314 lines \u00D7 2): crates/db/src/index_lifecycle_testing.rs:896-907 | crates/db/src/index_lifecycle_testing.rs:1026-1039 \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":"crates/db/src/index_lifecycle_testing.rs"},"region":{"startLine":896}}}],"partialFingerprints":{"codehealthFindingId/v1":"1efab9c24ac7a2891029a6ca4e2cbc87449ff69dc018f1f8a681612a53f86d07"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): crates/db/src/migrations/mod.rs:2535-2548 | crates/db/src/migrations/mod.rs:2564-2577 \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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":2535}}}],"partialFingerprints":{"codehealthFindingId/v1":"3cf698ae97e914e1a192f9465b3acacd87ceb6fa5251b8195aadee3352cdbae9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13\u201314 lines \u00D7 2): crates/db/src/search/vector/hnsw/index.rs:1108-1120 | crates/db/src/search/vector/hnsw/index.rs:1182-1195 \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":"crates/db/src/search/vector/hnsw/index.rs"},"region":{"startLine":1108}}}],"partialFingerprints":{"codehealthFindingId/v1":"f038efb8e20d86db32932e665769273c120918b5187833603fc66444ae8c4640"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): crates/db/src/search/vector/storage/mod.rs:2438-2451 | crates/db/src/search/vector/storage/mod.rs:2461-2474 \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":"crates/db/src/search/vector/storage/mod.rs"},"region":{"startLine":2438}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c804ac37f522447218599b9932737e3e9024807d6ae54739c6ba0eb31168c04"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201314 lines \u00D7 2): crates/db/src/config/runtime_catalog.rs:15-26 | crates/db/src/config/runtime_catalog.rs:240-253 \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":"crates/db/src/config/runtime_catalog.rs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"014798f1fc637bb3b30a885583142b3bca6e0bdec9d7686fc0dc3db7747ebe0e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): crates/graph-algorithms/src/algorithms/centrality.rs:391-404 | crates/graph-algorithms/src/algorithms/centrality.rs:415-428 \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":"crates/graph-algorithms/src/algorithms/centrality.rs"},"region":{"startLine":391}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fd922aee71946ae69f385521a2168636262140eef42f9514c2dccd7b4f248cb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): crates/planner/src/rules/cardinality.rs:1157-1170 | crates/planner/src/rules/cardinality.rs:1181-1194 \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":"crates/planner/src/rules/cardinality.rs"},"region":{"startLine":1157}}}],"partialFingerprints":{"codehealthFindingId/v1":"88ccc092c8cee949541f1a6c3c4f73bfd6af717f38864b7ab69ecac99f560121"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): crates/planner/src/exec/lowering/costing.rs:283-296 | crates/planner/src/exec/lowering/costing.rs:380-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":"crates/planner/src/exec/lowering/costing.rs"},"region":{"startLine":283}}}],"partialFingerprints":{"codehealthFindingId/v1":"144ba72a69ab7e561b939a0fe148c6821addb83340d7eed19ef442839b97b56f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 4): crates/db/src/encoding/v2/keys/indexes/vector/entry_candidates.rs:195-207 | crates/db/src/encoding/v2/keys/indexes/vector/layer0.rs:44-56 | crates/db/src/encoding/v2/keys/indexes/vector/simhash.rs:189-201 | crates/db/src/encoding/v2/keys/indexes/vector/upper_layers.rs:133-145 \u2014 before extracting anything, compare \u0060crates/db/src/encoding/v2/keys/indexes/vector/entry_candidates.rs\u0060 and \u0060crates/db/src/encoding/v2/keys/indexes/vector/layer0.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":"crates/db/src/encoding/v2/keys/indexes/vector/entry_candidates.rs"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"69c2f845db13298c3b6f7377d9c04d280b0866f652dd8fd6f69580e4f7af6818"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 4): crates/db/src/index_lifecycle/text/driver.rs:748-759 | crates/db/src/index_lifecycle/text/driver.rs:790-801 | crates/db/src/index_lifecycle/text/driver.rs:807-819 | crates/db/src/index_lifecycle/text/driver.rs:824-835 \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":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":748}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7895d83e591be0b328590ba057a4b7b430d94f2802da8a3edeb8d50a12012bf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 4): crates/db/src/migrations/vector_properties.rs:281-293 | crates/db/src/migrations/vector_retirement.rs:514-525 | crates/db/src/migrations/vector_retirement.rs:648-659 | crates/db/src/migrations/vector_retirement.rs:916-927 \u2014 before extracting anything, compare \u0060crates/db/src/migrations/vector_properties.rs\u0060 and \u0060crates/db/src/migrations/vector_retirement.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 49 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":"crates/db/src/migrations/vector_properties.rs"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"755a6fccc0b7f76790b3699e4f5d125aa2ea1a62cbbb46e3e98f75dca237f862"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 4): crates/planner/src/exec/lowering/costing.rs:289-301 | crates/planner/src/exec/lowering/costing.rs:307-319 | crates/planner/src/exec/lowering/costing.rs:386-398 | crates/planner/src/exec/lowering/costing.rs:404-416 \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":"crates/planner/src/exec/lowering/costing.rs"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a138651623ddfd173451dd354855721dc2b3f926bc4940a29c9fb892fca5aeb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): crates/db/src/index_lifecycle/secondary.rs:1749-1761 | crates/db/src/index_lifecycle/secondary.rs:1980-1992 | crates/db/src/index_lifecycle/secondary.rs:2053-2065 \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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":1749}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ca9a3bc64f6eab09893cf6b02e18d09cdf4820573d69c0f2defa174f9dd4f70"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): crates/db/src/migrations/vector_retirement.rs:495-507 | crates/db/src/migrations/vector_retirement.rs:625-637 | crates/db/src/migrations/vector_retirement.rs:897-909 \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":"crates/db/src/migrations/vector_retirement.rs"},"region":{"startLine":495}}}],"partialFingerprints":{"codehealthFindingId/v1":"41dbb416e44c2d63b68f16ddbeb5aaa2dc693eac9fdb0182eafe4c587fe14265"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 2): crates/db/src/encoding/v2/keys/indexes/range/edge.rs:371-382 | crates/db/src/encoding/v2/keys/indexes/range/node.rs:185-197 \u2014 before extracting anything, compare \u0060crates/db/src/encoding/v2/keys/indexes/range/edge.rs\u0060 and \u0060crates/db/src/encoding/v2/keys/indexes/range/node.rs\u0060 as WHOLE FILES: this scan already matched 6 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":"crates/db/src/encoding/v2/keys/indexes/range/edge.rs"},"region":{"startLine":371}}}],"partialFingerprints":{"codehealthFindingId/v1":"574aa967455a8520cb2b7e1807fb685a9141996ab36d5eeeee5207c330bf37b8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): crates/db/src/encoding/v2/keys/indexes/vector/entry_candidates.rs:29-41 | crates/db/src/encoding/v2/keys/indexes/vector/entry_candidates.rs:95-107 \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":"crates/db/src/encoding/v2/keys/indexes/vector/entry_candidates.rs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fdf74003cb48f9df6dca8cf4e638239a4e7e330da3478bebdb4e306aa18429d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): crates/db/src/index_lifecycle/operation.rs:1030-1042 | crates/db/src/index_lifecycle/operation.rs:1487-1499 \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":"crates/db/src/index_lifecycle/operation.rs"},"region":{"startLine":1030}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d8a0a046caa1418f927f40a2f2e511ec74f3540aff1d68de416651607dd09d9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 2): crates/db/src/index_lifecycle/text/driver.rs:2614-2625 | crates/db/src/index_lifecycle/text/driver.rs:2644-2656 \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":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":2614}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1b266bc72056b4dd41272b23b3412cb507afe0edc3af10e86c1a96d4ced4c56"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): crates/db/src/migrations/mod.rs:5982-5994 | crates/db/src/migrations/mod.rs:6087-6099 \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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":5982}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5c7dfd867b828c82e949abf82a8c5be98026bc4b37860299277118804f6883f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): crates/db/src/search/mod.rs:2504-2516 | crates/db/src/search/mod.rs:2518-2530 \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":"crates/db/src/search/mod.rs"},"region":{"startLine":2504}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9bec45d570ffc76f47a6b6dccca5d3bdb27f53d0d3ed1411ebb1f8a4da63d34"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): crates/db/src/search/vector/generation.rs:399-411 | crates/db/src/search/vector/generation.rs:513-525 \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":"crates/db/src/search/vector/generation.rs"},"region":{"startLine":399}}}],"partialFingerprints":{"codehealthFindingId/v1":"0cf43e1c6f0c2488fdd99dc49bb9e9c2be4c2120bb749c25e01833fc00144ef1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): crates/db/src/search/vector/hnsw/restricted.rs:772-784 | crates/db/src/search/vector/hnsw/search.rs:1115-1127 \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":"crates/db/src/search/vector/hnsw/restricted.rs"},"region":{"startLine":772}}}],"partialFingerprints":{"codehealthFindingId/v1":"acfb81dce6811313fa187bdf9bc2086b4f6b9cd480beca418765a5663f475257"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201313 lines \u00D7 2): crates/db/src/search/vector/storage/mod.rs:1417-1426 | crates/db/src/search/vector/storage/mod.rs:1468-1480 \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":"crates/db/src/search/vector/storage/mod.rs"},"region":{"startLine":1417}}}],"partialFingerprints":{"codehealthFindingId/v1":"6423e656ec0ea0609cd7f83506e2fbaf2700ad19b192b1694cabb5ebfa4e3250"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): crates/db/src/search/vector/storage/mod.rs:1850-1862 | crates/db/src/search/vector/storage/mod.rs:1881-1893 \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":"crates/db/src/search/vector/storage/mod.rs"},"region":{"startLine":1850}}}],"partialFingerprints":{"codehealthFindingId/v1":"74ef9158a92a48eab7b7c6e8082f1735cfe4d2700f0435306fa5eadfe7b23dca"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): crates/db/src/execution/interpreter/access/indexes.rs:139-151 | crates/db/src/execution/interpreter/access/indexes.rs:213-225 \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":"crates/db/src/execution/interpreter/access/indexes.rs"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a62e96cc3cb71172b0893c9ad0c55ae2baf941cbd009240bb4c7188deb89de5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): crates/db/src/execution/interpreter/access/indexes.rs:153-165 | crates/db/src/execution/interpreter/access/indexes.rs:227-239 \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":"crates/db/src/execution/interpreter/access/indexes.rs"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd65b3bb264d4e54e71d1b582bd8826fcb871f26989aed2f4355d44960ad2e21"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): crates/planner/src/rules/access/filter/rules.rs:64-76 | crates/planner/src/rules/access/pipeline/filter.rs:39-51 \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":"crates/planner/src/rules/access/filter/rules.rs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"20b55e8c46c0a2ced43137441b9a37903def4fbe607afd6e76dd5a938ea2c92c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): crates/planner/src/ir/access/node/analysis.rs:83-95 | crates/planner/src/ir/access/node/analysis.rs:106-118 \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":"crates/planner/src/ir/access/node/analysis.rs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ecdea041085b57b5c13db075764ca5416c48a685c5ee0159cf02fac66a7fe1f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): crates/planner/src/ir/access/edge/analysis.rs:78-90 | crates/planner/src/ir/access/edge/analysis.rs:101-113 \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":"crates/planner/src/ir/access/edge/analysis.rs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"b97a3c4e6b28206af5c5c189a648d9b81249783ea5b8118d25f153d6867d8a88"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): crates/planner/src/planning/search/access/edge.rs:24-36 | crates/planner/src/planning/search/access/node.rs:24-36 \u2014 before extracting anything, compare \u0060crates/planner/src/planning/search/access/edge.rs\u0060 and \u0060crates/planner/src/planning/search/access/node.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":"crates/planner/src/planning/search/access/edge.rs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"a09912875b0a2495d613117f9eaa4945b71402b2922407010287d5097c32594b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): crates/planner/src/planning/search/access/edge.rs:52-64 | crates/planner/src/planning/search/access/node.rs:52-64 \u2014 before extracting anything, compare \u0060crates/planner/src/planning/search/access/edge.rs\u0060 and \u0060crates/planner/src/planning/search/access/node.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":"crates/planner/src/planning/search/access/edge.rs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5c1e610be9cfe4d20e33e00624a66629f6dbf47e5ad9d3a7d58128bf98922f2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201312 lines \u00D7 5): crates/planner/src/analysis/index_atoms/equality.rs:37-48 | crates/planner/src/analysis/labels.rs:98-109 | crates/planner/src/analysis/labels.rs:129-140 | crates/planner/src/analysis/prune.rs:62-72 | crates/planner/src/rules/access/filter/index/label_domain.rs:221-232 \u2014 there are 5 copies across 4 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/planner/src/analysis/index_atoms/equality.rs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"50bd79a2a88945a7282ce99ff838675a7259ad542e8a400a34bbe46e37ed5a53"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): crates/db/src/encoding/v2/keys/indexes/vector/metadata.rs:40-52 | crates/db/src/encoding/v2/keys/indexes/vector/storage_prefixes.rs:133-145 | crates/db/src/encoding/v2/legacy/vector/transaction_guard.rs:40-51 \u2014 before extracting anything, compare \u0060crates/db/src/encoding/v2/keys/indexes/vector/metadata.rs\u0060 and \u0060crates/db/src/encoding/v2/legacy/vector/transaction_guard.rs\u0060 as WHOLE FILES: this scan already matched 3 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":"crates/db/src/encoding/v2/keys/indexes/vector/metadata.rs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bf65488eb951185efa31447691fc168f3f38bd3c974d183b925199059a17025"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201312 lines \u00D7 3): crates/db/src/index_lifecycle/secondary.rs:1031-1041 | crates/db/src/index_lifecycle/text/driver.rs:3004-3015 | crates/db/src/index_lifecycle/vector/driver.rs:2114-2124 \u2014 before extracting anything, compare \u0060crates/db/src/index_lifecycle/secondary.rs\u0060 and \u0060crates/db/src/index_lifecycle/text/driver.rs\u0060 as WHOLE FILES: this scan already matched 6 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. 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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":1031}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3088a7a34eab45ec72159277938483e8e90857b7638baa74c86dd74cb5990ea"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): crates/db/src/index_lifecycle/secondary.rs:3659-3670 | crates/db/src/index_lifecycle/text/driver.rs:3389-3400 | crates/db/src/index_lifecycle/vector/driver.rs:3498-3509 \u2014 before extracting anything, compare \u0060crates/db/src/index_lifecycle/secondary.rs\u0060 and \u0060crates/db/src/index_lifecycle/text/driver.rs\u0060 as WHOLE FILES: this scan already matched 6 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. 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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":3659}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d437dbe824f39285761fc9bbb170ca593109f3f9922af4866f96ce145ba27d0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): crates/planner/src/planning/envelope/write_contract.rs:89-100 | crates/planner/src/planning/selected/native/context_usage.rs:90-101 | crates/planner/src/planning/selected/native/context_usage.rs:340-351 \u2014 before extracting anything, compare \u0060crates/planner/src/planning/envelope/write_contract.rs\u0060 and \u0060crates/planner/src/planning/selected/native/context_usage.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":"crates/planner/src/planning/envelope/write_contract.rs"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"591b3e5b6e24724e581c056e63441df8cd3897b7f31ba6aa9768ef5a89d901b9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/db/src/encoding/v2/keys/indexes/range/edge.rs:422-433 | crates/db/src/encoding/v2/keys/indexes/range/node.rs:216-227 \u2014 before extracting anything, compare \u0060crates/db/src/encoding/v2/keys/indexes/range/edge.rs\u0060 and \u0060crates/db/src/encoding/v2/keys/indexes/range/node.rs\u0060 as WHOLE FILES: this scan already matched 6 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":"crates/db/src/encoding/v2/keys/indexes/range/edge.rs"},"region":{"startLine":422}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c950511826b68740248440d95a4a59defd62d9cb255eafb615957ea866665cf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/db/src/encoding/v2/values/adjacency.rs:363-374 | crates/db/src/encoding/v2/values/adjacency.rs:397-408 \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":"crates/db/src/encoding/v2/values/adjacency.rs"},"region":{"startLine":363}}}],"partialFingerprints":{"codehealthFindingId/v1":"faa89cbd31f3af644c2852f5c5db5ca15f3485c1bb364cfe8f58d3b7a9e816ec"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/db/src/execution/interpreter/count.rs:277-288 | crates/db/src/execution/interpreter/count.rs:297-308 \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":"crates/db/src/execution/interpreter/count.rs"},"region":{"startLine":277}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5a9ce1275fd95c5942fd98515980dfed197ec1c6150c2fa90fd0842f3ff7c1f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/db/src/execution/interpreter/count.rs:317-328 | crates/db/src/execution/interpreter/count.rs:337-348 \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":"crates/db/src/execution/interpreter/count.rs"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a7d80ff8cbe7ba2e2347b26312b9830b958018177ddfd308bceba8c00178eed"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/db/src/index_lifecycle/repository.rs:184-195 | crates/db/src/migrations/startup/bootstrap.rs:257-268 \u2014 before extracting anything, compare \u0060crates/db/src/index_lifecycle/repository.rs\u0060 and \u0060crates/db/src/migrations/startup/bootstrap.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. 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":"crates/db/src/index_lifecycle/repository.rs"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"9395db1a9befce06565cdbdb38ddc2b2c8a6f5ad611578d6cb013f8177bc28ee"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/db/src/index_lifecycle/secondary.rs:443-454 | crates/db/src/index_lifecycle/secondary.rs:457-468 \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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":443}}}],"partialFingerprints":{"codehealthFindingId/v1":"77e15364a6b2df6086bc2d07910bfb4304f114138e2a8ba03f693c8bbdd5352f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/db/src/index_lifecycle/text/active_batch.rs:975-986 | crates/db/src/index_lifecycle/text/active_batch.rs:1053-1064 \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":"crates/db/src/index_lifecycle/text/active_batch.rs"},"region":{"startLine":975}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d29d72f59292afc054c9fc819e7d232bbc73c9cf3200373ba1827b1109d5f7b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/db/src/index_lifecycle/text/compaction.rs:87-98 | crates/db/src/index_lifecycle/text/manifest.rs:158-169 \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":"crates/db/src/index_lifecycle/text/compaction.rs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"94f97213d3aba412dd060beb72e5681b352f23d5ba7f975f978ed1c1b239e6b4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/db/src/index_lifecycle/text/statistics.rs:564-575 | crates/db/src/index_lifecycle/text/statistics.rs:861-872 \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":"crates/db/src/index_lifecycle/text/statistics.rs"},"region":{"startLine":564}}}],"partialFingerprints":{"codehealthFindingId/v1":"0812b649cd982ff2dc2bfd7251f04508e14499f5bdd7b3e4744c82bb5369b61f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/db/src/index_lifecycle/vector/driver.rs:1129-1140 | crates/db/src/index_lifecycle/vector/driver.rs:1156-1167 \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":"crates/db/src/index_lifecycle/vector/driver.rs"},"region":{"startLine":1129}}}],"partialFingerprints":{"codehealthFindingId/v1":"b83910ffdc4a5d1c9131352d0170f5a8c0d7fb315413acdbcf89a3fa1c9b053a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/db/src/index_lifecycle_testing.rs:1257-1268 | crates/db/src/index_lifecycle_testing.rs:1441-1452 \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":"crates/db/src/index_lifecycle_testing.rs"},"region":{"startLine":1257}}}],"partialFingerprints":{"codehealthFindingId/v1":"1412759523f2a5b3287ac9bb46599a925747d5bb08de9a4edcbfc0433fb8ecd5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/db/src/migration_parity.rs:302-313 | crates/db/src/migration_parity.rs:331-342 \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":"crates/db/src/migration_parity.rs"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1709943b4921e800902b83f28756e8b5f677e47398f9f78b6177c5c89f31d6f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/db/src/migrations/vector_retirement.rs:387-398 | crates/db/src/migrations/vector_retirement.rs:757-768 \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":"crates/db/src/migrations/vector_retirement.rs"},"region":{"startLine":387}}}],"partialFingerprints":{"codehealthFindingId/v1":"80d3f679e57be97ff068ed4d9919a2cbe2a0d9ad69aad3f1964fee4c04ccea77"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/db/src/migrations/vector_scale.rs:419-430 | crates/db/src/migrations/vector_scale.rs:574-585 \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":"crates/db/src/migrations/vector_scale.rs"},"region":{"startLine":419}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ca283ca5de56c305f418b3311476f3c2f535d73c464802ce72a7ce24c53dcb4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201312 lines \u00D7 2): crates/db/src/search/mod.rs:1045-1055 | crates/db/src/search/mod.rs:2389-2400 \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":"crates/db/src/search/mod.rs"},"region":{"startLine":1045}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd77b119b72a2fed9f581b2f60b96da4f6a336694a837f4767b0a5b8679ce1d0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/db/src/search/mod.rs:1591-1602 | crates/db/src/search/mod.rs:1662-1673 \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":"crates/db/src/search/mod.rs"},"region":{"startLine":1591}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6c26e4d1af276317298da5ee01b756b7d8a4b9b9f7732438267da607018dc8c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/db/src/search/mod.rs:1605-1616 | crates/db/src/search/mod.rs:1676-1687 \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":"crates/db/src/search/mod.rs"},"region":{"startLine":1605}}}],"partialFingerprints":{"codehealthFindingId/v1":"8332e7b11c47b2a0ad59ff692790c3f308ad7c59111976f16b2b1a68c8e88f80"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/db/src/search/mod.rs:1726-1737 | crates/db/src/search/mod.rs:1762-1773 \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":"crates/db/src/search/mod.rs"},"region":{"startLine":1726}}}],"partialFingerprints":{"codehealthFindingId/v1":"9149c792572c47858e93933f17f0be2bf18d7b4374239da38f63773e62597ee1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/db/src/search/vector/storage/mod.rs:964-975 | crates/db/src/search/vector/storage/mod.rs:1205-1216 \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":"crates/db/src/search/vector/storage/mod.rs"},"region":{"startLine":964}}}],"partialFingerprints":{"codehealthFindingId/v1":"f492b4f7d3b4034b0e160aba8b8aafff02defdb2525c8604d4f42c7fd6668613"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/db-testkit/src/lifecycle_workload.rs:538-549 | crates/db-testkit/src/lifecycle_workload.rs:555-566 \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":"crates/db-testkit/src/lifecycle_workload.rs"},"region":{"startLine":538}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfe99960dad7d1d26e9766aa85e7a0516b462f57d9ca0d602b16c516d1f758c0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/db-testkit/src/model.rs:736-747 | crates/db-testkit/src/model.rs:1159-1170 \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":"crates/db-testkit/src/model.rs"},"region":{"startLine":736}}}],"partialFingerprints":{"codehealthFindingId/v1":"09f3ed7fb69005e19786b5d3a56934c7de7c8978e27426ed12180813d2fa04bc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201312 lines \u00D7 2): crates/planner/src/exec/returns.rs:74-85 | crates/planner/src/exec/returns.rs:194-204 \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":"crates/planner/src/exec/returns.rs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f0c586ca4596f6c73da458609f65eb4bccf4eefe584f30aae9964de2a70153d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/planner/src/exec/lowering/contracts/stream/delivered.rs:8-19 | crates/planner/src/rules/physical_contracts/support/delivered.rs:96-107 \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":"crates/planner/src/exec/lowering/contracts/stream/delivered.rs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f39969f2d31a21cc61cf7dafe5fbb1e4b9e41d4a6681efb53033b936af6695f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/server/src/lib.rs:327-338 | crates/server/src/lib.rs:344-355 \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":"crates/server/src/lib.rs"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"561f54c10d43aecb76a5131aeef873a7fc115babc403268cba3559f5a054fe6f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): sdks/rust/helix-dsl-macros/src/lib.rs:103-114 | sdks/rust/helix-dsl-macros/src/lib.rs:131-142 \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":"sdks/rust/helix-dsl-macros/src/lib.rs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"81dd50360a81877ac947cdc5c2b5009b11eb2c6be1648193a57f59fc13816fa1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201311 lines \u00D7 5): crates/planner/src/rules/access/sets/canonical/node.rs:12-21 | crates/planner/src/rules/access/sets/canonical/node.rs:62-72 | crates/planner/src/rules/access/sets/canonical/node.rs:82-92 | crates/planner/src/rules/cardinality.rs:1047-1056 | crates/planner/src/rules/physical_contracts/access/source/node.rs:19-28 \u2014 there are 5 copies across 3 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/planner/src/rules/access/sets/canonical/node.rs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"882dd4535a0ef32e42f9406dff81a94001a2be256e29e54aa95d4c39d36364d8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201311 lines \u00D7 4): crates/db/src/search/mod.rs:1262-1272 | crates/db/src/search/mod.rs:1291-1301 | crates/db/src/search/mod.rs:1335-1343 | crates/db/src/search/mod.rs:1400-1408 \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":"crates/db/src/search/mod.rs"},"region":{"startLine":1262}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d57efc564a49cc8a7e0f766bcf3a2d8d7f34ad8fd2bd4afba6fcea634795946"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201311 lines \u00D7 4): crates/planner/src/rules/access/sets/canonical/edge.rs:12-21 | crates/planner/src/rules/access/sets/canonical/edge.rs:62-72 | crates/planner/src/rules/access/sets/canonical/edge.rs:82-92 | crates/planner/src/rules/physical_contracts/access/source/edge.rs:19-28 \u2014 there are 4 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 4 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/planner/src/rules/access/sets/canonical/edge.rs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"31919fd1639638a3c372581567390075597c33b6c43c03d556971e3381f55a6c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): crates/db/src/encoding/v2/keys/indexes/range/edge.rs:207-217 | crates/db/src/encoding/v2/keys/indexes/range/edge.rs:389-399 | crates/db/src/encoding/v2/keys/indexes/range/node.rs:32-42 \u2014 before extracting anything, compare \u0060crates/db/src/encoding/v2/keys/indexes/range/edge.rs\u0060 and \u0060crates/db/src/encoding/v2/keys/indexes/range/node.rs\u0060 as WHOLE FILES: this scan already matched 6 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":"crates/db/src/encoding/v2/keys/indexes/range/edge.rs"},"region":{"startLine":207}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d2dedf169e9ded34b30c1ea29ab5f1d4758c4c7d807802ed7ad0c35b333d7f6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201311 lines \u00D7 3): crates/db/src/index_lifecycle/text/validation.rs:454-464 | crates/db/src/index_lifecycle/text/validation.rs:659-668 | crates/db/src/index_lifecycle/text/validation.rs:903-912 \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":"crates/db/src/index_lifecycle/text/validation.rs"},"region":{"startLine":454}}}],"partialFingerprints":{"codehealthFindingId/v1":"f864ed99b09129b1fe7d1768b06475f664405ae57a113801bfa8078e2300592c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201311 lines \u00D7 3): crates/planner/src/analysis/index_atoms/range.rs:64-74 | crates/planner/src/analysis/labels.rs:135-145 | crates/planner/src/analysis/prune.rs:67-76 \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":"crates/planner/src/analysis/index_atoms/range.rs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"d83a128a183443a158da5ef3c42d179214d6afe5de4f1a46a9d0dddbbf72639b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/db/src/config/definition_differences.rs:183-193 | crates/db/src/config/definition_differences.rs:234-244 \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":"crates/db/src/config/definition_differences.rs"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"9370ada193fb2f484f0e52c7965adcd48e2e422879e64da4fd051e54611e451e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/db/src/encoding/v2/keys/indexes/range/edge.rs:260-270 | crates/db/src/encoding/v2/keys/indexes/range/edge.rs:427-437 \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":"crates/db/src/encoding/v2/keys/indexes/range/edge.rs"},"region":{"startLine":260}}}],"partialFingerprints":{"codehealthFindingId/v1":"d67ced66ddd6ea32621440cdc436caa1e730b7d892bd32937cf2479669a9a3ed"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201311 lines \u00D7 2): crates/db/src/encoding/v2/keys/indexes/range/edge.rs:342-350 | crates/db/src/encoding/v2/keys/indexes/range/node.rs:153-163 \u2014 before extracting anything, compare \u0060crates/db/src/encoding/v2/keys/indexes/range/edge.rs\u0060 and \u0060crates/db/src/encoding/v2/keys/indexes/range/node.rs\u0060 as WHOLE FILES: this scan already matched 6 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":"crates/db/src/encoding/v2/keys/indexes/range/edge.rs"},"region":{"startLine":342}}}],"partialFingerprints":{"codehealthFindingId/v1":"81de4e5ffecb009be4a406ceae35e62a572d8568018862ee1784342bc0d19ad4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/db/src/encoding/v2/keys/managed_index.rs:639-649 | crates/db/src/encoding/v2/values/codec.rs:145-155 \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":"crates/db/src/encoding/v2/keys/managed_index.rs"},"region":{"startLine":639}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a21171ce86d0835f42946617855b43b8154ae179bcef84e01c49ad6a31deca1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/db/src/index_lifecycle/secondary.rs:412-422 | crates/db/src/index_lifecycle/secondary.rs:1192-1202 \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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":412}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fd072c581e8cca6839fa3e4ff690ffc0655bdea4a66c0ba5298663b27c3a5bd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/db/src/index_lifecycle/secondary.rs:1673-1683 | crates/db/src/index_lifecycle/vector/driver.rs:2882-2892 \u2014 before extracting anything, compare \u0060crates/db/src/index_lifecycle/secondary.rs\u0060 and \u0060crates/db/src/index_lifecycle/vector/driver.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 109 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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":1673}}}],"partialFingerprints":{"codehealthFindingId/v1":"811d2454feb1a3c71d893ce8fb040a4b76ba2961411be7c6a95babcf18ccd2b0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/db/src/index_lifecycle/text/active_compaction.rs:434-444 | crates/db/src/index_lifecycle/text/compaction.rs:343-353 \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":"crates/db/src/index_lifecycle/text/active_compaction.rs"},"region":{"startLine":434}}}],"partialFingerprints":{"codehealthFindingId/v1":"05bbcd3070d957991f27574358caf0b955ac1dbf7794819ac52d5ac579ba7d0d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201311 lines \u00D7 2): crates/db/src/index_lifecycle/text/manifest.rs:55-65 | crates/db/src/index_lifecycle/text/validation.rs:182-191 \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":"crates/db/src/index_lifecycle/text/manifest.rs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"b16d1347f9bda42299af1ae9add41a92a78f0996351fac186882e4c537df4005"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/db/src/index_lifecycle/text/statistics.rs:296-306 | crates/db/src/index_lifecycle/text/statistics.rs:326-336 \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":"crates/db/src/index_lifecycle/text/statistics.rs"},"region":{"startLine":296}}}],"partialFingerprints":{"codehealthFindingId/v1":"08fb3bf8e929ad63d56c0d9a27eb7a0bff689df58a608fdf1568dbf4026928aa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/db/src/index_lifecycle/text/statistics.rs:417-427 | crates/db/src/index_lifecycle/text/statistics.rs:488-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":"crates/db/src/index_lifecycle/text/statistics.rs"},"region":{"startLine":417}}}],"partialFingerprints":{"codehealthFindingId/v1":"e264584e871eba80befe2228ccbaacc3605139ed33e2962ba8cf170ee3deffb7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/db/src/index_lifecycle/vector/driver.rs:1013-1023 | crates/db/src/index_lifecycle/vector/driver.rs:1118-1128 \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":"crates/db/src/index_lifecycle/vector/driver.rs"},"region":{"startLine":1013}}}],"partialFingerprints":{"codehealthFindingId/v1":"dcc960b7e3f6f6a890b65fea3c59eb5e938fcc5b7e99e3f1986ac9498a7ac9cb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/db/src/index_lifecycle/work.rs:418-428 | crates/db/src/index_lifecycle/work.rs:455-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":"crates/db/src/index_lifecycle/work.rs"},"region":{"startLine":418}}}],"partialFingerprints":{"codehealthFindingId/v1":"20e86c2df1e6f10c19ca6d741d3c4d55d1290f08aaeec993c22bd49d5289a37f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/db/src/lib.rs:1168-1178 | crates/db/src/lib.rs:1400-1410 \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":"crates/db/src/lib.rs"},"region":{"startLine":1168}}}],"partialFingerprints":{"codehealthFindingId/v1":"f34eeb85bbc3c832bc410af0197f6a9d3bbe0d292b322e98853d7629ddbced64"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201311 lines \u00D7 2): crates/db/src/migrations/vector_properties.rs:167-177 | crates/db/src/migrations/vector_retirement.rs:430-439 \u2014 before extracting anything, compare \u0060crates/db/src/migrations/vector_properties.rs\u0060 and \u0060crates/db/src/migrations/vector_retirement.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 49 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":"crates/db/src/migrations/vector_properties.rs"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"90aeb707348367e9cae1297d5485ef8cb57537efc1df5c4bdc79f3a475a7ddea"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201311 lines \u00D7 2): crates/db/src/search/text/mod.rs:1217-1227 | crates/planner/src/ir/index/equality.rs:125-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":"crates/db/src/search/text/mod.rs"},"region":{"startLine":1217}}}],"partialFingerprints":{"codehealthFindingId/v1":"b85d6fb844121ecaa40bf34056ee11e4609359af9586d144416cb6c18caf448f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201311 lines \u00D7 2): crates/db/src/search/vector/hnsw/restricted.rs:1311-1321 | crates/db/src/search/vector/hnsw/restricted.rs:1350-1359 \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":"crates/db/src/search/vector/hnsw/restricted.rs"},"region":{"startLine":1311}}}],"partialFingerprints":{"codehealthFindingId/v1":"24d3d2e8039545c18985da015a24d9add055ac8947d02225bf4228cfc613b019"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/db/src/execution/interpreter/stream/bounds/eval.rs:60-70 | crates/planner/src/rules/cardinality.rs:379-389 \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":"crates/db/src/execution/interpreter/stream/bounds/eval.rs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"28e2de4e6d1a81f0f6390d5a00fca7f3413ce878fbf0e042507b70f4c4c0eeb0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/planner/src/ir/index/range/value.rs:210-220 | crates/planner/src/ir/index/range/value.rs:222-232 \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":"crates/planner/src/ir/index/range/value.rs"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"d48c8ef1543884e50548a2662196faee0afa3e6e419bbefb39bb79f69e62e7a2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/planner/src/planning/envelope/write_contract.rs:72-82 | crates/planner/src/planning/selected/native/context_usage.rs:328-338 \u2014 before extracting anything, compare \u0060crates/planner/src/planning/envelope/write_contract.rs\u0060 and \u0060crates/planner/src/planning/selected/native/context_usage.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":"crates/planner/src/planning/envelope/write_contract.rs"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"d74774e81bc9bf6790e50a2b4813187d7e86da560ff8b08f0dc8d379a1f9349c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/planner/src/rules/access/order/satisfaction.rs:75-85 | crates/planner/src/rules/access/order/satisfaction.rs:115-125 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/planner/src/rules/access/order/satisfaction.rs"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"834766f8caf76fe88bc7b8b2ba0fb44f0547c26aca8debf56997c6d07cafcaf6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/planner/src/rules/cardinality.rs:1204-1214 | crates/planner/src/rules/cardinality.rs:1281-1291 \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":"crates/planner/src/rules/cardinality.rs"},"region":{"startLine":1204}}}],"partialFingerprints":{"codehealthFindingId/v1":"72ce61962147f40e32a558b888a8a64304b0974a36563fbf48078b0f5d58e15a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/planner/src/rules/access/sets/equality_range/intersection/edge.rs:142-152 | crates/planner/src/rules/access/sets/equality_range/intersection/node.rs:142-152 \u2014 before extracting anything, compare \u0060crates/planner/src/rules/access/sets/equality_range/intersection/edge.rs\u0060 and \u0060crates/planner/src/rules/access/sets/equality_range/intersection/node.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 54 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":"crates/planner/src/rules/access/sets/equality_range/intersection/edge.rs"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"25728d115caac7f9988f6030664adda5d89a574c76ca775b9bc23d9c612af33c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/planner/src/rules/physical_contracts/support/pipeline.rs:163-173 | crates/planner/src/rules/physical_contracts/support/pipeline.rs:203-213 \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":"crates/planner/src/rules/physical_contracts/support/pipeline.rs"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"12c4c1feece93f411fe128816d29b798097c1d6945f126848ca151051405653d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/planner/src/rules/access/sets/equality_range/range_union/edge.rs:55-65 | crates/planner/src/rules/access/sets/equality_range/range_union/node.rs:55-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":"crates/planner/src/rules/access/sets/equality_range/range_union/edge.rs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb80838e2afc30d8253fc479f01af33bfe5ae734dc6435bf4853b2ecbb779015"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/planner/src/exec/selected/lowering/access/leaf.rs:71-81 | crates/planner/src/exec/selected/lowering/access/leaf.rs:159-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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/planner/src/exec/selected/lowering/access/leaf.rs"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"f178fe70bbf84fd3a490ee41c335a59caf31855752d34de5e1bd1c4e908924a8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/planner/src/exec/lowering/secondary_set.rs:191-201 | crates/planner/src/exec/lowering/secondary_set.rs:246-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":"crates/planner/src/exec/lowering/secondary_set.rs"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1fe59909e584d2971a11b39ed6f810f64910aa22e2280b1c0c80aa8b9f9e734"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201310 lines \u00D7 6): crates/db/src/migrations/vector_properties.rs:286-295 | crates/db/src/migrations/vector_retirement.rs:391-399 | crates/db/src/migrations/vector_retirement.rs:518-526 | crates/db/src/migrations/vector_retirement.rs:652-660 | crates/db/src/migrations/vector_retirement.rs:761-770 | crates/db/src/migrations/vector_retirement.rs:920-929 \u2014 before extracting anything, compare \u0060crates/db/src/migrations/vector_properties.rs\u0060 and \u0060crates/db/src/migrations/vector_retirement.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 49 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":"crates/db/src/migrations/vector_properties.rs"},"region":{"startLine":286}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0f0b709e9b88c5dbca9d344d10e5df0c5c8fbfc49fb60eaad71e67bb006ee19"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 4): crates/db/src/migrations/vector_retirement.rs:261-270 | crates/db/src/migrations/vector_retirement.rs:547-556 | crates/db/src/migrations/vector_retirement.rs:682-691 | crates/db/src/migrations/vector_retirement.rs:793-802 \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":"crates/db/src/migrations/vector_retirement.rs"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"f041ffb95a629889de2b4597704938b8a17cab7c7a5026759f8650a9f4eceb3a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): crates/db/src/encoding/v2/keys/indexes/range/edge.rs:259-268 | crates/db/src/encoding/v2/keys/indexes/range/edge.rs:426-435 | crates/db/src/encoding/v2/keys/indexes/range/node.rs:220-229 \u2014 before extracting anything, compare \u0060crates/db/src/encoding/v2/keys/indexes/range/edge.rs\u0060 and \u0060crates/db/src/encoding/v2/keys/indexes/range/node.rs\u0060 as WHOLE FILES: this scan already matched 6 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":"crates/db/src/encoding/v2/keys/indexes/range/edge.rs"},"region":{"startLine":259}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee76e52cd2e79d64bd6cfa687ae9621538e003f3206b02611f7a8dc268fd4846"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): crates/db/src/encoding/v2/values/property/canonical_number.rs:16-25 | crates/db/src/encoding/v2/values/property/property_value.rs:262-271 | crates/planner/src/analysis/scalar/values.rs:156-165 \u2014 before extracting anything, compare \u0060crates/db/src/encoding/v2/values/property/property_value.rs\u0060 and \u0060crates/planner/src/analysis/scalar/values.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 49 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":"crates/db/src/encoding/v2/values/property/canonical_number.rs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ddb09827c74600cdffcf53efec9758e30353bcc935614d1e75028c18f83e369"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): crates/db/src/execution/interpreter/mod.rs:263-272 | crates/db/src/execution/interpreter/pull/mod.rs:205-214 | crates/planner/src/diagnostics/analyze.rs:932-941 \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":"crates/db/src/execution/interpreter/mod.rs"},"region":{"startLine":263}}}],"partialFingerprints":{"codehealthFindingId/v1":"cfd009e2ad04b4415fb8a2e08c6a60c2c17c3c62a1ad4190dfc2002577330f15"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201310 lines \u00D7 3): crates/db/src/migration_parity.rs:894-902 | crates/db/src/migration_parity.rs:911-920 | crates/db/src/migration_parity.rs:960-969 \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":"crates/db/src/migration_parity.rs"},"region":{"startLine":894}}}],"partialFingerprints":{"codehealthFindingId/v1":"3789076f205cd3d93b4b6ef68ef8891bf4ef31b19ce2ea39327884fe83de29c7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): crates/planner/src/planning/envelope/write_contract.rs:68-77 | crates/planner/src/planning/selected/native/context_usage.rs:68-77 | crates/planner/src/planning/selected/native/context_usage.rs:324-333 \u2014 before extracting anything, compare \u0060crates/planner/src/planning/envelope/write_contract.rs\u0060 and \u0060crates/planner/src/planning/selected/native/context_usage.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":"crates/planner/src/planning/envelope/write_contract.rs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f8927cc181950da5bfdcebaff6c761c82afb17e63330c22317e96b2fa5d2a29"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): crates/planner/src/planning/envelope/write_contract.rs:103-112 | crates/planner/src/planning/selected/native/context_usage.rs:104-113 | crates/planner/src/planning/selected/native/context_usage.rs:352-361 \u2014 before extracting anything, compare \u0060crates/planner/src/planning/envelope/write_contract.rs\u0060 and \u0060crates/planner/src/planning/selected/native/context_usage.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":"crates/planner/src/planning/envelope/write_contract.rs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"1abebef5c4dad536423cc874a514598f93f2931cb48c62aa4c5de90fd7371c79"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): crates/db/src/encoding/v2/keys/data.rs:376-385 | crates/db/src/encoding/v2/keys/managed_index.rs:113-122 \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":"crates/db/src/encoding/v2/keys/data.rs"},"region":{"startLine":376}}}],"partialFingerprints":{"codehealthFindingId/v1":"43e6d76c6daa76865a9d4304f607cc158e215a9401317a8e52b97156b5ace8e9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): crates/db/src/encoding/v2/keys/indexes/equality/edge.rs:268-277 | crates/db/src/encoding/v2/keys/indexes/label.rs:58-67 \u2014 before extracting anything, compare \u0060crates/db/src/encoding/v2/keys/indexes/equality/edge.rs\u0060 and \u0060crates/db/src/encoding/v2/keys/indexes/label.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 35 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":"crates/db/src/encoding/v2/keys/indexes/equality/edge.rs"},"region":{"startLine":268}}}],"partialFingerprints":{"codehealthFindingId/v1":"19ac003030bf24852c8c5ece70c87e8f7805fb3aa6edb19f0b0d48fb3c9ac95d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): crates/db/src/encoding/v2/values/adjacency.rs:397-406 | crates/db/src/encoding/v2/values/adjacency.rs:428-438 \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":"crates/db/src/encoding/v2/values/adjacency.rs"},"region":{"startLine":397}}}],"partialFingerprints":{"codehealthFindingId/v1":"23f9df67896a096423cb7d432bbf4a4ac271941bbebf4fcfdad3fd04c2699eb1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201310 lines \u00D7 2): crates/db/src/execution/interpreter/access/search/input.rs:113-121 | crates/db/src/execution/interpreter/reserved/sack.rs:106-115 \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":"crates/db/src/execution/interpreter/access/search/input.rs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"563670d78365d84d7e8904d88eec7383f998fd5dbfe11c336cc1bd1104289f2e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): crates/db/src/index_lifecycle/outbox.rs:1484-1493 | crates/db/src/index_lifecycle/outbox.rs:1717-1726 \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":"crates/db/src/index_lifecycle/outbox.rs"},"region":{"startLine":1484}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5a5131f2130fa7625ed59a74a5a2028404ae9484a489ef59ae6b0f00414c669"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201310 lines \u00D7 2): crates/db/src/index_lifecycle/secondary.rs:3554-3562 | crates/db/src/index_lifecycle/vector/driver.rs:3360-3369 \u2014 before extracting anything, compare \u0060crates/db/src/index_lifecycle/secondary.rs\u0060 and \u0060crates/db/src/index_lifecycle/vector/driver.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 109 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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":3554}}}],"partialFingerprints":{"codehealthFindingId/v1":"34b0e0402db6aa16d1c06532105cbce8ba534e6709d3d326ace8694dbadbff12"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201310 lines \u00D7 2): crates/db/src/index_lifecycle/secondary.rs:3577-3585 | crates/db/src/index_lifecycle/vector/driver.rs:3386-3395 \u2014 before extracting anything, compare \u0060crates/db/src/index_lifecycle/secondary.rs\u0060 and \u0060crates/db/src/index_lifecycle/vector/driver.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 109 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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":3577}}}],"partialFingerprints":{"codehealthFindingId/v1":"75c758472afefebd55954921587b4837a29d9446881cd0f2577a8f9dbe88aed2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): crates/db/src/index_lifecycle/text/validation.rs:674-683 | crates/db/src/index_lifecycle/text/validation.rs:922-932 \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":"crates/db/src/index_lifecycle/text/validation.rs"},"region":{"startLine":674}}}],"partialFingerprints":{"codehealthFindingId/v1":"65c998c13aa04f819935ddb3b23534d60cac99bac8425e63f1669d4c88c21762"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): crates/db/src/index_lifecycle/vector/driver.rs:1044-1053 | crates/db/src/index_lifecycle/vector/driver.rs:1169-1178 \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":"crates/db/src/index_lifecycle/vector/driver.rs"},"region":{"startLine":1044}}}],"partialFingerprints":{"codehealthFindingId/v1":"e41daea59d696344a1a8a6db3157f5b050aea3337c3520968cf45e255ee55d88"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): crates/db/src/index_lifecycle/vector/driver.rs:1720-1729 | crates/db/src/index_lifecycle/vector/driver.rs:1948-1957 \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":"crates/db/src/index_lifecycle/vector/driver.rs"},"region":{"startLine":1720}}}],"partialFingerprints":{"codehealthFindingId/v1":"da5fe37827bb8c48c3ca50af9e93ebb8d11d17fe928131ac9289912a9d69e1d0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): crates/db/src/migrations/mod.rs:5592-5602 | crates/db/src/migrations/mod.rs:8518-8527 \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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":5592}}}],"partialFingerprints":{"codehealthFindingId/v1":"f82cb9b532cb5ad02b96202f3cc3876ddfb73cbc9aa234ab224007245f4d5f2e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u201310 lines \u00D7 2): crates/db/src/migrations/mod.rs:6896-6905 | crates/db/src/migrations/mod.rs:7161-7167 \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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":6896}}}],"partialFingerprints":{"codehealthFindingId/v1":"3183567bea9f5ff34fd3f948cbe6d218c7d72a82c8c78a7c4fe7ddd43910b878"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): crates/db/src/search/mod.rs:541-550 | crates/db/src/search/mod.rs:574-583 \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":"crates/db/src/search/mod.rs"},"region":{"startLine":541}}}],"partialFingerprints":{"codehealthFindingId/v1":"1035a2f4ec387591c3c7a381016fa75852503b574748472483ed64e3ae1bb023"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): crates/db/src/search/mod.rs:1434-1443 | crates/db/src/search/mod.rs:1474-1483 \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":"crates/db/src/search/mod.rs"},"region":{"startLine":1434}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c6092b0a815d2555ee5b49dff51dd0fb7ca573477fb648e809599ddfe5b1ee2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): crates/db/src/search/mod.rs:1619-1628 | crates/db/src/search/mod.rs:1690-1699 \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":"crates/db/src/search/mod.rs"},"region":{"startLine":1619}}}],"partialFingerprints":{"codehealthFindingId/v1":"788e42c3ec3d4037d7b12cef5e121766709b4dacd1e108a67b1f1c2f9c749bdc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): crates/db/src/search/mod.rs:1986-1995 | crates/db/src/search/mod.rs:2007-2016 \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":"crates/db/src/search/mod.rs"},"region":{"startLine":1986}}}],"partialFingerprints":{"codehealthFindingId/v1":"887c9e942c24424c767db6efe8ca1223d57f18ac7df29670ff1c4cc95486e2d3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): crates/db/src/search/vector/storage/mod.rs:949-958 | crates/db/src/search/vector/storage/mod.rs:1546-1555 \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":"crates/db/src/search/vector/storage/mod.rs"},"region":{"startLine":949}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b886056e731398f411b37da79fe2604f68f682bec617ad56f3292ac23e8a944"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): crates/db/src/search/vector/storage/mod.rs:1738-1747 | crates/db/src/search/vector/storage/mod.rs:1762-1771 \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":"crates/db/src/search/vector/storage/mod.rs"},"region":{"startLine":1738}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bc37ab42b1d7a489398de1fc4a8fd25466634d31a506225ec568bdb14a8d119"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u201310 lines \u00D7 2): crates/graph-algorithms/src/algorithms/centrality.rs:158-165 | crates/graph-algorithms/src/algorithms/centrality.rs:202-211 \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":"crates/graph-algorithms/src/algorithms/centrality.rs"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc9beab133fc1475af4c50d7dc0caf444ae2d4565d0ea523036cf340bfcb5117"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201310 lines \u00D7 2): crates/planner/src/analysis/index_atoms/equality.rs:143-151 | crates/planner/src/analysis/scalar/values.rs:44-53 \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":"crates/planner/src/analysis/index_atoms/equality.rs"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"503a6d95e1d86c75bddfe2930ef5bbb58806ab8ef603863030da754e71de1e6c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201310 lines \u00D7 2): crates/planner/src/rules/access/pipeline/membership.rs:233-242 | crates/planner/src/rules/physical_contracts/support/cardinality.rs:66-74 \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":"crates/planner/src/rules/access/pipeline/membership.rs"},"region":{"startLine":233}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7b513d1303bf914a16fe7b594786bceb0abc88c5f58bbf44139950e015d4bc0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): crates/planner/src/rules/access/sets/contradiction/edge.rs:68-77 | crates/planner/src/rules/access/sets/contradiction/node.rs:68-77 \u2014 before extracting anything, compare \u0060crates/planner/src/rules/access/sets/contradiction/edge.rs\u0060 and \u0060crates/planner/src/rules/access/sets/contradiction/node.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 68 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":"crates/planner/src/rules/access/sets/contradiction/edge.rs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a227575ae84989a05bcd77a34d474d247e03c07969cfccb465ef5bc4a2c2ce8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 11): crates/db/src/encoding/v2/keys/graph.rs:32-40 | crates/db/src/encoding/v2/keys/graph.rs:103-111 | crates/db/src/encoding/v2/keys/graph.rs:174-182 | crates/db/src/encoding/v2/keys/graph.rs:254-262 | crates/db/src/encoding/v2/keys/graph.rs:324-332 | crates/db/src/encoding/v2/keys/indexes/equality/edge.rs:110-118 | crates/db/src/encoding/v2/keys/indexes/equality/edge.rs:251-259 | crates/db/src/encoding/v2/keys/indexes/equality/node.rs:60-68 | crates/db/src/encoding/v2/keys/indexes/label.rs:41-49 | crates/db/src/encoding/v2/keys/indexes/label.rs:148-156 | crates/db/src/encoding/v2/legacy/edge_property_pair.rs:27-35 \u2014 before extracting anything, compare \u0060crates/db/src/encoding/v2/keys/graph.rs\u0060 and \u0060crates/db/src/encoding/v2/legacy/edge_property_pair.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. 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":"crates/db/src/encoding/v2/keys/graph.rs"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"699c7ff0fce94927b4c50a4caa9f923af89ca560bf19a6d78500c7b3fa4e9fec"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u20139 lines \u00D7 6): crates/db-testkit/src/model.rs:1018-1026 | crates/db/src/encoding/v2/values/property/canonical_number.rs:13-21 | crates/db/src/encoding/v2/values/property/property_value.rs:259-267 | crates/db/src/encoding/v2/values/property/property_value.rs:314-322 | crates/db/src/index_lifecycle/vector.rs:902-909 | crates/planner/src/analysis/scalar/values.rs:153-161 \u2014 before extracting anything, compare \u0060crates/db/src/encoding/v2/values/property/property_value.rs\u0060 and \u0060crates/planner/src/analysis/scalar/values.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 49 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":"crates/db-testkit/src/model.rs"},"region":{"startLine":1018}}}],"partialFingerprints":{"codehealthFindingId/v1":"6548990765af4c14d93eae9f2d45a99fb2b3c2f9a3d082387febab1b8a2bc040"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 4): crates/planner/src/rules/access/sets/equality_range/intersection/mod.rs:13-21 | crates/planner/src/rules/access/sets/equality_range/range_union/mod.rs:13-21 | crates/planner/src/rules/access/sets/range/mod.rs:12-20 | crates/planner/src/rules/access/sets/subsumption/mod.rs:17-25 \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":"crates/planner/src/rules/access/sets/equality_range/intersection/mod.rs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6849ecfc3711901dee2c007f611e4a6b83b4ddb953023a22935d15d8f458d59"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): crates/db/src/config/definition_differences.rs:157-165 | crates/db/src/config/definition_differences.rs:182-190 | crates/db/src/config/definition_differences.rs:233-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":"crates/db/src/config/definition_differences.rs"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3c1879bb9ecc19fe9552974ecdf408c7e48f473d7132fac595f86107e7f6618"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): crates/db/src/index_lifecycle/text/validation.rs:444-452 | crates/db/src/index_lifecycle/text/validation.rs:649-657 | crates/db/src/index_lifecycle/text/validation.rs:893-901 \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":"crates/db/src/index_lifecycle/text/validation.rs"},"region":{"startLine":444}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fc254d4426dcd6cd9709a9cc151494aa481cd6b110d467bef187b02986daa6f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): crates/db/src/search/vector/spaces/simple.rs:190-198 | crates/db/src/search/vector/spaces/simple.rs:206-214 | crates/db/src/search/vector/spaces/simple.rs:222-230 \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":"crates/db/src/search/vector/spaces/simple.rs"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"38b047582683df19a269cdd05a532c17d8d52a2b7acd80f2a00835b3df56b750"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): crates/db/src/search/vector/storage/mod.rs:836-844 | crates/db/src/search/vector/storage/mod.rs:858-866 | crates/db/src/search/vector/storage/mod.rs:887-895 \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":"crates/db/src/search/vector/storage/mod.rs"},"region":{"startLine":836}}}],"partialFingerprints":{"codehealthFindingId/v1":"49bf9ad4a673674d076bddcf923fe615e72837a5d865d9b7bdbcff0349738705"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u20139 lines \u00D7 3): crates/planner/src/exec/returns.rs:117-125 | crates/planner/src/planning/selected/native/family.rs:96-102 | crates/planner/src/planning/selected/native/pipeline/ops.rs:43-50 \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":"crates/planner/src/exec/returns.rs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"be8e5f4258febcb0272a1a1e641fd610fb3637c2e411c7026934c4b99330e78b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): crates/cli/src/local_runtime.rs:900-908 | crates/cli/src/local_runtime.rs:925-933 \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":"crates/cli/src/local_runtime.rs"},"region":{"startLine":900}}}],"partialFingerprints":{"codehealthFindingId/v1":"382c937e66def34bbd734e4d5d96547b091ff5bbe377c5b24b863d9302086c39"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u20139 lines \u00D7 2): crates/db/src/encoding/v2/keys/indexes/prefix.rs:94-102 | crates/db/src/encoding/v2/keys/indexes/prefix.rs:106-113 \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":"crates/db/src/encoding/v2/keys/indexes/prefix.rs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"d751c9aa5179cac3425b6f0431fd37a6c66666e46141669e71c06a855586fb68"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): crates/db/src/encoding/v2/values/codec.rs:381-389 | crates/db/src/encoding/v2/values/codec.rs:403-411 \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":"crates/db/src/encoding/v2/values/codec.rs"},"region":{"startLine":381}}}],"partialFingerprints":{"codehealthFindingId/v1":"65525d9e65e597ee2314ece61aada5abea81b72c8b52ee63682f7c3678e551cc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): crates/db/src/encoding/v2/values/indexes/equality.rs:209-217 | crates/db/src/encoding/v2/values/indexes/range.rs:49-57 \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":"crates/db/src/encoding/v2/values/indexes/equality.rs"},"region":{"startLine":209}}}],"partialFingerprints":{"codehealthFindingId/v1":"2aea042856ff3e93c7b64e13837cfeca9e3162ad3ff1303a34dcbbd7b11492ab"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): crates/db/src/execution/interpreter/access/search/storage.rs:373-381 | crates/db/src/migration_parity.rs:644-652 \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":"crates/db/src/execution/interpreter/access/search/storage.rs"},"region":{"startLine":373}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e3022e6dcea02b90faf4ca6d11d532e86373bfdbd41dc58ff361ef6b7b81617"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): crates/db/src/index_lifecycle/secondary.rs:322-330 | crates/db/src/index_lifecycle/vector.rs:386-394 \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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":322}}}],"partialFingerprints":{"codehealthFindingId/v1":"de7e8b48c8e2c248f0254213353c2d618fbe8511f2282611a77ac8bdf1a063e7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): crates/db/src/index_lifecycle/text/driver.rs:1056-1064 | crates/db/src/index_lifecycle/text/driver.rs:1357-1365 \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":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":1056}}}],"partialFingerprints":{"codehealthFindingId/v1":"89020780849c29000a8e386c37e68c93191bec9dc7b4223267d4275f102c98d1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5\u20139 lines \u00D7 2): crates/db/src/index_lifecycle_testing/contracts.rs:1484-1488 | crates/db/src/index_lifecycle_testing/contracts.rs:1898-1906 \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":"crates/db/src/index_lifecycle_testing/contracts.rs"},"region":{"startLine":1484}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8252dcce7ced8f8dab74608b1ddfe3b41e3602ca049b4bbb38eadc8f502d533"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): crates/db/src/index_lifecycle_testing/contracts.rs:2938-2946 | crates/db/src/index_lifecycle_testing/contracts.rs:2970-2978 \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":"crates/db/src/index_lifecycle_testing/contracts.rs"},"region":{"startLine":2938}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a7e2b436e4f079da9ad6fea04595fa4c558df1bd3ee3d5179db659d3a5dd694"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): crates/db/src/migrations/startup/bootstrap.rs:78-86 | crates/db/src/migrations/startup/bootstrap.rs:161-170 \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":"crates/db/src/migrations/startup/bootstrap.rs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"562d5c29e062d6e233dfe987890846d0966efaeffe9aad169077c58b872f9c34"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): crates/db/src/search/mod.rs:777-785 | crates/db/src/search/mod.rs:2335-2343 \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":"crates/db/src/search/mod.rs"},"region":{"startLine":777}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b82b821409c3ffaa303fc5cd2783c0d2ffc904ee92ebbcad8700e42c404b1dd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): crates/db/src/search/mod.rs:1134-1142 | crates/db/src/search/mod.rs:1144-1152 \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":"crates/db/src/search/mod.rs"},"region":{"startLine":1134}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0f85f576a437ff0040ae64ad248d31202aa2d4431b68887638938e1fba4177d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u20139 lines \u00D7 2): crates/db/src/search/text/mod.rs:1164-1172 | crates/planner/src/rules/access/filter/index/label_domain.rs:272-279 \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":"crates/db/src/search/text/mod.rs"},"region":{"startLine":1164}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb551e056d6fb7dd03302aa3bdf9503ba478d54094e4cd78e6c3f7e702e33dd2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): crates/planner/src/analysis/index_atoms/equality.rs:109-117 | crates/planner/src/analysis/index_atoms/value.rs:26-35 \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":"crates/planner/src/analysis/index_atoms/equality.rs"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"a901d10693ec27e33c9a3ba773587bf67235520400adaf1eccf0af659e2ba33c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): crates/planner/src/rules/cardinality.rs:1233-1241 | crates/planner/src/rules/cardinality.rs:1310-1318 \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":"crates/planner/src/rules/cardinality.rs"},"region":{"startLine":1233}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e930cfa7ac40fd2f683892039c648a14b3a2fa1882c485658d339e4dc152ef8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): crates/planner/src/rules/access/pipeline/support/empty.rs:62-70 | crates/planner/src/rules/root/control_flow/contracts.rs:50-58 \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":"crates/planner/src/rules/access/pipeline/support/empty.rs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d78ecc4fa2ceac48f27b06ee7b60ef2515600a1ac4612b5a90e0a3ff1568437"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): crates/planner/src/rules/access/sets/contradiction/edge.rs:8-16 | crates/planner/src/rules/access/sets/contradiction/node.rs:8-16 \u2014 before extracting anything, compare \u0060crates/planner/src/rules/access/sets/contradiction/edge.rs\u0060 and \u0060crates/planner/src/rules/access/sets/contradiction/node.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 68 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":"crates/planner/src/rules/access/sets/contradiction/edge.rs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0c9dba78e668b2784bc296bc07e8ec5ad415d465a091f66dc55aee75fc3297a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): crates/planner/src/rules/access/sets/range/edge.rs:20-28 | crates/planner/src/rules/access/sets/range/node.rs:20-28 \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":"crates/planner/src/rules/access/sets/range/edge.rs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"f97d731545073b9f5ad9f624f22f27caf1a2713a67664cab4d56509e91eda25b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u20138 lines \u00D7 6): crates/planner/src/exec/lowering/contracts/access/cardinality.rs:67-74 | crates/planner/src/rules/access/sets/canonical/node.rs:15-21 | crates/planner/src/rules/access/sets/canonical/node.rs:65-71 | crates/planner/src/rules/access/sets/canonical/node.rs:85-91 | crates/planner/src/rules/cardinality.rs:1050-1056 | crates/planner/src/rules/physical_contracts/access/source/node.rs:22-28 \u2014 there are 6 copies across 4 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 6 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/planner/src/exec/lowering/contracts/access/cardinality.rs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"34da20c1f8d6425dddc0e2569141166977b325cf2021271ea45fb4c174c6f0e1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u20138 lines \u00D7 5): crates/planner/src/exec/lowering/contracts/access/cardinality.rs:85-92 | crates/planner/src/rules/access/sets/canonical/edge.rs:15-21 | crates/planner/src/rules/access/sets/canonical/edge.rs:65-71 | crates/planner/src/rules/access/sets/canonical/edge.rs:85-91 | crates/planner/src/rules/physical_contracts/access/source/edge.rs:22-28 \u2014 there are 5 copies across 3 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/planner/src/exec/lowering/contracts/access/cardinality.rs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"a452e8dc98073a1c1cc1bb872c77e50566007ebd67b4df8b35637008f983e99f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 4): crates/db/src/search/vector/storage/mod.rs:1273-1280 | crates/db/src/search/vector/storage/mod.rs:1334-1341 | crates/db/src/search/vector/storage/mod.rs:1408-1415 | crates/db/src/search/vector/storage/mod.rs:1459-1466 \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":"crates/db/src/search/vector/storage/mod.rs"},"region":{"startLine":1273}}}],"partialFingerprints":{"codehealthFindingId/v1":"61e0f8c47b3437ecbd59b6587f5dc7cd3c44ee8daefc5a151c66fa24857871b0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): crates/db/src/execution/interpreter/access/membership.rs:110-117 | crates/db/src/index_lifecycle/vector.rs:881-888 | crates/planner/src/analysis/index_atoms/equality.rs:153-160 \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":"crates/db/src/execution/interpreter/access/membership.rs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"b97ab3852cb4f4785f021aead9adac9fe2b5e0fbdba1ce978b9a596f2d13c0a0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): crates/db/src/execution/interpreter/pull/mod.rs:214-221 | crates/planner/src/diagnostics/analyze.rs:911-918 | crates/planner/src/diagnostics/analyze.rs:941-948 \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":"crates/db/src/execution/interpreter/pull/mod.rs"},"region":{"startLine":214}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1036665baebf37633ff948022def33ad5479f935238f9d44337f035eb31d847"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): crates/db/src/index_lifecycle/text/driver.rs:2380-2387 | crates/db/src/index_lifecycle/text/driver.rs:2414-2421 | crates/db/src/index_lifecycle/text/driver.rs:2479-2486 \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":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":2380}}}],"partialFingerprints":{"codehealthFindingId/v1":"8147a23b2d2339ba292d67246a609abc276a8d8434ad9b687f4b61947608fd61"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): crates/db/src/migrations/mod.rs:6191-6198 | crates/db/src/migrations/mod.rs:6539-6546 | crates/db/src/migrations/mod.rs:6889-6896 \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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":6191}}}],"partialFingerprints":{"codehealthFindingId/v1":"ddb6cd6fadacc3b90be19a8c407cf5bda6c93044bf2769207750f658a5cd2b0d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): crates/db/src/execution/interpreter/stream/eval/predicate.rs:122-129 | crates/db/src/execution/interpreter/stream/eval/predicate.rs:133-140 | crates/db/src/execution/interpreter/stream/eval/predicate.rs:144-151 \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":"crates/db/src/execution/interpreter/stream/eval/predicate.rs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf45939ed71ed0bc9ab10da3f6f45e7a0fba221596e0dae6a7ffd7a7627b9b37"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): crates/planner/src/exec/returns.rs:136-143 | crates/planner/src/planning/envelope/write_contract.rs:60-67 | crates/planner/src/planning/selected/native/context_usage.rs:60-67 \u2014 before extracting anything, compare \u0060crates/planner/src/planning/envelope/write_contract.rs\u0060 and \u0060crates/planner/src/planning/selected/native/context_usage.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":"crates/planner/src/exec/returns.rs"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"31fc1da6cb337c2d569f8f43ae0d1a37169663a8a27d4bdd281e629e36aa9c80"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u20138 lines \u00D7 3): crates/planner/src/planning/envelope/write_contract.rs:42-48 | crates/planner/src/planning/selected/native/context_usage.rs:34-40 | crates/planner/src/planning/selected/native/context_usage.rs:225-232 \u2014 before extracting anything, compare \u0060crates/planner/src/planning/envelope/write_contract.rs\u0060 and \u0060crates/planner/src/planning/selected/native/context_usage.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":"crates/planner/src/planning/envelope/write_contract.rs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"edc626f6cbab6b0f14a1de7c5fdd501f9e609f00c6d61298c4402bd75265824d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): crates/db/src/encoding/v2/values/property/property_value.rs:347-354 | crates/db/src/encoding/v2/values/property/property_value.rs:357-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":"crates/db/src/encoding/v2/values/property/property_value.rs"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"3443a9d8544eef545587bf390876b08b33c6c3e8de63362876029d2f8979a2ba"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): crates/db/src/execution/interpreter/stream/filter.rs:335-342 | crates/planner/src/cost/profile/residual.rs:83-90 \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":"crates/db/src/execution/interpreter/stream/filter.rs"},"region":{"startLine":335}}}],"partialFingerprints":{"codehealthFindingId/v1":"8594e134d4efe28d593d235eed79ad0537e8abfe6568e5f11c88ed8aa3df5967"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): crates/db/src/index_lifecycle/vector/driver.rs:2619-2626 | crates/db/src/index_lifecycle/vector/driver.rs:2636-2643 \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":"crates/db/src/index_lifecycle/vector/driver.rs"},"region":{"startLine":2619}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc03ef5c779e0be9d2fc2edc5b4fc550ecd0bbe8046d6e951a1699b53a96530b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u20138 lines \u00D7 2): crates/db/src/index_lifecycle_testing/contracts.rs:2429-2436 | crates/db/src/index_lifecycle_testing/contracts.rs:2573-2579 \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":"crates/db/src/index_lifecycle_testing/contracts.rs"},"region":{"startLine":2429}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe64515871728238239694f4a22ae51caa6c451f3b904b39850571a3ee1feffd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): crates/db/src/migrations/mod.rs:6706-6714 | crates/db/src/migrations/mod.rs:6969-6976 \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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":6706}}}],"partialFingerprints":{"codehealthFindingId/v1":"6644fbd4ae518270f17c5b872725bc636d8e3652b9d7fb5e0f4da7b83c4e4ee6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): crates/db/src/search/vector/storage/mod.rs:1728-1735 | crates/db/src/search/vector/storage/mod.rs:1753-1760 \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":"crates/db/src/search/vector/storage/mod.rs"},"region":{"startLine":1728}}}],"partialFingerprints":{"codehealthFindingId/v1":"e97858cd34a389395c28ddfdb750722cfbcd5fd912379cbfabba74b545a61b59"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (3\u20138 lines \u00D7 8): crates/db/src/search/vector/spaces/simple_avx.rs:25-27 | crates/db/src/search/vector/spaces/simple_avx.rs:80-82 | crates/db/src/search/vector/spaces/simple_avx.rs:138-140 | crates/db/src/search/vector/spaces/simple_avx.rs:194-196 | crates/db/src/search/vector/spaces/simple_neon.rs:18-25 | crates/db/src/search/vector/spaces/simple_neon.rs:64-71 | crates/db/src/search/vector/spaces/simple_sse.rs:27-29 | crates/db/src/search/vector/spaces/simple_sse.rs:79-81 \u2014 there are 8 copies across 3 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 8 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/search/vector/spaces/simple_avx.rs"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f1c7a5e9428686463ce082558d7ab24f860c3220392fef5a98cd30232790a6a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): crates/planner/src/analysis/index_atoms/range.rs:108-115 | crates/planner/src/analysis/index_atoms/range.rs:121-128 \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":"crates/planner/src/analysis/index_atoms/range.rs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2359714248ee6e7227ecc27240e6f611510b11f589e4c392b93cbf3af143687"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): crates/planner/src/exec/access/edge.rs:256-263 | crates/planner/src/exec/access/node.rs:316-323 \u2014 before extracting anything, compare \u0060crates/planner/src/exec/access/edge.rs\u0060 and \u0060crates/planner/src/exec/access/node.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":"crates/planner/src/exec/access/edge.rs"},"region":{"startLine":256}}}],"partialFingerprints":{"codehealthFindingId/v1":"2cbaad53242285bf93521d7fefd42a1b797579d46be26d6d6d4187a192629541"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): crates/planner/src/exec/access/edge.rs:265-272 | crates/planner/src/exec/access/node.rs:325-332 \u2014 before extracting anything, compare \u0060crates/planner/src/exec/access/edge.rs\u0060 and \u0060crates/planner/src/exec/access/node.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":"crates/planner/src/exec/access/edge.rs"},"region":{"startLine":265}}}],"partialFingerprints":{"codehealthFindingId/v1":"95d4c4357ef7cff1343f117721bfd3d7ab37f683e08b30190a9672fc928f94c4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): crates/planner/src/rules/access/pipeline/membership.rs:230-237 | crates/planner/src/rules/access/pipeline/support/empty.rs:29-36 \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":"crates/planner/src/rules/access/pipeline/membership.rs"},"region":{"startLine":230}}}],"partialFingerprints":{"codehealthFindingId/v1":"2718c9bcd4fa983252a00ea291fb8889a2d5e908c37dc1633d15eda8175ea4e2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): crates/planner/src/rules/access/sets/subsumption/mod.rs:35-42 | crates/planner/src/rules/access/sets/subsumption/mod.rs:52-59 \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":"crates/planner/src/rules/access/sets/subsumption/mod.rs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"44a2dc1a5e20b3fb1c4b63a974d1d97c11fc186e6124cd3db01e459a3c8560cc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): crates/planner/src/rules/cardinality.rs:182-189 | crates/planner/src/rules/physical_contracts/root_stream/contract.rs:157-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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/planner/src/rules/cardinality.rs"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"8084bf288db323e6906518eb9288707beac4dba5ef8bb136b2cbb8616c5e8196"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): crates/planner/src/rules/cardinality.rs:1244-1251 | crates/planner/src/rules/cardinality.rs:1321-1328 \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":"crates/planner/src/rules/cardinality.rs"},"region":{"startLine":1244}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6f4a690f4ee9b823c5189a1ad91a890cf50db4bad35aaa323785ccdbb8218ef"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): crates/planner/src/rules/cardinality.rs:1447-1454 | crates/planner/src/rules/cardinality.rs:1495-1502 \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":"crates/planner/src/rules/cardinality.rs"},"region":{"startLine":1447}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1bf9e7b8eb80163d58c06631077f1b8e881ea8f318b0fe8493b3a0d952f975a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): crates/planner/src/exec/lowering/costing.rs:242-249 | crates/planner/src/exec/lowering/costing.rs:253-260 \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":"crates/planner/src/exec/lowering/costing.rs"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b009624a8b7d521c6cbd709bd64554d8ebcb21ec22b06cfc4db46c99bdae443"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 6): crates/db/src/execution/interpreter/mod.rs:267-273 | crates/db/src/execution/interpreter/mutation/visibility.rs:123-129 | crates/db/src/execution/interpreter/pull/mod.rs:209-215 | crates/db/src/execution/interpreter/scheduler.rs:371-377 | crates/planner/src/diagnostics/analyze.rs:728-734 | crates/planner/src/diagnostics/analyze.rs:936-942 \u2014 there are 6 copies across 5 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 6 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/execution/interpreter/mod.rs"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"043e40763c63d277e9c5f59b7e5cfead467ec3f56cbd0f01adabe8fcc277103e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 5): crates/db/src/encoding/v2/values/property/canonical_number.rs:16-22 | crates/db/src/encoding/v2/values/property/property_value.rs:262-268 | crates/db/src/encoding/v2/values/property/property_value.rs:317-323 | crates/db/src/search/text/mod.rs:1222-1228 | crates/planner/src/analysis/scalar/values.rs:156-162 \u2014 before extracting anything, compare \u0060crates/db/src/encoding/v2/values/property/property_value.rs\u0060 and \u0060crates/planner/src/analysis/scalar/values.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 49 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":"crates/db/src/encoding/v2/values/property/canonical_number.rs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"c61f636e3b11323259e3605b2dd11d5b609c7c16f171f864eb226e75911a479d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 5): crates/db/src/migrations/mod.rs:6545-6553 | crates/db/src/migrations/mod.rs:6766-6774 | crates/db/src/migrations/mod.rs:6895-6903 | crates/db/src/migrations/mod.rs:7161-7167 | crates/db/src/migrations/mod.rs:8498-8504 \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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":6545}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ce533cffa411c6936ba985bd432d5b2219449e24c3965490f938038894df8be"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6\u20137 lines \u00D7 4): crates/planner/src/exec/returns.rs:135-141 | crates/planner/src/planning/envelope/write_contract.rs:60-65 | crates/planner/src/planning/selected/native/context_usage.rs:60-65 | crates/planner/src/planning/selected/native/context_usage.rs:317-323 \u2014 before extracting anything, compare \u0060crates/planner/src/planning/envelope/write_contract.rs\u0060 and \u0060crates/planner/src/planning/selected/native/context_usage.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":"crates/planner/src/exec/returns.rs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"729c739476be7a419ad705872408530e99f4fcfc856c3d73c14ad98debecf694"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6\u20137 lines \u00D7 3): crates/db/src/index_lifecycle/outbox.rs:980-985 | crates/db/src/index_lifecycle/outbox.rs:1094-1100 | crates/db/src/index_lifecycle/outbox.rs:1121-1127 \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":"crates/db/src/index_lifecycle/outbox.rs"},"region":{"startLine":980}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e851eabd97c1903c28a987957d5e213714f4f8fa4150428bb500ecfe4eb35ae"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): crates/db/src/index_lifecycle/secondary.rs:3622-3628 | crates/db/src/index_lifecycle/text/driver.rs:3347-3353 | crates/db/src/index_lifecycle/vector/driver.rs:3461-3467 \u2014 before extracting anything, compare \u0060crates/db/src/index_lifecycle/secondary.rs\u0060 and \u0060crates/db/src/index_lifecycle/text/driver.rs\u0060 as WHOLE FILES: this scan already matched 6 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. 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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":3622}}}],"partialFingerprints":{"codehealthFindingId/v1":"32b8fc056b44d8fe0d333fb3e34152fc08d14785a8ffe71d415989e09d60a7e4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): crates/db/src/migrations/tenant/envelope.rs:58-64 | crates/db/src/migrations/tenant/envelope.rs:106-112 | crates/db/src/migrations/tenant/envelope.rs:142-148 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/migrations/tenant/envelope.rs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"76cbaf69501d8d66560143f0e6f50a4e8db0ee44b9b0ef275cf00c9e36d29197"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): crates/planner/src/rules/access/pipeline/membership.rs:232-238 | crates/planner/src/rules/access/pipeline/support/empty.rs:31-37 | crates/planner/src/rules/physical_contracts/support/cardinality.rs:65-71 \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":"crates/planner/src/rules/access/pipeline/membership.rs"},"region":{"startLine":232}}}],"partialFingerprints":{"codehealthFindingId/v1":"df9420324c8ce52ccc3ab72822fcf0154eb0d7430e3d76fbc5639c1588592828"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): crates/db/src/encoding/v2/values/codec.rs:451-457 | crates/db/src/encoding/v2/values/codec.rs:484-490 \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":"crates/db/src/encoding/v2/values/codec.rs"},"region":{"startLine":451}}}],"partialFingerprints":{"codehealthFindingId/v1":"2eab7d3e3a73a00041d4bc1f1648bae95cd7fa2c2c5213fd1f61b73607715a7b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): crates/db/src/execution/interpreter/stream/filter.rs:334-340 | crates/planner/src/ir/expr/validation.rs:35-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":"crates/db/src/execution/interpreter/stream/filter.rs"},"region":{"startLine":334}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0a13f08ecbc2a4cfd790564113924bbab8e7332ba7b621de15a16649179753f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (4\u20137 lines \u00D7 3): crates/db/src/index_lifecycle/scope_gate.rs:105-111 | crates/db/src/index_lifecycle/scope_gate.rs:119-125 | crates/db/src/index_lifecycle/scope_gate.rs:130-133 \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":"crates/db/src/index_lifecycle/scope_gate.rs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"4816efb5c33f1a3b72f22231c4ef8c894100a4ca98a2bdc7e6ac26ab02d26567"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): crates/db/src/index_lifecycle/secondary.rs:2995-3001 | crates/db/src/index_lifecycle/secondary/exact.rs:209-215 \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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":2995}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7b6896ae1ea59c7f8730c5fe1f3662f65340ba1222e50ec207f7fad3662ca06"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (3\u20137 lines \u00D7 3): crates/db/src/migrations/vector_simhash_directory.rs:540-546 | crates/db/src/migrations/vector_simhash_directory.rs:627-629 | crates/db/src/migrations/vector_simhash_directory.rs:745-751 \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":"crates/db/src/migrations/vector_simhash_directory.rs"},"region":{"startLine":540}}}],"partialFingerprints":{"codehealthFindingId/v1":"36d2d26e1a6aab4470a097f67d90a50d677787401570ae9370706ebffd924eeb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): crates/db/src/search/text/mod.rs:370-376 | crates/db/src/search/text/mod.rs:390-396 \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":"crates/db/src/search/text/mod.rs"},"region":{"startLine":370}}}],"partialFingerprints":{"codehealthFindingId/v1":"2cf36294b81178b0822930248244ebe2e0ed915387837a455aae40f7ca8799f9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): crates/db/src/search/vector/hnsw/mutation/mod.rs:1470-1476 | crates/db/src/search/vector/hnsw/mutation/mod.rs:3680-3686 \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":"crates/db/src/search/vector/hnsw/mutation/mod.rs"},"region":{"startLine":1470}}}],"partialFingerprints":{"codehealthFindingId/v1":"67516228323e5c76fdcb0a5c936e5754ed452f10ea49f247b646032c452b01d9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): crates/db/src/search/vector/spaces/simple_neon.rs:38-44 | crates/db/src/search/vector/spaces/simple_neon.rs:76-82 \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":"crates/db/src/search/vector/spaces/simple_neon.rs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd095e5b663af4dfbd51bf06a91571ac75a21d8b867e18841b4e8afd217394fb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): crates/db/src/encoding/v2/values/lifecycle/entity_state.rs:39-45 | crates/db/src/encoding/v2/values/lifecycle/entity_state.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":"crates/db/src/encoding/v2/values/lifecycle/entity_state.rs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"5111a5c4f9e42ddb206d9c8173c00a9cdad72f204d2687f1ab4264c014f70d6e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): crates/db/src/search/vector/spaces/simple_avx.rs:28-34 | crates/db/src/search/vector/spaces/simple_avx.rs:141-147 \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":"crates/db/src/search/vector/spaces/simple_avx.rs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"3871cdddbd09a85df9a9cc37e11f454f1997d4de8ef398495be6d87e2b462eb4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6\u20137 lines \u00D7 2): crates/planner/src/diagnostics/analyze.rs:201-207 | crates/planner/src/diagnostics/analyze.rs:733-738 \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":"crates/planner/src/diagnostics/analyze.rs"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd224f924a41893fbc4e74b9fdabda2aa9df9882e85620ba2f8540c2018df0d0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): crates/planner/src/diagnostics/analyze.rs:726-732 | crates/planner/src/diagnostics/analyze.rs:889-895 \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":"crates/planner/src/diagnostics/analyze.rs"},"region":{"startLine":726}}}],"partialFingerprints":{"codehealthFindingId/v1":"1870850c75f7e2d47bae269cd27c24710ca50227a9ffcd67be90d23d6cfdd8d6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): crates/planner/src/diagnostics/analyze.rs:736-742 | crates/planner/src/diagnostics/analyze.rs:946-952 \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":"crates/planner/src/diagnostics/analyze.rs"},"region":{"startLine":736}}}],"partialFingerprints":{"codehealthFindingId/v1":"e092c53e0d0a6c12277475b2ee4c598fda045b7f6a562da653c6a6c16309074f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6\u20137 lines \u00D7 2): crates/planner/src/diagnostics/analyze.rs:983-989 | crates/planner/src/diagnostics/analyze.rs:1034-1039 \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":"crates/planner/src/diagnostics/analyze.rs"},"region":{"startLine":983}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cbcf4a4bc80186940ee5dbb00f9e68010a459bc67a1a58fa859a8509795b804"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): crates/planner/src/ir/input/search/text.rs:106-112 | crates/planner/src/ir/input/search/vector.rs:209-215 \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":"crates/planner/src/ir/input/search/text.rs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"6128b4dca8739f77e347ce69bda27b58e8d024c53b58622630497514dbe4d66b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): crates/planner/src/ir/access.rs:68-74 | crates/planner/src/ir/access.rs:81-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":"crates/planner/src/ir/access.rs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"57a7536c4648d39e47db541100f10712ca12b327ef1f2e21376c8a6754d7a834"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6\u20137 lines \u00D7 2): crates/planner/src/exec/lowering/contracts/access/cardinality.rs:70-76 | crates/planner/src/exec/selected/lowering/contracts/matching/access/source/node.rs:77-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":"crates/planner/src/exec/lowering/contracts/access/cardinality.rs"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"cfbf0bbb4de51eee0038cbddaa78fbb963e1ba9991b8615cd712ddf1ceefe79f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): crates/planner/src/exec/lowering/contracts/access/cardinality.rs:7-13 | crates/planner/src/exec/lowering/contracts/access/cardinality.rs:60-66 \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":"crates/planner/src/exec/lowering/contracts/access/cardinality.rs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"1fdaf489ba32a969bf22126b81f94b626c137acf211d5846f07540ca92f30949"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6\u20137 lines \u00D7 2): crates/planner/src/exec/lowering/contracts/access/cardinality.rs:88-94 | crates/planner/src/exec/selected/lowering/contracts/matching/access/source/edge.rs:77-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":"crates/planner/src/exec/lowering/contracts/access/cardinality.rs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc3429747db9e612bf7c98647f4a50e084362a5ca475f8d5cea8506338265d48"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): crates/server/src/lib.rs:318-324 | crates/server/src/lib.rs:336-342 \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":"crates/server/src/lib.rs"},"region":{"startLine":318}}}],"partialFingerprints":{"codehealthFindingId/v1":"80459b2e6f5882bb44102026bddfa7e32b6b444bff75ba81b6ceb3f205f03fd4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 6): crates/db/src/migrations/vector_properties.rs:166-171 | crates/db/src/migrations/vector_retirement.rs:260-265 | crates/db/src/migrations/vector_retirement.rs:429-434 | crates/db/src/migrations/vector_retirement.rs:546-551 | crates/db/src/migrations/vector_retirement.rs:681-686 | crates/db/src/migrations/vector_retirement.rs:792-797 \u2014 before extracting anything, compare \u0060crates/db/src/migrations/vector_properties.rs\u0060 and \u0060crates/db/src/migrations/vector_retirement.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 49 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":"crates/db/src/migrations/vector_properties.rs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"1323724cc6389efd15806990ec9ff238e6407db8fe21c183d7d0591575b79883"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 4): crates/db/src/search/vector/spaces/simple_avx.rs:28-33 | crates/db/src/search/vector/spaces/simple_avx.rs:83-88 | crates/db/src/search/vector/spaces/simple_avx.rs:141-146 | crates/db/src/search/vector/spaces/simple_avx.rs:197-202 \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":"crates/db/src/search/vector/spaces/simple_avx.rs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"46599abe9a1c8ed63700fae942de4aaecdd7394e3d1f900a8da67a059743dedd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): crates/db/src/migrations/startup/bootstrap.rs:58-63 | crates/db/src/migrations/startup/bootstrap.rs:121-126 | crates/db/src/migrations/startup/bootstrap.rs:191-196 \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":"crates/db/src/migrations/startup/bootstrap.rs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"b49b05aedb022d49d17c1dad8952c64d8b4f0814520fcd018ba3089e39c30230"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/db/src/encoding/v2/values/property/property_value.rs:330-335 | crates/planner/src/analysis/scalar/values.rs:110-115 \u2014 before extracting anything, compare \u0060crates/db/src/encoding/v2/values/property/property_value.rs\u0060 and \u0060crates/planner/src/analysis/scalar/values.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 49 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":"crates/db/src/encoding/v2/values/property/property_value.rs"},"region":{"startLine":330}}}],"partialFingerprints":{"codehealthFindingId/v1":"018ce614f7a543071f75fd9ef344b3dbb125c5e6ad02e1255d2a8a29b1521678"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/db/src/encoding/v2/values/property/property_value.rs:339-344 | crates/planner/src/analysis/scalar/values.rs:118-123 \u2014 before extracting anything, compare \u0060crates/db/src/encoding/v2/values/property/property_value.rs\u0060 and \u0060crates/planner/src/analysis/scalar/values.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 49 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":"crates/db/src/encoding/v2/values/property/property_value.rs"},"region":{"startLine":339}}}],"partialFingerprints":{"codehealthFindingId/v1":"489926f82cc1725d750ae81bc82ec7cc0abb12082fdb774882593371db4ce7fa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/db/src/execution/interpreter/access/expand.rs:132-137 | crates/db/src/execution/interpreter/access/expand.rs:158-163 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/execution/interpreter/access/expand.rs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"54e749629059f029153b865cd7f22bc76ad8a1a3ec3cfeb180aa10a7ecaf581a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/db/src/index_lifecycle/secondary.rs:3127-3132 | crates/db/src/index_lifecycle/secondary/exact.rs:216-221 \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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":3127}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e0f165f549eb394f18afbf822c76dbfc036f4dd7e928a5ac26406d534561416"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/db/src/index_lifecycle/secondary.rs:1685-1690 | crates/db/src/index_lifecycle/vector/driver.rs:2128-2133 \u2014 before extracting anything, compare \u0060crates/db/src/index_lifecycle/secondary.rs\u0060 and \u0060crates/db/src/index_lifecycle/vector/driver.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 109 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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":1685}}}],"partialFingerprints":{"codehealthFindingId/v1":"524f6a2a9b0f26b4cd63bb76b2d902857a9df171a01ee4dd333397e5bfdee8fe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/db/src/index_lifecycle/secondary.rs:2021-2026 | crates/db/src/index_lifecycle/vector/driver.rs:1236-1241 \u2014 before extracting anything, compare \u0060crates/db/src/index_lifecycle/secondary.rs\u0060 and \u0060crates/db/src/index_lifecycle/vector/driver.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 109 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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":2021}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb169570a3a6e8a610334611432cd722ccfd12a08548a63e59df71500063b70e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/db/src/index_lifecycle/text/active_batch.rs:847-853 | crates/db/src/index_lifecycle/text/driver.rs:3104-3109 \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":"crates/db/src/index_lifecycle/text/active_batch.rs"},"region":{"startLine":847}}}],"partialFingerprints":{"codehealthFindingId/v1":"65e4e8e4e7d8c10bc54e9ddf74f22aef3cdf3f0cb0f9d3e3ad55147816494ecf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/db/src/lib.rs:1788-1793 | crates/db/src/lib.rs:1835-1840 \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":"crates/db/src/lib.rs"},"region":{"startLine":1788}}}],"partialFingerprints":{"codehealthFindingId/v1":"e481b0e1c3c04e37be5cecd64516d7a3da654b04faa2f16a3f82f5f42c1e0faa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/db/src/migrations/tenant/envelope.rs:75-80 | crates/db/src/migrations/tenant/envelope.rs:159-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":"crates/db/src/migrations/tenant/envelope.rs"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"465562a0ef3efc1340d1276221186d25837fde73461843d87f8ba66be8c6a5d5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/db/src/search/vector/storage/transaction.rs:342-347 | crates/db/src/search/vector/storage/transaction.rs:356-361 \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":"crates/db/src/search/vector/storage/transaction.rs"},"region":{"startLine":342}}}],"partialFingerprints":{"codehealthFindingId/v1":"32bef77da2dcdb49a0f0324ba19b1ec9af6ffcfc968b91385545a425376ca3e7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/db/src/search/vector/storage/transaction.rs:390-395 | crates/db/src/search/vector/storage/transaction.rs:409-415 \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":"crates/db/src/search/vector/storage/transaction.rs"},"region":{"startLine":390}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3913fa2b188a84622ea929493d7ec105d1941b950e7bbdb2a393ff10ca74282"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/db/src/execution/interpreter/access/rows.rs:55-60 | crates/db/src/execution/interpreter/access/rows.rs:114-119 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/execution/interpreter/access/rows.rs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd3c39a087419823d725352f7fbbb30f0123ba4b2a9a842e8ada9c83bd5ee2fd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/db/src/execution/interpreter/access/rows.rs:81-86 | crates/db/src/execution/interpreter/access/rows.rs:147-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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/execution/interpreter/access/rows.rs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"7060c969dc12b9cbf0e3832874cd0ff3232985381b391c476db5f06c7eaeda56"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/db/src/search/vector/spaces/simple_sse.rs:30-35 | crates/db/src/search/vector/spaces/simple_sse.rs:82-88 \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":"crates/db/src/search/vector/spaces/simple_sse.rs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"80aade8afcf7a3d9e14f62990fa21ef284d56974e5416d7ee95efb666bc63bf9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/db-testkit/src/model.rs:968-973 | crates/value-semantics/src/lib.rs:89-94 \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":"crates/db-testkit/src/model.rs"},"region":{"startLine":968}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3d6dd3c74a99ce0b69ea70a5be38c1814cb33ca52d38cf5c173c1f567e924af"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/planner/src/ir/bounds/search.rs:191-196 | crates/planner/src/ir/bounds/stream/bound.rs:206-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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/planner/src/ir/bounds/search.rs"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b6a181535a100c2225679b555b772720106dce74fd69638d0a44452101b4d87"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/planner/src/ir/index/range/bounds/bound.rs:102-107 | crates/planner/src/ir/index/range/bounds/bound.rs:119-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":"crates/planner/src/ir/index/range/bounds/bound.rs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"b711d4fd9bc550e9b7a290079c0dfe255690b339bbbff93c71f44f8b38815b3c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/planner/src/rules/root/control_flow/implementation.rs:31-36 | crates/planner/src/rules/root/control_flow/implementation.rs:68-73 \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":"crates/planner/src/rules/root/control_flow/implementation.rs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa1492e861536b85fb07974c663fae8ef6ca636e22792da02d26ee7f4ecba83b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): crates/db/src/encoding/v2/values/property/property_value.rs:223-227 | crates/planner/src/analysis/scalar/values.rs:125-129 \u2014 before extracting anything, compare \u0060crates/db/src/encoding/v2/values/property/property_value.rs\u0060 and \u0060crates/planner/src/analysis/scalar/values.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 49 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":"crates/db/src/encoding/v2/values/property/property_value.rs"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ee5b7fc7f569bbc91681162d7eb665f9d5e6d340f401dc39ba366f4745096a1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): crates/db/src/index_lifecycle/repository.rs:134-138 | crates/db/src/migrations/startup/bootstrap.rs:135-139 \u2014 before extracting anything, compare \u0060crates/db/src/index_lifecycle/repository.rs\u0060 and \u0060crates/db/src/migrations/startup/bootstrap.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. 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":"crates/db/src/index_lifecycle/repository.rs"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"870dfc2a2f5c3c1c04a8300bdedfa7b332f1be652fcbe929bc2d6883fc02df80"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): crates/db/src/migrations/startup/bootstrap.rs:64-68 | crates/db/src/migrations/startup/bootstrap.rs:127-131 \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":"crates/db/src/migrations/startup/bootstrap.rs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca1ab15fa15acc1295f9fbc0bbd9250ea0d8af6c7562e7843ff7e42a7cee0311"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): crates/db/src/search/vector/cache/store.rs:246-251 | crates/db/src/search/vector/cache/store.rs:398-402 \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":"crates/db/src/search/vector/cache/store.rs"},"region":{"startLine":246}}}],"partialFingerprints":{"codehealthFindingId/v1":"96ebc343a0e6b00b95ceac4a99a7db61ec9a80191f98c01462b02cfc8e4d638b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): crates/db/src/search/vector/hnsw/mutation/mod.rs:387-391 | crates/db/src/search/vector/hnsw/search.rs:238-242 \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":"crates/db/src/search/vector/hnsw/mutation/mod.rs"},"region":{"startLine":387}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b79c76cbea10cbd064a526af82a00f2f54726f121e350f7cee0549857f0031d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): crates/db-testkit/src/model.rs:991-995 | crates/value-semantics/src/lib.rs:113-117 \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":"crates/db-testkit/src/model.rs"},"region":{"startLine":991}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfb4ccfd6cea193479271082162cce25383ae072b79148178da739fe19b564ab"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): crates/planner/src/exec/count.rs:1239-1243 | crates/planner/src/exec/count.rs:1307-1311 \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":"crates/planner/src/exec/count.rs"},"region":{"startLine":1239}}}],"partialFingerprints":{"codehealthFindingId/v1":"3932a15fac49060fa03f843f7ce7e6f33fe1b765153c0a2df351299fe030863c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (53 lines \u00D7 2): crates/planner/src/exec/lowering/access_leaf/edge.rs:45-97 | crates/planner/src/exec/lowering/access_leaf/node.rs:45-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":"crates/planner/src/exec/lowering/access_leaf/edge.rs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"de9e669fba23c380abf38888426658af61f19ae58dc95b2b4a8298a88e9ddca5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (51 lines \u00D7 2): crates/planner/src/exec/lowering/access_leaf/edge.rs:100-150 | crates/planner/src/exec/lowering/access_leaf/node.rs:100-150 \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":"crates/planner/src/exec/lowering/access_leaf/edge.rs"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"78b87daace7bd6aafc8c9f37e3c5f13bc53605357a2bd90e31a73eeb95d5b6aa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): crates/planner/src/rules/access/sets/contradiction/edge.rs:29-52 | crates/planner/src/rules/access/sets/contradiction/node.rs:29-52 \u2014 before extracting anything, compare \u0060crates/planner/src/rules/access/sets/contradiction/edge.rs\u0060 and \u0060crates/planner/src/rules/access/sets/contradiction/node.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 68 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":"crates/planner/src/rules/access/sets/contradiction/edge.rs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b95abdbc56d338f9a5e4a51e4d872b99e84157cd54ab5d85ca4a716202d1ede"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (57 lines \u00D7 2): crates/planner/src/ir/access/edge/analysis.rs:115-171 | crates/planner/src/ir/access/node/analysis.rs:120-176 \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":"crates/planner/src/ir/access/edge/analysis.rs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"1fec2b9918583f7a08cb74a14ede9e0b3ad3560019e2cf849a1b441a716a28d4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (35 lines \u00D7 2): crates/planner/src/exec/selected/index_ddl.rs:31-65 | crates/planner/src/exec/selected/mutation/root.rs:26-60 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/planner/src/exec/selected/index_ddl.rs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab475eebbf634470753d1c4c5de5902e2b32ea080c13a5a10aa3e754b5e0c8fc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 4): crates/db/src/config/indexes.rs:677-684 | crates/db/src/config/indexes.rs:687-694 | crates/db/src/index_lifecycle/model.rs:408-415 | crates/db/src/index_lifecycle/model.rs:418-425 \u2014 there are 4 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 4 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/config/indexes.rs"},"region":{"startLine":677}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a55a6e51ed5e02f178631c41f0e79171bf6a6e0ae521718c9b0ddc6dc44232c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/db/src/config/indexes.rs:705-710 | crates/db/src/index_lifecycle/model.rs:433-438 \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":"crates/db/src/config/indexes.rs"},"region":{"startLine":705}}}],"partialFingerprints":{"codehealthFindingId/v1":"44ae268982180127e1592a56c36afd21b8cc2425a857e207d80a29a512784862"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): crates/db/src/encoding/v2/keys/indexes/direction.rs:13-19 | crates/db/src/encoding/v2/keys/indexes/equality/edge.rs:23-29 \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":"crates/db/src/encoding/v2/keys/indexes/direction.rs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8969058c5a5a9a897161a2f43ba6a7be06a8fa7a8c3e46a7f3394cd9c086727"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/db/src/encoding/v2/keys/indexes/equality/edge.rs:295-300 | crates/db/src/encoding/v2/keys/indexes/equality/node.rs:109-114 \u2014 before extracting anything, compare \u0060crates/db/src/encoding/v2/keys/indexes/equality/edge.rs\u0060 and \u0060crates/db/src/encoding/v2/keys/indexes/equality/node.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":"crates/db/src/encoding/v2/keys/indexes/equality/edge.rs"},"region":{"startLine":295}}}],"partialFingerprints":{"codehealthFindingId/v1":"13ee191a3ba722426e910df0b77db90405a67a5fbac82d27ae733d75349398a4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 10): crates/db/src/encoding/v2/keys/indexes/equality/scans.rs:28-32 | crates/db/src/encoding/v2/keys/indexes/equality/scans.rs:89-93 | crates/db/src/encoding/v2/keys/indexes/equality/scans.rs:178-182 | crates/db/src/encoding/v2/keys/indexes/label.rs:363-367 | crates/db/src/encoding/v2/keys/indexes/label.rs:407-411 | crates/db/src/encoding/v2/keys/indexes/range/scans.rs:29-33 | crates/db/src/encoding/v2/keys/indexes/range/scans.rs:142-146 | crates/db/src/encoding/v2/keys/indexes/range/scans.rs:259-263 | crates/db/src/encoding/v2/keys/indexes/vector/mod.rs:226-230 | crates/db/src/encoding/v2/keys/metadata.rs:65-69 \u2014 there are 10 copies across 5 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 10 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/encoding/v2/keys/indexes/equality/scans.rs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"161105f8e8ff2d683fc787bd1d9755f10d1f0d226bc91d82f42801ba3cbf3061"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): crates/db/src/execution/interpreter/mutation/contracts.rs:29-34 | crates/db/src/index_lifecycle/mutation_catalog.rs:297-302 | crates/db/src/migrations/mod.rs:4118-4123 \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":"crates/db/src/execution/interpreter/mutation/contracts.rs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"911a2393b57f6ca44aa5715143df643b15aa1132a8f83ac8cf0d4f2ba6f895b6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 5): crates/db-testkit/src/lifecycle.rs:108-114 | crates/db/src/index_lifecycle/catalog.rs:115-121 | crates/db/src/index_lifecycle/catalog.rs:124-130 | crates/db/src/index_lifecycle/catalog.rs:133-139 | crates/db/src/index_lifecycle/catalog.rs:142-154 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db-testkit/src/lifecycle.rs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"e22d272f63dc7eabd94bde35185274957be168f3bbd97c5254d3443aae96f804"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): crates/db-testkit/src/lifecycle.rs:117-123 | crates/db/src/index_lifecycle/catalog.rs:157-163 \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":"crates/db-testkit/src/lifecycle.rs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6b231d333705b723a536be03f550ab4d5509090af89a864d4094a25f9ead229"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): crates/db/src/index_lifecycle/outbox.rs:489-495 | crates/db/src/index_lifecycle/vector/driver.rs:432-438 \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":"crates/db/src/index_lifecycle/outbox.rs"},"region":{"startLine":489}}}],"partialFingerprints":{"codehealthFindingId/v1":"1503f705328ad6e79539200326831a52097c55508deecb9edd757ac98a3feb8a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): crates/db/src/index_lifecycle/secondary.rs:3640-3644 | crates/db/src/index_lifecycle/vector/driver.rs:3479-3483 \u2014 before extracting anything, compare \u0060crates/db/src/index_lifecycle/secondary.rs\u0060 and \u0060crates/db/src/index_lifecycle/vector/driver.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 109 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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":3640}}}],"partialFingerprints":{"codehealthFindingId/v1":"99b735d2b70f6640bed37c9eab0930c4f224355bfcb6d826382845d9d6bd3c41"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): crates/db/src/index_lifecycle/secondary.rs:3646-3652 | crates/db/src/index_lifecycle/text/driver.rs:3375-3381 | crates/db/src/index_lifecycle/vector/driver.rs:3485-3491 \u2014 before extracting anything, compare \u0060crates/db/src/index_lifecycle/secondary.rs\u0060 and \u0060crates/db/src/index_lifecycle/text/driver.rs\u0060 as WHOLE FILES: this scan already matched 6 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. 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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":3646}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8839680963ad243e9ec353f1bd41b07aadbaec0f2939ce15133867ed9142108"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): crates/db/src/merge_operator.rs:188-197 | crates/db/src/needed_in_future/merge_operator.rs:41-50 \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":"crates/db/src/merge_operator.rs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"f04d5fbdebfbf2fef4319e424f01fb8c2caacfc3ba83877478831c0d3d7e5834"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): crates/db/src/search/text/caching_directory.rs:169-175 | crates/db/src/search/text/debug_proxy_directory.rs:124-130 \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":"crates/db/src/search/text/caching_directory.rs"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"70ac530152c2a694cba0874d1b67de0b4bfc09a575f57dc3e834adec9eaf7af5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/planner/src/logical/access/unary/candidates/order.rs:86-91 | crates/planner/src/rules/access/order/direction/contracts.rs:69-74 \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":"crates/planner/src/logical/access/unary/candidates/order.rs"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"386b29d3be180c6c2a8b20191e6114b3f8020e27fd3fbc22d67ac8c3d7772474"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): crates/planner/src/rules/physical_contracts/root_stream/delivered.rs:97-103 | crates/planner/src/rules/root/control_flow/contracts.rs:6-12 \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":"crates/planner/src/rules/physical_contracts/root_stream/delivered.rs"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"8aad9e430e6194b96aa056765be45d0dec856770f8a04d3236e5529d0989628c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): crates/planner/src/rules/access/sets/equality_range/intersection/mod.rs:25-30 | crates/planner/src/rules/access/sets/equality_range/range_union/mod.rs:25-30 | crates/planner/src/rules/access/sets/range/mod.rs:24-29 \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":"crates/planner/src/rules/access/sets/equality_range/intersection/mod.rs"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce28cc1efe31500decfe5db2a4ec93b608475251ff1d337facca2dfbbcc45e1f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): crates/planner/src/rules/access/sets/contradiction/edge.rs:54-62 | crates/planner/src/rules/access/sets/contradiction/node.rs:54-62 \u2014 before extracting anything, compare \u0060crates/planner/src/rules/access/sets/contradiction/edge.rs\u0060 and \u0060crates/planner/src/rules/access/sets/contradiction/node.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 68 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":"crates/planner/src/rules/access/sets/contradiction/edge.rs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"b428ab0cd252d6fd86cb300ddd343f954076fcab1c300a8a56db7a48224b0206"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/planner/src/exec/lowering/contracts/access/cardinality.rs:99-104 | crates/planner/src/rules/physical_contracts/access/estimates.rs:37-42 \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":"crates/planner/src/exec/lowering/contracts/access/cardinality.rs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"6551e8891d4e325bbc46bde01d282e15269693912e4afd1fc5de79aae74b7653"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 5): crates/db/src/encoding/v2/keys/indexes/vector/entry_candidates.rs:222-227 | crates/db/src/encoding/v2/keys/indexes/vector/layer0.rs:71-76 | crates/db/src/encoding/v2/keys/indexes/vector/reverse_edges.rs:74-79 | crates/db/src/encoding/v2/keys/indexes/vector/simhash.rs:215-220 | crates/db/src/encoding/v2/keys/indexes/vector/upper_layers.rs:159-164 \u2014 before extracting anything, compare \u0060crates/db/src/encoding/v2/keys/indexes/vector/entry_candidates.rs\u0060 and \u0060crates/db/src/encoding/v2/keys/indexes/vector/layer0.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":"crates/db/src/encoding/v2/keys/indexes/vector/entry_candidates.rs"},"region":{"startLine":222}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e4f051d3b5f209ae63df4ac7285e0fc85945d5abebe0e5dd734b20f692dc10c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): crates/db/src/encoding/v2/keys/indexes/vector/items.rs:143-149 | crates/db/src/encoding/v2/keys/indexes/vector/simhash.rs:141-147 \u2014 before extracting anything, compare \u0060crates/db/src/encoding/v2/keys/indexes/vector/items.rs\u0060 and \u0060crates/db/src/encoding/v2/keys/indexes/vector/simhash.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 64 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":"crates/db/src/encoding/v2/keys/indexes/vector/items.rs"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c4706880d6ac9489a5c75396b27012d05fd4c2d1593b127c32a37b4692f7848"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/db/src/encoding/v2/keys/indexes/vector/metadata.rs:75-80 | crates/db/src/encoding/v2/legacy/vector/transaction_guard.rs:73-78 \u2014 before extracting anything, compare \u0060crates/db/src/encoding/v2/keys/indexes/vector/metadata.rs\u0060 and \u0060crates/db/src/encoding/v2/legacy/vector/transaction_guard.rs\u0060 as WHOLE FILES: this scan already matched 3 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":"crates/db/src/encoding/v2/keys/indexes/vector/metadata.rs"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"434f95478a55630b55266584a77ef43fdc2d9a3c59dcf291848a281219927650"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): crates/db/src/index_lifecycle/text/cleanup.rs:321-327 | crates/db/src/index_lifecycle/vector/driver.rs:1290-1296 \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":"crates/db/src/index_lifecycle/text/cleanup.rs"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"2094cbda1a2ffafb7451f1827b9f1ef07e75b03128c38b1346254f93bc6a040b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): crates/db/src/index_lifecycle_testing.rs:726-730 | crates/db/src/search/text/cache.rs:1253-1257 \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":"crates/db/src/index_lifecycle_testing.rs"},"region":{"startLine":726}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea97e081e5e622f22058d70498cb7d254ebf61ff5914fef692e67f3a90f612ff"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/db/src/search/vector/dimension.rs:26-31 | crates/db/src/search/vector/hnsw/neighbor_set.rs:21-26 \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":"crates/db/src/search/vector/dimension.rs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"310f8268e7ffc2c5a03cfdb4d3c18cdab00e9494f73229924e273c0183f60d07"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): crates/planner/src/exec/selected/control_flow/branch.rs:56-69 | crates/planner/src/exec/selected/control_flow/repeat.rs:44-57 \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":"crates/planner/src/exec/selected/control_flow/branch.rs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"53b3a124ddfa8e7b06cf0970f1a9a22e47a3a2f01d63627af5f24ff3cbbc8316"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): crates/planner/src/ir/access/edge/source.rs:36-43 | crates/planner/src/ir/access/node/source.rs:39-46 \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":"crates/planner/src/ir/access/edge/source.rs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"2dca57add4dbac520fb73962326da149d297a7dc4f8d63e3dbd2c353677986f2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): crates/planner/src/ir/batch.rs:82-90 | crates/planner/src/ir/projection/property.rs:52-60 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/planner/src/ir/batch.rs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f8291f8b8fe2799fdf5f9f0032729c506a38942aa4b7316ad09ce22078f2410"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): crates/planner/src/ir/bounds/search.rs:89-98 | crates/planner/src/ir/bounds/stream/bound.rs:82-91 \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":"crates/planner/src/ir/bounds/search.rs"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d070446c5fceb8352d0f380e26fb720fb14b27b4b6d521f2e4298b5019993fa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): crates/planner/src/ir/input/property.rs:40-47 | crates/planner/src/ir/input/search/expr.rs:40-47 \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":"crates/planner/src/ir/input/property.rs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"5edad5394c4d7afefa984308d486f7122587bae4aed7c4c5d62f7d2a4a2307c0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): crates/planner/src/rules/access/filter/index/edge.rs:90-97 | crates/planner/src/rules/access/filter/index/node.rs:90-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":"crates/planner/src/rules/access/filter/index/edge.rs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5618523c2a3c8c5b4a561c93a46d656625c87915984573406bb003227c0c7cf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): crates/planner/src/rules/access/filter/index/edge.rs:118-122 | crates/planner/src/rules/access/filter/index/node.rs:118-122 \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":"crates/planner/src/rules/access/filter/index/edge.rs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b311a5f1498fc3a03ad2606f05b94798ad6f73010d1e607ccdf20c2462f6741"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 6): crates/planner/src/rules/access/sets/rules/canonical.rs:26-31 | crates/planner/src/rules/access/sets/rules/contradiction.rs:26-31 | crates/planner/src/rules/access/sets/rules/equality_range.rs:26-31 | crates/planner/src/rules/access/sets/rules/equality_range.rs:55-60 | crates/planner/src/rules/access/sets/rules/range.rs:27-32 | crates/planner/src/rules/access/sets/rules/subsumption.rs:26-31 \u2014 there are 6 copies across 5 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 6 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/planner/src/rules/access/sets/rules/canonical.rs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"77525ccecadfc516ac9b1723277d52f5bcb5d0960769e13ffd7736e97f351919"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): crates/planner/src/rules/access/sets/contradiction/edge.rs:81-90 | crates/planner/src/rules/access/sets/contradiction/node.rs:81-90 \u2014 before extracting anything, compare \u0060crates/planner/src/rules/access/sets/contradiction/edge.rs\u0060 and \u0060crates/planner/src/rules/access/sets/contradiction/node.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 68 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":"crates/planner/src/rules/access/sets/contradiction/edge.rs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4b7223b6d698f95ba56bff9435a4bb37131c1a3865ea24ebe677b76ae4de3d3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/planner/src/rules/access/sets/contradiction/edge.rs:94-99 | crates/planner/src/rules/access/sets/contradiction/node.rs:94-99 \u2014 before extracting anything, compare \u0060crates/planner/src/rules/access/sets/contradiction/edge.rs\u0060 and \u0060crates/planner/src/rules/access/sets/contradiction/node.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 68 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":"crates/planner/src/rules/access/sets/contradiction/edge.rs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbecc610be3eafb0327149ba421966adf280447e02c4fc8ff20febce56332e14"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): crates/planner/src/ir/access/edge/analysis.rs:32-39 | crates/planner/src/ir/access/node/analysis.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":"crates/planner/src/ir/access/edge/analysis.rs"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"780e6d53b12a06480fd3178930d6908283722f20b91df2b2f537b0d91011882d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/planner/src/exec/selected/lowering/contracts/delivered/access.rs:46-51 | crates/planner/src/exec/selected/lowering/contracts/estimate.rs:26-31 \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":"crates/planner/src/exec/selected/lowering/contracts/delivered/access.rs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"986295cd40d6cd4c8846928b615d2f62e3d14a4cdfc07a4e9400ee9dca0bc4c5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): crates/planner/src/planning/index_ddl/shared.rs:8-13 | crates/planner/src/planning/search/access/edge.rs:69-74 | crates/planner/src/planning/search/access/node.rs:69-74 \u2014 before extracting anything, compare \u0060crates/planner/src/planning/search/access/edge.rs\u0060 and \u0060crates/planner/src/planning/search/access/node.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":"crates/planner/src/planning/index_ddl/shared.rs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"30909e2dc65e9ecc9c183d6bdd19cb5d5e9ff8564c943e7b724e28054fdcee07"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): crates/planner/src/rules/access/sets/equality_range/range_union/edge.rs:22-30 | crates/planner/src/rules/access/sets/equality_range/range_union/node.rs:22-30 \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":"crates/planner/src/rules/access/sets/equality_range/range_union/edge.rs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"c31fff213fae2af32ecf7108229c499058c27ad1154d9f48495a10c96cd69c47"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): crates/db/src/index_lifecycle/vector/driver.rs:1702-1717 | crates/db/src/index_lifecycle/vector/driver.rs:1930-1945 \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":"crates/db/src/index_lifecycle/vector/driver.rs"},"region":{"startLine":1702}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd7adff2d3ad440e740917a2877b5ede34d26c9a59f0e5852402cb9ceed3ce4e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): crates/db/src/migrations/mod.rs:6334-6348 | crates/db/src/migrations/mod.rs:7515-7529 \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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":6334}}}],"partialFingerprints":{"codehealthFindingId/v1":"29fcaae0dcb2ba60c72a20603ec681322bd6799f303ba4dd2aab5e092391d42c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): crates/db/src/index_lifecycle/text/driver.rs:2332-2344 | crates/db/src/index_lifecycle/text/driver.rs:2394-2406 | crates/db/src/index_lifecycle/text/driver.rs:2426-2440 \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":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":2332}}}],"partialFingerprints":{"codehealthFindingId/v1":"7854337842c5332673e946874eca608445c2843fb4e31ff39384ddd30443bb62"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): crates/db/src/index_lifecycle_testing/contracts.rs:3124-3131 | crates/db/src/index_lifecycle_testing/contracts.rs:3149-3163 | crates/db/src/index_lifecycle_testing/contracts.rs:3611-3619 \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":"crates/db/src/index_lifecycle_testing/contracts.rs"},"region":{"startLine":3124}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4d70df95ba2f5415f8070b117b5d5ba68d970f2b532da9a30a191644548b869"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): crates/db/src/index_lifecycle_testing/contracts.rs:3246-3254 | crates/db/src/index_lifecycle_testing/contracts.rs:3334-3348 \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":"crates/db/src/index_lifecycle_testing/contracts.rs"},"region":{"startLine":3246}}}],"partialFingerprints":{"codehealthFindingId/v1":"88b8818ba5fe639015757def64ca64a7f5826d37bd8e43dc652f548cf51fe97f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): crates/db/src/search/vector/hnsw/search.rs:692-704 | crates/db/src/search/vector/hnsw/search.rs:852-865 \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":"crates/db/src/search/vector/hnsw/search.rs"},"region":{"startLine":692}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6aae083c32e95d0aa650c646816c5eb9330162f28b84d18390167d62e098569"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): crates/db/src/migrations/vector_simhash_directory.rs:549-562 | crates/db/src/migrations/vector_simhash_directory.rs:754-767 \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":"crates/db/src/migrations/vector_simhash_directory.rs"},"region":{"startLine":549}}}],"partialFingerprints":{"codehealthFindingId/v1":"987a8290f68ff3a1fcf4da1e16adffa0c5efa92dd83f04308ebef61d838b11f8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): crates/db/src/index_lifecycle/operation.rs:1259-1272 | crates/db/src/index_lifecycle/operation.rs:1284-1297 \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":"crates/db/src/index_lifecycle/operation.rs"},"region":{"startLine":1259}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef7bc46b85bd843f5826ef51cbb9996f32bc1a5a66fa8056a375dcd94af1303a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): crates/db/src/lib.rs:487-500 | crates/db/src/lib.rs:904-917 \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":"crates/db/src/lib.rs"},"region":{"startLine":487}}}],"partialFingerprints":{"codehealthFindingId/v1":"b93f355552813536cf8c4d32e4289c6183fa6db72332f42cb0bddd1bba4c4843"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): crates/db/src/index_lifecycle_testing/contracts.rs:3234-3246 | crates/db/src/index_lifecycle_testing/contracts.rs:3526-3538 \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":"crates/db/src/index_lifecycle_testing/contracts.rs"},"region":{"startLine":3234}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba832f73e0329942eb376f551f9edb175fbf27c3a56ffbf06c7b142b181d36fb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): crates/db/src/index_lifecycle_testing/contracts.rs:1267-1279 | crates/db/src/index_lifecycle_testing/contracts.rs:2366-2378 \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":"crates/db/src/index_lifecycle_testing/contracts.rs"},"region":{"startLine":1267}}}],"partialFingerprints":{"codehealthFindingId/v1":"006bf5af0f2be0ceb2b8a25cdcd5ee9fa1dc14bfbea430430923df29fa45a8af"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 4): crates/db/src/migrations/vector_retirement.rs:367-379 | crates/db/src/migrations/vector_retirement.rs:494-506 | crates/db/src/migrations/vector_retirement.rs:624-636 | crates/db/src/migrations/vector_retirement.rs:896-908 \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":"crates/db/src/migrations/vector_retirement.rs"},"region":{"startLine":367}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a270ec3acc496495d3583b49d1e101f1f05a47ca6c2aecbe1e56b10adf563ff"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): crates/planner/src/rules/physical_contracts/support/pipeline.rs:180-192 | crates/planner/src/rules/physical_contracts/support/pipeline.rs:220-232 \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":"crates/planner/src/rules/physical_contracts/support/pipeline.rs"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9fff2d3d30eb72dc66d14b5fa748e35ee69bdbb95d4f46a80d184877df310d4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/db/src/migrations/mod.rs:5824-5835 | crates/db/src/migrations/mod.rs:7027-7039 \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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":5824}}}],"partialFingerprints":{"codehealthFindingId/v1":"e12ebc20c574ae836fd1da1835ca9cb2bb039f18d6e2d275f2e3a921d4eb4a03"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): crates/db/src/index_lifecycle_testing/contracts.rs:1215-1227 | crates/db/src/index_lifecycle_testing/contracts.rs:1675-1687 \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":"crates/db/src/index_lifecycle_testing/contracts.rs"},"region":{"startLine":1215}}}],"partialFingerprints":{"codehealthFindingId/v1":"e41eb592fee30ad68a69a24530f9026af86a6217313d9bd37a6e1b7ce4713bba"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/db/src/search/text/split.rs:381-393 | crates/db/src/search/text/split.rs:517-528 \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":"crates/db/src/search/text/split.rs"},"region":{"startLine":381}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6efe91d62490d0cdb0602109dfa92ab5b0be107dd25cf74eb7be9355f586914"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): crates/db/src/migrations/mod.rs:3566-3578 | crates/db/src/migrations/mod.rs:3639-3651 \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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":3566}}}],"partialFingerprints":{"codehealthFindingId/v1":"7dc4ec14972f2a37d861d07c8f78da9e000b86380a9fd1df92e8ac4bea210011"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 4): crates/db/src/search/vector/storage/mod.rs:1282-1293 | crates/db/src/search/vector/storage/mod.rs:1343-1352 | crates/db/src/search/vector/storage/mod.rs:1417-1426 | crates/db/src/search/vector/storage/mod.rs:1468-1478 \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":"crates/db/src/search/vector/storage/mod.rs"},"region":{"startLine":1282}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8dae59356d9a3e6d72760b07fa6746af9b3ab27e155f7686ce448cbbc4bb373"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/db/src/encoding/v2/keys/indexes/vector/mod.rs:277-288 | crates/db/src/encoding/v2/keys/indexes/vector/mod.rs:321-332 \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":"crates/db/src/encoding/v2/keys/indexes/vector/mod.rs"},"region":{"startLine":277}}}],"partialFingerprints":{"codehealthFindingId/v1":"f690a5df400e8e6bf5617ea25888c2df8591276a28fd55e2d8d3855a15d6c9c9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/db/src/index_lifecycle_testing/contracts.rs:2668-2679 | crates/db/src/index_lifecycle_testing/contracts.rs:3042-3053 \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":"crates/db/src/index_lifecycle_testing/contracts.rs"},"region":{"startLine":2668}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c64b278b43e1fb8326307113f794192fea151f5350c5c13392afeb2f4eac9bc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/db/src/index_lifecycle/text/validation.rs:303-314 | crates/db/src/index_lifecycle/text/validation.rs:743-754 \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":"crates/db/src/index_lifecycle/text/validation.rs"},"region":{"startLine":303}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0bfd3812d5984ab1d5add03a23096360e3a4d04c7309a716af93ddd399dcbff"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/db/src/index_lifecycle_testing/contracts.rs:1293-1304 | crates/db/src/index_lifecycle_testing/contracts.rs:2392-2403 \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":"crates/db/src/index_lifecycle_testing/contracts.rs"},"region":{"startLine":1293}}}],"partialFingerprints":{"codehealthFindingId/v1":"729534d74c908a74c64e3d1c2280abb12391e2dfb6c69c9079280bf61a9f4871"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/db/src/search/vector/storage/mod.rs:1431-1441 | crates/db/src/search/vector/storage/mod.rs:1485-1496 \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":"crates/db/src/search/vector/storage/mod.rs"},"region":{"startLine":1431}}}],"partialFingerprints":{"codehealthFindingId/v1":"f37d1a610ff9c43bb45a84e96c3828f89392d685e15d75c2869e70ee7ea68b19"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): crates/db/src/migrations/vector_retirement.rs:115-126 | crates/db/src/migrations/vector_retirement.rs:702-711 \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":"crates/db/src/migrations/vector_retirement.rs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"775abbea089c9e50235e702987c98913622ea9b633e48f921e7de7cb4fdca97b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/db/src/encoding/v2/keys/graph.rs:191-202 | crates/db/src/encoding/v2/legacy/edge_property_pair.rs:43-53 \u2014 before extracting anything, compare \u0060crates/db/src/encoding/v2/keys/graph.rs\u0060 and \u0060crates/db/src/encoding/v2/legacy/edge_property_pair.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. 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":"crates/db/src/encoding/v2/keys/graph.rs"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"7be32f6c30454a22a272a4b9db1a7e6627a521d2c8b74758a0a525427b2b3aae"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): crates/db/src/migrations/mod.rs:5710-5721 | crates/db/src/migrations/mod.rs:7355-7362 \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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":5710}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9f81ea6049472c82d65b698614044c74ad859b58d80737bf3dac4cd34fb6797"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/db/src/index_lifecycle_testing/contracts.rs:1521-1532 | crates/db/src/index_lifecycle_testing/contracts.rs:2478-2489 \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":"crates/db/src/index_lifecycle_testing/contracts.rs"},"region":{"startLine":1521}}}],"partialFingerprints":{"codehealthFindingId/v1":"0910169810250cbd43f3d7d464c51eb201fee6fb6580903d78bc69853a2f13c6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/db/src/index_lifecycle/text/validation.rs:320-331 | crates/db/src/index_lifecycle/text/validation.rs:760-771 \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":"crates/db/src/index_lifecycle/text/validation.rs"},"region":{"startLine":320}}}],"partialFingerprints":{"codehealthFindingId/v1":"0498f291f80aa77376199bfd6bbe7edd45d0d9e0481f6fb70c6ddba005102771"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): crates/cli/src/commands/cloud/database.rs:160-171 | crates/cli/src/commands/cloud/project.rs:107-117 | crates/cli/src/commands/cloud/service_credential.rs:174-185 \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":"crates/cli/src/commands/cloud/database.rs"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed15039faa6d0f3a08d72f2700efbbf609a0e8b2dd83e63ab5e326c878408bf6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): crates/db/src/index_lifecycle/text/validation.rs:291-301 | crates/db/src/index_lifecycle/text/validation.rs:540-550 | crates/db/src/index_lifecycle/text/validation.rs:731-741 \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":"crates/db/src/index_lifecycle/text/validation.rs"},"region":{"startLine":291}}}],"partialFingerprints":{"codehealthFindingId/v1":"f74745094cf52daddb3c6a09b197288ede8b67025161ddf93e55bb8160dfb101"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/db/src/index_lifecycle_testing/contracts.rs:3636-3646 | crates/db/src/index_lifecycle_testing/contracts.rs:3669-3679 \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":"crates/db/src/index_lifecycle_testing/contracts.rs"},"region":{"startLine":3636}}}],"partialFingerprints":{"codehealthFindingId/v1":"91f31b79501394c0c81ef0a3ec6e247fc89bb661b2904714de85270279875cc1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/db/src/search/vector/storage/mod.rs:542-552 | crates/db/src/search/vector/storage/mod.rs:578-588 \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":"crates/db/src/search/vector/storage/mod.rs"},"region":{"startLine":542}}}],"partialFingerprints":{"codehealthFindingId/v1":"4153c664c20d1b1957473e5de0e55ccea555174b37d7292fff1b951969f4901c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): crates/db/src/index_lifecycle_testing.rs:1220-1230 | crates/db/src/index_lifecycle_testing.rs:1346-1356 | crates/db/src/index_lifecycle_testing.rs:1386-1396 \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":"crates/db/src/index_lifecycle_testing.rs"},"region":{"startLine":1220}}}],"partialFingerprints":{"codehealthFindingId/v1":"c820a6021a887eebc872765d951cf26f1ffde4daba345eddc5098ab118daf392"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 4): crates/db/src/search/vector/storage/mod.rs:809-819 | crates/db/src/search/vector/storage/mod.rs:842-852 | crates/db/src/search/vector/storage/mod.rs:864-874 | crates/db/src/search/vector/storage/mod.rs:893-903 \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":"crates/db/src/search/vector/storage/mod.rs"},"region":{"startLine":809}}}],"partialFingerprints":{"codehealthFindingId/v1":"a82d30f4144001fb8dd02b7e9f2c256b47ac3569c63a4b39dd6e5bea379f10d5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/db/src/migrations/mod.rs:6170-6180 | crates/db/src/migrations/mod.rs:8472-8482 \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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":6170}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b3ff585d909f2b6e26f6a807da03762f2e559b568ce48b002b050bb6a81c08f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/db/src/index_lifecycle_testing/contracts.rs:866-876 | crates/db/src/index_lifecycle_testing/contracts.rs:879-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":"crates/db/src/index_lifecycle_testing/contracts.rs"},"region":{"startLine":866}}}],"partialFingerprints":{"codehealthFindingId/v1":"56c2f2725063baf0fb6af3d44fcd33837326ad2782dc95883864ef1c7be20344"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/planner/src/rules/access/sets/equality_range/intersection/edge.rs:50-60 | crates/planner/src/rules/access/sets/equality_range/intersection/node.rs:50-60 \u2014 before extracting anything, compare \u0060crates/planner/src/rules/access/sets/equality_range/intersection/edge.rs\u0060 and \u0060crates/planner/src/rules/access/sets/equality_range/intersection/node.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 54 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":"crates/planner/src/rules/access/sets/equality_range/intersection/edge.rs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbc47c8e991279231e54a98d3baafb429b531461aa1b82052e277bfd01d72349"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/db/src/index_lifecycle/text/cleanup.rs:117-127 | crates/db/src/index_lifecycle/text/compaction.rs:98-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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/index_lifecycle/text/cleanup.rs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"961e23623e1e0753598be17db151de7e56723994b510078a66692d8c24b2b067"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/db/src/migrations/mod.rs:5923-5933 | crates/db/src/migrations/mod.rs:5958-5968 \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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":5923}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc35a20db1013028e339a7bb01affeafe83d50fadd9dd202fb4909e3e407359f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): crates/db/src/index_lifecycle_testing.rs:1240-1248 | crates/db/src/index_lifecycle_testing.rs:1366-1374 | crates/db/src/index_lifecycle_testing.rs:1407-1417 \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":"crates/db/src/index_lifecycle_testing.rs"},"region":{"startLine":1240}}}],"partialFingerprints":{"codehealthFindingId/v1":"3726991dfde6a47cadf58fc398335489d2ac13d3677417358ce19ddcb2619cb7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/db/src/search/text/compaction.rs:258-268 | crates/db/src/search/text/compaction.rs:407-417 \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":"crates/db/src/search/text/compaction.rs"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"37037cdaf98fc867c8d296dd96546ccf2538d1b6aae02cbf14e5635e25c01504"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/db/src/search/vector/storage/mod.rs:1223-1233 | crates/db/src/search/vector/storage/mod.rs:1346-1356 \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":"crates/db/src/search/vector/storage/mod.rs"},"region":{"startLine":1223}}}],"partialFingerprints":{"codehealthFindingId/v1":"37e4d9c1a8c2f55a02062cd8eee00b283dce1f338e7220a2bdd5072877c946a7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): crates/db/src/index_lifecycle/text/driver.rs:548-557 | crates/db/src/index_lifecycle/text/driver.rs:607-616 \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":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":548}}}],"partialFingerprints":{"codehealthFindingId/v1":"18b6520608869ff2335f71dd040554533af5eed25b387ba7134276a1b49aaf20"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): crates/cli/src/local_runtime.rs:654-663 | crates/cli/src/local_runtime.rs:678-687 \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":"crates/cli/src/local_runtime.rs"},"region":{"startLine":654}}}],"partialFingerprints":{"codehealthFindingId/v1":"f82d0da707dada04ea05edb519894183d6455b151e683505897f28f0912a30e0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): crates/db/src/search/vector/storage/mod.rs:972-980 | crates/db/src/search/vector/storage/mod.rs:1047-1056 \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":"crates/db/src/search/vector/storage/mod.rs"},"region":{"startLine":972}}}],"partialFingerprints":{"codehealthFindingId/v1":"17fa328dfbb9d7f6cb6da5d4f2249d07452a978931b1ad29aa925d26320e4395"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 5): crates/db/src/migrations/mod.rs:6181-6190 | crates/db/src/migrations/mod.rs:6529-6538 | crates/db/src/migrations/mod.rs:6751-6760 | crates/db/src/migrations/mod.rs:7151-7160 | crates/db/src/migrations/mod.rs:8483-8492 \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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":6181}}}],"partialFingerprints":{"codehealthFindingId/v1":"57c95f776be7f072ffb1974fb6843c47afc3b6efeee745295e24c93f59827ef4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 5): crates/db/src/migrations/vector_retirement.rs:363-372 | crates/db/src/migrations/vector_retirement.rs:490-499 | crates/db/src/migrations/vector_retirement.rs:620-629 | crates/db/src/migrations/vector_retirement.rs:735-744 | crates/db/src/migrations/vector_retirement.rs:892-901 \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":"crates/db/src/migrations/vector_retirement.rs"},"region":{"startLine":363}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a41f646fd783bffef278fa562e002b062f9a5cbbe0a7ba2336a9f992c3e8cda"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): crates/db/src/index_lifecycle/failpoints.rs:200-207 | crates/db/src/migrations/indexes/equality_bitmap.rs:143-152 \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":"crates/db/src/index_lifecycle/failpoints.rs"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6695c79b1559e3c5ca309c6478f3c45d60dbdf613b4e37eab09d19024edf97c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): crates/db/src/encoding/v2/keys/graph.rs:119-125 | crates/db/src/encoding/v2/keys/graph.rs:190-198 | crates/db/src/encoding/v2/keys/graph.rs:270-276 | crates/db/src/encoding/v2/legacy/edge_property_pair.rs:42-49 \u2014 before extracting anything, compare \u0060crates/db/src/encoding/v2/keys/graph.rs\u0060 and \u0060crates/db/src/encoding/v2/legacy/edge_property_pair.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. 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":"crates/db/src/encoding/v2/keys/graph.rs"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"a21a9d675b1e9b7c9f347ff96b74902b64db5160f8197e4d19101e078819fe1d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): crates/db/src/execution/interpreter/access/params.rs:76-84 | crates/db/src/execution/interpreter/access/params.rs:93-101 \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":"crates/db/src/execution/interpreter/access/params.rs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"45e7135dac5ca6fdee563a08c21f4f85e658e2383f15ee2f3851d4dc656a4f4f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): crates/planner/src/rules/access/sets/equality_range/intersection/edge.rs:76-84 | crates/planner/src/rules/access/sets/equality_range/intersection/node.rs:76-84 \u2014 before extracting anything, compare \u0060crates/planner/src/rules/access/sets/equality_range/intersection/edge.rs\u0060 and \u0060crates/planner/src/rules/access/sets/equality_range/intersection/node.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 54 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":"crates/planner/src/rules/access/sets/equality_range/intersection/edge.rs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"25db326db160c73829acb4c949956ee790e5eebc72929765c6784694dcc235b2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): crates/cli/src/local_runtime.rs:753-761 | crates/cli/src/local_runtime.rs:771-779 | crates/cli/src/local_runtime.rs:797-805 \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":"crates/cli/src/local_runtime.rs"},"region":{"startLine":753}}}],"partialFingerprints":{"codehealthFindingId/v1":"f97aab5797c919b4f9346924b58dc813ee7d4a68829314c461e66ce2d6bd48df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 6): crates/db/src/migrations/vector_properties.rs:258-266 | crates/db/src/migrations/vector_retirement.rs:363-371 | crates/db/src/migrations/vector_retirement.rs:490-498 | crates/db/src/migrations/vector_retirement.rs:620-628 | crates/db/src/migrations/vector_retirement.rs:735-743 | crates/db/src/migrations/vector_retirement.rs:892-900 \u2014 before extracting anything, compare \u0060crates/db/src/migrations/vector_properties.rs\u0060 and \u0060crates/db/src/migrations/vector_retirement.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 49 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":"crates/db/src/migrations/vector_properties.rs"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"512f36d8accceb7110e89d9b8b9a8890194541e3fa5a75e70bb6812aa0ccdfee"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): crates/db/src/index_lifecycle_testing.rs:1607-1615 | crates/db/src/index_lifecycle_testing.rs:1632-1640 \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":"crates/db/src/index_lifecycle_testing.rs"},"region":{"startLine":1607}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a2f62b4e0d1484493df38dec4e358993b989b9f61265da000239e5243c639b5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): crates/db/src/execution/interpreter/access/restricted_text.rs:87-95 | crates/db/src/execution/interpreter/access/restricted_vector.rs:73-81 \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":"crates/db/src/execution/interpreter/access/restricted_text.rs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"8dfc1edaf5555e7f61784cf28fa722eaf10d9bae38eb1eb15f9cf511f9d08864"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): crates/db/src/search/text/split.rs:401-408 | crates/db/src/search/text/split.rs:417-424 \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":"crates/db/src/search/text/split.rs"},"region":{"startLine":401}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc7750e9b74fa9693c50003cb266777a465fed71daa3897682d17cacd16640f4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): crates/db/src/index_lifecycle/secondary.rs:1305-1312 | crates/db/src/index_lifecycle/vector/driver.rs:2310-2317 \u2014 before extracting anything, compare \u0060crates/db/src/index_lifecycle/secondary.rs\u0060 and \u0060crates/db/src/index_lifecycle/vector/driver.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 109 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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":1305}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0b164906a0849849cf153b01e92c5bac9517ec593f74a3bf70a689a6e9e8833"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): crates/db/src/index_lifecycle/text/driver.rs:955-962 | crates/db/src/index_lifecycle/text/driver.rs:1189-1196 \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":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":955}}}],"partialFingerprints":{"codehealthFindingId/v1":"6db9ff1da71238835fef7cedbf47a75bf26bf8cf48bf54472ce620ce2bf430d8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): crates/db/src/search/text/split.rs:373-380 | crates/db/src/search/text/split.rs:509-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":"crates/db/src/search/text/split.rs"},"region":{"startLine":373}}}],"partialFingerprints":{"codehealthFindingId/v1":"125f410100f01f700b21d11a14bd512de0c1824708c081a901cbc4b233d16a37"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): crates/db/src/encoding/v2/values/adjacency.rs:186-193 | crates/db/src/encoding/v2/values/adjacency.rs:194-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":"crates/db/src/encoding/v2/values/adjacency.rs"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"954f12c27a39ff253fba0c5dfa4cb1a144887c7cdd0b132d62cf63be395ac244"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): crates/db/src/index_lifecycle/secondary.rs:1694-1701 | crates/db/src/index_lifecycle/vector/driver.rs:2903-2910 \u2014 before extracting anything, compare \u0060crates/db/src/index_lifecycle/secondary.rs\u0060 and \u0060crates/db/src/index_lifecycle/vector/driver.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 109 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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":1694}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f78219764808921dfdb9a14691e5c6c7451fc538a0b4b5a96373af36c933946"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): crates/db/src/index_lifecycle/secondary.rs:2230-2237 | crates/db/src/index_lifecycle/secondary.rs:2268-2275 \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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":2230}}}],"partialFingerprints":{"codehealthFindingId/v1":"59eaec7c1a8fbc2b48fdbf29b11f6614dc537210180380f2b47a7059d9c41286"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): crates/db/src/index_lifecycle/secondary.rs:1017-1023 | crates/db/src/index_lifecycle/vector/driver.rs:2100-2106 \u2014 before extracting anything, compare \u0060crates/db/src/index_lifecycle/secondary.rs\u0060 and \u0060crates/db/src/index_lifecycle/vector/driver.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 109 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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":1017}}}],"partialFingerprints":{"codehealthFindingId/v1":"428807b3beeffafe3381baebc70a764b2a69b71d0363370d0042b8db24892983"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): crates/db/src/index_lifecycle/secondary.rs:1017-1023 | crates/db/src/index_lifecycle/text/driver.rs:2993-2999 \u2014 before extracting anything, compare \u0060crates/db/src/index_lifecycle/secondary.rs\u0060 and \u0060crates/db/src/index_lifecycle/text/driver.rs\u0060 as WHOLE FILES: this scan already matched 6 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. 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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":1017}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6fe219ae6652e1e84d8cef6a546d0481efc0b6047e8289970220a8d84d6cb40"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 4): crates/db/src/index_lifecycle/text/driver.rs:957-962 | crates/db/src/index_lifecycle/text/driver.rs:1191-1196 | crates/db/src/index_lifecycle/text/driver.rs:1587-1593 | crates/db/src/index_lifecycle/text/driver.rs:1866-1871 \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":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":957}}}],"partialFingerprints":{"codehealthFindingId/v1":"f22268d5695ed42ba8af1c8085c38c54de7834d3ff58cdf917039f448fd19daf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): crates/db/src/index_lifecycle/text/driver.rs:3415-3421 | crates/db/src/index_lifecycle/vector/driver.rs:3535-3541 \u2014 \u0060crates/db/src/index_lifecycle/text/driver.rs\u0060 and \u0060crates/db/src/index_lifecycle/vector/driver.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 51 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":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":3415}}}],"partialFingerprints":{"codehealthFindingId/v1":"09a117119780703afcadabeef474f3c397d0b46b4b64765455f93046db558559"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/planner/src/rules/access/sets/equality_range/intersection/edge.rs:36-41 | crates/planner/src/rules/access/sets/equality_range/range_union/edge.rs:37-43 \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":"crates/planner/src/rules/access/sets/equality_range/intersection/edge.rs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"2249099d07645e9352670faaa17b6ba70d24391b9714a1765dd22181f216accd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): crates/planner/src/rules/access/sets/equality_range/intersection/node.rs:35-41 | crates/planner/src/rules/access/sets/equality_range/range_union/node.rs:36-42 \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":"crates/planner/src/rules/access/sets/equality_range/intersection/node.rs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"61aadd9558223394e8133e1bce05a7f047ee6a2aec9ff0789064a621b4f41fc8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/db/src/migrations/mod.rs:1562-1567 | crates/db/src/migrations/mod.rs:1725-1730 \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":"crates/db/src/migrations/mod.rs"},"region":{"startLine":1562}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1666ff29e4857080e81b700296172075583ad7ba42b2f39847818383ffbf290"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/db/src/index_lifecycle/outbox.rs:1055-1060 | crates/db/src/index_lifecycle/outbox.rs:1311-1316 \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":"crates/db/src/index_lifecycle/outbox.rs"},"region":{"startLine":1055}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb20a5dc6f934330f69b058243429637f02a8a40e95f6993ffeaf826068f3359"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/db/src/index_lifecycle/text/driver.rs:3405-3410 | crates/db/src/index_lifecycle/vector/driver.rs:3514-3519 \u2014 \u0060crates/db/src/index_lifecycle/text/driver.rs\u0060 and \u0060crates/db/src/index_lifecycle/vector/driver.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 51 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":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":3405}}}],"partialFingerprints":{"codehealthFindingId/v1":"27d20700beced9d7a6003db88641e28f26305eda4eaab6d295ac8c0680beddb2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/db/src/encoding/v2/values/indexes/equality.rs:143-148 | crates/db/src/encoding/v2/values/indexes/equality.rs:181-186 \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":"crates/db/src/encoding/v2/values/indexes/equality.rs"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"605a7fc7aa8f18d4c9b377436ed3ad9c0c5380e18caa6b381c274c2392bcd93a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): sdks/rust/src/lib.rs:393-398 | sdks/rust/src/lib.rs:401-405 \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":"sdks/rust/src/lib.rs"},"region":{"startLine":393}}}],"partialFingerprints":{"codehealthFindingId/v1":"49eea3eb593be44829bce29a398d99c70bb77c8cd3461cd4dbfe347ba020c363"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): crates/cli/src/commands/cloud/database.rs:248-252 | crates/cli/src/commands/cloud/service_credential.rs:48-52 \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":"crates/cli/src/commands/cloud/database.rs"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"41a1289a4a3348663e522bbab9a4a1a6b701d329ad38cd465ed5582b3901c561"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 4): crates/db/src/migration_parity.rs:1332-1336 | crates/db/src/migration_parity.rs:1364-1368 | crates/db/src/migration_parity.rs:1442-1446 | crates/db/src/migration_parity.rs:1479-1483 \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":"crates/db/src/migration_parity.rs"},"region":{"startLine":1332}}}],"partialFingerprints":{"codehealthFindingId/v1":"f24cd85ca6aea5badfda1c23e1155bd87ab4ade317d365215875b391d393b02d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): crates/db/src/index_lifecycle/text/driver.rs:1149-1153 | crates/db/src/index_lifecycle/text/driver.rs:1439-1443 \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":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":1149}}}],"partialFingerprints":{"codehealthFindingId/v1":"86751c05e5b19cef24a216f56b1f9d07d300a773b4345f25d68f5c91343fc68b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): crates/db/src/encoding/v2/values/property/property_value.rs:128-132 | crates/db/src/encoding/v2/values/property/property_value.rs:206-210 \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":"crates/db/src/encoding/v2/values/property/property_value.rs"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"50db9ee003247193dea9bb8530ffe9a7ffd27979cd16710d50573cbb3732b68c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): crates/db-testkit/src/model.rs:851-856 | crates/db/src/encoding/v2/values/property/property_value.rs:211-216 | crates/planner/src/analysis/scalar/values.rs:103-108 \u2014 before extracting anything, compare \u0060crates/db/src/encoding/v2/values/property/property_value.rs\u0060 and \u0060crates/planner/src/analysis/scalar/values.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 49 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":"crates/db-testkit/src/model.rs"},"region":{"startLine":851}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ab51bb0e79466169c88c95640d0f902fa59b6f109506669505c9a2b7c361390"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): crates/db/src/index_lifecycle/secondary.rs:1046-1050 | crates/db/src/index_lifecycle/text/driver.rs:3026-3030 \u2014 before extracting anything, compare \u0060crates/db/src/index_lifecycle/secondary.rs\u0060 and \u0060crates/db/src/index_lifecycle/text/driver.rs\u0060 as WHOLE FILES: this scan already matched 6 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. 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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":1046}}}],"partialFingerprints":{"codehealthFindingId/v1":"12de07127da62e6da17b1c29fa7102eb428e8b1f16e308b84fc701eac8b72587"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/db/src/index_lifecycle/text/validation.rs:532-537 | crates/db/src/index_lifecycle/text/validation.rs:723-728 \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":"crates/db/src/index_lifecycle/text/validation.rs"},"region":{"startLine":532}}}],"partialFingerprints":{"codehealthFindingId/v1":"896d3fd898b095745dfdffbd46d51397b61f6ebc70f378d9dd5b1c4084d9a489"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): crates/db-testkit/src/model.rs:843-847 | crates/planner/src/analysis/scalar/values.rs:95-99 \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":"crates/db-testkit/src/model.rs"},"region":{"startLine":843}}}],"partialFingerprints":{"codehealthFindingId/v1":"96518fd9c2e4f4bf1dce1c6988f4d6f7bd8d053721913d0414a2ec1e31ab7598"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): crates/planner/src/exec/selected/lowering/contracts/delivered/pipeline.rs:38-42 | crates/planner/src/rules/physical_contracts/support/pipeline.rs:153-157 \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":"crates/planner/src/exec/selected/lowering/contracts/delivered/pipeline.rs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0861b417b5e282e7058f9f2815959a73ba5c8e90e812a9acef0f311ba2d59cf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): crates/planner/src/exec/selected/lowering/contracts/delivered/pipeline.rs:48-52 | crates/planner/src/rules/physical_contracts/support/pipeline.rs:193-197 \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":"crates/planner/src/exec/selected/lowering/contracts/delivered/pipeline.rs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"f18a26f218267637c54dc5aa4f2cae06e6662c8425d61e63149f8482e4c4f169"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): sdks/python/scripts/run_embedded_parity.py:51-72 | sdks/python/scripts/run_embedded_parity.py:163-184 \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 \u0060sdks/python/scripts/run_embedded_parity.py:51\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":"sdks/python/scripts/run_embedded_parity.py"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d36952d7e58a8010704597f95339da5c7801d02988df70bc6002b5dae2aecc0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): sdks/python/scripts/run_embedded_parity.py:295-308 | sdks/python/scripts/run_embedded_parity.py:328-341 \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 \u0060sdks/python/scripts/run_embedded_parity.py:295\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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sdks/python/scripts/run_embedded_parity.py"},"region":{"startLine":295}}}],"partialFingerprints":{"codehealthFindingId/v1":"b99ac3a79987c571529e2af8c37c50583a9a7772d01bddbfd83c643d34005dee"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): sdks/python/src/helixdb/dsl.py:1362-1375 | sdks/python/src/helixdb/dsl.py:1399-1412 \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":"sdks/python/src/helixdb/dsl.py"},"region":{"startLine":1362}}}],"partialFingerprints":{"codehealthFindingId/v1":"423f3764f82565af6e6dafc16349f715ad65f84cf25e80b6d752a73e21de2bf4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201312 lines \u00D7 4): sdks/python/scripts/run_embedded_parity.py:299-310 | sdks/python/scripts/run_embedded_parity.py:332-343 | sdks/python/scripts/run_server_parity.py:403-412 | sdks/python/scripts/run_server_parity.py:421-430 \u2014 there are 4 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 4 sites; resolving a subset leaves the remainder to drift apart. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sdks/python/scripts/run_embedded_parity.py:299\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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sdks/python/scripts/run_embedded_parity.py"},"region":{"startLine":299}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e80cc7430e816793b190e6b24909a4f3e4c98e07e9e504489bbde0f3c804110"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): sdks/python/scripts/run_embedded_parity.py:350-361 | sdks/python/scripts/run_server_parity.py:476-487 \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":"sdks/python/scripts/run_embedded_parity.py"},"region":{"startLine":350}}}],"partialFingerprints":{"codehealthFindingId/v1":"9eea4cda1f397bf5f64b16c2fcad7d9af856a75a91bbd5fbc656db9d88126be6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): docker-image/image_archive.py:243-252 | docker-image/image_archive.py:351-360 \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":"docker-image/image_archive.py"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"a962c3636ca6f053bcc084b12d0b97194ceb6db4b9933b036aa9dd4f38290ee4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): sdks/python/scripts/run_embedded_parity.py:251-262 | sdks/python/scripts/run_server_parity.py:347-356 \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 \u0060sdks/python/scripts/run_embedded_parity.py:251\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":"sdks/python/scripts/run_embedded_parity.py"},"region":{"startLine":251}}}],"partialFingerprints":{"codehealthFindingId/v1":"b75c549a031129491a2a8d4fe8505354abc20b6c2b40e8eb1b1e2019cbe82f1e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): sdks/python/scripts/run_embedded_parity.py:367-376 | sdks/python/scripts/run_server_parity.py:491-500 \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":"sdks/python/scripts/run_embedded_parity.py"},"region":{"startLine":367}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d696ad4d7acd99352742b3b49301abaaa336d0528d478d6de246aecacc3d179"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u20138 lines \u00D7 2): sdks/python/scripts/run_embedded_parity.py:264-271 | sdks/python/scripts/run_server_parity.py:358-364 \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 \u0060sdks/python/scripts/run_embedded_parity.py:264\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":"sdks/python/scripts/run_embedded_parity.py"},"region":{"startLine":264}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc204a53938b549298d281cafa9a94d3d12ad72140d0c31164fc821c60f44e29"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): sdks/python/src/helixdb/dsl.py:974-981 | sdks/python/src/helixdb/dsl.py:992-996 \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 \u0060sdks/python/src/helixdb/dsl.py:974\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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sdks/python/src/helixdb/dsl.py"},"region":{"startLine":974}}}],"partialFingerprints":{"codehealthFindingId/v1":"723a4ed5c3a3bb7a28a7567587ba7a105610d95af340be024954f9b5deca1ffc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): sdks/go/dsl.go:2333-2346 | sdks/go/dsl.go:2786-2799 \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":"sdks/go/dsl.go"},"region":{"startLine":2333}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ac19243b65eb7355f6f212c713801a1f7727ded402c152fafb8e8e5df39a2f1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): sdks/go/dsl.go:2387-2397 | sdks/go/dsl.go:2858-2868 \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":"sdks/go/dsl.go"},"region":{"startLine":2387}}}],"partialFingerprints":{"codehealthFindingId/v1":"7582be97745d15706b8859f05bd3f6cb6536b538749c3a2d0028b7d23ba536ba"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): sdks/go/client.go:297-306 | sdks/go/client.go:351-360 \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 \u0060sdks/go/client.go:297\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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sdks/go/client.go"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"93eb01b79131da25fa21d87350c6454874fe0b4ef63f5b7032873f16d9f14010"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): sdks/go/dsl.go:2375-2384 | sdks/go/dsl.go:2426-2435 \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":"sdks/go/dsl.go"},"region":{"startLine":2375}}}],"partialFingerprints":{"codehealthFindingId/v1":"566c4b701e7c60b27a6aa27e7155f06b409d1de362dd5991ac0f0e587a98f86b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): sdks/go/dsl.go:270-278 | sdks/go/dsl.go:280-288 \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":"sdks/go/dsl.go"},"region":{"startLine":270}}}],"partialFingerprints":{"codehealthFindingId/v1":"90484a2646e813dc1ea243f396390691551b4136dafdf3099f353de5b4fc1e84"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): sdks/go/dsl.go:292-300 | sdks/go/dsl.go:302-310 \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":"sdks/go/dsl.go"},"region":{"startLine":292}}}],"partialFingerprints":{"codehealthFindingId/v1":"60034ff9d694cc724e5a70a2caa642e04d9b1e46798b4283324a45effce611a3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/planner/src/experiments/fixtures/batch.rs:59-69 | crates/planner/src/experiments/fixtures/batch.rs:98-108 \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":"crates/planner/src/experiments/fixtures/batch.rs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a0c2a0fe0dc2b2d1e277bc02294d22e07988ed8a2540eaecf6595f8b31887a4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): crates/planner/src/experiments/fixtures/batch.rs:170-179 | crates/planner/src/experiments/fixtures/batch.rs:291-300 \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":"crates/planner/src/experiments/fixtures/batch.rs"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7e368c8760aef045ca97d698436b23be8e3b55a3d98c993badf0326910b6525"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): sdks/python/scripts/generate_parity_fixtures.py:65-71 | sdks/python/scripts/parity_runtime_fixtures.py:40-46 \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":"sdks/python/scripts/generate_parity_fixtures.py"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e7baa579acdbefb5d5b98e49af7ed9ce26519fae9ec2f664dccffc6b9179339"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: helix-graph-algorithms: helix-graph-algorithms: abstractness 0.00, instability 0.00, distance 1.00 \u2014 zone of pain \u2014 concrete and depended on by 1 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"8f1cf3407ff3432d63e553a1467c5f8d6f5ec7deabd6c4dd848d51d98a641166"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: helix-metrics: helix-metrics: 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":"448dc0c7dab1561c78c88e80247b60f4e2e052cada9d61730369a03e682a622a"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: helix-value-semantics: helix-value-semantics: abstractness 0.00, instability 0.00, distance 1.00 \u2014 zone of pain \u2014 concrete and depended on by 2 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"1fd7c8129ed5ce0729f2f1f8a890f7285c20feb590089f1a88b90623bbe6bc79"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: helix-ast: helix-ast: abstractness 0.11, instability 0.00, distance 0.89 \u2014 zone of pain \u2014 concrete and depended on by 5 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"62598dba8029b06bc5ec0bb382ffbbf6e3263209c3a6357ff8d7a3ee0ed2cf5a"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: DbConfig (LCOM4 13): DbConfig\u0027s methods fall into 13 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 13 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":"crates/db/src/config/db.rs"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"e01b4e209d5b0ad87538e30a023593d454db2057385ee903899139b7aac8f343"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: Highlight (LCOM4 7): Highlight\u0027s methods fall into 7 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 7 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/cli/src/output/json.rs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9681f2813b8d2283744b1e1231d23492c4204e797b62bb0e02570934ad2b79d"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: VectorIndexDefinition (LCOM4 6): VectorIndexDefinition\u0027s methods fall into 6 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 6 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":"crates/db/src/config/indexes.rs"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"56bdbabb5146bacf410c91dabfc51779a46c88abdf31524de9e1a682b76fee53"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: SearchParams (LCOM4 5): SearchParams\u0027s methods fall into 5 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 5 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/db/src/search/vector/mod.rs"},"region":{"startLine":404}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b669891621d99dfe2de66cb9cf3129db5cb571be3754bae90a6789f95b8b098"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: StorageCostProfile (LCOM4 4): StorageCostProfile\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":"crates/planner/src/cost/profile.rs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d68d475fe0f7fb745385257d67400565f71e2e06606e594190f722ccc33af79"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/db/src/index_lifecycle/secondary.rs: crates/db/src/index_lifecycle/secondary.rs changed 44 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 28 in db::index_lifecycle::secondary::scan_source at line 1004. 8 of those changes were fix/bug commits, and the other 36 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/db/src/index_lifecycle/secondary.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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":1004}}}],"partialFingerprints":{"codehealthFindingId/v1":"31fc43481fb4548c1a18957dfd6ca42078dbbf9803ac8c5c214eba94d22bda7d"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/db/src/index_lifecycle/repository.rs: crates/db/src/index_lifecycle/repository.rs changed 24 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 36 in db::index_lifecycle::repository::scoped_cursor_is_valid at line 452. 7 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/db/src/index_lifecycle/repository.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":"crates/db/src/index_lifecycle/repository.rs"},"region":{"startLine":452}}}],"partialFingerprints":{"codehealthFindingId/v1":"f127bc6fde5a28fc53646ff4e0cf27245f79ee9e1f3ba98f1f35e60319a0644e"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: sdks/typescript/src/dsl.ts: sdks/typescript/src/dsl.ts changed 7 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 86 in Step.toAst at line 1703. 4 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- sdks/typescript/src/dsl.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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":1703}}}],"partialFingerprints":{"codehealthFindingId/v1":"921223bc6f1cfd798488fdcd25065a6f0fc160d5ef8d58720f6f4fda85f89a48"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: sdks/python/src/helixdb/dsl.py: sdks/python/src/helixdb/dsl.py changed 11 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 54 in Step.to_ast at line 2312. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- sdks/python/src/helixdb/dsl.py\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":"sdks/python/src/helixdb/dsl.py"},"region":{"startLine":2312}}}],"partialFingerprints":{"codehealthFindingId/v1":"f401484be330e0a9a1ec181b83a2a2b08339197fca6758d49669d12610576af0"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/db/src/execution/interpreter/pull/poll.rs: crates/db/src/execution/interpreter/pull/poll.rs changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 92 in Cursor::next at line 5. 3 of those changes were fix/bug commits, and the other 3 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/db/src/execution/interpreter/pull/poll.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":"crates/db/src/execution/interpreter/pull/poll.rs"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"294ccdd8d6c87d0e4ddc7b8e165c910b5f0f766998f8d8882ae2a011d46d8e14"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/db/src/search/vector/hnsw/restricted.rs: crates/db/src/search/vector/hnsw/restricted.rs changed 13 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 41 in VectorIndex::restricted_filter_aware_search at line 1106. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/db/src/search/vector/hnsw/restricted.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":"crates/db/src/search/vector/hnsw/restricted.rs"},"region":{"startLine":1106}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d589a5cc332083935b88f0431878071bbbb8d117ea0a78521a0e16bf8fc90f8"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/db/src/execution/interpreter/count.rs: crates/db/src/execution/interpreter/count.rs changed 14 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 36 in ExecutionContext::count_cursor_leaf at line 1274. 2 of those changes were fix/bug commits, and the other 12 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/db/src/execution/interpreter/count.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":"crates/db/src/execution/interpreter/count.rs"},"region":{"startLine":1274}}}],"partialFingerprints":{"codehealthFindingId/v1":"348682efbe3743643968ad56fb43c5703cb4e782b81a9ed1ac0c84f215f7a7bf"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/db/src/migration_parity.rs: crates/db/src/migration_parity.rs changed 19 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 26 in db::migration_parity::scan_v2_state at line 1018. 1 of those changes was a fix/bug commit, and the other 18 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/db/src/migration_parity.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":"crates/db/src/migration_parity.rs"},"region":{"startLine":1018}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb05fa8b631febc193f2fffb83eb9dff7129fe92c0472f52417f73576a16787b"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/db/src/error.rs: crates/db/src/error.rs changed 10 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 48 in HelixDbError::error_code at line 490. 1 of those changes was a fix/bug commit, and the other 9 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/db/src/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":"crates/db/src/error.rs"},"region":{"startLine":490}}}],"partialFingerprints":{"codehealthFindingId/v1":"252d05b4efe7bee5b086f28f017cce6c894979f7e36e1f68b69768c5cd35d49b"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: sdks/go/dsl.go: sdks/go/dsl.go changed 7 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 64 in Step.ToAST at line 1445. 3 of those changes were fix/bug commits, and the other 4 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- sdks/go/dsl.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":"sdks/go/dsl.go"},"region":{"startLine":1445}}}],"partialFingerprints":{"codehealthFindingId/v1":"30d05a59bd7073013a5d5268f91293c4e24615680a68865a46e18d4fea0a12e5"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/db/src/execution/interpreter/dispatch.rs: crates/db/src/execution/interpreter/dispatch.rs changed 14 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 28 in ExecutionContext::execute_op at line 52. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/db/src/execution/interpreter/dispatch.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":"crates/db/src/execution/interpreter/dispatch.rs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"3406200efeae2441645361c87e7708c0adda716c6a338a502bd27c3ebdfb203f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/cli/src/main.rs: crates/cli/src/main.rs changed 11 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 34 in helix_cli::main at line 543. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/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":"crates/cli/src/main.rs"},"region":{"startLine":543}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed55463981beb0fce28b6044168ff09fd424b57e2d5164e576518199ebd5fc83"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/db/src/search/vector/cache/hydration.rs: crates/db/src/search/vector/cache/hydration.rs changed 10 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 32 in db::search::vector::cache::hydration::hydrate_active_generations at line 141. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/db/src/search/vector/cache/hydration.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":"crates/db/src/search/vector/cache/hydration.rs"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9ca9e8dd9a7fec8d90a3ceba89daec940f7254d89e5fabba0f49e2d1aee497d"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/db/src/index_lifecycle/vector/driver.rs: crates/db/src/index_lifecycle/vector/driver.rs changed 17 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 17 in db::index_lifecycle::vector::driver::step_build at line 1402. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/db/src/index_lifecycle/vector/driver.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":"crates/db/src/index_lifecycle/vector/driver.rs"},"region":{"startLine":1402}}}],"partialFingerprints":{"codehealthFindingId/v1":"bcd6896bae6d1a9eb849bb9992416fea8a714d52c9e08e2c6c44cac92e583264"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: scripts/validate-cargo-target-references.py: scripts/validate-cargo-target-references.py changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 48 in validate-cargo-target-references.validate_codec_architecture at line 491. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- scripts/validate-cargo-target-references.py\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":"scripts/validate-cargo-target-references.py"},"region":{"startLine":491}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a745e384b462469e39b2175676c04a8537ec1c8385b721bb54d1c5314961d60"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/db/src/index_lifecycle/outbox.rs: crates/db/src/index_lifecycle/outbox.rs changed 15 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 19 in db::index_lifecycle::outbox::execute_claimed_step_with_evidence at line 1019. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/db/src/index_lifecycle/outbox.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":"crates/db/src/index_lifecycle/outbox.rs"},"region":{"startLine":1019}}}],"partialFingerprints":{"codehealthFindingId/v1":"342d1401ab8f6de84c9ff6ecbe3af63a510268f1501d8e8126d6bebdd6f95728"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/db/src/index_lifecycle/text/driver.rs: crates/db/src/index_lifecycle/text/driver.rs changed 9 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 28 in db::index_lifecycle::text::driver::build_text_catch_up_plan at line 2242. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/db/src/index_lifecycle/text/driver.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":"crates/db/src/index_lifecycle/text/driver.rs"},"region":{"startLine":2242}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb3f3232df5c747322b06f2ea69bb0acb573377b342281c95b541543144692ff"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/db/src/index_lifecycle/text/validation.rs: crates/db/src/index_lifecycle/text/validation.rs changed 10 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 25 in db::index_lifecycle::text::validation::select_page 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/db/src/index_lifecycle/text/validation.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":"crates/db/src/index_lifecycle/text/validation.rs"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"ded6a091a9c3070088c8e42e888e527f0047e518277eda6ff40d2edce04d3a45"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: sdks/typescript/src/index.ts: sdks/typescript/src/index.ts changed 10 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 23 in HelixError.remote at line 72. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- sdks/typescript/src/index.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":"sdks/typescript/src/index.ts"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"75c40d7ddb2d68a6722455db745030a0fa45be24f5f34d74fd2bc57bcd910ee9"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/cli/src/config.rs: crates/cli/src/config.rs changed 14 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in HelixConfig::validate at line 551. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/cli/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":"crates/cli/src/config.rs"},"region":{"startLine":551}}}],"partialFingerprints":{"codehealthFindingId/v1":"addbb259fc17c3782a74db505ea22d0a99da6aafd9f859b9b0d3c9514e73ac13"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/planner/src/rules/cardinality.rs: crates/planner/src/rules/cardinality.rs changed 10 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 21 in helix_planner::rules::cardinality::fold_cursor at line 273. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/planner/src/rules/cardinality.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":"crates/planner/src/rules/cardinality.rs"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"59594c64fe47d041a51b38c2b4f489516ead3a04fafb9da377673d6e195780e1"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/planner/src/diagnostics/analyze.rs: crates/planner/src/diagnostics/analyze.rs changed 9 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 23 in Analyzer::analyze_access_leaf at line 304. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/planner/src/diagnostics/analyze.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":"crates/planner/src/diagnostics/analyze.rs"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"17fd1ec05b2a23d40a136addd1f9c811cc4dd3f9cd243531b05e85b29256731e"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/planner/src/rules/contracts/applicability/known.rs: crates/planner/src/rules/contracts/applicability/known.rs changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 48 in helix_planner::rules::contracts::applicability::known::for_known_rule at line 6. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/planner/src/rules/contracts/applicability/known.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":"crates/planner/src/rules/contracts/applicability/known.rs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e898aa4b3f4c94311fdad9c32ae64b8865c9c44324e3022ceb72bfd0061bc10"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/db/src/index_lifecycle/secondary/exact.rs: crates/db/src/index_lifecycle/secondary/exact.rs changed 12 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in db::index_lifecycle::secondary::exact::run_production_contracts at line 502. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/db/src/index_lifecycle/secondary/exact.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":"crates/db/src/index_lifecycle/secondary/exact.rs"},"region":{"startLine":502}}}],"partialFingerprints":{"codehealthFindingId/v1":"360c0cb6f5b9441e80d4533130efad3d457b7dedad0365bb5408b52ff6445052"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/db/src/execution/interpreter/access/secondary_set.rs: crates/db/src/execution/interpreter/access/secondary_set.rs changed 10 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 17 in ExecutionContext::node_secondary_ids at line 122. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/db/src/execution/interpreter/access/secondary_set.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":"crates/db/src/execution/interpreter/access/secondary_set.rs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"946e36f5ba2942100d60f3e3f7f10913b82864d6eb1527efc65d1ba9c123e206"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: sdks/go/client.go: sdks/go/client.go changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 28 in Client.Exec at line 273. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- sdks/go/client.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":"sdks/go/client.go"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"774e0af44a0b7911b1a8c69003a018e2410694c9c4892e4732a5bcdea3225395"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/db/src/search/text/mod.rs: crates/db/src/search/text/mod.rs changed 10 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in db::search::text::search_manifest_with_state_source at line 505. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/db/src/search/text/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":"crates/db/src/search/text/mod.rs"},"region":{"startLine":505}}}],"partialFingerprints":{"codehealthFindingId/v1":"8af8c02192e3caa3f7d5f8b87c234c57b599888ef577dff68eaf59d6645bb2f9"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/db/src/index_lifecycle/text/manifest.rs: crates/db/src/index_lifecycle/text/manifest.rs changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 26 in db::index_lifecycle::text::manifest::select_page at line 150. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/db/src/index_lifecycle/text/manifest.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":"crates/db/src/index_lifecycle/text/manifest.rs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"7381816e2a12d02d66a0d717fa672f8c74467b444ed9c303fac68e95f7cc9630"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: sdks/go/cmd/generate-parity-fixtures/main.go: sdks/go/cmd/generate-parity-fixtures/main.go changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 31 in main.executeEmbeddedFixtures at line 93. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- sdks/go/cmd/generate-parity-fixtures/main.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":"sdks/go/cmd/generate-parity-fixtures/main.go"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"2006146b89059ffdb983a4962ab89c3393fa151d10c2d214ccfab184d119c8e5"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/db/src/execution/interpreter/pull/source.rs: crates/db/src/execution/interpreter/pull/source.rs changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 33 in Source::open at line 120. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/db/src/execution/interpreter/pull/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":"crates/db/src/execution/interpreter/pull/source.rs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"73429311f64ab4dc5ee43fa83d235de06297ab63cdbe78d24600693056890f0a"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/planner/src/exec/lowering/costing.rs: crates/planner/src/exec/lowering/costing.rs changed 8 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in helix_planner::exec::lowering::costing::node_secondary_set_cost at line 214. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/planner/src/exec/lowering/costing.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":"crates/planner/src/exec/lowering/costing.rs"},"region":{"startLine":214}}}],"partialFingerprints":{"codehealthFindingId/v1":"c251a2bdbfaa3c41320ce328b55599cf36f0abc1333c15f16b13ec9ac812cffd"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/planner/src/rules/physical_contracts/support/pipeline.rs: crates/planner/src/rules/physical_contracts/support/pipeline.rs changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 20 in helix_planner::rules::physical_contracts::support::pipeline::stream_pipeline_op_contract at line 51. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/planner/src/rules/physical_contracts/support/pipeline.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":"crates/planner/src/rules/physical_contracts/support/pipeline.rs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"682a01c8e2e9f75008d55804ca459671a02bf877453c6dae061cee63f0f36a51"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/planner/src/exec/count.rs: crates/planner/src/exec/count.rs changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 20 in helix_planner::exec::count::validate_count_plan at line 1181. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/planner/src/exec/count.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":"crates/planner/src/exec/count.rs"},"region":{"startLine":1181}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5a69f0b23f9c83ca36fe6a9a7340b215fd7f9a91ec649a87c4a73e18dd70a1f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/db/src/migrations/vector_retirement.rs: crates/db/src/migrations/vector_retirement.rs changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 18 in db::migrations::vector_retirement::release_reservations_batch at line 778. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/db/src/migrations/vector_retirement.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":"crates/db/src/migrations/vector_retirement.rs"},"region":{"startLine":778}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e1735cdc0363f306f79ce463ab755aa8d13c45b0f752ea1b2f0b449c05b3bd9"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/planner/src/error/mod.rs: crates/planner/src/error/mod.rs changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 35 in PlannerError::error_code at line 287. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/planner/src/error/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":"crates/planner/src/error/mod.rs"},"region":{"startLine":287}}}],"partialFingerprints":{"codehealthFindingId/v1":"125148d5c519841e51c9f17e292e1ac594ddd491eacb9e177bd83642bad00cba"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/cli/src/errors.rs: crates/cli/src/errors.rs changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 17 in ConfigError::to_cli_error at line 276. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/cli/src/errors.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":"crates/cli/src/errors.rs"},"region":{"startLine":276}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ff942553718e0785332a726b9f3572e385291eb8935d4f96c18d72b5ccac46a"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/planner/src/physical/cardinality.rs: crates/planner/src/physical/cardinality.rs changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 25 in helix_planner::physical::cardinality::cursor_family at line 153. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/planner/src/physical/cardinality.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":"crates/planner/src/physical/cardinality.rs"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebaf54a2e0b4f34d3af9d4bc1883deb3eb235d8abb913203d4e6d7f069bf2f46"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/db/src/execution/interpreter/pull/count.rs: crates/db/src/execution/interpreter/pull/count.rs changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 25 in Program::new at line 25. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/db/src/execution/interpreter/pull/count.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":"crates/db/src/execution/interpreter/pull/count.rs"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"acead4f0466e556432e13cce548cc065d30df88533c40bb22bb55831b3fdde5e"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/db/src/execution/interpreter/row_mode.rs: crates/db/src/execution/interpreter/row_mode.rs changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 25 in db::execution::interpreter::row_mode::op_name at line 91. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/db/src/execution/interpreter/row_mode.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":"crates/db/src/execution/interpreter/row_mode.rs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"231222fe84a1c602b5fb25987ce4e4d10dd07029878097f6c1576747e75f052f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/planner/src/rules/contracts/known/names.rs: crates/planner/src/rules/contracts/known/names.rs changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 49 in KnownRuleId::from_name at line 61. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/planner/src/rules/contracts/known/names.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":"crates/planner/src/rules/contracts/known/names.rs"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"1486d4feb1c0a8fa5b68cd5fd19080e39d3659448dba0318861c95f183dc3c08"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/db/src/index_lifecycle/text/active_batch.rs: crates/db/src/index_lifecycle/text/active_batch.rs changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 19 in db::index_lifecycle::text::active_batch::prepare_destination at line 560. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/db/src/index_lifecycle/text/active_batch.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":"crates/db/src/index_lifecycle/text/active_batch.rs"},"region":{"startLine":560}}}],"partialFingerprints":{"codehealthFindingId/v1":"71cfcf88125ea2ab20894c17417079431aa9e3cfee8d726fab52ecc28386589e"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/db/src/index_lifecycle/text/active_compaction.rs: crates/db/src/index_lifecycle/text/active_compaction.rs changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 23 in db::index_lifecycle::text::active_compaction::compact_once at line 31. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/db/src/index_lifecycle/text/active_compaction.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":"crates/db/src/index_lifecycle/text/active_compaction.rs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"25bb50cfadf999a42d25a6e05083ebb4e66464d420ff6680599013d7207aa946"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/db/src/index_lifecycle/text/compaction.rs: crates/db/src/index_lifecycle/text/compaction.rs changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in db::index_lifecycle::text::compaction::select_artifacts at line 79. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/db/src/index_lifecycle/text/compaction.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":"crates/db/src/index_lifecycle/text/compaction.rs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"37c0b91e4053d84fcfc4b17740bb4b382a3da068df7feaa15daca2fa04ba7e01"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/planner/src/exec/pull/mod.rs: crates/planner/src/exec/pull/mod.rs changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 17 in ExecPullCapability::of at line 22. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/planner/src/exec/pull/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":"crates/planner/src/exec/pull/mod.rs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c41ffab3337bc9c2b3d4ee90367607338e65e839d62ef34eecbdc144cd103ca"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/planner/src/exec/selected/lowering/access/pipeline.rs: crates/planner/src/exec/selected/lowering/access/pipeline.rs changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in ExecutableDagBuilder::push_selected_stream_pipeline_op at line 4. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/planner/src/exec/selected/lowering/access/pipeline.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":"crates/planner/src/exec/selected/lowering/access/pipeline.rs"},"region":{"startLine":4}}}],"partialFingerprints":{"codehealthFindingId/v1":"9667d551f43e8f8259e392f99f77c417608a1428c880975485f9d14e408c8f11"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/planner/src/exec/error.rs: crates/planner/src/exec/error.rs changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 21 in ExecPlanError::fmt 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/planner/src/exec/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":"crates/planner/src/exec/error.rs"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d790dd69e5c70261961d911a6ec6675330ac1bba1c1815ca61b863631edb3c5"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/db/src/encoding/v2/keys/indexes/vector/mod.rs: crates/db/src/encoding/v2/keys/indexes/vector/mod.rs changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 31 in VectorKey::parse_from_slice at line 232. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/db/src/encoding/v2/keys/indexes/vector/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":"crates/db/src/encoding/v2/keys/indexes/vector/mod.rs"},"region":{"startLine":232}}}],"partialFingerprints":{"codehealthFindingId/v1":"34cc7b5c6963f465c691bc73a635ec640e91cdb2dd4dbf2dde5102c60284518e"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/planner/src/cost/profile/overrides.rs: crates/planner/src/cost/profile/overrides.rs changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 30 in StorageCostProfileOverrides::apply_to at line 66. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/planner/src/cost/profile/overrides.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":"crates/planner/src/cost/profile/overrides.rs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0abc4ea21d09a7090c2002270f131c793701e34440da225a5ba4416761ba499"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/cli/src/commands/cloud/database.rs: crates/cli/src/commands/cloud/database.rs changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 18 in helix_cli::commands::cloud::database::run at line 10. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/cli/src/commands/cloud/database.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":"crates/cli/src/commands/cloud/database.rs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"8923a5513d3f370ad80d57abb8e537d7b9fd9db274fc50a2ff03cadead1378cd"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: sdks/python/scripts/run_embedded_parity.py: sdks/python/scripts/run_embedded_parity.py changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 19 in run_embedded_parity.main at line 50. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- sdks/python/scripts/run_embedded_parity.py\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":"sdks/python/scripts/run_embedded_parity.py"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"44ce215aaf490a41ad267b81ed1dc205a768b61c67fb70b4f9a5c3938301dd25"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/planner/src/exec/selected/lowering/contracts/delivered/pipeline.rs: crates/planner/src/exec/selected/lowering/contracts/delivered/pipeline.rs changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in helix_planner::exec::selected::lowering::contracts::delivered::pipeline::selected_stream_pipeline_delivered_properties at line 6. 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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/planner/src/exec/selected/lowering/contracts/delivered/pipeline.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":"crates/planner/src/exec/selected/lowering/contracts/delivered/pipeline.rs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fb9be1ddc38e9a78d45e270922e86719fc9e2189741e4dd4469da693161d65b"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: crates/cli/src/local_runtime.rs: crates/cli/src/local_runtime.rs changed 39 times in last 90 days and 30 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 LocalRuntime::run_foreground at line 378), 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(cli): harden Cloud resolution and the --json contract after review\u201D; \u201Cfix(cli): name init projects after the real directory and shorten image digests\u201D; \u201Cfix(cli): name the command that removes only the legacy MinIO volume\u201D; \u201Cfix(cli): bound the SeaweedFS readiness wait by elapsed time\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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/cli/src/local_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":"crates/cli/src/local_runtime.rs"},"region":{"startLine":378}}}],"partialFingerprints":{"codehealthFindingId/v1":"87e0cc4ec8dd5f13fc21fc6f5de3a54e7639011df693f9425596d05913278453"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: crates/db/src/search/text/cache.rs: crates/db/src/search/text/cache.rs changed 15 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 13 (its worst body is FtsCache::cleanup_disk at line 913), 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(db): keep FTS disk cleanup inside the cache\u0027s close\u201D; \u201Cfix(db): leave no hydration staging file behind on any error or cancel\u201D; \u201Cfix(db): always hash a downloaded split in full before publishing it\u201D; \u201Cfix(db): let a trim carry on past a split another trim evicted\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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/db/src/search/text/cache.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":"crates/db/src/search/text/cache.rs"},"region":{"startLine":913}}}],"partialFingerprints":{"codehealthFindingId/v1":"71316524ab0d50a4d1a12ab90ef7e40b387b7cf0e27de5719910689791cc7f5e"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: crates/server/src/config.rs: crates/server/src/config.rs changed 18 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 5 (its worst body is StorageConfig::from_lookup at line 255), 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): report a cache lock failure as a lock error\u201D; \u201Cfix(server): let full-text splits leave the disk tier one second after use\u201D; \u201Cfix(server): warn when the disk cache budget exceeds free space\u201D; \u201Cfix(server): lock the disk cache directory to one server\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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/server/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":"crates/server/src/config.rs"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"a79537f61c009b9680deb4fcfc604994f470a5a685aa04927918289a343306b6"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: crates/server/src/lib.rs: crates/server/src/lib.rs changed 7 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 12 (its worst body is server::supervise_transports_and_close at line 300), 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): warn when the disk cache budget exceeds free space\u201D; \u201Cfix(server): lock the disk cache directory to one server\u201D; \u201Cfix(server): print error causes and raise the fd limit to the hard limit\u201D; \u201Cfix(server): harden disk cache config, fd limit and startup errors\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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/server/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":"crates/server/src/lib.rs"},"region":{"startLine":300}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c8abe49b716ada0701259a12e637a4aba77173fe1f71ea72cd6392f54c9b060"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: crates/cli/src/commands/query.rs: crates/cli/src/commands/query.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 9 (its worst body is helix_cli::commands::query::execute at line 124), 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(cli): harden Cloud resolution and the --json contract after review\u201D; \u201Cfix(cli): print query results under --quiet and document RFC 3339 log times\u201D; \u201Cfix(cli): protect query credentials\u201D; \u201Cfix(cli): format query auth headers\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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/cli/src/commands/query.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":"crates/cli/src/commands/query.rs"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"9424ecc5ae98840eb935b04fa3edd63a290c76c1443ed931ba3271595391c59f"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: crates/planner/src/optimizer/driver/exploration.rs: crates/planner/src/optimizer/driver/exploration.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 13 (its worst body is helix_planner::optimizer::driver::exploration::optimize_many at line 11), 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(planner): replace the wall-clock exploration budget with a rule-fire budget\u201D; \u201Cfix(planner): keep every implementation-deferred rewrite after the time budget\u201D; \u201Cfix(planner): keep the required empty-input rewrite after the time budget\u201D; \u201Cfix(planner): keep implementing queued expressions after the time budget expires\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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/planner/src/optimizer/driver/exploration.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":"crates/planner/src/optimizer/driver/exploration.rs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"20c6773224a6ec2a64255678b7f66adf18a8c7205ecfc64642f748fce6ead539"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: crates/cli/src/commands/metrics.rs: crates/cli/src/commands/metrics.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 helix_cli::commands::metrics::run at line 16), 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(cli): harden Cloud resolution and the --json contract after review\u201D; \u201Cfix(cli): apply rustfmt to metrics email test\u201D; \u201Cfix(cli): handle EOF and invalid email input in metrics full\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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/cli/src/commands/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":"crates/cli/src/commands/metrics.rs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"117373e72305cce613d986d050edc9290193047a4f97f515e425f98fde863caa"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: crates/db/src/config/cache.rs: crates/db/src/config/cache.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 CacheConfig::fts_memory_bytes at line 998), 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): cache only SSTs read back when data lives in HELIX_DATA_DIR\u201D; \u201Cfix(server): print error causes and raise the fd limit to the hard limit\u201D; \u201Cfix(db): remove Foyer partitions a smaller or re-blocked hybrid cache no longer owns\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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/db/src/config/cache.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":"crates/db/src/config/cache.rs"},"region":{"startLine":998}}}],"partialFingerprints":{"codehealthFindingId/v1":"c90ad22b9887597f765a8df9734819f94299df73345a3bbd6b1ff34c0039b9e5"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: crates/cli/src/ts_query.rs: crates/cli/src/ts_query.rs changed 4 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 12 (its worst body is helix_cli::ts_query::ensure_sdk_in 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 Cloud CLI command flows\u201D; \u201Cfix(cli): sync TypeScript SDK release pin\u201D; \u201Cfix(sdk): restore embedded package releases\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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/cli/src/ts_query.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":"crates/cli/src/ts_query.rs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"660fbedfabb8c12c85a04ebac2340c260c255bf157d3b4ccc65813b3204d28b8"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: crates/planner/src/rules/access/filter/index/membership.rs: crates/planner/src/rules/access/filter/index/membership.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 3 (its worst body is helix_planner::rules::access::filter::index::membership::index_membership_filter at line 29), 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(planner): price membership row by row with the residual formula\u201D; \u201Cfix(planner): bind unscoped membership to one label and price its misses\u201D; \u201Cfix(planner,db): keep range scans out of index membership\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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/planner/src/rules/access/filter/index/membership.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":"crates/planner/src/rules/access/filter/index/membership.rs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad6ae2ed9620eff228591e088beab927f0f3b1cf92f128686bbf99d30417e9e1"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: crates/planner/src/rules/contracts/applicability.rs: crates/planner/src/rules/contracts/applicability.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 RuleApplicability::is_required_rewrite at line 252), 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(planner): replace the wall-clock exploration budget with a rule-fire budget\u201D; \u201Cfix(planner): keep every implementation-deferred rewrite after the time budget\u201D; \u201Cfix(planner): keep the required empty-input rewrite after the time budget\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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/planner/src/rules/contracts/applicability.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":"crates/planner/src/rules/contracts/applicability.rs"},"region":{"startLine":252}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bd772d592d6a80f2f52170fbf5073bef9cb09484f30cc57ba8b6e9936cd325b"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: crates/cli/src/commands/cloud/project.rs: crates/cli/src/commands/cloud/project.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 11 (its worst body is helix_cli::commands::cloud::project::run at line 9), 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(cli): address review of Cloud resolution and --json\u201D; \u201Cfix(cli): harden Cloud resolution and the --json contract after review\u201D; \u201Cfix(cli): align linked markers and colour states in Cloud tables\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 14:43:17 \u002B01:00\u0027 --until=\u00272026-09-29 14:43:17 \u002B01:00\u0027 --full-history --no-merges -- crates/cli/src/commands/cloud/project.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":"crates/cli/src/commands/cloud/project.rs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c73df0fd12fcacf11eb8d996b9365046819be297b684484fbd5e07c602a5b6c"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #1: If anonymized user #1 becomes unavailable, 136 significant file(s) lose their only recent owner: crates/db/src/migrations/mod.rs, crates/db/src/index_lifecycle/vector/driver.rs, crates/db/src/search/vector/hnsw/mutation/mod.rs, crates/db/src/search/mod.rs, crates/db/src/search/vector/hnsw/index.rs, crates/db/src/index_lifecycle/outbox.rs, crates/db/src/search/text/mod.rs, crates/db/src/search/vector/cache/registry.rs (\u002B128 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"1cc1c0cdc758517bacb9bb63ed5275e2d89e9ce64fa16a1d0b98e6bea8be7aa3"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #2: If anonymized user #2 becomes unavailable, 27 significant file(s) lose their only recent owner: crates/planner/src/exec/count.rs, bindings/uniffi/src/graph.rs, crates/db/src/id_allocator.rs, crates/planner/src/error/mod.rs, crates/planner/src/rules/access/filter/diagnostics.rs, crates/planner/src/exec/selected/lowering/contracts/matching/access/source/tests.rs, crates/planner/src/rules/access/filter/atoms/mod.rs, scripts/compare-v2-planner-bench.py (\u002B19 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"753c1baeb215f4fdd57991ba8858c6aafc96cb30df816998ef486df7af2a83c5"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #3: If anonymized user #3 becomes unavailable, 5 significant file(s) lose their only recent owner: crates/db/src/execution/interpreter/stream/aggregate.rs, crates/planner/src/ir/index_ddl.rs, crates/planner/src/analysis/scalar/values.rs, crates/planner/src/analysis/scalar/constraints/property.rs, crates/planner/src/analysis/scalar/truth.rs. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"a4f6a84beb067e47a5d509aa6da6c85e395aac66e2bfda9753a5896175cf7646"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #4: If anonymized user #4 becomes unavailable, 5 significant file(s) lose their only recent owner: crates/graph-algorithms/src/algorithms/louvain.rs, crates/graph-algorithms/src/algorithms/cycles.rs, crates/db/src/search/vector/spaces/simple_avx.rs, crates/db/src/search/vector/spaces/simple_sse.rs, crates/db/src/search/vector/spaces/mod.rs. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"32493d1f4c394b112082aa3c39b571f16bf5b735e70b98fa5ec7fa99840e6960"}},{"ruleId":"D16","level":"note","message":{"text":"Further sole-owners (lower concentration): 3 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 (176 single-owned of 743 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; 743 of the 1259 production source files in this repository met that bar). They are anonymized user #5 (1 file(s)), anonymized user #6 (1 file(s)), anonymized user #7 (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":"D19","level":"note","message":{"text":"Documentation: no contributor guidance: No contribution guidance for contributors appears in the visible text. Add a short CONTRIBUTING.md entry covering pull request process, CI/CD, and how to run tests."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"README.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"620f29787918fa3406ae55cb63eefa1b50410845435c4e47bda852816aaea084"}},{"ruleId":"D20","level":"note","message":{"text":"No ADRs found: No ADRs found. No recognised ADR directory (\u0060docs/adr/\u0060, \u0060docs/decisions/\u0060, \u0060adr/\u0060, \u0060docs/rfcs/\u0060, an \u0060ADR0001/\u0060 folder, or their siblings) exists anywhere in this tree. What was searched, so you can tell an empty log from a search that missed one: every directory under the tree (build output, dependencies and VCS metadata excepted), for a document that is either any non-index page inside a recognised ADR directory, whatever its name and however deeply nested (\u0060docs/adr/use-postgres.md\u0060, \u0060docs/adr/2024/0001-x.md\u0060); or a file anywhere whose name is ADR-shaped (\u00600001-use-postgres.md\u0060, \u0060adr-012-caching.md\u0060); or, when neither turned anything up, a document carrying the decision-record signature (an \u0022Architecture Decision Record\u0022 heading, or Status / Context / Decision / Consequences as section headings). A decision log that clears none of these \u2014 unnumbered files outside any recognised directory, without those headings \u2014 is not seen by this check and this row is then wrong. If that is your case, say so rather than renaming anything; otherwise, consider recording architectural decisions in \u0060docs/adr/\u0060."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d2bea044ff79d7d275f5a91a6e2f548586178eaf480274c33960ad020c854631"}},{"ruleId":"D26","level":"note","message":{"text":"Split crates/db: A huge data-access project whose namespaces are all sub-branches of a single table family (search/vector/encoding/migrations/index_lifecycle) and whose public types sit overwhelmingly in one namespace. Suggested: "},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"907ae97d5a67eb2273e1b24feab12e286edcc8c0733d4b126314bc9fbac429ef"}},{"ruleId":"D26","level":"note","message":{"text":"Split crates/planner: A massive planner whose namespaces are all sub-branches of a single planning engine (exec/ir/catalog/experiments/logical/physical) and whose public types sit overwhelmingly in one namespace. Suggested: "},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"1fc58b2c635e7bea4107977089ed0df1d0e1773c4154ab47bdc45b5834681dbc"}},{"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":"19e2b98e719094899bf4a93fe041490c946fa6e8967befdd9aca39ec0618deb0"},"properties":{"commitSha":"2020b730486ffd2fbb9fcc552e987bf829799da7"}},{"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":"9564824b47b9e3843ce284d25706f810cd221a3c0db5c891846f1bd19052d69e"},"properties":{"commitSha":"fac341c0c1e81bc0c07b97182cc0c8685acd631d"}},{"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":"63fd2b7f8ed37e8ff1803cf98297d0ffb9ec5caa79f68549cddcb5313e6d2b2a"},"properties":{"commitSha":"fac341c0c1e81bc0c07b97182cc0c8685acd631d"}},{"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":"82e8b1360d3b1612ddffee5b063de561d876ffca10ec4489ba94c8c8f5f30dfc"},"properties":{"commitSha":"fac341c0c1e81bc0c07b97182cc0c8685acd631d"}},{"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":"46e4662746ca637ed4126d1b3b333f21742401eb5f9230657f565b03de788bc6"},"properties":{"commitSha":"fac341c0c1e81bc0c07b97182cc0c8685acd631d"}},{"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":"f0007ad6540031cbf69678591df5d084b42df87567f826cc41c0e10f4b6b18ae"},"properties":{"commitSha":"fac341c0c1e81bc0c07b97182cc0c8685acd631d"}},{"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":"d9dda5d1ef6c79f8aa512b353fe3c728a072e07592f3b4fabc2ac78aa63400c0"},"properties":{"commitSha":"fac341c0c1e81bc0c07b97182cc0c8685acd631d"}},{"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":"3f806325ef86782e11ab1f3ba878c87b0ca58a189cc3255072e7e5d0cc42052c"},"taxa":[{"id":"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":"ea603d400046996f00b85032c301eefb50d1e0d863af5533c0ef0f30a0f1ebe0"},"taxa":[{"id":"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":"c8367dfcb74799115f1532d8cdc262d7d86bf561516a7e6baf41f56cf5529ee9"},"taxa":[{"id":"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":"05cd67dbc70fb1e546eb817a9d1e569ce3c2467857f4db7ed1e6b25e5f8a9987"},"taxa":[{"id":"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":"5b874e41d04d3903355851c6980021755d0fb12e90e5651134fea5a448ad033f"},"taxa":[{"id":"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":"86b2bce7701bd9be41d55e136be228dd95b07db1f85cc808465c2217d49fd633"},"taxa":[{"id":"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":"dc2046f15a53c32251ac6cd65c7d299c4f88a675bb9bddf062ba20c888ece65b"},"taxa":[{"id":"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":"4ae6baf1f504ff3b09f0d4f029cfdead7ee5524a7e178b9a3c282dde377c9820"},"taxa":[{"id":"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":"17ebb3ebb50d5c790c2156d453aa7f225998fb0d48a60d01a7544b19d64998ac"},"taxa":[{"id":"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":"2fa182344fa3006684dde43218ec93a24205f2bb6020e961d04cbbf093162b3b"},"taxa":[{"id":"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":"75126fc12c3c69cc46675a455e882d11ad77707ebb1563eb102bf1c56d060e11"},"taxa":[{"id":"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":"df64b8dfa7010d3c8936e7dfa0a40f34e30570cb1be50a91c196c02abfb753c3"},"taxa":[{"id":"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":"d48b241e2319879f6735e1a32bb5d095f311d4df41eb09c2c8d0261973587d02"},"taxa":[{"id":"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":"dcdc92523b35f6891aa917c33af1ea816f25923433ae11d8d76656573291d253"},"taxa":[{"id":"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":"890bb9ecd214be40c8b1bcb61dd839be4b43a1858058370fd021a5ab028aa15f"},"taxa":[{"id":"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":"610ae2537d3589c81ef5e0a9ecdb311738eb2b3c9c6e1c13bda1b3c540a6ac3f"},"taxa":[{"id":"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":"d8e2766a36db165dbb15ee813a62380a1ab950b0ac4f228554a637fa8815ccc0"},"taxa":[{"id":"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":"253bbb7e105428e78edd51b43d9665457654ca9726b242cf8a4ad434ea1bbc29"},"taxa":[{"id":"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":"5117e2b13c6b1a15e8ec2f86aa4a9a8dbcc96ca2f61480cf000b40494ed96dfd"},"taxa":[{"id":"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":"a6300b81743bc2a354ea4ced2889d0bc322c1b8d395b375861274438cf5e484b"},"taxa":[{"id":"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":"e9ae32880cc880787ef878c92d0de263f6f5af64244486185dcbe02d70deedc4"},"taxa":[{"id":"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":"36395fa3b1352b034795a9e601885b6d3c935763093fbc07e5ba98f55fe06edb"},"taxa":[{"id":"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":"029e7115050a217729b8fa601eaf6301d1561c945801f2e8ee5c3d0e3e5a56f3"},"taxa":[{"id":"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":"ece42ffb9245a6f5d8ce9882d48b8bf408fb57e6f1ee4095c185b8df43eb4672"},"taxa":[{"id":"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":"1f2a2274e105c1271e0ed39889a8763f0e44870368a1cb2aa4155b95f9f1b7eb"},"taxa":[{"id":"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":"cbc92c265c09bb9a5f324feeec1f51897a6bf3277dfebc3026daffc912428daf"},"taxa":[{"id":"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":"c2b8a05a59db30d2dedfb14b5c982251e7ddd10d3304e61a87fdce7f6b3dd648"},"taxa":[{"id":"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":"9e2b8b179faa7e2815552b13e75adcfc5b099e9a170de121510e4c5b811c403d"},"taxa":[{"id":"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":"82c86354f3521fe5437049ac8591e8253631af5316d0fbb1afa9bd39d825fb72"},"taxa":[{"id":"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":"482d3b39a346fffa93dda884683fdacc58bbf18a3bfc8f62cdc837d3a9a2ab48"},"taxa":[{"id":"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":"0fe71a4801aef539c05110319fac8fe5e45b4ca6b5eadf16587f36636671f9ab"},"taxa":[{"id":"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":"f70e528a322c8b397da3388ed6e02ae2548f29c54f7c59c0b571e674f950e3ed"},"taxa":[{"id":"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":"a601280806800bfcec7aeeafd22acc2d6c669cc168780c04119e08cc8a5efc46"},"taxa":[{"id":"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":"6e637decde037b30bcfa64e8be2483fd3209a594e64ab5273ae24036f1a081bc"},"taxa":[{"id":"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":"fc55a32a973663f75a7e464770ecb2eb521a8c227c067e36f7baddf661dd381f"},"taxa":[{"id":"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":"9763b00fc51c499f8ab941377af9d424ceba1d4b62d56261c9e28a4e5b3bdbee"},"taxa":[{"id":"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":"0891bb1322154417dbfcdae0a86507a1b2d3168ae1bb9d02ced81f9ce867b584"},"taxa":[{"id":"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":"3927115bf68af51c3e4371d8bec5e9f07c7a2653c9d02262c4da298ac77bc064"},"taxa":[{"id":"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":"749e6d0be108c7d68fc4b721e36bc7d0f8841b6fda7a55148e40c0efe4450fca"},"taxa":[{"id":"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":"4f0f6fba1ce682f85d520b05ade8820ffc45d6abdb23693d7d7d4ce7d9e33bb6"},"taxa":[{"id":"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":"13266eb468aef184a06de4701fa4e80c135484aa27fcf49ddf443921d721c511"},"taxa":[{"id":"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":"2eea29f291f7a45fe93780e852c150c82c80f64045aa4ba49312dccb505b0af2"},"taxa":[{"id":"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":"b201447863fb3db686aa1d026254f6ab83718cb8d2cf45d7eb70ecc3d71ac1a2"},"taxa":[{"id":"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":"1edf52706b6c12e4f35c88ac41e001fd016ec0d1dadbe00758f468ca6879c7e0"},"taxa":[{"id":"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":"3f66f42d43a1d1538871a3edb812b6e34e1cf423af3beaec7610e8f6a338e642"},"taxa":[{"id":"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":"d5fa6409858f68aba7c089bff7e69847b52288f1cfe2bebeadc91f13a520801d"},"taxa":[{"id":"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":"99f607904dca26978bd00bbfc810e8b10b61bd11272c5683041a52b217f60799"},"taxa":[{"id":"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":"f26d4bc5de4faa9839c6d22b804091943fdf55d977c62da5f8b50b12eab5e5c4"},"taxa":[{"id":"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":"be22f7067d195c82a3b26c7aefac888ae6fe29c511134b26f0a9f08b6ee10ef6"},"taxa":[{"id":"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":"36de2977f9a5aafeef5219b8acc85ea5bf1b5c3e1b685759aa67c8bb8927a8db"},"taxa":[{"id":"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":"607787de5a539e48ab2a24de4af39c5b40e81ac48a9c22e10cf5ede9773e4aa7"},"taxa":[{"id":"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":"27f10785b822b6a6f27475a584117c2261eed9c9e23e8baea376594349fbc26b"},"taxa":[{"id":"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":"c1d4313cd0fc75087da31bc9b759af15f7a33e5413c5a0a36d62f724ae2551e5"},"taxa":[{"id":"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":"c99a978eb7157d3fadeb5d322d335cf45ce8f5755dc3867aab70d61d38b8c31d"},"taxa":[{"id":"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":"160e3c7d99cd278a3fc580ebf1c33772c2d6bd1ec324094aec9b8d4d0b3463fb"},"taxa":[{"id":"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":"ec701d3ef909358cc532cc435fdd8ad0f236a1d160ba0b46a58ab786eb5a984d"},"taxa":[{"id":"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":"9a6ae480d3e6911ff84a4e10acc7f235185303b204d26e4e13410fbcd991a5c1"},"taxa":[{"id":"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":"e16cf4a20dcaa72e96f1cb9a5e6c54260685b68ae3561748977b42e8c67db528"},"taxa":[{"id":"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":"337d70e7de5b1396cf0bc4692e4a899427cbae9b00cc1dbce7b1e082f549a131"},"taxa":[{"id":"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":"15b55b3b5d12f8616967c619d2097651fd9ede812b5fb87da299eec88fe8e20b"},"taxa":[{"id":"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":"7d5478a95a87cece282e6a22409f7e2187d9e799be1912bf3e8cfd026f77723a"},"taxa":[{"id":"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":"0c745e2c1b2ad7e3332efa80abb6ce346051254a95d450b37b3d40bdd8d4c7aa"},"taxa":[{"id":"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":"c32ef024f6c62f68e0be0542170934d7d4e07252b789765dd43d723154df0ef2"},"taxa":[{"id":"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":"42777943a89991d509b49a3c3905a9a3c1cc4612fab0677512f46f70f147a0f7"},"taxa":[{"id":"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":"cb60b4110b1cde96ed6329b7547179147c36b34529ac897de915d769df702eac"},"taxa":[{"id":"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":"1b62d9138df8fdc7874eb8221db26cdd6a1b3473502748ce1dae5de375b6c471"},"taxa":[{"id":"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":"094922569e65e9cd0323198d7457adefa11be627d590f53b21ffa5cf945144fd"},"taxa":[{"id":"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":"31fb10d0ced4b5951ed8a970859aeda27f5ce4b25b5956351f2fd11c544d1dd9"},"taxa":[{"id":"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":"efbd0044d669d784f3148ad37ec4aa19598a55d24599c872037fe760f11239f1"},"taxa":[{"id":"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":"968032970ee8c0d4ecc742d60b4144976e3875fd4e1c2fb466ebbfb8548ac3f3"},"taxa":[{"id":"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":"b292ac24cfa1a66f18c13dd64325516785fc77092c71c1d56a1f6d26aaf2dd14"},"taxa":[{"id":"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":"782f7d4379fbb573e4034c35056ebbca256d3e16119536c746cf57afc8e05350"},"taxa":[{"id":"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":"a2137aca14a536743742acad7dcf31f27e2873e0d8d76eb33e6a143d920fccaf"},"taxa":[{"id":"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":"14045f546151ce83b6f08e57f513ea58279f8a51cf6bb8e9b00cad86372a8288"},"taxa":[{"id":"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":"708e9eca81d69c4233bd7ed917ed598616db49b6e0066d3665f18acfdfc44fdb"},"taxa":[{"id":"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":"406d83c61c5ee222834b0d458f529b8e5eeb09e13976d8c29ad72a7efde5a1ed"},"taxa":[{"id":"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":"6502bf0f1adad6e9729e951d50c51816ba64286bf4416c7dc52b78864d8b840e"},"taxa":[{"id":"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":"27cacef718986b0f062c61b5e151bab5d95b63567095909d1663ee54abd4d1cd"},"taxa":[{"id":"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":"405ece5382ebae49fd05c3f45dca2dd12a0d14799e34fbd9ed62a63f9563f0a7"},"taxa":[{"id":"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":"5c7d3c9b6d451fc33198b0e09bfb65d95940f43ca34a6782da7092df083da1b1"},"taxa":[{"id":"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":"ed9703b26324301476d8d7251ae295f5ae4670bdb1d9d905735363d63517174d"},"taxa":[{"id":"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":"df84c0cf861013f804d94f9363f31d327edfeb025cc741c6f9636c4db6d3fb76"},"taxa":[{"id":"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":"36df66a917c85389672382e3f762037f6d4aca4f18de74f4f84e800303d5cb27"},"taxa":[{"id":"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":"b7381be0d4bdc5a4af76bfbc664971c3a8f3445e93a2c93c2226dec834b02808"},"taxa":[{"id":"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":"25e558ec6bee0b8b725214e7290b9e4c5f46e9e00b7ce6e169647ca9370ded2f"},"taxa":[{"id":"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":"c84c5af5f6cf029b4b3360645f63f6c1f16bdc92a4ad3b80351423315ebef34a"},"taxa":[{"id":"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":"615878e63ab829b061909d8e1ea5ce4295fa1ab03f1cfc14a655c6cda5c57b06"},"taxa":[{"id":"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":"fee2b21ca315b2a8eb969830090012acc01b3db7776d6454654b059812d72524"},"taxa":[{"id":"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":"c0be0c785aa30bdd926d530b213738505a1ab4c18821d7b019d0bcc1e5c0a03e"},"taxa":[{"id":"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":"4cc3c30ee6bd696da8f33c89e272cdddf73df6de2ab542c532d3963ec458bdc2"},"taxa":[{"id":"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":"a96e7f40a357d0d7c3a5ea357cfe04bbd19376632970a5e0503805c05f9b071f"},"taxa":[{"id":"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":"66a8225228502c259d5f7ddb090b8c79a677ee3d126d74d9a58379d7f34615a6"},"taxa":[{"id":"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":"a7734c38cb0f0ae7753c3f0c13852d2f2127b47342a56664bc7793a67bd9f8be"},"taxa":[{"id":"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":"4d48e523ec01d4f6d433718c0bc648e365ebdd1f6da7d8a8dbaa4ff19c7a1326"},"taxa":[{"id":"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":"ac0e7d78c345b5784a9964fef210c61416869809eedea79edd7082974f2fcfb6"},"taxa":[{"id":"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":"f91d9d4d33425c97d9f5a329025edf904135218d6193ab8107b6bc25b29eb861"},"taxa":[{"id":"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":"6e681c2333f5b2a45e9d2ffc8a0704b07c03047c50655710ebb326e8859e47c1"},"taxa":[{"id":"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":"995dcd22917170ad2caffcb4b1a2c042e94a966b12f81364f8de67f94a26f044"},"taxa":[{"id":"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":"cbc5d2b7bf17184718d42e5265fe3d252cd1624cac54bfba2265a22bc70d7e75"},"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":"780e8ae8edc757535e1d906aabba8a8f02c3a0d9caf4ed000e97a5a7535c6613"},"taxa":[{"id":"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":"b1b6255a262518160244bbe7d2779de13455d01cf72705b60413bc63fc7defd8"},"taxa":[{"id":"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":"3c67d7163ad7054929b3fec8cac1375f0d6ca7d5bb237b5d58cc8f817cbac55e"},"taxa":[{"id":"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":"7823b077f5e6644643b1e4423f6c6643b789f190819e10a33ddec4ebd1aa63eb"},"taxa":[{"id":"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":"e66e16aa5f9474edaf8992aaa576014a2f1e14dfa52f7e8c18cf2e1931686304"},"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":"5ebfc4a1ec02b9f63e1d875c5d09d057dfed89486d16c27434147b8d09ddea1c"},"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":"d718a6d4c413f8660d3a674bbc6193e1afa7bc536e2710cbe95afcb2afc1148a"},"taxa":[{"id":"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":"056d2100280bbae4b162e0e41952eed9fe772264a9264ade8658c8d096e7d8f0"},"taxa":[{"id":"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":"6eff4dba586f3b990940c65b3453b801dabc0a10d04aa2ca7d0e6daaa8319a87"},"taxa":[{"id":"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":"9e47726a675a5009c45c7f38abbe4e389d1280916dceabb0290255d4e08bae2b"},"taxa":[{"id":"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":"8163e823587eb716e543286925d455cb163fed393e942287c1967227a21cb295"},"taxa":[{"id":"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":"a357548dffc4a774e650a4a544b2ad3e8154a25e394087738e831953194f4f04"},"taxa":[{"id":"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":"66468f733babdb0251b841ad22eaafd4788a3bedd52dabf881799eb052e892fd"},"taxa":[{"id":"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":"f9c9106785e91b663e549fe851cb42a6064ff7cd5fb9045f7eb7253e72308c33"},"taxa":[{"id":"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":"90c032ff13f0bddd1331d305f112bd1f47a94118060517833339920b13cbeb27"},"taxa":[{"id":"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":"d165617247bcdda7728d470aa0a3be696ef166a25ae44050709e9b1a43b0bac7"},"taxa":[{"id":"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":"c1fb0a2feea44515a610c24b2d4e7194cdbb080e8531d65414cbb9e0d052140b"},"taxa":[{"id":"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":"a90dbe6eda434c239a9690669a4e2f7d932ccf9b54ed93cac79aaa7e3c17c330"},"taxa":[{"id":"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":"e449fad5e9bec0bd2ea5c5f2d86bdc8c7931089aad7974155bfbc9ad0436ae69"},"taxa":[{"id":"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":"9c471f91ea2405adde1c4428855c214c0cb31f04a6a7adf15520bbfce9abb505"},"taxa":[{"id":"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":"3adee42cf7333995b377b5f3a48820effdf4805f79f7f68b19bfebcba6b48445"},"taxa":[{"id":"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":"eb04171b500d727aee20216a67e1cdb63c9687aa23fbaa6065714b9412b81f1a"},"taxa":[{"id":"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":"39666ff69fd6538d6f7a3e9749927f595c7698d607db436396a3bc34bb1a5f92"},"taxa":[{"id":"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":"f5319407b0546c0fd3f8bab1bc1cef460573bde3efed6f9bb417871bbe2949ba"},"taxa":[{"id":"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":"59d01c0b8afcd07a383feee4772a6c4fba35bf4a2a7a6743bbadf7d13cca7303"},"taxa":[{"id":"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":"d58582d5307ff351b200859cc586e6d5391c06e3441f9f8698f979e0e3749768"},"taxa":[{"id":"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":"3ba5a89c8142ea7fd7ddafd2398a0c42ced1bb4b9e594faf7c8a76ef75ba5dc1"},"taxa":[{"id":"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":"e762e8d2d907fdc970a8bc568202d4d825f4b3a77eac885c51c69d59ca493938"},"taxa":[{"id":"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":"52f6ca7582b43ae6bc9aa02595aefeef03ffd1a07251abfdc225f3d62f3d1f4f"},"taxa":[{"id":"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":"571fa7c17cc3f48d8f3cae8625a6c960ee6f59cff1150fea21c44409e88bf2a3"},"taxa":[{"id":"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":"d31935e48102de4238ec201da745363c32f122ac72efc1573a1731b87fb3950d"},"taxa":[{"id":"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":"efa1dc5de91ee8c2de4d61d2c2888305b42af47f854a80f2346f5cc86feacdcb"},"taxa":[{"id":"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":"4c402ad37976b4db9ca273a83349327c9e5fabd5ea20236d2a43ec0c5c047264"},"taxa":[{"id":"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":"acc0d1565ab6e424350396d58d0ae7465bff6bc12a7d9a76adcd43543e99684f"},"taxa":[{"id":"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":"a74b42c389c0bdff02852ac5799eb1670b49738b113e3ef3b4f6a209595655fe"},"taxa":[{"id":"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":"d43a0185f6d58818339e5ebe9b475d165ce8790ff1118bad6bebe007876cd5f9"},"taxa":[{"id":"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":"706a5ae03072639d482e0dae33f755639f1854727f6b0408bdf0d6244d9cbe1d"},"taxa":[{"id":"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":"d1650e69fcaf890309eb40fd4e926e449f6588d1533b07858e4176ad459308bd"},"taxa":[{"id":"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":"1a1d1de9d51effb10b1039bda836164ef0945d9235635f1577a9977c07713213"},"taxa":[{"id":"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":"1d7adae4eb4d0072bbb4ec65fcc3fb26fac42aa5cd74ef77cd5c4e3276e8aa2a"},"taxa":[{"id":"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":"17d485a8c1d351bb961f48566976e2706d93146a57681ffa1463930a99c53969"},"taxa":[{"id":"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":"0ff97131207825b699c6007481fe1a7ae2678c6d65e36689306d2f5c16763f28"},"taxa":[{"id":"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":"53b89c0c6fa37f759a9ab6e0316cce458643ac2a3c426ae98797748a39ba94b5"},"taxa":[{"id":"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":"93337070db8dca6f7d580dbf4d10703c709be79891b61a988b3d6779afb60024"},"taxa":[{"id":"CWE-494","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":"266066a9912a06b8151342bde2ecff1cab0d0e8a2420830e72ea8aa74ecddf8a"},"taxa":[{"id":"CWE-1104","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-1352","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":"2c6c339c9d001484678ac24c2b057e66c68feb0b26a4d60c16aa7a7652c8d3c0"},"taxa":[{"id":"CWE-1104","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-1352","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":"d87c18dbb4d058d1ae81256b6cae0dd12ace5121979281731120f49493dd959f"},"taxa":[{"id":"CWE-1104","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-1352","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":"5c6c2e00549e2a5e3f0d4ae4711f1b4ac15ee1c67abb8e51cd084ad8c530bdaa"},"taxa":[{"id":"CWE-1104","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-1352","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":"9dea9478d8d667956e2c0a690bf564941da15a80bb665c3db040f61e569f7b52"},"taxa":[{"id":"CWE-248","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-704","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":"e5c5a129afb5ad8281c1dd4b2904391b14ce1fa21d3af155dac866951e1c2f2f"},"taxa":[{"id":"CWE-248","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-704","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":"1dca64a00914b4c204232e12bb5f754b6a66fd51290aae8471b9c2966a788786"},"taxa":[{"id":"CWE-248","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-704","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":"98f25cd09a2b64b11e42dd39b2b3e384288466bb7646d6a907dac44a7e386d05"},"taxa":[{"id":"CWE-248","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-704","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":"7f793cbf6b013998f53a6545a8918083af3fcf3469eec0250751e408a8098178"},"taxa":[{"id":"CWE-248","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-704","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":"fe9b7149b7dedb02204829292ffe55b56a4157ef2e3bdfb0aa243ff2081f68c6"},"taxa":[{"id":"CWE-248","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-704","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":"f81a17b44a15eba1a500d41f02ba6e1b7d2e2a526857e6685dc7bfdb39fcca4b"},"taxa":[{"id":"CWE-248","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-704","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":"6d8fb875d977eab502923f21a91a36a8da4eb29f08351915834febe5276f6365"},"taxa":[{"id":"CWE-248","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-704","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":"85ec636dca3a88cb3ec9a09c4e248d7af81490d14a7a15e72ede8b7ab01bb9e5"},"taxa":[{"id":"CWE-248","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-704","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":"79fba76060010e9cdaf35b974a18d86aa8c24a71f0ca5d21f78d0809aa2a0b21"},"taxa":[{"id":"CWE-248","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-704","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":"54dafabdb729e1b565e242c9e3b6e2126d39e8d084a46bb356839dfde7884922"},"taxa":[{"id":"CWE-248","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-704","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":"e8ab16956e42872e440cc84717d06730854e29c526776fcef77f266ea68e7a87"},"taxa":[{"id":"CWE-248","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-704","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":"45f7a2966373ee9d606e3b1683aa9894a53b0302f20c9700c622dc3f44d8f38b"},"taxa":[{"id":"CWE-248","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-704","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":"89ca295c44ec101182fc5b4f17bc564acc554e00c2804972b454cf658a3c7938"},"taxa":[{"id":"CWE-248","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-704","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":"93e3aa97a477f410339814950721b134935a2f382107bfcde1f6ed3da758a343"},"taxa":[{"id":"CWE-248","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-704","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":"088fa56d5435cd65afa6a46cf67f7a7e4e7746ba951910de0003539e617625e5"},"taxa":[{"id":"CWE-248","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-704","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":"82916c929a251d5eff5b6921f1ccb5b895ae34ac134e9430d58904982b190868"},"taxa":[{"id":"CWE-248","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-704","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":"63380bcd621c41c1c90a9b39d69235cc1cbf4844400eec579eb7ad2f26d262f2"},"taxa":[{"id":"CWE-248","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-704","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":"cb2d35a2679a52fd14a4ca0be16aaed4cc32071e44c721b6615dbd6e63cef031"},"taxa":[{"id":"CWE-248","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-704","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":"00bb2574cfc69373e51c04ee2f4cdaf978b07ee3b11f2680562a47fd2067ba60"},"taxa":[{"id":"CWE-248","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-704","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":"76141caa2c0646e37dec196ac5ec5fe917ccb35fc6bba222885d4213d2493fdc"},"taxa":[{"id":"CWE-248","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-704","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":"74438ec4316a07c782e5da7ac8701c58fa85a11bd6f2446fd4ae3f7b7ebccfda"},"taxa":[{"id":"CWE-248","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-704","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":"cb022d638fe9c55ae2af061e43563173b1d3f19f891b0e63dddae796aa375012"},"taxa":[{"id":"CWE-248","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-704","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":"11295a72c942bbb82f3fdc116f118a3ab889c19ff3a00f67d08b4acd5c56cbcc"},"taxa":[{"id":"CWE-248","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-704","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":"8946dacbfa9eaef15b53e1dad8c783d2a0554333a1b6cc1183f9f1719edadadb"},"taxa":[{"id":"CWE-939","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":"2eb14bae2698c4931658cab7fefa754e79974aab41fe99393fc7f862444fb63d"},"properties":{"dependency":{"package":"quinn-proto","version":"0.11.13","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]","RUSTSEC-2026-0037","RUSTSEC-2026-0185"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a51b3d53a79df57c45fccc01ac9f6d0eb3b8048d4fbc878f15d3b0329106e285"},"properties":{"dependency":{"package":"rustls-webpki","version":"0.103.9","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","RUSTSEC-2026-0049","RUSTSEC-2026-0098","RUSTSEC-2026-0099","RUSTSEC-2026-0104"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c5a0b6af4b75a1698bcf27b485c65a0d24a5e394bb29c8b8fb82bdebcda7ed5d"},"properties":{"dependency":{"package":"openssl","version":"0.10.75","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f65044e7e9d4a439b336345f20ce551a43e533d7610c4961b16b52aa4676c279"},"properties":{"dependency":{"package":"quinn-proto","version":"0.11.14","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","RUSTSEC-2026-0185"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"02f0cb23e13591db32f9a6c1657d1e07f30d32a91f78e2e4c6c7c1ce914e0755"},"properties":{"dependency":{"package":"rustls-webpki","version":"0.103.10","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","RUSTSEC-2026-0098","RUSTSEC-2026-0099","RUSTSEC-2026-0104"],"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":"705e8761c5e609601c0419d94a8bad1aeb6aee434f48ec4660c92e8bf534c9de"},"properties":{"dependency":{"package":"number_prefix","version":"0.4.0","advisory":"RUSTSEC-2025-0119","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":"1092cdc16bab90e26caa98781415518f2a1a0fec9b43d183894264e01dcc42b6"},"properties":{"dependency":{"package":"event-listener","version":"5.4.1","advisory":"RUSTSEC-2026-0221","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":"d6566d13354e168c688c8937edd7e43a58dcd2321b3e4d366369ac28ad1dcb96"},"properties":{"dependency":{"package":"lru","version":"0.16.4","advisory":"RUSTSEC-2026-0253","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":"437b618f102b4223e5b9be0c90fbaf29db61529005e00efdca2533a922ac3873"},"properties":{"dependency":{"package":"lru","version":"0.18.1","advisory":"RUSTSEC-2026-0253","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":"bd0b13c9bd0c252fff42cc1de74c1b00e7797d375fb5cc3bd6377c8e88fdabfe"},"properties":{"dependency":{"package":"quick-xml","version":"0.37.5","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":"5f7d6b6ca85d4dd6b406c1d2713c645738fab3da9cc94fb64f4f81e0aa0ae962"},"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":"80b5c22beae306eb623d7a60ec13361ab89285e1cc30fcf5b8daa2e87ffb5c69"},"properties":{"dependency":{"package":"h2","version":"0.4.15","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":"3035e85b1a9c0c33df37dc333f490439b3fa52aefda24a401e2e75a177cdf778"},"properties":{"dependency":{"package":"rustls","version":"0.23.42","advisory":"RUSTSEC-2026-0285","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":"62f6d3c15167cb4bab89a38441790c25c362a854ed98c7446ba1ce73001dc44d"},"properties":{"dependency":{"package":"lru","version":"0.12.5","advisory":"RUSTSEC-2026-0002","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":"4669a86ba264c0ef63343e8e15c589653c59dd204ef42990383e68b4e1edaef1"},"properties":{"dependency":{"package":"rand","version":"0.8.5","advisory":"RUSTSEC-2026-0097","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":"fac6ac3503cfbb9064e15c77d7a523e935ad3247ea5c623ac7f098ef57384d75"},"properties":{"dependency":{"package":"rand","version":"0.9.2","advisory":"RUSTSEC-2026-0097","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":"0190cdd7a8f07819707920e62a131403a938a37d5df9c18596fc0f0d74fe2a7d"},"properties":{"dependency":{"package":"scc","version":"2.4.0","advisory":"RUSTSEC-2026-0205","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":"3e88712f5ca56d0a4dc279f205d925af04114d1696f16533b031e9524d860127"},"properties":{"dependency":{"package":"lru","version":"0.12.5","advisory":"RUSTSEC-2026-0253","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":"da8578e6242b3fc6eba3483c19398a4cb25dee597541f8c0f19c0faeba6f00f0"},"properties":{"dependency":{"package":"rkyv","version":"0.8.9","advisory":"[GHSA redacted]","aliases":["RUSTSEC-2026-0001","RUSTSEC-2026-0122","RUSTSEC-2026-0233","RUSTSEC-2026-0234","RUSTSEC-2026-0235"],"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":"76d57d7a44bcb39bd105e088217412eb804030ccbe7375719b6e4068e2dc6f2a"},"properties":{"dependency":{"package":"crossbeam-epoch","version":"0.9.18","advisory":"RUSTSEC-2026-0204","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":"a2027bda4150bdb2bda4c31798a4d7dbb7fcb2cb1592a60a3c04769523cc9ab2"},"properties":{"dependency":{"package":"webbrowser","version":"1.0.6","advisory":"RUSTSEC-2026-0257","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":"4563f707dce0023eac8cde0326340820bc1382455e3370b30ebce282ce41756f"},"properties":{"dependency":{"package":"h2","version":"0.4.13","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":"7cb08ff231ab7672cf40530c2753d768962401783ea09802adf9b05476d9fcff"},"properties":{"dependency":{"package":"rustls","version":"0.23.36","advisory":"RUSTSEC-2026-0285","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":"76923174396d35820d609d63bbc594f693c334c18284ff588d95407d5cfa6c50"},"properties":{"dependency":{"package":"stdlib","version":"1.22.99","advisory":"GO-2025-4006","aliases":["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]","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":"sdks/go/client.go","line":167,"symbol":"url.Parse"}}}},{"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":"5ed6211fedddd34ff55ddf03e3f2b483ece8fb5df276786f605dac7a6bdf50ea"},"properties":{"dependency":{"package":"rkyv","version":"0.8.15","advisory":"[GHSA redacted]","aliases":["RUSTSEC-2026-0122","RUSTSEC-2026-0233","RUSTSEC-2026-0234","RUSTSEC-2026-0235"],"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":"7b47d2951499223eea2e35c9d07daffff2f29e70b9adae7a474b3b49e8d632bf"},"properties":{"dependency":{"package":"rustls","version":"0.23.37","advisory":"RUSTSEC-2026-0285","aliases":["[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"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":"bfef4dce318a38e626316269e58f0db5d8bfa407fb05d90ba944cd8f23f781c1"},"taxa":[{"id":"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":"78204a3ec64bf50033065f1ce381fe0fc2d3e5ac07a6289e8939f502b2111a6c"},"taxa":[{"id":"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":"1f51a163f26d94ce6b6f473117dde579d091c8cbf9e59810475c94d9fc921120"}},{"ruleId":"D36","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"1b213f6eedd4b140d0bc37bdf1496f72811a643f34064f12518b32e9e83bcfc7"}},{"ruleId":"D36","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"0e17f71490e4d120a48b2b2881ab866c93b272bef2febb673a3e8e42b2c288ab"}},{"ruleId":"D36","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"eb00976a698a5d68999b7ee6d27206fd374e916853e7ff1ead5eed42386f043f"}},{"ruleId":"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":"d657599f6f99da1927d3377533dfc0888b34c4d84aa7d5579841fd72d0e39bce"}},{"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":"ace515990e7ee0f17b5c17e44dd168a5bdecf90804a3a3dd845cf05540978013"}},{"ruleId":"D44","level":"warning","message":{"text":"End-of-life runtime: Rust 1.97: rust-toolchain.toml declares Rust 1.97 as this project\u0027s toolchain file, and Rust 1.97, superseded by 1.98 on 2026-08-20 (the Rust project patches only the current stable). An unsupported runtime receives no security patches, so every vulnerability disclosed in it since 2026-08-20 is present and unfixable without moving off it. This is a migration rather than an upgrade: there is no newer release of a runtime that has ended."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"dcf7e9d4c69a9ce8ce9aef71946a22fd4bc9a108d597e8635468e94e0aa93368"}},{"ruleId":"M2","level":"note","message":{"text":"No ADRs: No Architecture Decision Records found \u2014 no conventional ADR directory, no numbered \u0060NNNN-title\u0060 documents in any markup this check reads, and nothing ADR-shaped by content. Design rationale recorded elsewhere (a design-notes tree, a mailing list, pull-request discussion) is not visible to this check and is not re-findable per decision, so a future maintainer cannot ask why one choice was made and get an answer."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"670b3d6e36a756d63097d0dfbf90afd5fc761308800b9354894a07c3f4e4aa14"}},{"ruleId":"P2","level":"note","message":{"text":"Logging is not universal: Only 2/9 runnable modules use logging (modules with no entry point or server are excluded \u2014 they are libraries a runnable module hosts). Silent: \u0060.\u0060, \u0060bindings/uniffi\u0060, \u0060bindings/uniffi-bindgen\u0060, \u0060crates/cli\u0060, \u0060crates/metrics\u0060 and 2 more."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"91a94e21d6d4d0e6a2003f94505b0b02b157176f0b24c4820f3f82b4447a97fe"}},{"ruleId":"P7","level":"warning","message":{"text":"Outbound HTTP without resilience: \u0060reqwest::Client::builder(\u0060 makes an outbound HTTP call, and nothing bounds it: no timeout, deadline, retry or circuit breaker is set for it here, and the client has no process-wide default. A slow or failing dependency will hold this service\u0027s request, thread or connection until the call gives up on its own \u2014 or never, for a client with no default timeout. 3 of the 9 files that make outbound calls are unbounded; the first 3 are listed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/cli/src/cloud/client.rs"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"c38d848c7627cb26e4c60d9741b5ebe4a2a2e8922318bd767753e6cc923f471d"}},{"ruleId":"P7","level":"warning","message":{"text":"Outbound HTTP without resilience: \u0060reqwest::Client::new(\u0060 makes an outbound HTTP call, and nothing bounds it: no timeout, deadline, retry or circuit breaker is set for it here, and the client has no process-wide default. A slow or failing dependency will hold this service\u0027s request, thread or connection until the call gives up on its own \u2014 or never, for a client with no default timeout."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/cli/src/commands/query.rs"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"94d0f109a0568f4eab35e1a279ab95efaa474d129b9a5ea275457529cc2b6d53"}},{"ruleId":"P7","level":"warning","message":{"text":"Outbound HTTP without resilience: \u0060urlopen(\u0060 makes an outbound HTTP call, and nothing bounds it: no timeout, deadline, retry or circuit breaker is set for it here, and the client has no process-wide default. A slow or failing dependency will hold this service\u0027s request, thread or connection until the call gives up on its own \u2014 or never, for a client with no default timeout."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sdks/python/src/helixdb/client.py"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd7f45f7d8c8ef186a3178fd2aa98406fda6225dcccea13c3b10a1a3b99f6a71"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (49 lines \u00D7 2 locations): sdks/typescript/src/dsl.ts:2586 \u00B7 sdks/typescript/src/dsl.ts:2655 \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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":2586}}}],"partialFingerprints":{"codehealthFindingId/v1":"d23484b46b7dabe2f28922d2871add113b23e5d11154e17610f1e1d48be0c713"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (42 matched lines \u00D7 2 locations): sdks/typescript/scripts/parity/compare-json.ts:33 \u00B7 sdks/typescript/scripts/parity/run-helix.ts:251 \u2014 the two spans are one implementation copied and then locally edited \u2014 414 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":"sdks/typescript/scripts/parity/compare-json.ts"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"112c60c7dad9edeb5cdca7729e9a926ef39600d109e6b599d530007ab783e69e"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (42 matched lines \u00D7 2 locations): sdks/typescript/scripts/parity/run-embedded-client.ts:85 \u00B7 sdks/typescript/scripts/parity/run-helix.ts:172 \u2014 the two spans are one implementation copied and then locally edited \u2014 456 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":"sdks/typescript/scripts/parity/run-embedded-client.ts"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fdb8841999ba4e51fdd644b0519cd2df29e7e6f05de332aa34475e3bc038068"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2 locations): sdks/typescript/src/dsl.ts:2084 \u00B7 sdks/typescript/src/dsl.ts:2122 \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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":2084}}}],"partialFingerprints":{"codehealthFindingId/v1":"adc39c79bd66f51761d07957c55447dbb08bb751a8593627cf8901cc77c39c3a"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2 locations): sdks/typescript/src/dsl.ts:483 \u00B7 sdks/typescript/src/dsl.ts:514 \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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":483}}}],"partialFingerprints":{"codehealthFindingId/v1":"97254c8062e1ae9a039236221ebbe2c8f2fd5f33ec68473ea13c837c57079f38"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2 locations): sdks/typescript/src/dsl.ts:1985 \u00B7 sdks/typescript/src/dsl.ts:2013 \u2014 all 2 copies are in the same file, and the SHAPE of this repetition could not be determined. It is not a run of declarations, a listing, a declaration header, a type body or a slice through a construct \u2014 and it was not measured as a run of executable statements either, so this row cannot tell you whether a function can stand where these lines are. Read the two spans before acting, because the move is opposite in the two cases. Where they are statements, the ordinary answer holds: give the shared part one home and call it from each site. Where they turn out to be declarations, a literal\u0027s entries, or the cases of an enumeration, there is no call site to call anything from, and collapsing them would delete what each copy pins \u2014 a shared base type, a generated set, or one exported constant each site refers to is the move instead, and sometimes the honest answer is that there is nothing to extract at all. Reported because the copies drift apart the first time only one of them is edited, which is true whichever of those they are."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sdks/typescript/src/dsl.ts"},"region":{"startLine":1985}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae4cf6299276bc8fee8e3a1d248afa9e8e9b6f9870ff48e33b902e487b0b2a6c"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2 locations): sdks/typescript/src/dsl.ts:2564 \u00B7 sdks/typescript/src/dsl.ts:2631 \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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":2564}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8fbd6dde9b28f65331fed8988a03b194e17947eb2d009f15ac28f9fd492d05c"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2 locations): sdks/typescript/src/index.ts:271 \u00B7 sdks/typescript/src/index.ts:287 \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":"sdks/typescript/src/index.ts"},"region":{"startLine":271}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d2ad901478de6eaba7386a067cc8ae1687f0f7d6a94a7bb188ec7a1fac0e855"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2 locations): sdks/typescript/src/dsl.ts:2047 \u00B7 sdks/typescript/src/dsl.ts:2157 \u2014 all 2 copies are in the same file, and the SHAPE of this repetition could not be determined. It is not a run of declarations, a listing, a declaration header, a type body or a slice through a construct \u2014 and it was not measured as a run of executable statements either, so this row cannot tell you whether a function can stand where these lines are. Read the two spans before acting, because the move is opposite in the two cases. Where they are statements, the ordinary answer holds: give the shared part one home and call it from each site. Where they turn out to be declarations, a literal\u0027s entries, or the cases of an enumeration, there is no call site to call anything from, and collapsing them would delete what each copy pins \u2014 a shared base type, a generated set, or one exported constant each site refers to is the move instead, and sometimes the honest answer is that there is nothing to extract at all. Reported because the copies drift apart the first time only one of them is edited, which is true whichever of those they are."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sdks/typescript/src/dsl.ts"},"region":{"startLine":2047}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3df5cac904d39d7d766595641715f00c34e1cc6184762f4c186405d4e0c0355"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2 locations): sdks/typescript/src/dsl.ts:1091 \u00B7 sdks/typescript/src/dsl.ts:1106 \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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":1091}}}],"partialFingerprints":{"codehealthFindingId/v1":"dec63f72f7d8d8b1914d0f43e220300113b32eb610b90d2ee328601c242c61d7"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2 locations): sdks/typescript/src/dsl.ts:2908 \u00B7 sdks/typescript/src/dsl.ts:2973 \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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":2908}}}],"partialFingerprints":{"codehealthFindingId/v1":"451b1a983fec8680574512260faa4aa827d225838ab2e0d9a9d42ba9aab36f20"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2 locations): bindings/uniffi/smoke-node.mjs:154 \u00B7 bindings/uniffi/smoke-node.mjs:174 \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":"bindings/uniffi/smoke-node.mjs"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"32a62460001a37a5eb9154e50c505d0e24b433db596384a5621e98e9ffd50dcb"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2 locations): sdks/typescript/scripts/parity/run-embedded-parity.ts:299 \u00B7 sdks/typescript/scripts/parity/run-helix.ts:303 \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":"sdks/typescript/scripts/parity/run-embedded-parity.ts"},"region":{"startLine":299}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ca3713fab23af658c04ba5790139d301e87224fba2a2a14884a1cda56ae0b52"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2 locations): sdks/typescript/src/dsl.ts:509 \u00B7 sdks/typescript/src/dsl.ts:539 \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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":509}}}],"partialFingerprints":{"codehealthFindingId/v1":"18efd459d617e9c9294b95fefad0a5a9db11000df55fe675736d844f49745b0e"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2 locations): sdks/typescript/src/dsl.ts:1071 \u00B7 sdks/typescript/src/dsl.ts:1083 \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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":1071}}}],"partialFingerprints":{"codehealthFindingId/v1":"08a6b8982d9b813568d29cf61e86c599e6b2bb42ce9839266198f7b35c19982a"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2 locations): sdks/typescript/scripts/edge-drop-regression.ts:23 \u00B7 sdks/typescript/scripts/edge-drop-regression.ts:38 \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":"sdks/typescript/scripts/edge-drop-regression.ts"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5a1ceb7376cc71fba9cf610e6b1425077c471ea6d0b2a784c170a6cf076ccee"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3 locations): sdks/typescript/src/dsl.ts:702 \u00B7 sdks/typescript/src/dsl.ts:709 \u00B7 sdks/typescript/src/dsl.ts:719 \u2014 all 3 copies are in the same file, and the CITED SPAN is not a self-contained block \u2014 it runs from inside one construct into the next (the tail of a branch plus the head of the following one, a run of switch arms, the end of a declaration plus the list that follows it) rather than covering a whole unit. So do not lift these lines literally: no call can be substituted for a half-open construct. Extract the enclosing repeated UNIT instead \u2014 the whole function, component or branch these lines sit in \u2014 and where the repetition IS the construct (a run of switch arms, a stack of near-identical declarations) replace it with one table or registry looked up by key rather than a helper each arm calls. The copies still drift apart the first time only one of them is edited, which is why this is reported."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sdks/typescript/src/dsl.ts"},"region":{"startLine":702}}}],"partialFingerprints":{"codehealthFindingId/v1":"632f9e4423ab4bb0c3a4bde646c46beccbc319bd4ae1839148746d75801c9031"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2 locations): sdks/typescript/scripts/parity/generate-fixtures.ts:654 \u00B7 sdks/typescript/scripts/parity/generate-fixtures.ts:676 \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":"sdks/typescript/scripts/parity/generate-fixtures.ts"},"region":{"startLine":654}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7472e9249aca7bad2c9a0a70c82607dc65c0f471a6af9230d972c926868b437"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2 locations): sdks/typescript/scripts/parity/run-embedded-parity.ts:292 \u00B7 sdks/typescript/scripts/parity/run-helix.ts:298 \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":"sdks/typescript/scripts/parity/run-embedded-parity.ts"},"region":{"startLine":292}}}],"partialFingerprints":{"codehealthFindingId/v1":"4dedf34ecfaeecc07910e568cf6149c804807f293fdf73d2a6d7d576b59f4acc"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2 locations): sdks/typescript/src/dsl.ts:2177 \u00B7 sdks/typescript/src/dsl.ts:2184 \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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":2177}}}],"partialFingerprints":{"codehealthFindingId/v1":"ccd23a4f91cc7a4b8f684a5007bbb248b86e1a85c02087a0eef7720f6d0c91d6"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2 locations): sdks/typescript/src/dsl.ts:2225 \u00B7 sdks/typescript/src/dsl.ts:2231 \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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":2225}}}],"partialFingerprints":{"codehealthFindingId/v1":"92621f8358624a01d3714783a1f82d280ffd916f8b8b59ab757a58f7e73b548f"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 10 locations): sdks/typescript/src/dsl.ts:2246 \u00B7 sdks/typescript/src/dsl.ts:2252 \u00B7 sdks/typescript/src/dsl.ts:2258 \u00B7 sdks/typescript/src/dsl.ts:2267 \u00B7 \u002B6 more site(s) not listed \u2014 all 10 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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":2246}}}],"partialFingerprints":{"codehealthFindingId/v1":"4168b565ee42964b749d99aab7090bef1cca1a5cb8bb8d3449e092e074fb073b"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 4 locations): sdks/typescript/src/dsl.ts:2255 \u00B7 sdks/typescript/src/dsl.ts:2357 \u00B7 sdks/typescript/src/dsl.ts:2363 \u00B7 sdks/typescript/src/dsl.ts:2375 \u2014 all 4 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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":2255}}}],"partialFingerprints":{"codehealthFindingId/v1":"786a8028ac75743c302e00d2fd0d06daa1f50f704665386af7a253a24fb6e269"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3 locations): sdks/typescript/src/dsl.ts:2297 \u00B7 sdks/typescript/src/dsl.ts:2303 \u00B7 sdks/typescript/src/dsl.ts:2321 \u2014 all 3 copies are in the same file, and the CITED SPAN is not a self-contained block \u2014 it runs from inside one construct into the next (the tail of a branch plus the head of the following one, a run of switch arms, the end of a declaration plus the list that follows it) rather than covering a whole unit. So do not lift these lines literally: no call can be substituted for a half-open construct. Extract the enclosing repeated UNIT instead \u2014 the whole function, component or branch these lines sit in \u2014 and where the repetition IS the construct (a run of switch arms, a stack of near-identical declarations) replace it with one table or registry looked up by key rather than a helper each arm calls. The copies still drift apart the first time only one of them is edited, which is why this is reported."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sdks/typescript/src/dsl.ts"},"region":{"startLine":2297}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0c8cb876bb8b7d071ba263d085593f1468e2a0c79c2d90b8f20e08516ed8166"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2 locations): sdks/typescript/src/dsl.ts:2354 \u00B7 sdks/typescript/src/dsl.ts:2360 \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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":2354}}}],"partialFingerprints":{"codehealthFindingId/v1":"205738d0f59f2d35160b87a0b388741956585762058b3941d3040e414d29ef93"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2 locations): sdks/typescript/scripts/parity/generate-fixtures.ts:743 \u00B7 sdks/typescript/scripts/parity/generate-fixtures.ts:763 \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":"sdks/typescript/scripts/parity/generate-fixtures.ts"},"region":{"startLine":743}}}],"partialFingerprints":{"codehealthFindingId/v1":"901f118e706dd2a72bf9d3718d3384dd47156dce9d81d7b019b3329cca9f9cee"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function toAst (cyclomatic 86, cognitive 4): toAst has cyclomatic complexity 86 and cognitive complexity 4; 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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":1703}}}],"partialFingerprints":{"codehealthFindingId/v1":"c240e2dee791773c8656806ac5877d8425b161c79ced8e2dd822bc5f906a9f7a"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function remote (cyclomatic 25, cognitive 31): remote has cyclomatic complexity 25 and cognitive complexity 31; 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":"sdks/typescript/src/index.ts"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"73065419af6735d28473c2b7203d3a66ab7210518b1e424954b9024b45ff006b"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function convertParamValue (cyclomatic 23, cognitive 22): convertParamValue 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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":2902}}}],"partialFingerprints":{"codehealthFindingId/v1":"f93cf3b7fa81639914cf62789505ebb1097bd91379197bdfb3641acb44eee07d"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function normalizeTypedQueryValue (cyclomatic 22, cognitive 20): normalizeTypedQueryValue has cyclomatic complexity 22 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 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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":2966}}}],"partialFingerprints":{"codehealthFindingId/v1":"e12efaa0e1e58e3052d810c1abca4b67ebe52273d9c0ebf17af6175a6ae204bc"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function from (cyclomatic 19, cognitive 22): from has cyclomatic complexity 19 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 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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":405}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbcc803d03322fab37a0315b8429a4be837277aefd81cc04bfd1dfcc629d0681"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function quoteUnsafeIntegerTokens (cyclomatic 16, cognitive 29): quoteUnsafeIntegerTokens has cyclomatic complexity 16 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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"be2cb46dd26c89f0d1e099e48fb7f3257dcdca3490ef218a063b6394a6d80dce"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function stringifyEncoded (cyclomatic 16, cognitive 19): stringifyEncoded has cyclomatic complexity 16 and cognitive complexity 19; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sdks/typescript/src/dsl.ts"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"9715aa4ba926b83b8e876a531ee27b081d54cbfdcdbbc209cd762e6cdcf100fd"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function parseIndexOperationStatus (cyclomatic 16, cognitive 16): parseIndexOperationStatus has cyclomatic complexity 16 and cognitive complexity 16; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive 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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":1302}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba323b1244cca398e737a7c6630a4d826061519516007ee4b13b8db81b86c149"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function queryValueFromPropertyValue (cyclomatic 16, cognitive 3): queryValueFromPropertyValue has cyclomatic complexity 16 and cognitive complexity 3; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive sits below cyclomatic here, so much of the count is breadth \u2014 arms side by side rather than stacked \u2014 and splitting per arm would leave a function per arm; group the work between the checks into named steps instead. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sdks/typescript/src/dsl.ts"},"region":{"startLine":3000}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9f6c8b1ccbfd220bd326c9a78e6ab156cae0b05f366b6c21dbd3754b7a7c332"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function constructor (cyclomatic 14, cognitive 16): constructor has cyclomatic complexity 14 and cognitive complexity 16; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive 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":"sdks/typescript/src/graph.ts"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b985b550093ed2a5d997217491dae9807aee81839ec91506c14c84d5eed70fb"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function encode (cyclomatic 12, cognitive 14): encode has cyclomatic complexity 12 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":"sdks/typescript/src/dsl.ts"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"2665cc536cef35558550724a9f8fdb2180b4216f5e99c14fcfac458107517256"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function (top-level) (cyclomatic 11, cognitive 16): (top-level) has cyclomatic complexity 11 and cognitive complexity 16; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive 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":"sdks/typescript/scripts/package-smoke.mjs"},"region":{"startLine":2}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ba8665becb21a93eb50615993ce86c8e9b42df883f80f27e172557452b36257"}},{"ruleId":"R3","level":"warning","message":{"text":"Large Files: 3 file(s) over 400 lines (counted as significant lines \u2014 blank lines excluded \u2014 over production source only, tests excluded), largest first: sdks/typescript/src/dsl.ts (3097), sdks/typescript/scripts/parity/generate-fixtures.ts (1271), sdks/typescript/src/index.ts (438)."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"cecee31b569df4f07e06db732f1ca037af27b5afef9023da51f9673d931a142f"}},{"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":"sdks/typescript/scripts/parity/generate-fixtures.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fe2678545fd8b319c0da3671119f2c94626f060246d6267dc7221117906a495"}},{"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":"sdks/typescript/scripts/parity/run-helix.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c25e1c573111ab2de62734d73eeae790db015a1fa4b3d94f2351bdc72b526eb"}},{"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":"sdks/typescript/scripts/parity/run-embedded-parity.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9487bec9cad1502c9d06f643bd28e1863c948a29bffc9895019b126995f6119"}},{"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":"sdks/typescript/scripts/parity/run-embedded-client.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f701a4c6b8cbab403f16b8a5d11f589998fc7cea80483d0fb4ecd9f27fae5e45"}},{"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":"sdks/typescript/scripts/parity/compare-json.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d273b6c55e60aa3449173bf46e9767318e0a877d99ba653b7da2aea1431443d"}},{"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":"bindings/uniffi/scripts/finalize-node-package.mjs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b62f294d1cbd162c4bb38df34a20ab486bac3b2485ef53d72ab5ea6b9e056765"}},{"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":"sdks/typescript/scripts/edge-drop-regression.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"474d33a084a60a850215ba248b25eca454a0b4f5e667d022489aa5743c4452c2"}},{"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":"sdks/typescript/scripts/parity/paths.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7e689b4e132b61d1a2297983e64e13eb1e4b2161a8ad333e06ca24dffcc857f"}},{"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":"sdks/typescript/scripts/parity/run-python-generator.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"53bb686e55f023a37df863cfe45f2d1b1ebfbf77a1618ab328a954e9320dc5ea"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~137 LoC): no import path from any entry point (15 application, 4 tooling, 10 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":"sdks/typescript/scripts/parity/run-embedded-client.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4d02790568520ef7060f5472969773be21175faf7d97235981b27f510426a32"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~53 LoC): no import path from any entry point (15 application, 4 tooling, 10 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":"sdks/typescript/scripts/edge-drop-regression.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d0c3eafc46268e628c214354213c976063d365deccb19f276c83aaec78a1016"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027workspacesRoot\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sdks/typescript/scripts/parity/paths.ts"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8552798fe193575718772938166239c238e1f2e5fe8eb1280e161b274a389be"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060entry.isFile() \u0026\u0026 entry.name.endsWith(\u0022.json\u0022)\u0060 appears character-identically in 3 files \u2014 sdks/typescript/scripts/parity/compare-json.ts, sdks/typescript/scripts/parity/run-embedded-parity.ts, sdks/typescript/scripts/parity/run-helix.ts. 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":"sdks/typescript/scripts/parity/compare-json.ts"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"4dfb04de08e7b6738fabb8e28c6ae028692e302083bb3d6376b93707adc81ead"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060value === null || typeof value !== \u0022object\u0022 || !(field in value)\u0060 appears character-identically in 2 files \u2014 sdks/typescript/scripts/parity/run-embedded-client.ts, sdks/typescript/scripts/parity/run-helix.ts. 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":"sdks/typescript/scripts/parity/run-embedded-client.ts"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"d95f26df45cfd5e38c47bcf3312f237e2850aa8c0e9977a04620d6895467338d"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060property.name == \u0022$label\u0022 \u0026\u0026 property.value.as_str() == Some(definition.label().as_str())\u0060 appears character-identically in 3 files \u2014 crates/db/src/index_lifecycle/secondary.rs, crates/db/src/index_lifecycle/text/projection.rs, crates/db/src/index_lifecycle/vector.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":"crates/db/src/index_lifecycle/secondary.rs"},"region":{"startLine":2727}}}],"partialFingerprints":{"codehealthFindingId/v1":"e973ef360dee005b1c428686ac9cbcdfbe13656ffe3dcca40baa2b9e7eebba85"}},{"ruleId":"X6","level":"note","message":{"text":"Hand-rolled JSON/XML parsing via regex: A regex whose pattern encodes JSON/XML syntax is parsing a structured format by hand \u2014 malformed or differently-typed content (e.g. \u0060\u0022amount\u0022: \u00225\u0022\u0060 as a string) silently mis-parses instead of failing validation. This JavaScript/TypeScript code already uses a real parser in the same package; use it here too."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"docs/scripts/check-docs.mjs"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"16e54282c3ac76e2f207366ef497ea3f64fc500513397addb8315eca68a9a40f"}},{"ruleId":"X6","level":"note","message":{"text":"Hand-rolled JSON/XML parsing via regex: A regex whose pattern encodes JSON/XML syntax is parsing a structured format by hand \u2014 malformed or differently-typed content (e.g. \u0060\u0022amount\u0022: \u00225\u0022\u0060 as a string) silently mis-parses instead of failing validation. This JavaScript/TypeScript code already uses a real parser in the same package; use it here too."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"docs/scripts/check-docs.mjs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbb22cc72d7e3c20dc430d6c629321351347cbdb17144badda4d7888c3ab3dc1"}},{"ruleId":"X6","level":"note","message":{"text":"Hand-rolled JSON/XML parsing via regex: A regex whose pattern encodes JSON/XML syntax is parsing a structured format by hand \u2014 malformed or differently-typed content (e.g. \u0060\u0022amount\u0022: \u00225\u0022\u0060 as a string) silently mis-parses instead of failing validation. This JavaScript/TypeScript code already uses a real parser in the same package; use it here too."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"docs/scripts/check-docs.mjs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"dff92716f4d417211d35b71418420e0f60ebf052f50ef3bfe31f1fee238865b9"}}],"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-1104","guid":"4c918cb5-b2a6-6c55-9963-a44ee464305e","name":"CWE-1104","shortDescription":{"text":"CWE-1104"},"helpUri":"https://cwe.mitre.org/data/definitions/1104.html"},{"id":"CWE-1352","guid":"5257f322-5cfc-6b52-bedd-0b9a526b4c7d","name":"CWE-1352","shortDescription":{"text":"CWE-1352"},"helpUri":"https://cwe.mitre.org/data/definitions/1352.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-248","guid":"64b58946-d244-a556-a48a-f82fcd4f4186","name":"CWE-248","shortDescription":{"text":"CWE-248"},"helpUri":"https://cwe.mitre.org/data/definitions/248.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-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-704","guid":"50bd74b4-a921-5159-8671-99fd7e78c810","name":"CWE-704","shortDescription":{"text":"CWE-704"},"helpUri":"https://cwe.mitre.org/data/definitions/704.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-939","guid":"12397742-f2c4-8254-8012-482c3356c551","name":"CWE-939","shortDescription":{"text":"CWE-939"},"helpUri":"https://cwe.mitre.org/data/definitions/939.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":217,"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."]}]}