{"$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":"D7","name":"Architectural Integrity","shortDescription":{"text":"Architectural Integrity"},"helpUri":"https://codehealth.canine.dev/dimensions/D7"},{"id":"D9","name":"Test Distribution","shortDescription":{"text":"Test Distribution"},"helpUri":"https://codehealth.canine.dev/dimensions/D9"},{"id":"D11","name":"Test Reliability","shortDescription":{"text":"Test Reliability"},"helpUri":"https://codehealth.canine.dev/dimensions/D11"},{"id":"D12","name":"Dependency Hygiene","shortDescription":{"text":"Dependency Hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/D12"},{"id":"D13","name":"Secret Scanning","shortDescription":{"text":"Secret Scanning"},"helpUri":"https://codehealth.canine.dev/dimensions/D13","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D14","name":"License Compliance","shortDescription":{"text":"License Compliance"},"helpUri":"https://codehealth.canine.dev/dimensions/D14"},{"id":"D15","name":"Churn \u00D7 Complexity Hotspots","shortDescription":{"text":"Churn \u00D7 Complexity Hotspots"},"helpUri":"https://codehealth.canine.dev/dimensions/D15"},{"id":"D16","name":"Bus Factor","shortDescription":{"text":"Bus Factor"},"helpUri":"https://codehealth.canine.dev/dimensions/D16"},{"id":"D17","name":"Explicit Debt","shortDescription":{"text":"Explicit Debt"},"helpUri":"https://codehealth.canine.dev/dimensions/D17"},{"id":"D19","name":"Documentation Quality","shortDescription":{"text":"Documentation Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D19"},{"id":"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":"D22","name":"Internal API Consistency","shortDescription":{"text":"Internal API Consistency"},"helpUri":"https://codehealth.canine.dev/dimensions/D22"},{"id":"D25","name":"ADR Conformance","shortDescription":{"text":"ADR Conformance"},"helpUri":"https://codehealth.canine.dev/dimensions/D25"},{"id":"D26","name":"Project Cohesion","shortDescription":{"text":"Project Cohesion"},"helpUri":"https://codehealth.canine.dev/dimensions/D26"},{"id":"D28","name":"Secrets (history)","shortDescription":{"text":"Secrets (history)"},"helpUri":"https://codehealth.canine.dev/dimensions/D28","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D29","name":"Static Analysis (SAST)","shortDescription":{"text":"Static Analysis (SAST)"},"helpUri":"https://codehealth.canine.dev/dimensions/D29","relationships":[{"target":{"id":"CWE-79","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-89","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-94","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-77","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-79","CWE-89","CWE-78","CWE-94","CWE-77"]}},{"id":"D30","name":"Dependency Vulnerabilities","shortDescription":{"text":"Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D30","relationships":[{"target":{"id":"CWE-1395","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-937","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1395","CWE-937"]}},{"id":"D31","name":"IaC \u0026 Container Security","shortDescription":{"text":"IaC \u0026 Container Security"},"helpUri":"https://codehealth.canine.dev/dimensions/D31","relationships":[{"target":{"id":"CWE-1032","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-732","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-16","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1032","CWE-732","CWE-16"]}},{"id":"D34","name":"Knowledge Freshness","shortDescription":{"text":"Knowledge Freshness"},"helpUri":"https://codehealth.canine.dev/dimensions/D34"},{"id":"D35","name":"Change Coupling","shortDescription":{"text":"Change Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D35"},{"id":"D36","name":"Supply-chain Provenance \u0026 Signing","shortDescription":{"text":"Supply-chain Provenance \u0026 Signing"},"helpUri":"https://codehealth.canine.dev/dimensions/D36","relationships":[{"target":{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1357","CWE-494"]}},{"id":"D37","name":"Vulnerability-disclosure Policy","shortDescription":{"text":"Vulnerability-disclosure Policy"},"helpUri":"https://codehealth.canine.dev/dimensions/D37","relationships":[{"target":{"id":"CWE-1059","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1059"]}},{"id":"D40","name":"Network Egress Confinement","shortDescription":{"text":"Network Egress Confinement"},"helpUri":"https://codehealth.canine.dev/dimensions/D40"},{"id":"D41","name":"Kernel \u0026 Syscall Confinement","shortDescription":{"text":"Kernel \u0026 Syscall Confinement"},"helpUri":"https://codehealth.canine.dev/dimensions/D41"},{"id":"D43","name":"Malicious Dependencies","shortDescription":{"text":"Malicious Dependencies"},"helpUri":"https://codehealth.canine.dev/dimensions/D43","relationships":[{"target":{"id":"CWE-506","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-506"]}},{"id":"D44","name":"Platform End-of-Life","shortDescription":{"text":"Platform End-of-Life"},"helpUri":"https://codehealth.canine.dev/dimensions/D44"},{"id":"AX10","name":"Code composition","shortDescription":{"text":"Code composition"},"helpUri":"https://codehealth.canine.dev/dimensions/AX10"},{"id":"AX3","name":"Project dependency cycles","shortDescription":{"text":"Project dependency cycles"},"helpUri":"https://codehealth.canine.dev/dimensions/AX3"},{"id":"AX4","name":"Dependency direction","shortDescription":{"text":"Dependency direction"},"helpUri":"https://codehealth.canine.dev/dimensions/AX4"},{"id":"AX8","name":"Test isolation","shortDescription":{"text":"Test isolation"},"helpUri":"https://codehealth.canine.dev/dimensions/AX8"},{"id":"AX9","name":"CQS / query purity","shortDescription":{"text":"CQS / query purity"},"helpUri":"https://codehealth.canine.dev/dimensions/AX9"},{"id":"AXB2","name":"Runtime readiness","shortDescription":{"text":"Runtime readiness"},"helpUri":"https://codehealth.canine.dev/dimensions/AXB2"},{"id":"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":"ES1","name":"Fold determinism","shortDescription":{"text":"Fold determinism"},"helpUri":"https://codehealth.canine.dev/dimensions/ES1"},{"id":"ES2","name":"Immutable events","shortDescription":{"text":"Immutable events"},"helpUri":"https://codehealth.canine.dev/dimensions/ES2"},{"id":"M1","name":"Documentation (README)","shortDescription":{"text":"Documentation (README)"},"helpUri":"https://codehealth.canine.dev/dimensions/M1"},{"id":"M2","name":"Architecture documentation","shortDescription":{"text":"Architecture documentation"},"helpUri":"https://codehealth.canine.dev/dimensions/M2"},{"id":"M3","name":"Folder \u0026 project structure","shortDescription":{"text":"Folder \u0026 project structure"},"helpUri":"https://codehealth.canine.dev/dimensions/M3"},{"id":"M4","name":"Documentation accuracy","shortDescription":{"text":"Documentation accuracy"},"helpUri":"https://codehealth.canine.dev/dimensions/M4"},{"id":"P1","name":"CI/CD gates","shortDescription":{"text":"CI/CD gates"},"helpUri":"https://codehealth.canine.dev/dimensions/P1"},{"id":"P12","name":"CI test-gate honesty","shortDescription":{"text":"CI test-gate honesty"},"helpUri":"https://codehealth.canine.dev/dimensions/P12"},{"id":"P2","name":"Observability","shortDescription":{"text":"Observability"},"helpUri":"https://codehealth.canine.dev/dimensions/P2"},{"id":"P3","name":"Security \u0026 performance tooling","shortDescription":{"text":"Security \u0026 performance tooling"},"helpUri":"https://codehealth.canine.dev/dimensions/P3"},{"id":"P4","name":"Deployment \u0026 Rollback","shortDescription":{"text":"Deployment \u0026 Rollback"},"helpUri":"https://codehealth.canine.dev/dimensions/P4"},{"id":"P5","name":"DR \u0026 Backup","shortDescription":{"text":"DR \u0026 Backup"},"helpUri":"https://codehealth.canine.dev/dimensions/P5"},{"id":"P6","name":"Release Hygiene","shortDescription":{"text":"Release Hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/P6"},{"id":"P7","name":"Outbound HTTP resilience","shortDescription":{"text":"Outbound HTTP resilience"},"helpUri":"https://codehealth.canine.dev/dimensions/P7"},{"id":"PF3","name":"Async \u0026 latency hygiene","shortDescription":{"text":"Async \u0026 latency hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/PF3"},{"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":"lore_revision::stage::stage_node_from_metadata (cyclomatic 57): lore_revision::stage::stage_node_from_metadata 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":"lore-revision/src/stage.rs"},"region":{"startLine":1949}}}],"partialFingerprints":{"codehealthFindingId/v1":"f46b06edcca9d55f53048c87e1e9f5e0409846b51a9d989b39876411af9eb9bf"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::revision::sync::sync (cyclomatic 55): lore_revision::revision::sync::sync has cyclomatic complexity 55 (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":"lore-revision/src/revision/sync.rs"},"region":{"startLine":418}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d8a8807d8dbf2dccf8b251f2536f8a4c1439fa0af72fb74085f3cbee8e05214"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::fs::realize::realize_file_merge (cyclomatic 53): lore_revision::fs::realize::realize_file_merge has cyclomatic complexity 53 (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":"lore-revision/src/fs/realize.rs"},"region":{"startLine":2175}}}],"partialFingerprints":{"codehealthFindingId/v1":"1dbc25baf338bbbafcc32b7b3d87b2bfead46fc4eb1548a60603ff81fb7b49ff"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::revision::diff3_with_source_cap (cyclomatic 49): lore_revision::revision::diff3_with_source_cap 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":"lore-revision/src/revision.rs"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"71b4bd2418df59e83b596d879d2fb3faf217468eb2362d13c82737d5c005ce89"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::repository::status::status (cyclomatic 49): lore_revision::repository::status::status 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":"lore-revision/src/repository/status.rs"},"region":{"startLine":1365}}}],"partialFingerprints":{"codehealthFindingId/v1":"31ada0078b9db6b0804f1ab85e45777ce3ae619d4d1f94bd9f7907ed0460796c"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::branch::push::collect_fragments_and_push (cyclomatic 46): lore_revision::branch::push::collect_fragments_and_push has cyclomatic complexity 46 (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":"lore-revision/src/branch/push.rs"},"region":{"startLine":704}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bccd825315a6d9095ff25ebd5b5d1bfb75499ebfb16b0b3eb77de00dc166e2d"}},{"ruleId":"D1","level":"warning","message":{"text":"LocalImmutableStore::store (cyclomatic 44): LocalImmutableStore::store has cyclomatic complexity 44 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":1676}}}],"partialFingerprints":{"codehealthFindingId/v1":"d188a8d5ff51f536b9ddc3a345a33e7e940bcded31b51afa51a8521c17244b56"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_client::cli::commands::repository::handle_repository_status (cyclomatic 41): lore_client::cli::commands::repository::handle_repository_status 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":"lore-client/src/cli/commands/repository.rs"},"region":{"startLine":513}}}],"partialFingerprints":{"codehealthFindingId/v1":"43551565b76181e30e9376b821c997ce7d03739dac6337fb23aba74735baef8b"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::fs::realize::verify_filesystem (cyclomatic 41): lore_revision::fs::realize::verify_filesystem 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":"lore-revision/src/fs/realize.rs"},"region":{"startLine":571}}}],"partialFingerprints":{"codehealthFindingId/v1":"a60581aa90352b4a7baccc23595e5e00b93b396fe613ab4f751ae3db2fb345e5"}},{"ruleId":"D1","level":"warning","message":{"text":"LocalImmutableStore::verify_fragment (cyclomatic 40): LocalImmutableStore::verify_fragment 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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":4286}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b89875dee3fe137a92da978c6e086a8b440dafeff71d25848f85fc54d073777"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_storage::local::immutable_store::flush_locked_group (cyclomatic 40): lore_storage::local::immutable_store::flush_locked_group 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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":4706}}}],"partialFingerprints":{"codehealthFindingId/v1":"85bc7d0a7466fe281aef323295fff38731299b72fee1b64487a533dd24c14d4a"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::stage::stage_from_parent_revision_in_operation (cyclomatic 39): lore_revision::stage::stage_from_parent_revision_in_operation has cyclomatic complexity 39 (threshold 15). Of this number, 38 points are the body\u0027s own statements and 1 belongs to one function item 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":"lore-revision/src/stage.rs"},"region":{"startLine":2575}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7b36ff9568a906448f7a48a5f31558100d03e3d4acd86061c9a5a37103034b5"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::repository::load_and_connect_with_token (cyclomatic 38): lore_revision::repository::load_and_connect_with_token has cyclomatic complexity 38 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/repository.rs"},"region":{"startLine":2105}}}],"partialFingerprints":{"codehealthFindingId/v1":"14902a28fd307c1d2b92e9338524390f8365af1995fb8c2fa6a9b15660dc989b"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::projfs::serve::get_directory_enumeration_async (cyclomatic 35): lore_revision::projfs::serve::get_directory_enumeration_async has cyclomatic complexity 35 (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":"lore-revision/src/projfs/serve.rs"},"region":{"startLine":497}}}],"partialFingerprints":{"codehealthFindingId/v1":"42cf34362925108d27c0c2cbfb7c261797b6cb3a779b15d176c9c5cfbfc67dde"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::file::unstage::unstage_node (cyclomatic 35): lore_revision::file::unstage::unstage_node has cyclomatic complexity 35 (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":"lore-revision/src/file/unstage.rs"},"region":{"startLine":916}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c1527285085c984b7d2b97d1f728e1133ac158d22e3acbd2f989235b1d8ac4d"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_transport::quic::response_reader::read_response (cyclomatic 32): lore_transport::quic::response_reader::read_response 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":"lore-transport/src/quic/response_reader.rs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"a312d270dcc0b62f981c8c068ae50cdcc30658e6eeb7c6f5b3a5a639ea1ea563"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::commit::commit_with_metadata_in_operation (cyclomatic 31): lore_revision::commit::commit_with_metadata_in_operation has cyclomatic complexity 31 (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":"lore-revision/src/commit.rs"},"region":{"startLine":560}}}],"partialFingerprints":{"codehealthFindingId/v1":"602ea9128b24ca9dd135d3d44f9355737787ec599ff082025902b091ecbe7d55"}},{"ruleId":"D1","level":"warning","message":{"text":"LocalImmutableStore::evict_group_sized (cyclomatic 31): LocalImmutableStore::evict_group_sized has cyclomatic complexity 31 (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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":2230}}}],"partialFingerprints":{"codehealthFindingId/v1":"4700c4b8fbf8121a2ed2131703484cc947015df519de7c718d2597ee1e23d97c"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_client::cli::commands::branch::handle_branch_push (cyclomatic 30): lore_client::cli::commands::branch::handle_branch_push 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":"lore-client/src/cli/commands/branch.rs"},"region":{"startLine":798}}}],"partialFingerprints":{"codehealthFindingId/v1":"830d006f0694fc60b3a9470ad925fa41e55c3ff102fe6ae0e033eb3c01f5ab6e"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::file::stage::stage_move (cyclomatic 30): lore_revision::file::stage::stage_move 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":"lore-revision/src/file/stage.rs"},"region":{"startLine":1168}}}],"partialFingerprints":{"codehealthFindingId/v1":"f831af1156b87428893305d435036caddabdafccb5d559ccfa82684227553029"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::stage::stage_filesystem_path (cyclomatic 29): lore_revision::stage::stage_filesystem_path 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":"lore-revision/src/stage.rs"},"region":{"startLine":369}}}],"partialFingerprints":{"codehealthFindingId/v1":"973cbb1381c143215441e511994f6714529ede21f83e096287bca4adbe2eac27"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::history::find_branch_point (cyclomatic 29): lore_revision::history::find_branch_point 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":"lore-revision/src/history.rs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"a57f24b5969dfe7d11658d9487d867853e6c8063c137d5824a9d9d5588f29605"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_server::server::async_main (cyclomatic 29): lore_server::server::async_main has cyclomatic complexity 29 (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":"lore-server/src/server.rs"},"region":{"startLine":1870}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b0f6f0a68ff2a85be4386deac4af8c27e378d9b006d8519e63a448499f02020"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_storage::write::leader_body (cyclomatic 29): lore_storage::write::leader_body 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":"lore-storage/src/write.rs"},"region":{"startLine":1044}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad3f121a051a9fecc609cda03646cadf37d337bc20f560254993f8ef30ac6b1d"}},{"ruleId":"D1","level":"warning","message":{"text":"lore::revision_tree::move_node::plan_entries (cyclomatic 28): lore::revision_tree::move_node::plan_entries 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":"lore/src/revision_tree/move_node.rs"},"region":{"startLine":345}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e7bec1654a022fdf6a9e7f78b647595680218d7f5e81ccc229a8768c7a41a3d"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::state::diff::add_change_for_paired_nodes (cyclomatic 28): lore_revision::state::diff::add_change_for_paired_nodes 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":"lore-revision/src/state/diff.rs"},"region":{"startLine":916}}}],"partialFingerprints":{"codehealthFindingId/v1":"42c6ac96796b0f20a280ea9b777849229509fb60acdf13475b6c6ba589e62167"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::stage::stage_directory (cyclomatic 27): lore_revision::stage::stage_directory 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":"lore-revision/src/stage.rs"},"region":{"startLine":1378}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a8817f5af514f028a3620a527ce515537c52a639fb27022b40f0e1d45b6a258"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::repository::branch_switch_target (cyclomatic 26): lore_revision::repository::branch_switch_target 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":"lore-revision/src/repository.rs"},"region":{"startLine":2993}}}],"partialFingerprints":{"codehealthFindingId/v1":"59b51e0d214e6d498665e0d23667db8815d770840adc786ae260dad51373cc24"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::state::os_diff::diff_filesystem_directory_walk (cyclomatic 26): lore_revision::state::os_diff::diff_filesystem_directory_walk 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":"lore-revision/src/state/os_diff.rs"},"region":{"startLine":1169}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ccc64edf39bdcde7a505f3dd6e9be5e25b3d8c72b500311a8e4d8b2a97ba4eb"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::immutable::cache_through (cyclomatic 26): lore_revision::immutable::cache_through has cyclomatic complexity 26 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/immutable.rs"},"region":{"startLine":574}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb589889673d8293e1aaf86c7832aa18f51b275eff5712966367bbf3494b38fd"}},{"ruleId":"D1","level":"warning","message":{"text":"State::serialize (cyclomatic 25): State::serialize 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":"lore-revision/src/state.rs"},"region":{"startLine":744}}}],"partialFingerprints":{"codehealthFindingId/v1":"5bdbca5d3e600d0a150e1505de73bb02c5b584ccd1f97453a57e5fd20df2cdfa"}},{"ruleId":"D1","level":"warning","message":{"text":"State::move_node (cyclomatic 25): State::move_node has cyclomatic complexity 25 (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":"lore-revision/src/state.rs"},"region":{"startLine":2692}}}],"partialFingerprints":{"codehealthFindingId/v1":"e77da504ea17006e0145dfa263d69f1718d6ba5e515f9f141e13bfe71f37220f"}},{"ruleId":"D1","level":"warning","message":{"text":"LocalImmutableStore::verify (cyclomatic 25): LocalImmutableStore::verify 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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":3956}}}],"partialFingerprints":{"codehealthFindingId/v1":"3116fc10aed361f520e8ed8601822b0c4405feaad0e0f517092c1b1c90a21763"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_transport::connection::connect_impl (cyclomatic 25): lore_transport::connection::connect_impl 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":"lore-transport/src/connection.rs"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"036daff3d74db2784c43d218fb6435de1675ee8c32cc787aab368c8150a899ee"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::stage::stage_link_paths_from_parent_revision (cyclomatic 24): lore_revision::stage::stage_link_paths_from_parent_revision 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":"lore-revision/src/stage.rs"},"region":{"startLine":3108}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfd53b710e45d69828ddb92854122c18245388e26c5951a2581fd14c907ed89d"}},{"ruleId":"D1","level":"warning","message":{"text":"LocalImmutableStore::new (cyclomatic 24): LocalImmutableStore::new has cyclomatic complexity 24 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":1031}}}],"partialFingerprints":{"codehealthFindingId/v1":"e65745c0ea4fe70b32c011df14b553a3d51403e8a598c945beeeeab30f5267d2"}},{"ruleId":"D1","level":"warning","message":{"text":"content_tabs._render_group (cyclomatic 24): content_tabs._render_group 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":"docs/assets/hooks/content_tabs.py"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc288101602a689789e761a5b88955f5ecc3a5161734ab10664d4f3dec973847"}},{"ruleId":"D1","level":"warning","message":{"text":"State::block_deserialize (cyclomatic 23): State::block_deserialize 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":"lore-revision/src/state.rs"},"region":{"startLine":1367}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3969cf170c0e84fcdda41b5250917bce7db77cc710fc054a39bd2a11bdf66ee"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::state::collect_new_fragments (cyclomatic 23): lore_revision::state::collect_new_fragments 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":"lore-revision/src/state.rs"},"region":{"startLine":7484}}}],"partialFingerprints":{"codehealthFindingId/v1":"3db042bdf32a7730eeb1685aa88dc32619d457a68193804e605897af116a33ac"}},{"ruleId":"D1","level":"warning","message":{"text":"StorageServiceV4::run_request_handler (cyclomatic 23): StorageServiceV4::run_request_handler 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":"lore-server/src/quic/storage_service_v4.rs"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"2cdb912105f28a5192c18a6e0b2061f261e9ab30698cad64c80b2c7cae0d57c2"}},{"ruleId":"D1","level":"warning","message":{"text":"lore::revision_tree::add::plan_entries (cyclomatic 22): lore::revision_tree::add::plan_entries 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":"lore/src/revision_tree/add.rs"},"region":{"startLine":472}}}],"partialFingerprints":{"codehealthFindingId/v1":"38cb55e7dcf8ac72d2458d417e92a1cde385820d914de27b028a3f1c4b8788b0"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::commit::commit_directory (cyclomatic 22): lore_revision::commit::commit_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":"lore-revision/src/commit.rs"},"region":{"startLine":1921}}}],"partialFingerprints":{"codehealthFindingId/v1":"10144429333fe95197cdf16461981fa7f342a6d22b8ab8429190b5e2065dfce2"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::repository::layer_branch_switch (cyclomatic 22): lore_revision::repository::layer_branch_switch 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":"lore-revision/src/repository.rs"},"region":{"startLine":3257}}}],"partialFingerprints":{"codehealthFindingId/v1":"8243236bfdbd55cdf7798bd5f9542828880464719f50397c4781753074653687"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::fs::realize::realize_change_modify_add (cyclomatic 22): lore_revision::fs::realize::realize_change_modify_add 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":"lore-revision/src/fs/realize.rs"},"region":{"startLine":1764}}}],"partialFingerprints":{"codehealthFindingId/v1":"dacd8c3849848d5526d3d87b1b057d355051e00ae37bb57a21d500807c1b233f"}},{"ruleId":"D1","level":"warning","message":{"text":"LocalLockStore::query_locks (cyclomatic 22): LocalLockStore::query_locks has cyclomatic complexity 22 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/lock/store.rs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"371053add9c193b35e5c7bf0028fc3e8887186ea3f1adfc61bd515f3ef6e834b"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::lock::file::release::release (cyclomatic 21): lore_revision::lock::file::release::release 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":"lore-revision/src/lock/file/release.rs"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"6487f2f6326a201417c890383623dca7307b2e4d83c3c7e393a2d7f58194aa9d"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::file::diff::emit_diff3_changes (cyclomatic 21): lore_revision::file::diff::emit_diff3_changes 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":"lore-revision/src/file/diff.rs"},"region":{"startLine":469}}}],"partialFingerprints":{"codehealthFindingId/v1":"343f879bf13fb78377666863646d112354d76fb5420183e1643e7cf6307c0d7f"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::branch::merge::merge_repository (cyclomatic 21): lore_revision::branch::merge::merge_repository 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":"lore-revision/src/branch/merge.rs"},"region":{"startLine":445}}}],"partialFingerprints":{"codehealthFindingId/v1":"f48e421d3bb9e5597a6a45a09ab6a8a25cdd14d0d2d03afffa42a588810d8f0f"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::revision::restore::restore (cyclomatic 21): lore_revision::revision::restore::restore 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":"lore-revision/src/revision/restore.rs"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"0038d80c7acd2a464b40622de3b804129fca80fecf710f7421f7f2c78714da06"}},{"ruleId":"D1","level":"warning","message":{"text":"LocalImmutableStore::evict_oldest (cyclomatic 21): LocalImmutableStore::evict_oldest 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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":2468}}}],"partialFingerprints":{"codehealthFindingId/v1":"467dd0efbfaedcec28d62d3ee38f61dda1e5cf34f46cb26e70da282eb62adb5c"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_client::cli::commands::revision::handle_revision_info (cyclomatic 20): lore_client::cli::commands::revision::handle_revision_info 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":"lore-client/src/cli/commands/revision.rs"},"region":{"startLine":674}}}],"partialFingerprints":{"codehealthFindingId/v1":"513fb2a85b57e3888e77be6d90bc59d2ea84e9d236c6bacc1a270ea9343a6265"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_client::cli::commands::revision::handle_revision_commit (cyclomatic 20): lore_client::cli::commands::revision::handle_revision_commit 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":"lore-client/src/cli/commands/revision.rs"},"region":{"startLine":1179}}}],"partialFingerprints":{"codehealthFindingId/v1":"5241f49b8d2d0f3b8bffbbd57ff22ed0b49a846cd7d5fbf4646a60b2f0364270"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::file::diff::emit_unified_diffs (cyclomatic 20): lore_revision::file::diff::emit_unified_diffs 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":"lore-revision/src/file/diff.rs"},"region":{"startLine":720}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c81df5e4d33a2134bf0813a64cae9a1715a0066809d112baf0fce96095381f5"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::commit::rehash_directory (cyclomatic 20): lore_revision::commit::rehash_directory 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":"lore-revision/src/commit.rs"},"region":{"startLine":3115}}}],"partialFingerprints":{"codehealthFindingId/v1":"83e63c10d857a9f28ed393cc4f48f6fd8762e6e0004e24c98fd7d9cc70fd4b0f"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::branch::merge::merge_into (cyclomatic 20): lore_revision::branch::merge::merge_into 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":"lore-revision/src/branch/merge.rs"},"region":{"startLine":4328}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fa0e5b5b3e79a44dcb6ab4ebef16e2f835133a71d14bc24a9611ed115d8d206"}},{"ruleId":"D1","level":"warning","message":{"text":"JwkServiceImpl::fetch_new_keys (cyclomatic 20): JwkServiceImpl::fetch_new_keys 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":"lore-server/src/auth/jwk.rs"},"region":{"startLine":524}}}],"partialFingerprints":{"codehealthFindingId/v1":"62ca5dc72fdebde3c5d2cc2129e6d3990b2db4085abe20526d3ceb73781d03f0"}},{"ruleId":"D1","level":"warning","message":{"text":"StreamHandler::handle_stream (cyclomatic 20): StreamHandler::handle_stream 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":"lore-server/src/quic/stream_handler.rs"},"region":{"startLine":502}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d21bc0813ac76b9e19dc5b98d3e31a72974058d1ddfeb7038e41703f25d33ee"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::revision::info::info (cyclomatic 19): lore_revision::revision::info::info 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":"lore-revision/src/revision/info.rs"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"230db9dff0f47aca3fa856e31bc72307136e049db3c263fe05a34acc961e8d50"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::projfs::serve::serve (cyclomatic 19): lore_revision::projfs::serve::serve 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":"lore-revision/src/projfs/serve.rs"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"a451c4c4a5a57c0bdd992f630efd1521608117b63dc7df93ed7b9388da65336d"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::stage::resolve_case_variant_collisions (cyclomatic 19): lore_revision::stage::resolve_case_variant_collisions 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":"lore-revision/src/stage.rs"},"region":{"startLine":1140}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdadd797a154e5a3c9cd09906d8adb628ed6d23373e01e3a0388cc8579d7aedf"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::commit::weave_history (cyclomatic 19): lore_revision::commit::weave_history 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":"lore-revision/src/commit.rs"},"region":{"startLine":3367}}}],"partialFingerprints":{"codehealthFindingId/v1":"d40db9bf9e0bf28b6535bb469f2ff1f30219f20a39bdc3067eaa234eaee0e950"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::state::os_diff::handle_single_file_compare_result (cyclomatic 19): lore_revision::state::os_diff::handle_single_file_compare_result 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":"lore-revision/src/state/os_diff.rs"},"region":{"startLine":606}}}],"partialFingerprints":{"codehealthFindingId/v1":"6dc2ceb4c06fee0c4957203316b20a635944c80ee91b5ddd361b759c2a82873d"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::lock::file::acquire::acquire (cyclomatic 19): lore_revision::lock::file::acquire::acquire 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":"lore-revision/src/lock/file/acquire.rs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9c0346eeb6280c0623c90e1167bb23a709cbf196f5e5f573c8332584d5f7a66"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::fs::realize::realize_changes_delete (cyclomatic 19): lore_revision::fs::realize::realize_changes_delete 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":"lore-revision/src/fs/realize.rs"},"region":{"startLine":1342}}}],"partialFingerprints":{"codehealthFindingId/v1":"84b8a36c788a4ab08efb22df3d96314fa9e522f64b674ddf89762a816bcf1654"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_server::grpc::revision::v1::revision_list::walk_revisions (cyclomatic 19): lore_server::grpc::revision::v1::revision_list::walk_revisions 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":"lore-server/src/grpc/revision/v1/revision_list.rs"},"region":{"startLine":485}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f5268af27fdcf0650ef62d14e7b1213019e7d1fe6a8675393489ed1ded11f8d"}},{"ruleId":"D1","level":"warning","message":{"text":"LocalMutableStore::list (cyclomatic 19): LocalMutableStore::list has cyclomatic complexity 19 (threshold 15). Of this number, 16 points are the body\u0027s own statements and 3 belong to one function item 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":"lore-storage/src/local/mutable_store.rs"},"region":{"startLine":1477}}}],"partialFingerprints":{"codehealthFindingId/v1":"5278dcd476b9b2f8425e4c41f2ea5b3925eb57b0b54bff06e9145fd615b1e29a"}},{"ruleId":"D1","level":"warning","message":{"text":"RevisionMetadata::from_metadata (cyclomatic 18): RevisionMetadata::from_metadata has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/revision.rs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"27d5e057ff62f7f86d94f2b11c8487103ddc21d5f1d0cafc8f682204ae8f275e"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::repository::clone::process_block_item (cyclomatic 18): lore_revision::repository::clone::process_block_item 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":"lore-revision/src/repository/clone.rs"},"region":{"startLine":539}}}],"partialFingerprints":{"codehealthFindingId/v1":"52d49f92ec161e692deb2adb32f9ceb138554901a9d2a51dbe7bc0f11a7ee1b7"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::state::verify_node_name_case_impl (cyclomatic 18): lore_revision::state::verify_node_name_case_impl 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":"lore-revision/src/state.rs"},"region":{"startLine":7159}}}],"partialFingerprints":{"codehealthFindingId/v1":"21c0209ca24f29f0da2afe9171c981d6f2aad22b5ef56b996e7a71871979d2b8"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::branch::create (cyclomatic 18): lore_revision::branch::create 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":"lore-revision/src/branch.rs"},"region":{"startLine":1503}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e9385b8c8ec3a8101a5f79df3dca855c1ea5a07f0c02cb492d0d4765c9dbbe4"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::repository::store::immutable_query_address (cyclomatic 18): lore_revision::repository::store::immutable_query_address has cyclomatic complexity 18 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/repository/store.rs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f023d2533e7a50b4df8cecfea6e939394b9aac34013ee6addbf5a7f752882ba"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::link::add::add (cyclomatic 18): lore_revision::link::add::add has cyclomatic complexity 18 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/link/add.rs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bf0a748e5b7bc76a27d4f606cac7455e88dccea38f29f826b2806d2ac131db3"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::file::stage::stage (cyclomatic 18): lore_revision::file::stage::stage 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":"lore-revision/src/file/stage.rs"},"region":{"startLine":553}}}],"partialFingerprints":{"codehealthFindingId/v1":"85ca7016d3eed7be3313f3467b3d2210f69c01ad525ed9ffc78eec494e36825f"}},{"ruleId":"D1","level":"warning","message":{"text":"LocalImmutableStore::put (cyclomatic 18): LocalImmutableStore::put has cyclomatic complexity 18 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":3699}}}],"partialFingerprints":{"codehealthFindingId/v1":"57b60bf6a3ab8990e0c509b7421fa5283de864f5b4f41e43a0200708be4bbf0e"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_storage::read::load_fragment (cyclomatic 18): lore_storage::read::load_fragment 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":"lore-storage/src/read.rs"},"region":{"startLine":217}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a930674a4ea47aeaf4e51e2035d604642ae770126b279c33ed6d92f090037dd"}},{"ruleId":"D1","level":"warning","message":{"text":"lore::revision_tree::delete::plan_entries (cyclomatic 17): lore::revision_tree::delete::plan_entries 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":"lore/src/revision_tree/delete.rs"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"93d397dc70a2784cbd36dc8a020bf16f714a65346291e9fea9ae7e46b3878466"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_client::cli::commands::revision::resolve_link_messages (cyclomatic 17): lore_client::cli::commands::revision::resolve_link_messages 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. This shape REPEATS in the file: one other method here (lore_client::cli::commands::revision::resolve_layer_messages) 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":"lore-client/src/cli/commands/revision.rs"},"region":{"startLine":907}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed51fe9398f628853d2488a3c87c74ae6c66d9795c69786840989ac5b04794c8"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_client::cli::commands::revision::resolve_layer_messages (cyclomatic 17): lore_client::cli::commands::revision::resolve_layer_messages 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. This shape REPEATS in the file: one other method here (lore_client::cli::commands::revision::resolve_link_messages) 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":"lore-client/src/cli/commands/revision.rs"},"region":{"startLine":1039}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf76b4ab235607841790d7061096b1aebee0483f59c8aa5c1714e794df8c83f0"}},{"ruleId":"D1","level":"warning","message":{"text":"CompositeStore::query (cyclomatic 17): CompositeStore::query 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":"lore-revision/src/store/composite.rs"},"region":{"startLine":931}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d08ca67f71e904628acb18876bba0dff99b1b8709c9f83223890b178e1ce4b8"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::file::reset::reset_walk_path (cyclomatic 17): lore_revision::file::reset::reset_walk_path 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":"lore-revision/src/file/reset.rs"},"region":{"startLine":1199}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a18b0f854c545176627b88440f7c2f164e7ba80a3d58270d9f9bd2e9eb0d5a8"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::file::dirty::dirty_path (cyclomatic 17): lore_revision::file::dirty::dirty_path 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":"lore-revision/src/file/dirty.rs"},"region":{"startLine":602}}}],"partialFingerprints":{"codehealthFindingId/v1":"367cf5b9905df9bcf376b811e9d52776ed55997c05a4b34b5daa71ee91bf3e97"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::file::dirty::dirty_move (cyclomatic 17): lore_revision::file::dirty::dirty_move 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":"lore-revision/src/file/dirty.rs"},"region":{"startLine":1141}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c8a3cad94b045c7b8980800d3080934d10b61bf65fe19e073196d025056aadb"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::branch::diff::diff (cyclomatic 17): lore_revision::branch::diff::diff 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":"lore-revision/src/branch/diff.rs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"19064e68f9a0613f9276363fb4ffa0b9ff674656cba3ae8dfa6c2b52c0de6f75"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::branch::merge::merge_unresolve (cyclomatic 17): lore_revision::branch::merge::merge_unresolve 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":"lore-revision/src/branch/merge.rs"},"region":{"startLine":3261}}}],"partialFingerprints":{"codehealthFindingId/v1":"db1c490a035261f0e3aed37f61609334f8f079925116c9c866be3b5619db4abc"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::repository::create::create_with_metadata (cyclomatic 17): lore_revision::repository::create::create_with_metadata 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":"lore-revision/src/repository/create.rs"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"f03579c2132c28d4eea249e6a1d20d49e6c54320b54acd63574b07e217e3cc45"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::file::history::find_start_revision (cyclomatic 17): lore_revision::file::history::find_start_revision 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":"lore-revision/src/file/history.rs"},"region":{"startLine":365}}}],"partialFingerprints":{"codehealthFindingId/v1":"5190e7cc90ac1ff1ed5de5e625fea62e1f21a8808c638328b39ebf5a0844ac9a"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_storage::read::read_content_into_buffer (cyclomatic 17): lore_storage::read::read_content_into_buffer 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":"lore-storage/src/read.rs"},"region":{"startLine":712}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b35f242a910e841ec464e2e575a1a031a5323e6bb918365c0e43846336ec9d5"}},{"ruleId":"D1","level":"warning","message":{"text":"MetadataMigrator::process_fragment (cyclomatic 16): MetadataMigrator::process_fragment 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":"lore-aws/src/store/immutable_store/metadata_migrator.rs"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa50604ba476c219beed73563566b10f60930593a292f7cbe03f0700748d85cc"}},{"ruleId":"D1","level":"warning","message":{"text":"MetadataMigrator::fragment_stream_consumer (cyclomatic 16): MetadataMigrator::fragment_stream_consumer 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":"lore-aws/src/store/immutable_store/metadata_migrator.rs"},"region":{"startLine":335}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d07a2a6e2464e970fbd50cde841ac1c63a68ae8a724008bd4adc69cce4e3eed"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::repository::verify::verify_node_single (cyclomatic 16): lore_revision::repository::verify::verify_node_single 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":"lore-revision/src/repository/verify.rs"},"region":{"startLine":424}}}],"partialFingerprints":{"codehealthFindingId/v1":"512ab33b6bc8a54f3e908aa6fca63b36c649a848e19876fa36a69d88fe7493ff"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::file::reset::reset_walk_directory (cyclomatic 16): lore_revision::file::reset::reset_walk_directory 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":"lore-revision/src/file/reset.rs"},"region":{"startLine":1644}}}],"partialFingerprints":{"codehealthFindingId/v1":"356b51d34746f8b8384a7faacf55fdd7a78f8e07e2a2059b67d4ddbd93a005e1"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::repository::clone::clone_into (cyclomatic 16): lore_revision::repository::clone::clone_into 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":"lore-revision/src/repository/clone.rs"},"region":{"startLine":1019}}}],"partialFingerprints":{"codehealthFindingId/v1":"15c2a5b88da39c494dd18b19d011a07d0d885affa337c7eb376f90f52321cf2c"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::state::add_change_hierarchy (cyclomatic 16): lore_revision::state::add_change_hierarchy 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":"lore-revision/src/state.rs"},"region":{"startLine":10319}}}],"partialFingerprints":{"codehealthFindingId/v1":"f47d33675a5d862f27d530a3cdddc0edecb7e1a4e8b440465ce37275d8a31a42"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::stage::stage_single_node (cyclomatic 16): lore_revision::stage::stage_single_node 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":"lore-revision/src/stage.rs"},"region":{"startLine":687}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a8757b08dfab1590c0e16ba880e06544705edcc702480e2e11d793ff652e316"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::branch::find_ancestor_walker (cyclomatic 16): lore_revision::branch::find_ancestor_walker 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":"lore-revision/src/branch.rs"},"region":{"startLine":3705}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa665c7c0c148e5a0c88071e5461a03c21a476ed2de36ae16511ba6d17f0920d"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::commit::prepare_commit_metadata (cyclomatic 16): lore_revision::commit::prepare_commit_metadata 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":"lore-revision/src/commit.rs"},"region":{"startLine":3633}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6fe57c6ee903262d98a7e94cce4b91c71f5cfe54be8af80b2c36bc654773ee5"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::branch::merge::merge_start_all (cyclomatic 16): lore_revision::branch::merge::merge_start_all 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":"lore-revision/src/branch/merge.rs"},"region":{"startLine":1260}}}],"partialFingerprints":{"codehealthFindingId/v1":"628f8bb52c27d520b9a760d85a8cc744c7b972b81f429e6116df27a84c9d3abd"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_revision::branch::push::push_query (cyclomatic 16): lore_revision::branch::push::push_query has cyclomatic complexity 16 (threshold 15). Of this number, 14 points are the body\u0027s own statements and 2 belong to one function item inside it that branches. 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":"lore-revision/src/branch/push.rs"},"region":{"startLine":1343}}}],"partialFingerprints":{"codehealthFindingId/v1":"7982f409de6a3544c06ce57a53ce7b64fe43d287191171cf900bc2d99371663b"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_server::grpc::thinclient::v1::revision_diff::run_three_way (cyclomatic 16): lore_server::grpc::thinclient::v1::revision_diff::run_three_way 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":"lore-server/src/grpc/thinclient/v1/revision_diff.rs"},"region":{"startLine":447}}}],"partialFingerprints":{"codehealthFindingId/v1":"004748ffec37e892b74f27ed71526f3d3834b3c2dd024a1f66dfb67f60327e4e"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_server::grpc::handlers::branch_push::push (cyclomatic 16): lore_server::grpc::handlers::branch_push::push 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":"lore-server/src/grpc/handlers/branch_push.rs"},"region":{"startLine":286}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc9a2c3d559a79778f614e250dbfb5ee22e4a5e1f17366ed510516328f8dc261"}},{"ruleId":"D1","level":"warning","message":{"text":"LocalImmutableStore::compact_packfiles (cyclomatic 16): LocalImmutableStore::compact_packfiles 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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":2657}}}],"partialFingerprints":{"codehealthFindingId/v1":"ced59d6255e42e0942b24f16b9e191020945a5be12febc516824f0fd44e866aa"}},{"ruleId":"D1","level":"warning","message":{"text":"LocalMutableStore::new (cyclomatic 16): LocalMutableStore::new 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":"lore-storage/src/local/mutable_store.rs"},"region":{"startLine":715}}}],"partialFingerprints":{"codehealthFindingId/v1":"72697a4a335dddb3a04b84fcb965df691963da7fb116e9a753a8267584c02ef5"}},{"ruleId":"D1","level":"warning","message":{"text":"PackStore::resume (cyclomatic 16): PackStore::resume 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":"lore-storage/src/packstore.rs"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"af017b99bc62a0d19e77390cfc6e7d7ee1ebb354bd841e1f4965334279407b29"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_storage::defragment::walk_intermediate_level (cyclomatic 16): lore_storage::defragment::walk_intermediate_level 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":"lore-storage/src/defragment.rs"},"region":{"startLine":487}}}],"partialFingerprints":{"codehealthFindingId/v1":"32df5938a049976caacb1e1da5f8693c7d2d8c27bfd124b666a71095d1bdaca3"}},{"ruleId":"D1","level":"warning","message":{"text":"lore_storage::defragment::read_defragment (cyclomatic 16): lore_storage::defragment::read_defragment 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":"lore-storage/src/defragment.rs"},"region":{"startLine":1210}}}],"partialFingerprints":{"codehealthFindingId/v1":"98435adece70e8b2a4aa539e4d43f314dfcc70aa4930b44c6a41753f6b9172ed"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_transport::quic::response_reader::read_response (cognitive 146): lore_transport::quic::response_reader::read_response has cognitive complexity 146 (threshold 15). Drivers by points: if/else 36 (134 pts), loops 3 (6 pts), boolean chains 3, match/switch 1 (3 pts) (nesting depth added 103). 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":"lore-transport/src/quic/response_reader.rs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"3edc936f338273f5b1478be4bbfbda8dccaeaba8f310908d2098bbcc07b7dd1f"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::fs::realize::realize_file_merge (cognitive 120): lore_revision::fs::realize::realize_file_merge has cognitive complexity 120 (threshold 15). Drivers by points: if/else 46 (103 pts), match/switch 4 (11 pts), boolean chains 6 (nesting depth added 64). 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":"lore-revision/src/fs/realize.rs"},"region":{"startLine":2175}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b5d227138ec33265e2cc3bc03c8df09e65516989458426abc2e6b07fdc6af11"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::fs::realize::verify_filesystem (cognitive 98): lore_revision::fs::realize::verify_filesystem has cognitive complexity 98 (threshold 15). Drivers by points: if/else 35 (85 pts), boolean chains 6, match/switch 2 (4 pts), loops 1 (3 pts) (nesting depth added 54). 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":"lore-revision/src/fs/realize.rs"},"region":{"startLine":571}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d532890a3f67c85993a510cab4e7cde2b5696b011d2254d5edee99de526458c"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::stage::stage_node_from_metadata (cognitive 97): lore_revision::stage::stage_node_from_metadata has cognitive complexity 97 (threshold 15). Drivers by points: if/else 46 (79 pts), boolean chains 12, match/switch 4 (6 pts) (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":"lore-revision/src/stage.rs"},"region":{"startLine":1949}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1cf481909ba346ec9c1eb202548e1353a11573149057b39eb4ed851a2c67e4f"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::projfs::serve::get_directory_enumeration_async (cognitive 95): lore_revision::projfs::serve::get_directory_enumeration_async has cognitive complexity 95 (threshold 15). Drivers by points: if/else 30 (77 pts), loops 5 (13 pts), boolean chains 5 (nesting depth added 55). 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":"lore-revision/src/projfs/serve.rs"},"region":{"startLine":497}}}],"partialFingerprints":{"codehealthFindingId/v1":"37b7403beaf5aaa2ef0fc4e011f6135fde403e9ac38f411ccae08fa4bbab0e5b"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::repository::status::status (cognitive 92): lore_revision::repository::status::status has cognitive complexity 92 (threshold 15). Drivers by points: if/else 35 (66 pts), loops 6 (12 pts), boolean chains 9, match/switch 3 (5 pts) (nesting depth added 39). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/repository/status.rs"},"region":{"startLine":1365}}}],"partialFingerprints":{"codehealthFindingId/v1":"57b3e2b0fcdc7540236762547528e5d9dbff8921487d22af1716915766b83d4f"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::branch::push::collect_fragments_and_push (cognitive 86): lore_revision::branch::push::collect_fragments_and_push has cognitive complexity 86 (threshold 15). Drivers by points: if/else 32 (63 pts), boolean chains 10, match/switch 3 (7 pts), loops 4 (6 pts) (nesting depth added 37). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/push.rs"},"region":{"startLine":704}}}],"partialFingerprints":{"codehealthFindingId/v1":"39f37dcbf823b191067d8f289dfe8f62c56e08fff7ce4f450ef665d90f4602eb"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::revision::sync::sync (cognitive 83): lore_revision::revision::sync::sync has cognitive complexity 83 (threshold 15). Drivers by points: if/else 41 (62 pts), boolean chains 14, match/switch 5 (7 pts) (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/revision/sync.rs"},"region":{"startLine":418}}}],"partialFingerprints":{"codehealthFindingId/v1":"92ad91d02cd561c23add0955bc01f45fc33eb2a727285274aec4a8b2a5a4710d"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::history::find_branch_point (cognitive 83): lore_revision::history::find_branch_point has cognitive complexity 83 (threshold 15). Drivers by points: if/else 23 (67 pts), loops 5 (11 pts), boolean chains 5 (nesting depth added 50). 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":"lore-revision/src/history.rs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fb6bdedb023e4d8908c52b26c8d17e6c59559882c58469d397539863717587a"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_storage::local::immutable_store::flush_locked_group (cognitive 83): lore_storage::local::immutable_store::flush_locked_group has cognitive complexity 83 (threshold 15). Drivers by points: if/else 24 (58 pts), boolean chains 11, loops 3 (9 pts), match/switch 2 (5 pts) (nesting depth added 43). 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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":4706}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8664b8329e9422430e5f4e0d058dd35a84c998c89762a54888a3bf0b34c9856"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::stage::stage_from_parent_revision_in_operation (cognitive 81): lore_revision::stage::stage_from_parent_revision_in_operation has cognitive complexity 81 (threshold 15). Drivers by points: if/else 33 (60 pts), loops 6 (11 pts), match/switch 3 (9 pts), boolean chains 1 (nesting depth added 38). Of this number, 79 points are the body\u0027s own statements and 2 belong to one function item 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":"lore-revision/src/stage.rs"},"region":{"startLine":2575}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3b8078d6c3865b5d7a2019e6cb514a53c716dbd8eba6b7be5609bed073c5991"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::state::diff::add_change_for_paired_nodes (cognitive 79): lore_revision::state::diff::add_change_for_paired_nodes has cognitive complexity 79 (threshold 15). Drivers by points: if/else 27 (64 pts), boolean chains 8, match/switch 2 (7 pts) (nesting depth added 42). 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":"lore-revision/src/state/diff.rs"},"region":{"startLine":916}}}],"partialFingerprints":{"codehealthFindingId/v1":"47cb86190e59fd72989fba33a062efd8eafeb19dcc06a01dfc3ac9fa24b204bb"}},{"ruleId":"D2","level":"warning","message":{"text":"StreamHandler::handle_stream (cognitive 78): StreamHandler::handle_stream has cognitive complexity 78 (threshold 15). Drivers by points: if/else 21 (69 pts), loops 3 (6 pts), match/switch 1 (3 pts) (nesting depth added 53). 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":"lore-server/src/quic/stream_handler.rs"},"region":{"startLine":502}}}],"partialFingerprints":{"codehealthFindingId/v1":"55b298a7acb0c7d18d2f5c97f7a56dd46073cc3256a2eb1527d21deae69538bf"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalImmutableStore::store (cognitive 78): LocalImmutableStore::store has cognitive complexity 78 (threshold 15). Drivers by points: if/else 32 (61 pts), boolean chains 12, loops 3 (5 pts) (nesting depth added 31). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":1676}}}],"partialFingerprints":{"codehealthFindingId/v1":"998414e412c002bdde6272c074dd3a227ab3c93292bf028aca839808dff63a1b"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalMutableStore::list (cognitive 76): LocalMutableStore::list has cognitive complexity 76 (threshold 15). Drivers by points: if/else 13 (53 pts), loops 5 (21 pts), boolean chains 2 (nesting depth added 56). Of this number, 67 points are the body\u0027s own statements and 9 belong to one function item inside it that branches. 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":"lore-storage/src/local/mutable_store.rs"},"region":{"startLine":1477}}}],"partialFingerprints":{"codehealthFindingId/v1":"641dc9af353391af65f8321c9846f979952c7e82e04c4513d4f43a5420a45fa4"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_client::cli::commands::repository::handle_repository_status (cognitive 73): lore_client::cli::commands::repository::handle_repository_status has cognitive complexity 73 (threshold 15). Drivers by points: if/else 37 (60 pts), loops 4 (8 pts), boolean chains 4, match/switch 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":"lore-client/src/cli/commands/repository.rs"},"region":{"startLine":513}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce3e69ba0ddac346f66bf563cfc0e2598d49128f5c132302fb576eba42b0bfc4"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalImmutableStore::verify (cognitive 73): LocalImmutableStore::verify has cognitive complexity 73 (threshold 15). Drivers by points: if/else 15 (51 pts), loops 7 (19 pts), boolean chains 3 (nesting depth added 48). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":3956}}}],"partialFingerprints":{"codehealthFindingId/v1":"a150e270eb7e67cd1c6d0f2c020ba6cbbda546176e3f061524869b73850a70d6"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::repository::branch_switch_target (cognitive 72): lore_revision::repository::branch_switch_target has cognitive complexity 72 (threshold 15). Drivers by points: if/else 33 (64 pts), match/switch 2 (5 pts), boolean chains 3 (nesting depth added 34). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/repository.rs"},"region":{"startLine":2993}}}],"partialFingerprints":{"codehealthFindingId/v1":"d41e4abae53562dfc2773d0a4600c566a3fbca33c6e33498e9a050270dda3c83"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::revision::diff3_with_source_cap (cognitive 70): lore_revision::revision::diff3_with_source_cap has cognitive complexity 70 (threshold 15). Drivers by points: if/else 22 (37 pts), loops 12 (15 pts), boolean chains 10, match/switch 4 (8 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":"lore-revision/src/revision.rs"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"b94e0c3fe21497add278bdd470ae6879acb3ba0b7896b0a06bc5c22cc3f53877"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalImmutableStore::verify_fragment (cognitive 67): LocalImmutableStore::verify_fragment has cognitive complexity 67 (threshold 15). Drivers by points: if/else 21 (45 pts), boolean chains 11, loops 4 (6 pts), match/switch 3 (5 pts) (nesting depth added 28). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":4286}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fd5711acb44e1e168530690503d56990313fe358de0cf3f3db8b4f09dfce538"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::stage::stage_filesystem_path (cognitive 66): lore_revision::stage::stage_filesystem_path has cognitive complexity 66 (threshold 15). Drivers by points: if/else 31 (57 pts), boolean chains 5, loops 1 (2 pts), match/switch 1 (2 pts) (nesting depth added 28). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/stage.rs"},"region":{"startLine":369}}}],"partialFingerprints":{"codehealthFindingId/v1":"30d2f965d8ffc21bf1530b8f03358a91c375374bc719f073e853f16001dead35"}},{"ruleId":"D2","level":"warning","message":{"text":"State::serialize (cognitive 64): State::serialize has cognitive complexity 64 (threshold 15). Drivers by points: if/else 21 (45 pts), loops 6 (12 pts), match/switch 2 (7 pts) (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":"lore-revision/src/state.rs"},"region":{"startLine":744}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf2dabdf9de252e35c2d65ba0ff01b397ba98444a386850cdee6340f64a1947e"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::file::unstage::unstage_node (cognitive 64): lore_revision::file::unstage::unstage_node has cognitive complexity 64 (threshold 15). Drivers by points: if/else 31 (57 pts), boolean chains 5, loops 1 (2 pts) (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":"lore-revision/src/file/unstage.rs"},"region":{"startLine":916}}}],"partialFingerprints":{"codehealthFindingId/v1":"892a9ef3b3c2c1a4ed909d4da2a1e5348bdacef2a38194eb1c628f6438807042"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::stage::stage_directory (cognitive 63): lore_revision::stage::stage_directory has cognitive complexity 63 (threshold 15). Drivers by points: if/else 16 (39 pts), match/switch 5 (14 pts), loops 6 (9 pts), boolean chains 1 (nesting depth added 35). 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":"lore-revision/src/stage.rs"},"region":{"startLine":1378}}}],"partialFingerprints":{"codehealthFindingId/v1":"de98b1ab668c9facf662934ceb2dd3a4cc9605612cd316f4c45ee2315ca0b372"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalImmutableStore::evict_group_sized (cognitive 62): LocalImmutableStore::evict_group_sized has cognitive complexity 62 (threshold 15). Drivers by points: if/else 21 (47 pts), loops 8 (13 pts), boolean chains 2 (nesting depth added 31). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":2230}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a337ee22ec08af47a304a3fa79a8e845bd492dc3a45747bbb992797da190c52"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::repository::layer_branch_switch (cognitive 60): lore_revision::repository::layer_branch_switch has cognitive complexity 60 (threshold 15). Drivers by points: if/else 15 (38 pts), match/switch 3 (13 pts), loops 2 (7 pts), boolean chains 2 (nesting depth added 38). 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":"lore-revision/src/repository.rs"},"region":{"startLine":3257}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1f81af1928ece396f67378068d586ab2a7e85c23d0ef5330cd2b399690de623"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::immutable::cache_through (cognitive 60): lore_revision::immutable::cache_through has cognitive complexity 60 (threshold 15). Drivers by points: loops 11 (34 pts), if/else 9 (21 pts), boolean chains 5 (nesting depth added 35). 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":"lore-revision/src/immutable.rs"},"region":{"startLine":574}}}],"partialFingerprints":{"codehealthFindingId/v1":"0dc6ac7736f8bb7ab2f7257676b8106011f3a2d883095b2cfb71fdca5f08748e"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::fs::realize::realize_changes_delete (cognitive 59): lore_revision::fs::realize::realize_changes_delete has cognitive complexity 59 (threshold 15). Drivers by points: if/else 19 (52 pts), loops 2 (4 pts), match/switch 1 (3 pts) (nesting depth added 37). 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":"lore-revision/src/fs/realize.rs"},"region":{"startLine":1342}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee7b7ce02d27837de80484734766c7c7bd8db086c36254d83c4963cad7ee29d8"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_transport::connection::connect_impl (cognitive 55): lore_transport::connection::connect_impl has cognitive complexity 55 (threshold 15). Drivers by points: if/else 24 (46 pts), match/switch 4 (7 pts), boolean chains 1, loops 1 (nesting depth added 25). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-transport/src/connection.rs"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"d131e80603e3f4e342ea798c29f82911a798f80f7585daa0b4992dcdf131d3e3"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::revision::info::info (cognitive 53): lore_revision::revision::info::info has cognitive complexity 53 (threshold 15). Drivers by points: if/else 15 (42 pts), boolean chains 4, match/switch 1 (4 pts), loops 1 (3 pts) (nesting depth added 32). 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":"lore-revision/src/revision/info.rs"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff65691b859d56b8e8da244e0f635b268a5bb3983e99a2280b28d415eefa6c2f"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::stage::stage_link_paths_from_parent_revision (cognitive 53): lore_revision::stage::stage_link_paths_from_parent_revision has cognitive complexity 53 (threshold 15). Drivers by points: if/else 20 (39 pts), loops 5 (9 pts), match/switch 2 (4 pts), boolean chains 1 (nesting depth added 25). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/stage.rs"},"region":{"startLine":3108}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae6d44f1e7fbb03cc97f2c2c75bd8348ca89d9b7e76954df359420b6bc4b07b2"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::file::stage::stage_move (cognitive 52): lore_revision::file::stage::stage_move has cognitive complexity 52 (threshold 15). Drivers by points: if/else 30 (46 pts), boolean chains 3, loops 1 (3 pts) (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/stage.rs"},"region":{"startLine":1168}}}],"partialFingerprints":{"codehealthFindingId/v1":"06b1115e5fac5548907f685db45893287b4b3f65c864e5a1cea7ccf6db6b1c83"}},{"ruleId":"D2","level":"warning","message":{"text":"lore::revision_tree::move_node::plan_entries (cognitive 51): lore::revision_tree::move_node::plan_entries has cognitive complexity 51 (threshold 15). Drivers by points: if/else 17 (32 pts), match/switch 4 (12 pts), loops 3 (4 pts), boolean chains 3 (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":"lore/src/revision_tree/move_node.rs"},"region":{"startLine":345}}}],"partialFingerprints":{"codehealthFindingId/v1":"b66cd792135263ef040582a2a2a4582efd2b673803467e676d179b6d7e1ebcee"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::repository::load_and_connect_with_token (cognitive 51): lore_revision::repository::load_and_connect_with_token has cognitive complexity 51 (threshold 15). Drivers by points: if/else 30 (38 pts), boolean chains 7, match/switch 5 (6 pts) (nesting depth added 9). 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":"lore-revision/src/repository.rs"},"region":{"startLine":2105}}}],"partialFingerprints":{"codehealthFindingId/v1":"e44944c70b1a33f69946da7500f95527377da5310fff43c78187781d358a945c"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::revision::find_last_merged_revision (cognitive 50): lore_revision::revision::find_last_merged_revision has cognitive complexity 50 (threshold 15). Drivers by points: if/else 19 (46 pts), loops 2 (3 pts), boolean chains 1 (nesting depth added 28). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/revision.rs"},"region":{"startLine":1065}}}],"partialFingerprints":{"codehealthFindingId/v1":"479d80df2db5d1afe9dbb56c04d40881d23eae7c4da53098cebf8dd392d6c2c4"}},{"ruleId":"D2","level":"warning","message":{"text":"lore::revision_tree::add::plan_entries (cognitive 47): lore::revision_tree::add::plan_entries has cognitive complexity 47 (threshold 15). Drivers by points: if/else 14 (28 pts), match/switch 5 (17 pts), boolean chains 1, loops 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":"lore/src/revision_tree/add.rs"},"region":{"startLine":472}}}],"partialFingerprints":{"codehealthFindingId/v1":"c975a45d811a4cb7221912e3ba62d5e024769c0b508ce6558cda7005b71db1d9"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_storage::write::leader_body (cognitive 47): lore_storage::write::leader_body has cognitive complexity 47 (threshold 15). Drivers by points: if/else 26 (38 pts), boolean chains 7, 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":"lore-storage/src/write.rs"},"region":{"startLine":1044}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5e19d046b081e51a431dc518a41d08bfa6ed049700a3cf0b4964f65bdc29a41"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::commit::weave_history (cognitive 46): lore_revision::commit::weave_history has cognitive complexity 46 (threshold 15). Drivers by points: if/else 14 (39 pts), loops 3 (6 pts), boolean chains 1 (nesting depth added 28). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/commit.rs"},"region":{"startLine":3367}}}],"partialFingerprints":{"codehealthFindingId/v1":"032c6f42367bef62adf9006ae68fd3cee2dbfd06bcad9a97930483b91f8b093d"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::file::diff::emit_diff3_changes (cognitive 45): lore_revision::file::diff::emit_diff3_changes has cognitive complexity 45 (threshold 15). Drivers by points: if/else 19 (35 pts), match/switch 2 (5 pts), boolean chains 4, loops 1 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/diff.rs"},"region":{"startLine":469}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fedff02bdabc7d6286ce12111f83d6624e56a946691eb56d5473ea4d7b7af60"}},{"ruleId":"D2","level":"warning","message":{"text":"State::block_deserialize (cognitive 44): State::block_deserialize has cognitive complexity 44 (threshold 15). Drivers by points: if/else 22 (42 pts), boolean chains 1, match/switch 1 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":1367}}}],"partialFingerprints":{"codehealthFindingId/v1":"9867786a45d2a12de7248027b0fb800d746a47c00e1e8464a29449e1b765fb1d"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::state::os_diff::diff_filesystem_directory_walk (cognitive 43): lore_revision::state::os_diff::diff_filesystem_directory_walk has cognitive complexity 43 (threshold 15). Drivers by points: if/else 14 (27 pts), boolean chains 7, match/switch 3 (7 pts), loops 2 (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":"lore-revision/src/state/os_diff.rs"},"region":{"startLine":1169}}}],"partialFingerprints":{"codehealthFindingId/v1":"08697e299ea6ecba3da4a6646a45726e77c1addf85374e1543aa59e19032722a"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::util::fs::unlink (cognitive 42): lore_revision::util::fs::unlink has cognitive complexity 42 (threshold 15). Drivers by points: if/else 16 (42 pts) (nesting depth added 26). 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":"lore-revision/src/util/fs.rs"},"region":{"startLine":514}}}],"partialFingerprints":{"codehealthFindingId/v1":"e86c2c4659f0b2f74ade19441b1917bbeb4c6de133b64e0a6c732c2e55c57e9a"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::file::reset::reset_walk_path (cognitive 41): lore_revision::file::reset::reset_walk_path has cognitive complexity 41 (threshold 15). Drivers by points: if/else 14 (34 pts), loops 1 (4 pts), match/switch 2 (3 pts) (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/reset.rs"},"region":{"startLine":1199}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a6959ee2e7f170259316398fc84e14a794edc0e71d6aa1c6bebbdd20f896450"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::commit::commit_with_metadata_in_operation (cognitive 41): lore_revision::commit::commit_with_metadata_in_operation has cognitive complexity 41 (threshold 15). Drivers by points: if/else 18 (27 pts), boolean chains 9, match/switch 2 (3 pts), loops 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/commit.rs"},"region":{"startLine":560}}}],"partialFingerprints":{"codehealthFindingId/v1":"83f34038208f2a28c0c5bd858babec9afe829cd50ced7a1e214dc94351b38dc0"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalImmutableStore::group_verify_store (cognitive 41): LocalImmutableStore::group_verify_store has cognitive complexity 41 (threshold 15). Drivers by points: if/else 10 (29 pts), match/switch 2 (8 pts), loops 2 (3 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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":2979}}}],"partialFingerprints":{"codehealthFindingId/v1":"98ef3e7763134500e68f0f1446be1702cb3fdc90d0f51c82521beb1826fb50d3"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_client::cli::commands::revision::handle_revision_info (cognitive 40): lore_client::cli::commands::revision::handle_revision_info has cognitive complexity 40 (threshold 15). Drivers by points: if/else 12 (23 pts), loops 4 (12 pts), match/switch 2 (5 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":"lore-client/src/cli/commands/revision.rs"},"region":{"startLine":674}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4bc1a0712c8804376f9673df367c41ccf56804df1f13f5919539612512798b7"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::stage::resolve_case_variant_collisions (cognitive 40): lore_revision::stage::resolve_case_variant_collisions has cognitive complexity 40 (threshold 15). Drivers by points: if/else 11 (24 pts), loops 6 (13 pts), match/switch 1 (2 pts), boolean chains 1 (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":"lore-revision/src/stage.rs"},"region":{"startLine":1140}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f94376551fb8674931c573f7c4d11139d1d1e08a15ceefaa02fcd55bfe7a9de"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::commit::commit_directory (cognitive 40): lore_revision::commit::commit_directory has cognitive complexity 40 (threshold 15). Drivers by points: if/else 17 (32 pts), match/switch 2 (5 pts), loops 2, boolean chains 1 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/commit.rs"},"region":{"startLine":1921}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c7094b459591316f77e2b717c1080e822cdc38488e53e8a3fcc86f4a67a529a"}},{"ruleId":"D2","level":"warning","message":{"text":"content_tabs._render_group (cognitive 40): content_tabs._render_group has cognitive complexity 40 (threshold 15). Drivers by points: if/else 11 (26 pts), loops 5 (7 pts), boolean chains 5, ternaries 1 (2 pts) (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"docs/assets/hooks/content_tabs.py"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5510f2f175028cfafe8360885198f8ef64f34010c66957a9d34b43941df535a"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::repository::clone::process_block_item (cognitive 38): lore_revision::repository::clone::process_block_item has cognitive complexity 38 (threshold 15). Drivers by points: if/else 13 (34 pts), match/switch 1 (2 pts), boolean chains 1, loops 1 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/repository/clone.rs"},"region":{"startLine":539}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b4bcf5f92090d0b8dbdb7b86a1b2f38f6038b0d9dfffc8436aa52cc55abdaab"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::branch::find_ancestor_walker (cognitive 38): lore_revision::branch::find_ancestor_walker has cognitive complexity 38 (threshold 15). Drivers by points: if/else 12 (31 pts), match/switch 2 (4 pts), loops 2, boolean chains 1 (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":"lore-revision/src/branch.rs"},"region":{"startLine":3705}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a4c756a442620cc81199f50d4705ef13045908d11199cb65181a977011ea567"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_server::server::async_main (cognitive 38): lore_server::server::async_main has cognitive complexity 38 (threshold 15). Drivers by points: if/else 20 (26 pts), boolean chains 7, loops 2 (3 pts), match/switch 2 (nesting depth added 7). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/server.rs"},"region":{"startLine":1870}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bb6dabeeb7c6568f8c1aebcc82b36b15c26d746a0cfeb534162dab80cb368c4"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalImmutableStore::evict_oldest (cognitive 38): LocalImmutableStore::evict_oldest has cognitive complexity 38 (threshold 15). Drivers by points: if/else 17 (30 pts), loops 3 (5 pts), boolean chains 3 (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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":2468}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a5e7a91bcd2e8ca04a4e8d32879905159a1e5e0bcfef8b15436f70cbfae1219"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_client::cli::commands::revision::resolve_link_messages (cognitive 37): lore_client::cli::commands::revision::resolve_link_messages has cognitive complexity 37 (threshold 15). Drivers by points: if/else 10 (22 pts), loops 4 (9 pts), match/switch 1 (4 pts), boolean chains 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. This shape REPEATS in the file: one other method here (lore_client::cli::commands::revision::resolve_layer_messages) 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":"lore-client/src/cli/commands/revision.rs"},"region":{"startLine":907}}}],"partialFingerprints":{"codehealthFindingId/v1":"47ed27a7b11e9602a59840b3b48d3c41326b7aaf4ea6ada64385d3798d88dd05"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_client::cli::commands::revision::resolve_layer_messages (cognitive 37): lore_client::cli::commands::revision::resolve_layer_messages has cognitive complexity 37 (threshold 15). Drivers by points: if/else 10 (22 pts), loops 4 (9 pts), match/switch 1 (4 pts), boolean chains 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. This shape REPEATS in the file: one other method here (lore_client::cli::commands::revision::resolve_link_messages) 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":"lore-client/src/cli/commands/revision.rs"},"region":{"startLine":1039}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4ee907598c30ad4a34b524bd94c61a70c8ed0eb80acf13cd553cca32f3807a6"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::lock::file::release::release (cognitive 37): lore_revision::lock::file::release::release has cognitive complexity 37 (threshold 15). Drivers by points: if/else 18 (27 pts), loops 6 (10 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":"lore-revision/src/lock/file/release.rs"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"31995ea46d91c09dcc75de5509a49a7a8aca964f9e211288ac66091dc5ec850b"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::state::verify_node_name_case_impl (cognitive 37): lore_revision::state::verify_node_name_case_impl has cognitive complexity 37 (threshold 15). Drivers by points: if/else 12 (27 pts), loops 3 (4 pts), boolean chains 3, match/switch 1 (3 pts) (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":7159}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6f6d9808b19bab93ab3ec85a3953e403265283bd0948de3fb9f42f5b799d2fb"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::file::diff::emit_unified_diffs (cognitive 37): lore_revision::file::diff::emit_unified_diffs has cognitive complexity 37 (threshold 15). Drivers by points: if/else 15 (30 pts), boolean chains 4, 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":"lore-revision/src/file/diff.rs"},"region":{"startLine":720}}}],"partialFingerprints":{"codehealthFindingId/v1":"916293830ec477f58d6b5e79574d8908016db3099d2c524777822bc1d6970ec8"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::fs::realize::realize_change_modify_add (cognitive 37): lore_revision::fs::realize::realize_change_modify_add has cognitive complexity 37 (threshold 15). Drivers by points: if/else 16 (29 pts), boolean chains 8 (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":"lore-revision/src/fs/realize.rs"},"region":{"startLine":1764}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ae557dbfa07249a823214257419f46f5e3c7a44cb3b6db80d3d8d66f44d3bd9"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_server::grpc::revision::v1::revision_list::walk_revisions (cognitive 37): lore_server::grpc::revision::v1::revision_list::walk_revisions has cognitive complexity 37 (threshold 15). Drivers by points: if/else 14 (29 pts), boolean chains 4, loops 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":"lore-server/src/grpc/revision/v1/revision_list.rs"},"region":{"startLine":485}}}],"partialFingerprints":{"codehealthFindingId/v1":"93a8e921687e3c18edf3479b0a35c8d8c2e63e49085cf0bb584e450b3086961e"}},{"ruleId":"D2","level":"warning","message":{"text":"PackStore::resume (cognitive 37): PackStore::resume has cognitive complexity 37 (threshold 15). Drivers by points: if/else 14 (33 pts), loops 2 (4 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":"lore-storage/src/packstore.rs"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffc9509e3220f13dceec70991824d6f633181d529ff6b104ae3c7bef16a62caa"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::branch::merge::merge_repository (cognitive 34): lore_revision::branch::merge::merge_repository has cognitive complexity 34 (threshold 15). Drivers by points: if/else 19 (27 pts), boolean chains 5, 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":"lore-revision/src/branch/merge.rs"},"region":{"startLine":445}}}],"partialFingerprints":{"codehealthFindingId/v1":"25b39d832ded98d8ea4c91d380a6189f2197f78ac47a11fb157a997896e0986d"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::revision::restore::restore (cognitive 34): lore_revision::revision::restore::restore has cognitive complexity 34 (threshold 15). Drivers by points: if/else 22 (27 pts), loops 2 (3 pts), match/switch 1 (3 pts), boolean chains 1 (nesting depth added 8). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, 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":"lore-revision/src/revision/restore.rs"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f70b15443df6ee706047b0d30bac9a51944db7178bdef56468b36417c20fc55"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::layer::find_revision_match (cognitive 34): lore_revision::layer::find_revision_match has cognitive complexity 34 (threshold 15). Drivers by points: if/else 12 (28 pts), loops 3 (6 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":"lore-revision/src/layer.rs"},"region":{"startLine":1081}}}],"partialFingerprints":{"codehealthFindingId/v1":"de6ad5db3f68e58df2907eeb3446ad8f1fd10c1b1d2ef9bf5c5ee82053751672"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::state::collect_new_fragments (cognitive 33): lore_revision::state::collect_new_fragments has cognitive complexity 33 (threshold 15). Drivers by points: if/else 12 (17 pts), match/switch 11 (12 pts), loops 2 (3 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":"lore-revision/src/state.rs"},"region":{"startLine":7484}}}],"partialFingerprints":{"codehealthFindingId/v1":"39501b19a599311809e6a6ce2b78c37bf0851c71a6121c9e89350884954b13b0"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::projfs::serve::serve (cognitive 33): lore_revision::projfs::serve::serve has cognitive complexity 33 (threshold 15). Drivers by points: if/else 21 (31 pts), boolean chains 1, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/projfs/serve.rs"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"71fca57ab4702c65f12dba2875b135ab6c9ce8ce360a34623a588d53c058e95d"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_storage::read::load_fragment (cognitive 33): lore_storage::read::load_fragment has cognitive complexity 33 (threshold 15). Drivers by points: if/else 12 (23 pts), match/switch 3 (7 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":"lore-storage/src/read.rs"},"region":{"startLine":217}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c1e447059d790b0a2327b09adc082a620470a57020b16d1cc27e68b52bb143b"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::file::reset::reset_walk_node (cognitive 32): lore_revision::file::reset::reset_walk_node has cognitive complexity 32 (threshold 15). Drivers by points: if/else 12 (27 pts), loops 1 (3 pts), match/switch 1 (2 pts) (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/reset.rs"},"region":{"startLine":1452}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9b2264c75468b09b5dfd61835a880db0209ce9e169cd88fd6706bcb76e2a2c6"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::util::fs::unlink_recursive (cognitive 32): lore_revision::util::fs::unlink_recursive has cognitive complexity 32 (threshold 15). Drivers by points: if/else 15 (32 pts) (nesting depth added 17). 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":"lore-revision/src/util/fs.rs"},"region":{"startLine":617}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bdd8025accac5cf3fcd66074a6f84168adf927472534f03761ce9fa01811c12"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalLockStore::query_locks (cognitive 32): LocalLockStore::query_locks has cognitive complexity 32 (threshold 15). Drivers by points: if/else 6 (17 pts), loops 5 (10 pts), boolean chains 4, match/switch 1 (nesting depth added 16). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/lock/store.rs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"d64a683bfe8de6f3828b9c8be68f7234018e7017c5823bf729b80936e397c7c5"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_server::grpc::revision::v1::branch_list::produce_branches (cognitive 32): lore_server::grpc::revision::v1::branch_list::produce_branches has cognitive complexity 32 (threshold 15). Drivers by points: if/else 9 (24 pts), match/switch 3 (5 pts), loops 2 (3 pts) (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/revision/v1/branch_list.rs"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9cb83390e2c1c3e5902f9a17216ab9cf5627ddcaca797e5333272e67d25e58e"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_storage::write::compare_previous_chunks (cognitive 32): lore_storage::write::compare_previous_chunks has cognitive complexity 32 (threshold 15). Drivers by points: if/else 12 (26 pts), match/switch 2 (5 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":"lore-storage/src/write.rs"},"region":{"startLine":2084}}}],"partialFingerprints":{"codehealthFindingId/v1":"63eb30ecf098122f8b3fba685bce5571750545f684be2bfdc0f72d406aea209c"}},{"ruleId":"D2","level":"warning","message":{"text":"DynamoDbLockStore::unlock_resources (cognitive 31): DynamoDbLockStore::unlock_resources has cognitive complexity 31 (threshold 15). Drivers by points: if/else 13 (26 pts), loops 2 (4 pts), match/switch 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":"lore-aws/src/store/lock_store.rs"},"region":{"startLine":571}}}],"partialFingerprints":{"codehealthFindingId/v1":"e71a3f439f9f92264189df781587dcec07339cdb4c463155d0f47fc35d27d170"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::file::dirty::dirty_move (cognitive 31): lore_revision::file::dirty::dirty_move has cognitive complexity 31 (threshold 15). Drivers by points: if/else 16 (27 pts), loops 1 (3 pts), 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":"lore-revision/src/file/dirty.rs"},"region":{"startLine":1141}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd96e6deac72f865df0701632092ed615d3c12fcc076ce2256ba324990e26269"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::state::os_diff::handle_single_file_compare_result (cognitive 31): lore_revision::state::os_diff::handle_single_file_compare_result has cognitive complexity 31 (threshold 15). Drivers by points: if/else 14 (26 pts), boolean chains 4, match/switch 1 (nesting depth added 12). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state/os_diff.rs"},"region":{"startLine":606}}}],"partialFingerprints":{"codehealthFindingId/v1":"07b20824f583ade5db8e069ee1f26c1d9402f4b1043cb01f0b88f6b8343bf57a"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalImmutableStore::new (cognitive 31): LocalImmutableStore::new has cognitive complexity 31 (threshold 15). Drivers by points: if/else 15 (17 pts), boolean chains 7, loops 3 (5 pts), match/switch 1 (2 pts) (nesting depth added 5). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":1031}}}],"partialFingerprints":{"codehealthFindingId/v1":"407c3d25388592ead80b6461fa9be8da2c834ca060562bd77c8752a22bf313e6"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_storage::fragment_engine::write_fragmentlist_impl (cognitive 31): lore_storage::fragment_engine::write_fragmentlist_impl has cognitive complexity 31 (threshold 15). Drivers by points: if/else 9 (15 pts), match/switch 3 (10 pts), loops 2 (4 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":"lore-storage/src/fragment_engine.rs"},"region":{"startLine":477}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b7c82971fcf99df8e4bb5aa44d16708c1b41ae28fc6fd140de269a1e4ae9a76"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_storage::read::write_root_to_file (cognitive 31): lore_storage::read::write_root_to_file has cognitive complexity 31 (threshold 15). Drivers by points: if/else 10 (21 pts), match/switch 2 (6 pts), loops 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":"lore-storage/src/read.rs"},"region":{"startLine":1167}}}],"partialFingerprints":{"codehealthFindingId/v1":"c306635dc5a6b807eb745b89e74592237412a722642cc9ed6f5840117e6d51eb"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_client::cli::commands::branch::handle_branch_push (cognitive 30): lore_client::cli::commands::branch::handle_branch_push has cognitive complexity 30 (threshold 15). Drivers by points: if/else 15 (25 pts), boolean chains 4, 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":"lore-client/src/cli/commands/branch.rs"},"region":{"startLine":798}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfb70e8af01507c8e86c692f9ebbbfa8cc1f2d7d9e911cf4aec8ddc4115d0ee4"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_client::cli::commands::file::handle_file_history (cognitive 30): lore_client::cli::commands::file::handle_file_history has cognitive complexity 30 (threshold 15). Drivers by points: if/else 12 (27 pts), boolean chains 2, 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":"lore-client/src/cli/commands/file.rs"},"region":{"startLine":1397}}}],"partialFingerprints":{"codehealthFindingId/v1":"36c6c64e04811055fd548ba74a45f6ce8ed33b4d3c31ec63b78d1be744626860"}},{"ruleId":"D2","level":"warning","message":{"text":"State::collect_dirty_paths (cognitive 30): State::collect_dirty_paths has cognitive complexity 30 (threshold 15). Drivers by points: if/else 9 (24 pts), boolean chains 3, loops 2 (3 pts) (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":3435}}}],"partialFingerprints":{"codehealthFindingId/v1":"1462453a351b2a7b0dab30c9502fd219c2eff92925ff324db900065a51f1a880"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::file::reset::reset_walk_directory (cognitive 30): lore_revision::file::reset::reset_walk_directory has cognitive complexity 30 (threshold 15). Drivers by points: if/else 14 (27 pts), loops 2, boolean chains 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/reset.rs"},"region":{"startLine":1644}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d1df9a26d8f01aeb13b5a4f7cc8f3bc3b5396f43588adb1b611fedbb12b3523"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::branch::diff::diff (cognitive 30): lore_revision::branch::diff::diff has cognitive complexity 30 (threshold 15). Drivers by points: if/else 19 (27 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":"lore-revision/src/branch/diff.rs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"867a71a1439532077813e39a946aed673fd697365f119e00eeaaa022f23db166"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalImmutableStore::compact_bucket_packfile_impl (cognitive 30): LocalImmutableStore::compact_bucket_packfile_impl has cognitive complexity 30 (threshold 15). Drivers by points: if/else 5 (14 pts), match/switch 3 (9 pts), loops 4 (7 pts) (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":3113}}}],"partialFingerprints":{"codehealthFindingId/v1":"77e66171a11de1359065b67dd0e87a0e7fbf2771b1163bc8c19c2bf3befe36e8"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::projfs::serve::get_file_data_async (cognitive 29): lore_revision::projfs::serve::get_file_data_async has cognitive complexity 29 (threshold 15). Drivers by points: if/else 12 (25 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":"lore-revision/src/projfs/serve.rs"},"region":{"startLine":997}}}],"partialFingerprints":{"codehealthFindingId/v1":"40f3c74cbae6c74a06439579bc70ee8a941faeb49223b2bd27d00921a98ae464"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::branch::try_auto_resolve_conflict (cognitive 29): lore_revision::branch::try_auto_resolve_conflict has cognitive complexity 29 (threshold 15). Drivers by points: if/else 19 (28 pts), match/switch 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch.rs"},"region":{"startLine":2758}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f82313dfef85615bbfa3648fb858dd29a166c8d84e6703cd9b251c9a1b7ac0f"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::branch::merge::merge_into (cognitive 29): lore_revision::branch::merge::merge_into has cognitive complexity 29 (threshold 15). Drivers by points: if/else 19 (22 pts), loops 2 (3 pts), match/switch 1 (3 pts), boolean chains 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":"lore-revision/src/branch/merge.rs"},"region":{"startLine":4328}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4adebde2e420d21cdcff74deb820db7a83df5067206f3357fd645fe9371404d"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::repository::create::create_with_metadata (cognitive 29): lore_revision::repository::create::create_with_metadata has cognitive complexity 29 (threshold 15). Drivers by points: if/else 22 (27 pts), boolean chains 2 (nesting depth added 5). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/repository/create.rs"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"525578e3bfca57bcb685389c182d701275382ed51b35e88ec1b06b26868fb530"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::link::add::add (cognitive 29): lore_revision::link::add::add has cognitive complexity 29 (threshold 15). Drivers by points: if/else 21 (27 pts), boolean chains 2 (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":"lore-revision/src/link/add.rs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"7af5951b40fe13082a71e2cbf6300d08a034d7c527951038fe630f2f05415322"}},{"ruleId":"D2","level":"warning","message":{"text":"JwkServiceImpl::fetch_new_keys (cognitive 29): JwkServiceImpl::fetch_new_keys has cognitive complexity 29 (threshold 15). Drivers by points: if/else 15 (21 pts), match/switch 2 (4 pts), boolean chains 2, loops 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/auth/jwk.rs"},"region":{"startLine":524}}}],"partialFingerprints":{"codehealthFindingId/v1":"666c6cbc84471cd1e34b9f8c9f406c25134215a33a425f76d0e6d1335237c372"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalImmutableStore::lookup (cognitive 29): LocalImmutableStore::lookup has cognitive complexity 29 (threshold 15). Drivers by points: if/else 9 (28 pts), loops 1 (nesting depth added 19). 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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":1519}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce277237ba20e9b0c7ae757d767b79e39fec7ebeb6350dd480cfd11c11c71602"}},{"ruleId":"D2","level":"warning","message":{"text":"State::move_node (cognitive 28): State::move_node has cognitive complexity 28 (threshold 15). Drivers by points: if/else 22 (25 pts), boolean chains 3 (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":"lore-revision/src/state.rs"},"region":{"startLine":2692}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f2787587d7d7daaf99ec2b6b8a71904d8a911fd092de283dfecf9c5050c1328"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::util::fs::filesystem_path_and_info (cognitive 28): lore_revision::util::fs::filesystem_path_and_info has cognitive complexity 28 (threshold 15). Drivers by points: if/else 13 (24 pts), loops 2 (3 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":"lore-revision/src/util/fs.rs"},"region":{"startLine":372}}}],"partialFingerprints":{"codehealthFindingId/v1":"d805cf8ecf945bf153f1aaa2f35a4a66ae26b861a46410046a2aaa71928ae417"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::revision::history::history (cognitive 28): lore_revision::revision::history::history has cognitive complexity 28 (threshold 15). Drivers by points: if/else 15 (24 pts), boolean chains 3, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/revision/history.rs"},"region":{"startLine":217}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8127d7f6524195c6df5c2409503a3cb2288bbb404c338f7b1d552c97204c019"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::branch::create (cognitive 27): lore_revision::branch::create has cognitive complexity 27 (threshold 15). Drivers by points: if/else 14 (23 pts), boolean chains 4 (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":"lore-revision/src/branch.rs"},"region":{"startLine":1503}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4f23807e602d6fa736bae1122480caa9bff7a485f6875df4135b0ab7f12ad14"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::commit::rehash_directory (cognitive 27): lore_revision::commit::rehash_directory has cognitive complexity 27 (threshold 15). Drivers by points: if/else 11 (18 pts), match/switch 2 (4 pts), loops 3, boolean chains 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/commit.rs"},"region":{"startLine":3115}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d9a57822867259925b3db1e6595e098f81e0398efa2960e28634db2176f8bf5"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::revision::apply_move_from_path_pass (cognitive 27): lore_revision::revision::apply_move_from_path_pass has cognitive complexity 27 (threshold 15). Drivers by points: if/else 7 (17 pts), loops 5 (7 pts), boolean chains 3 (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":"lore-revision/src/revision.rs"},"region":{"startLine":792}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba9492991af626cf6b0e44c233944a89e9fd8851fbb369d27df80c891ad9c71a"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_error_set_macro::codegen::to_snake_case (cognitive 27): lore_error_set_macro::codegen::to_snake_case has cognitive complexity 27 (threshold 15). Drivers by points: if/else 7 (22 pts), loops 2 (4 pts), boolean chains 1 (nesting depth added 17). 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":"lore-error-set-macro/src/codegen.rs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"dcea1629eceb895c44c559258d6cbc61bc41647fa744e415755fa03fcbfe4840"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_client::cli::commands::revision::handle_revision_history (cognitive 26): lore_client::cli::commands::revision::handle_revision_history has cognitive complexity 26 (threshold 15). Drivers by points: if/else 9 (18 pts), loops 2 (5 pts), boolean chains 2, match/switch 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":"lore-client/src/cli/commands/revision.rs"},"region":{"startLine":568}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fd655aaa9724211f8c4ab351408036df57944b656259af8d32e9596ce7a05b7"}},{"ruleId":"D2","level":"warning","message":{"text":"CompositeStore::query (cognitive 26): CompositeStore::query has cognitive complexity 26 (threshold 15). Drivers by points: if/else 7 (14 pts), loops 3 (5 pts), match/switch 2 (4 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":"lore-revision/src/store/composite.rs"},"region":{"startLine":931}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ecafb0a7eee9777faf8ca51d885e5c2dce0c205cf78c79866edce5b1145dfa2"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::lock::file::acquire::acquire (cognitive 26): lore_revision::lock::file::acquire::acquire has cognitive complexity 26 (threshold 15). Drivers by points: if/else 14 (18 pts), loops 6 (7 pts), boolean chains 1 (nesting depth added 5). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/lock/file/acquire.rs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"e583e97430ef382d72a53274e00dee81068ecf6abccb783c7ed195bd647f2f71"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_server::grpc::handlers::branch_push::push (cognitive 26): lore_server::grpc::handlers::branch_push::push has cognitive complexity 26 (threshold 15). Drivers by points: if/else 14 (23 pts), boolean chains 2, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/handlers/branch_push.rs"},"region":{"startLine":286}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed929c5cf7be707c76ecaa0165b3069577fbf8d48ba32ed4b5685d4d26371a71"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalMutableStore::new (cognitive 26): LocalMutableStore::new has cognitive complexity 26 (threshold 15). Drivers by points: if/else 10 (15 pts), loops 3 (5 pts), match/switch 2 (5 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":"lore-storage/src/local/mutable_store.rs"},"region":{"startLine":715}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3558d11feb8a8c98f7432d14d3b6b15c3fd8852732d6da09dc42104c2879b25"}},{"ruleId":"D2","level":"warning","message":{"text":"TaskQueue::new (cognitive 25): TaskQueue::new has cognitive complexity 25 (threshold 15). Drivers by points: if/else 7 (18 pts), match/switch 2 (6 pts), 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":"lore-revision/src/util/task_queue.rs"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b0e1fa073c023f9b8330131171e793708be9e16a6656adb27a1ad34d9c9f4ba"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::repository::clone::process_block_item_dependency (cognitive 25): lore_revision::repository::clone::process_block_item_dependency has cognitive complexity 25 (threshold 15). Drivers by points: if/else 9 (20 pts), boolean chains 3, loops 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":"lore-revision/src/repository/clone.rs"},"region":{"startLine":690}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b3f82eb237ab5845891abc80e7017129e07d21502d5f9bfe932276ef5b26b12"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::file::diff::emit_diff3_conflicts (cognitive 25): lore_revision::file::diff::emit_diff3_conflicts has cognitive complexity 25 (threshold 15). Drivers by points: if/else 9 (15 pts), boolean chains 5, match/switch 2 (4 pts), loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/diff.rs"},"region":{"startLine":619}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3bb38174e1633d141babfcdc0e2b434bb8bd2bac3192bf4dba1ef2cbb6dd29b"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::revision::sync::sync_load_layer_list (cognitive 25): lore_revision::revision::sync::sync_load_layer_list has cognitive complexity 25 (threshold 15). Drivers by points: if/else 8 (21 pts), boolean chains 2, loops 1 (2 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":"lore-revision/src/revision/sync.rs"},"region":{"startLine":976}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb8e6a1bb357fc8aa090848f69c48b0eefa4333d3cff2d426f63cb4f99a3e6ed"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::revision::resolve_revision (cognitive 25): lore_revision::revision::resolve_revision has cognitive complexity 25 (threshold 15). Drivers by points: if/else 12 (17 pts), match/switch 3 (6 pts), loops 1 (2 pts) (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/revision.rs"},"region":{"startLine":1738}}}],"partialFingerprints":{"codehealthFindingId/v1":"835f5227e81861f6d7c6c5ea7fd2b8a981784acdd7be97d17db3b8b57165b160"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::file::stage::stage (cognitive 25): lore_revision::file::stage::stage has cognitive complexity 25 (threshold 15). Drivers by points: if/else 11 (18 pts), boolean chains 4, loops 2, match/switch 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/stage.rs"},"region":{"startLine":553}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8f8d8e94a0328544ba0bfd5e540de31608372e609a50d9e8f5c67d4a4846998"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_storage::defragment::walk_intermediate_level (cognitive 25): lore_storage::defragment::walk_intermediate_level has cognitive complexity 25 (threshold 15). Drivers by points: if/else 12 (18 pts), match/switch 2 (4 pts), loops 2, boolean chains 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":"lore-storage/src/defragment.rs"},"region":{"startLine":487}}}],"partialFingerprints":{"codehealthFindingId/v1":"eefd3673b4797abf1ce5e7ecebdc7514c62adc3b5a5d3b58d4ca5462b22d6803"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_transport::quic::client::connect_happy_eyeballs (cognitive 25): lore_transport::quic::client::connect_happy_eyeballs has cognitive complexity 25 (threshold 15). Drivers by points: if/else 6 (19 pts), loops 2 (4 pts), match/switch 1 (2 pts) (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-transport/src/quic/client.rs"},"region":{"startLine":842}}}],"partialFingerprints":{"codehealthFindingId/v1":"0808c944c4d655885309bb28a7bb22ad4e57ea0f76372e51def8589dde6745b2"}},{"ruleId":"D2","level":"warning","message":{"text":"lore::revision_tree::delete::plan_entries (cognitive 24): lore::revision_tree::delete::plan_entries has cognitive complexity 24 (threshold 15). Drivers by points: if/else 11 (18 pts), loops 3 (4 pts), boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore/src/revision_tree/delete.rs"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"659e9bf55253003107432729ad3167088aac8064ca4f920ce5f91c089be535df"}},{"ruleId":"D2","level":"warning","message":{"text":"DependencyData::deserialize (cognitive 24): DependencyData::deserialize has cognitive complexity 24 (threshold 15). Drivers by points: if/else 10 (21 pts), loops 2 (3 pts) (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/dependency/mod.rs"},"region":{"startLine":432}}}],"partialFingerprints":{"codehealthFindingId/v1":"46fb87a56d7d986c21e2c7842d44ba88ca069c38bbaac2cd6283e314266d287e"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::state::gather_tree_paths_node (cognitive 24): lore_revision::state::gather_tree_paths_node has cognitive complexity 24 (threshold 15). Drivers by points: if/else 14 (18 pts), boolean chains 3, match/switch 1 (3 pts) (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":"lore-revision/src/state.rs"},"region":{"startLine":4984}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bc506b008e4879b47fcc169c0a79e6c8a6190747d08c57dc7da45114e1c5dc1"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::stage::stage_single_node (cognitive 24): lore_revision::stage::stage_single_node has cognitive complexity 24 (threshold 15). Drivers by points: if/else 15 (22 pts), boolean chains 1, match/switch 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/stage.rs"},"region":{"startLine":687}}}],"partialFingerprints":{"codehealthFindingId/v1":"52cc3e90975ca6417cfa70ddb92094902b65f4a0a4b8cd93262bf0c0aaecacb9"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::file::info::info_path (cognitive 24): lore_revision::file::info::info_path has cognitive complexity 24 (threshold 15). Drivers by points: if/else 12 (19 pts), match/switch 1 (3 pts), boolean chains 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/info.rs"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5ee09131fa390fa672236226cc7ba4daa98d086006950ce0146a83f38d552fa"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::state::os_diff::diff_filesystem_new_entries (cognitive 24): lore_revision::state::os_diff::diff_filesystem_new_entries has cognitive complexity 24 (threshold 15). Drivers by points: if/else 8 (23 pts), 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":"lore-revision/src/state/os_diff.rs"},"region":{"startLine":1977}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c730b0dfe7d75fd5846d6063086c7d2f2e025c883ca4841815173abdaeb5725"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::branch::merge::merge_start (cognitive 24): lore_revision::branch::merge::merge_start has cognitive complexity 24 (threshold 15). Drivers by points: if/else 11 (22 pts), boolean chains 1, match/switch 1 (nesting depth added 11). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/merge.rs"},"region":{"startLine":674}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fbca8bae41d6a22e955791c063d7bba426c42b9894eac8e649d2ada46b58f44"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::branch::merge::merge_start_all (cognitive 24): lore_revision::branch::merge::merge_start_all has cognitive complexity 24 (threshold 15). Drivers by points: if/else 10 (18 pts), boolean chains 5, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/merge.rs"},"region":{"startLine":1260}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee8bc4bd3af22627f2cfc15ccda7f8687ecf275a4bfd864e20a3c079da3afa92"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::fs::realize::relink_moved_node (cognitive 24): lore_revision::fs::realize::relink_moved_node has cognitive complexity 24 (threshold 15). Drivers by points: if/else 10 (21 pts), loops 1 (3 pts) (nesting depth added 13). 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":"lore-revision/src/fs/realize.rs"},"region":{"startLine":1949}}}],"partialFingerprints":{"codehealthFindingId/v1":"886c35a43b5190fbb10e4c59854614fc688d49379717a18a12f53d8e79bb96e1"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalImmutableStore::compact_group_packfiles (cognitive 24): LocalImmutableStore::compact_group_packfiles has cognitive complexity 24 (threshold 15). Drivers by points: if/else 9 (18 pts), boolean chains 3, 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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":2821}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd74e860678f881e05103e004c2363e147d697a6827d91c5e61819106f520b3b"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_storage::local::immutable_store::detect_any_older_immutable_bucket (cognitive 24): lore_storage::local::immutable_store::detect_any_older_immutable_bucket 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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":450}}}],"partialFingerprints":{"codehealthFindingId/v1":"b873efa73df7f818d8e7106cc31ad4252b3b70e5d552d8bbf74ac84f1a3acdfd"}},{"ruleId":"D2","level":"warning","message":{"text":"MetadataMigrator::discover_legacy_fragments (cognitive 23): MetadataMigrator::discover_legacy_fragments has cognitive complexity 23 (threshold 15). Drivers by points: if/else 5 (15 pts), loops 3 (5 pts), match/switch 1 (3 pts) (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-aws/src/store/immutable_store/metadata_migrator.rs"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfe388193ab1dc5196ba3570a25e7f38bb6a8a642aa8dc5c89d77981951ff212"}},{"ruleId":"D2","level":"warning","message":{"text":"CompositeStore::get_metadata_from_remotes (cognitive 23): CompositeStore::get_metadata_from_remotes has cognitive complexity 23 (threshold 15). Drivers by points: if/else 7 (17 pts), boolean chains 2, loops 2, match/switch 1 (2 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":"lore-revision/src/store/composite.rs"},"region":{"startLine":808}}}],"partialFingerprints":{"codehealthFindingId/v1":"80c0195d5c1f1032e56ed34548c1142a7935f61c1ebcc4ff26303e29df75a7b4"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::repository::verify::verify_node_single (cognitive 23): lore_revision::repository::verify::verify_node_single has cognitive complexity 23 (threshold 15). Drivers by points: if/else 13 (20 pts), boolean chains 3 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/repository/verify.rs"},"region":{"startLine":424}}}],"partialFingerprints":{"codehealthFindingId/v1":"203fe1f957ee7123422aa504a4519ef62a38e32bc1afecaeafaf4da8f3809e82"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::repository::clone::clone_into (cognitive 23): lore_revision::repository::clone::clone_into has cognitive complexity 23 (threshold 15). Drivers by points: if/else 18 (22 pts), match/switch 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, 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":"lore-revision/src/repository/clone.rs"},"region":{"startLine":1019}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5d88004938937f94ac0a0b3fa9e43cef6e6d20e7b83a79a338b1376f89f8991"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::dependency::list::list_file_dependencies (cognitive 23): lore_revision::dependency::list::list_file_dependencies has cognitive complexity 23 (threshold 15). Drivers by points: loops 4 (11 pts), if/else 6 (10 pts), boolean chains 2 (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":"lore-revision/src/dependency/list.rs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"33bc472d15c75080c7b7db6ae6f986dd80b3ca36c6f8082e080df158a29a9994"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::file::dirty::dirty_path (cognitive 23): lore_revision::file::dirty::dirty_path has cognitive complexity 23 (threshold 15). Drivers by points: if/else 12 (17 pts), boolean chains 5, match/switch 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/dirty.rs"},"region":{"startLine":602}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8a334ed72737490e83bf57503329579ef9517bbc730070d9acf82de1c53098f"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::branch::push::push_query (cognitive 23): lore_revision::branch::push::push_query has cognitive complexity 23 (threshold 15). Drivers by points: if/else 6 (10 pts), loops 4 (8 pts), boolean chains 4, match/switch 1 (nesting depth added 8). Of this number, 22 points are the body\u0027s own statements and 1 belongs to one function item 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":"lore-revision/src/branch/push.rs"},"region":{"startLine":1343}}}],"partialFingerprints":{"codehealthFindingId/v1":"c41c5a53aa1d25a5b210cd3d4ed33681fa5564480ef0db39121d2c60537d83da"}},{"ruleId":"D2","level":"warning","message":{"text":"CompositeTopology::refresh_loop (cognitive 23): CompositeTopology::refresh_loop has cognitive complexity 23 (threshold 15). Drivers by points: match/switch 4 (10 pts), if/else 3 (7 pts), loops 4 (6 pts) (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/topology/composite.rs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb9eae049f81b6412a32dba125e61298f1d7174226aa1540014540249264284e"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_storage::read::resolve_root (cognitive 23): lore_storage::read::resolve_root has cognitive complexity 23 (threshold 15). Drivers by points: if/else 8 (17 pts), boolean chains 3, match/switch 1 (2 pts), loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/read.rs"},"region":{"startLine":1398}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5a98bbbd924b8588ca8d3b28c8cbe4d1f28d90bf014c8953e2b5cda5f6fe746"}},{"ruleId":"D2","level":"warning","message":{"text":"MetadataMigrator::fragment_stream_consumer (cognitive 22): MetadataMigrator::fragment_stream_consumer has cognitive complexity 22 (threshold 15). Drivers by points: if/else 5 (14 pts), match/switch 2 (5 pts), loops 2 (3 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":"lore-aws/src/store/immutable_store/metadata_migrator.rs"},"region":{"startLine":335}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5832b67726ac6ef03d91d13aa6eb1e0a6473ca1ee9740b06450e5c5f8e0e022"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::state::collect_dirty_paths_inner (cognitive 22): lore_revision::state::collect_dirty_paths_inner has cognitive complexity 22 (threshold 15). Drivers by points: if/else 8 (19 pts), boolean chains 2, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":4782}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea195145d4909a9478fab913c7fd61fdc54acc8ee6f25f4670268f833acde303"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::state::detect_and_coalesce_moves (cognitive 22): lore_revision::state::detect_and_coalesce_moves has cognitive complexity 22 (threshold 15). Drivers by points: if/else 8 (19 pts), match/switch 1 (2 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":"lore-revision/src/state.rs"},"region":{"startLine":5606}}}],"partialFingerprints":{"codehealthFindingId/v1":"743ddbcef53849896d7d52508c67171d1df2eafac97d592a77ea1fab663b669f"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::repository::branch_switch (cognitive 22): lore_revision::repository::branch_switch has cognitive complexity 22 (threshold 15). Drivers by points: if/else 14 (19 pts), boolean chains 3 (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":"lore-revision/src/repository.rs"},"region":{"startLine":2825}}}],"partialFingerprints":{"codehealthFindingId/v1":"946c17a5c6378f2ab1a2fe1a444b82f4e1ccf17f88d4a985b75fa2c265cdebb2"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::branch::merge::merge_unresolve (cognitive 22): lore_revision::branch::merge::merge_unresolve has cognitive complexity 22 (threshold 15). Drivers by points: if/else 10 (18 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/merge.rs"},"region":{"startLine":3261}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d66ff143897342d1fe34a36a21aac375dc80bf1e88f8807976e0bcab24bca77"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::revision::find_last_modified_revision (cognitive 22): lore_revision::revision::find_last_modified_revision has cognitive complexity 22 (threshold 15). Drivers by points: if/else 10 (20 pts), loops 1 (2 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":"lore-revision/src/revision.rs"},"region":{"startLine":952}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e04b50ef5017bcbd98bde4ff9362c80cb98cfefa0dc90406a7bd7a9d68ed699"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::diff::diff_filesystem_paths_in (cognitive 22): lore_revision::diff::diff_filesystem_paths_in has cognitive complexity 22 (threshold 15). Drivers by points: if/else 8 (15 pts), match/switch 1 (3 pts), boolean chains 2, loops 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/diff.rs"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"36c3b2dae0cfaafed054bf4237068a43d8d088e6e5297c0cc6536f6950e55b86"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::file::history::find_start_revision (cognitive 22): lore_revision::file::history::find_start_revision has cognitive complexity 22 (threshold 15). Drivers by points: if/else 16 (19 pts), boolean chains 2, 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":"lore-revision/src/file/history.rs"},"region":{"startLine":365}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f90e4be131c18122fc163480527805f1fc09acfe961a061c073483ba85c1578"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::repository::store::immutable_query_address (cognitive 22): lore_revision::repository::store::immutable_query_address has cognitive complexity 22 (threshold 15). Drivers by points: if/else 8 (11 pts), boolean chains 4, match/switch 2 (4 pts), loops 2 (3 pts) (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/repository/store.rs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"10b16f26bac49a5dc7a623ac31756f344dfe6a1d424a650568bb0dfca46b4e7d"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_server::grpc::revision::v1::revision_list::resolve_start (cognitive 22): lore_server::grpc::revision::v1::revision_list::resolve_start has cognitive complexity 22 (threshold 15). Drivers by points: if/else 9 (18 pts), boolean chains 3, match/switch 1 (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":"lore-server/src/grpc/revision/v1/revision_list.rs"},"region":{"startLine":263}}}],"partialFingerprints":{"codehealthFindingId/v1":"79fa66e71a20645f94f1da8d340df848450f41cacda176d581e614800e1675b9"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalImmutableStore::deserialize_all_buckets (cognitive 22): LocalImmutableStore::deserialize_all_buckets has cognitive complexity 22 (threshold 15). Drivers by points: loops 5 (11 pts), if/else 5 (10 pts), boolean chains 1 (nesting depth added 11). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":1447}}}],"partialFingerprints":{"codehealthFindingId/v1":"ace54c3cfaafeb36585bfd71f918aee7da4f39ccfc7d98392ff645853292d917"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalImmutableStore::compact_packfiles (cognitive 22): LocalImmutableStore::compact_packfiles has cognitive complexity 22 (threshold 15). Drivers by points: if/else 16 (20 pts), loops 2 (nesting depth added 4). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":2657}}}],"partialFingerprints":{"codehealthFindingId/v1":"077d5df9dddc5216db9e9443a7ea9a2f9191849177787e99685dece9eb8e587f"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalMutableStore::load (cognitive 22): LocalMutableStore::load has cognitive complexity 22 (threshold 15). Drivers by points: if/else 8 (19 pts), boolean chains 2, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/local/mutable_store.rs"},"region":{"startLine":1335}}}],"partialFingerprints":{"codehealthFindingId/v1":"502c3f6a4f5b5ffc2c95a899be14f03799d7baea9e8d5bdaee1e7f6eaf187e57"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_storage::read::read_content_into_buffer (cognitive 22): lore_storage::read::read_content_into_buffer has cognitive complexity 22 (threshold 15). Drivers by points: if/else 10 (15 pts), boolean chains 4, match/switch 2 (3 pts) (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/read.rs"},"region":{"startLine":712}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8ca1807c1d75b7d2b9f1d90111fa3bfa024e7826040fed387bf772cf97e9ef9"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_storage::fs_util::unlink_recursive (cognitive 22): lore_storage::fs_util::unlink_recursive has cognitive complexity 22 (threshold 15). Drivers by points: if/else 9 (21 pts), match/switch 1 (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":"lore-storage/src/fs_util.rs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"d42f4721af6905d0f2483f6a1a768026e4ebc0d70ec17b91479aceb5231a9e30"}},{"ruleId":"D2","level":"warning","message":{"text":"State::block_file_metadata_load (cognitive 21): State::block_file_metadata_load has cognitive complexity 21 (threshold 15). Drivers by points: if/else 11 (20 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":"lore-revision/src/state.rs"},"region":{"startLine":1731}}}],"partialFingerprints":{"codehealthFindingId/v1":"a667d7a3dc7561afbf1ba4736a4cf09fa12cdead73d1be9b319315baa4d99732"}},{"ruleId":"D2","level":"warning","message":{"text":"CompositeStore::topology_peers_refreshed (cognitive 21): CompositeStore::topology_peers_refreshed has cognitive complexity 21 (threshold 15). Drivers by points: if/else 7 (14 pts), match/switch 1 (3 pts), boolean chains 2, loops 1 (2 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":"lore-revision/src/store/composite.rs"},"region":{"startLine":526}}}],"partialFingerprints":{"codehealthFindingId/v1":"62d5536500647cb59739f64a875db3893a020c571cfba11d9c287ba6e187b4f5"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::file::reset::resolve_last_merged_target (cognitive 21): lore_revision::file::reset::resolve_last_merged_target has cognitive complexity 21 (threshold 15). Drivers by points: if/else 9 (18 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":"lore-revision/src/file/reset.rs"},"region":{"startLine":921}}}],"partialFingerprints":{"codehealthFindingId/v1":"1aa5fbc3de8225a934ddf821a5f86da806324316cef374e24b39e7982dcd49b6"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::branch::resolve_diff3_base (cognitive 21): lore_revision::branch::resolve_diff3_base has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14 (21 pts) (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch.rs"},"region":{"startLine":2979}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b94beb796b513ca2a3d37010792e93acc9375692dbf44481c04c5f11ea512c3"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::state::os_diff::diff_filesystem_missing_nodes (cognitive 21): lore_revision::state::os_diff::diff_filesystem_missing_nodes has cognitive complexity 21 (threshold 15). Drivers by points: if/else 8 (17 pts), boolean chains 3, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state/os_diff.rs"},"region":{"startLine":1827}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a25ca20494a807781510b00a38e276c44a1059a9a22c90e15fef3f45a855a95"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::link::classify_link_pins (cognitive 21): lore_revision::link::classify_link_pins has cognitive complexity 21 (threshold 15). Drivers by points: if/else 8 (17 pts), match/switch 1 (3 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":"lore-revision/src/link.rs"},"region":{"startLine":1989}}}],"partialFingerprints":{"codehealthFindingId/v1":"e71d80721ad6b7b1be38f189df98e57d1306d4016b5827952e178e2894c2f7d6"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::metadata::set::set_file (cognitive 21): lore_revision::metadata::set::set_file has cognitive complexity 21 (threshold 15). Drivers by points: if/else 7 (11 pts), loops 4 (6 pts), match/switch 1 (3 pts), boolean chains 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":"lore-revision/src/metadata/set.rs"},"region":{"startLine":303}}}],"partialFingerprints":{"codehealthFindingId/v1":"4405064821d69ac294f28bf8a8939650898314571a7fbb6747f8fcdc6fd95c39"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalImmutableStore::find (cognitive 21): LocalImmutableStore::find has cognitive complexity 21 (threshold 15). Drivers by points: if/else 9 (18 pts), boolean chains 2, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":1987}}}],"partialFingerprints":{"codehealthFindingId/v1":"59a79150d642bcffb78644b6fc69bd87bd4ae490fc77f3aa762d22e118de096b"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_storage::local::immutable_store::oodle_migration::migrate_bucket (cognitive 21): lore_storage::local::immutable_store::oodle_migration::migrate_bucket has cognitive complexity 21 (threshold 15). Drivers by points: if/else 8 (15 pts), loops 2 (3 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":"lore-storage/src/local/immutable_store/oodle_migration.rs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"d076e9b67a860f9584146c6b6a9cbdba80f8a06d7afe3b679d74e41e898365e3"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_transport::quic::client::reconnect (cognitive 21): lore_transport::quic::client::reconnect has cognitive complexity 21 (threshold 15). Drivers by points: if/else 6 (11 pts), match/switch 2 (5 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":"lore-transport/src/quic/client.rs"},"region":{"startLine":966}}}],"partialFingerprints":{"codehealthFindingId/v1":"4142df15fa12b6454baad43c5a6b77f82543a725c6f9d7a404c727a543192880"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_client::cli::commands::revision::handle_revision_commit (cognitive 20): lore_client::cli::commands::revision::handle_revision_commit has cognitive complexity 20 (threshold 15). Drivers by points: if/else 10 (15 pts), match/switch 3, boolean chains 1, 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":"lore-client/src/cli/commands/revision.rs"},"region":{"startLine":1179}}}],"partialFingerprints":{"codehealthFindingId/v1":"867ca4b57044e6d7f93132c1ed4c6cbcb2d0e842f309e41501617cc94aebb0fa"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_io::uring::reaper_loop (cognitive 20): lore_io::uring::reaper_loop has cognitive complexity 20 (threshold 15). Drivers by points: if/else 7 (16 pts), loops 2 (3 pts), boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-io/src/uring.rs"},"region":{"startLine":888}}}],"partialFingerprints":{"codehealthFindingId/v1":"77b06b150f6325801eb5554608ab3b6a0fc869f145bba3a2b5b83c96fd5708a6"}},{"ruleId":"D2","level":"warning","message":{"text":"CompositeStore::get_from_remotes (cognitive 20): CompositeStore::get_from_remotes has cognitive complexity 20 (threshold 15). Drivers by points: if/else 6 (14 pts), boolean chains 2, loops 2, match/switch 1 (2 pts) (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/store/composite.rs"},"region":{"startLine":719}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a5547bc1ad5ff15326f458436e6469d47d44de5f5449e8c5d14d1acd6aa05b9"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::infer::infer_is_conflicted (cognitive 20): lore_revision::infer::infer_is_conflicted has cognitive complexity 20 (threshold 15). Drivers by points: if/else 7 (11 pts), match/switch 2 (4 pts), loops 2 (3 pts), boolean chains 2 (nesting depth added 7). 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, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/infer.rs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4c00bd8aa0b60c5c778cdb4634b6b1add92564713573175c3a64f46e946ba3b"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::state::collect_new_file_fragments (cognitive 20): lore_revision::state::collect_new_file_fragments has cognitive complexity 20 (threshold 15). Drivers by points: if/else 6 (11 pts), loops 3 (4 pts), boolean chains 3, match/switch 1 (2 pts) (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":7901}}}],"partialFingerprints":{"codehealthFindingId/v1":"381245a939bf338520b1cd9af635a005c78e5640bf10ad7c10bc0263a443a38b"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::link::resolve_link_chain (cognitive 20): lore_revision::link::resolve_link_chain has cognitive complexity 20 (threshold 15). Drivers by points: if/else 6 (13 pts), loops 2 (4 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":"lore-revision/src/link.rs"},"region":{"startLine":752}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4d601062ed3328b174f5c783d1533dae76754732765eb7c7e35b0353b69d193"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::fs::realize::verify_filesystem_for_changes (cognitive 20): lore_revision::fs::realize::verify_filesystem_for_changes has cognitive complexity 20 (threshold 15). Drivers by points: if/else 4 (10 pts), match/switch 2 (5 pts), loops 3 (4 pts), boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/fs/realize.rs"},"region":{"startLine":264}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecd30b193714ab38ccb9a9c3eeee97de803563a5727a9ddc62cbad5b1aee0fdc"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_server::grpc::thinclient::v1::revision_diff::run_three_way (cognitive 20): lore_server::grpc::thinclient::v1::revision_diff::run_three_way has cognitive complexity 20 (threshold 15). Drivers by points: match/switch 6 (14 pts), if/else 5, 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":"lore-server/src/grpc/thinclient/v1/revision_diff.rs"},"region":{"startLine":447}}}],"partialFingerprints":{"codehealthFindingId/v1":"e43aa1611b0c86fbeed65d2149556209acee83f887ba5bbff925e416e24ab298"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_storage::defragment::read_defragment (cognitive 20): lore_storage::defragment::read_defragment has cognitive complexity 20 (threshold 15). Drivers by points: if/else 8 (11 pts), loops 5 (6 pts), boolean chains 3 (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":"lore-storage/src/defragment.rs"},"region":{"startLine":1210}}}],"partialFingerprints":{"codehealthFindingId/v1":"c159db08f5c59f4c4765a34cb9398574d8ed6623a5ec343df2543da0fe06e175"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_storage::local::mutable_store::maybe_fan_out_mutable_group (cognitive 20): lore_storage::local::mutable_store::maybe_fan_out_mutable_group has cognitive complexity 20 (threshold 15). Drivers by points: if/else 7 (11 pts), loops 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":"lore-storage/src/local/mutable_store.rs"},"region":{"startLine":1640}}}],"partialFingerprints":{"codehealthFindingId/v1":"d65ea9e67aa1dea88c344baa858b34638083acf31c0a2f9cf22e21c6da7e5388"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_transport::auth::exchange::exchange_custom_resource (cognitive 20): lore_transport::auth::exchange::exchange_custom_resource has cognitive complexity 20 (threshold 15). Drivers by points: if/else 17 (20 pts) (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-transport/src/auth/exchange.rs"},"region":{"startLine":271}}}],"partialFingerprints":{"codehealthFindingId/v1":"4432a45265caa0db394d41034f7f22647b3c2369aed80c1c9194a42b509b7c91"}},{"ruleId":"D2","level":"warning","message":{"text":"attribute.main (cognitive 20): attribute.main has cognitive complexity 20 (threshold 15). Drivers by points: loops 5 (7 pts), if/else 4 (6 pts), ternaries 2 (4 pts), boolean chains 3 (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":"scripts/allocations/attribute.py"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ee95e4302f7196688bbf6245989cda360da2444e2dcaff659ec02c582b7508d"}},{"ruleId":"D2","level":"warning","message":{"text":"MetadataMigrator::process_fragment (cognitive 19): MetadataMigrator::process_fragment has cognitive complexity 19 (threshold 15). Drivers by points: if/else 6 (10 pts), match/switch 3 (5 pts), boolean chains 2, loops 1 (2 pts) (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-aws/src/store/immutable_store/metadata_migrator.rs"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba9ad898fcc6fc5ebaf8fc23034e337363efdb33683541e648d84bb4f4c2248c"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::repository::clone::clone_file (cognitive 19): lore_revision::repository::clone::clone_file has cognitive complexity 19 (threshold 15). Drivers by points: if/else 8 (15 pts), loops 1 (3 pts), boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/repository/clone.rs"},"region":{"startLine":1767}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7f5ce874b9b41d759bb955520129558b6b742597f58f30bb6b71e0e951a2165"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::state::apply_pending_discards (cognitive 19): lore_revision::state::apply_pending_discards has cognitive complexity 19 (threshold 15). Drivers by points: if/else 7 (16 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":"lore-revision/src/state.rs"},"region":{"startLine":6164}}}],"partialFingerprints":{"codehealthFindingId/v1":"87d085c50061b7c36cea6b799d0e709681f0c3c38a98d54d9b7851ea14de1362"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::state::apply_tree_changes (cognitive 19): lore_revision::state::apply_tree_changes has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (11 pts), match/switch 2 (5 pts), loops 2, 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":"lore-revision/src/state.rs"},"region":{"startLine":8265}}}],"partialFingerprints":{"codehealthFindingId/v1":"52b63c236e15d9a7c50c9a7c6b0b73f91237f7ecd1528018b59c3de6773c1216"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::state::add_change_hierarchy (cognitive 19): lore_revision::state::add_change_hierarchy has cognitive complexity 19 (threshold 15). Drivers by points: if/else 7 (12 pts), match/switch 3 (5 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":"lore-revision/src/state.rs"},"region":{"startLine":10319}}}],"partialFingerprints":{"codehealthFindingId/v1":"66c266695fbcc4e0efe2963879f0d6d57af7a1fe3ac11d06f4255e7ca6dbe7bf"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::util::fs::resolve_prefixes (cognitive 19): lore_revision::util::fs::resolve_prefixes has cognitive complexity 19 (threshold 15). Drivers by points: loops 6 (13 pts), if/else 2 (4 pts), boolean chains 2 (nesting depth added 9). Of this number, 18 points are the body\u0027s own statements and 1 belongs 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":"lore-revision/src/util/fs.rs"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c87f13714cbb62ebfde307ce5e5c55c51d0995d008095d7f6260f4562dc0d76"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::commit::freeze_directory (cognitive 19): lore_revision::commit::freeze_directory has cognitive complexity 19 (threshold 15). Drivers by points: if/else 9 (17 pts), loops 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/commit.rs"},"region":{"startLine":4290}}}],"partialFingerprints":{"codehealthFindingId/v1":"318cbabce2b2f8d4e95af07a306d70a878f9b9c79fbadd0ad725432f02ac2609"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::branch::merge::resolve_paths (cognitive 19): lore_revision::branch::merge::resolve_paths has cognitive complexity 19 (threshold 15). Drivers by points: if/else 7 (15 pts), match/switch 1 (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":"lore-revision/src/branch/merge.rs"},"region":{"startLine":3711}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2f5267c039e6e7132aed25a5bce883182d6bfb14b00593ebeeb2af13cd61d91"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::lock::file::status::status (cognitive 19): lore_revision::lock::file::status::status has cognitive complexity 19 (threshold 15). Drivers by points: if/else 9 (14 pts), loops 4, boolean chains 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/lock/file/status.rs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"90e2a7843738d1aaacb1bb32687b8ce2ad825f530ccae90f3fb1757f2411e6f0"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::dependency::resolve::resolve_dependency_file_set (cognitive 19): lore_revision::dependency::resolve::resolve_dependency_file_set has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (12 pts), loops 3 (6 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":"lore-revision/src/dependency/resolve.rs"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"029aaa6e73417142026fa97a27e3bc8df8be452c788248bee5f33df7e09ecdc6"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::link::drain_link_tracker (cognitive 19): lore_revision::link::drain_link_tracker has cognitive complexity 19 (threshold 15). Drivers by points: if/else 9 (14 pts), loops 3, boolean chains 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/link.rs"},"region":{"startLine":965}}}],"partialFingerprints":{"codehealthFindingId/v1":"8701cdc63edbfdaf483898267dd1f90522f37301f773f118cff0d2591d87e182"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::dependency::store_dependency_data (cognitive 19): lore_revision::dependency::store_dependency_data has cognitive complexity 19 (threshold 15). Drivers by points: if/else 11 (18 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":"lore-revision/src/dependency/mod.rs"},"region":{"startLine":629}}}],"partialFingerprints":{"codehealthFindingId/v1":"0584e25fa0db991b14f48ed8c399fe51a08399ea0268e3aed34298d1e9110335"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::repository::status::scan_paths (cognitive 19): lore_revision::repository::status::scan_paths has cognitive complexity 19 (threshold 15). Drivers by points: if/else 8 (16 pts), boolean chains 2, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/repository/status.rs"},"region":{"startLine":1174}}}],"partialFingerprints":{"codehealthFindingId/v1":"248b8a140463315ce8c018f62da18c63978e653bdbfe8924987622aca85f46ba"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_server::grpc::handlers::repository_create::repository_create (cognitive 19): lore_server::grpc::handlers::repository_create::repository_create has cognitive complexity 19 (threshold 15). Drivers by points: if/else 12 (16 pts), boolean chains 2, match/switch 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/handlers/repository_create.rs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"552a4e3ddbf705ab4d4559532f2c6da7d9cfbbc209ed4a80c6d912f46cfbb492"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_server::grpc::handlers::revision_list::walk_revisions (cognitive 19): lore_server::grpc::handlers::revision_list::walk_revisions has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (11 pts), loops 2 (4 pts), boolean chains 2, match/switch 1 (2 pts) (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/handlers/revision_list.rs"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8187e37a81842365c79c4d4d8135bdd349058c3d5c12eda1f5fe92818c9ad50"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalImmutableStore::put (cognitive 19): LocalImmutableStore::put has cognitive complexity 19 (threshold 15). Drivers by points: if/else 9 (11 pts), boolean chains 7, match/switch 1 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":3699}}}],"partialFingerprints":{"codehealthFindingId/v1":"c081dd568a0841fed9a6a775b7f882f540e89a1413a74067a8ef4c5382e431b8"}},{"ruleId":"D2","level":"warning","message":{"text":"StorageConnector::session_pool (cognitive 19): StorageConnector::session_pool has cognitive complexity 19 (threshold 15). Drivers by points: if/else 6 (11 pts), loops 3 (5 pts), match/switch 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":"lore-transport/src/session.rs"},"region":{"startLine":514}}}],"partialFingerprints":{"codehealthFindingId/v1":"dcabe7ee152cb1c2c14a3ee9d01976f3c6bf3a667594c797cb7c91bac1ef73d5"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_transport::auth::exchange::exchange (cognitive 19): lore_transport::auth::exchange::exchange has cognitive complexity 19 (threshold 15). Drivers by points: if/else 16 (19 pts) (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-transport/src/auth/exchange.rs"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"f542cc876294cd14794e8cef78839cca76007830a1706476bbb9bf454a4a79da"}},{"ruleId":"D2","level":"warning","message":{"text":"lore::revision_tree::delete::next_level (cognitive 18): lore::revision_tree::delete::next_level has cognitive complexity 18 (threshold 15). Drivers by points: if/else 3 (10 pts), loops 2 (3 pts), match/switch 1 (3 pts), boolean chains 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore/src/revision_tree/delete.rs"},"region":{"startLine":272}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b62a61d2efc3db9861dda3fea9606745cd0589614ac1c3ee63376977b41181a"}},{"ruleId":"D2","level":"warning","message":{"text":"lore::storage::copy::copy_local (cognitive 18): lore::storage::copy::copy_local has cognitive complexity 18 (threshold 15). Drivers by points: if/else 6 (8 pts), loops 4 (8 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":"lore/src/storage/copy.rs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"9926248520f4153e70d5355ca02f37dd19a08713e1238837f60a32f1a0631d48"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_aws::observe_aws_operation_callback (cognitive 18): lore_aws::observe_aws_operation_callback has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9 (13 pts), match/switch 2 (5 pts) (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-aws/src/lib.rs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"c865328f25b32e6d3f04e9a5ff24195e430c5a02453d11bc4c5a08f9b94e2915"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_client::cli::commands::branch::handle_branch_info (cognitive 18): lore_client::cli::commands::branch::handle_branch_info has cognitive complexity 18 (threshold 15). Drivers by points: if/else 8 (14 pts), loops 1 (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":"lore-client/src/cli/commands/branch.rs"},"region":{"startLine":624}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a3f164b37b3304f2715cf91f07e04c50e7ffd3f82b842cfdb26a4cbbf047e71"}},{"ruleId":"D2","level":"warning","message":{"text":"FilterInstance::step (cognitive 18): FilterInstance::step has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11 (15 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":"lore-revision/src/filter.rs"},"region":{"startLine":1039}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8508d4ba5cbb9a1308ed1112945e578184fb70a310fa169b2d22f5d49faea32"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::store::mutable::migrate_bucket_initial_to_typed (cognitive 18): lore_revision::store::mutable::migrate_bucket_initial_to_typed has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9 (15 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":"lore-revision/src/store/mutable.rs"},"region":{"startLine":260}}}],"partialFingerprints":{"codehealthFindingId/v1":"2394cc4b0322d43ab1482f3f97aff50bbd7ee27d0f5360304f45cb07939c98a4"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::branch::list_revisions (cognitive 18): lore_revision::branch::list_revisions has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11 (14 pts), boolean chains 3, 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":"lore-revision/src/branch.rs"},"region":{"startLine":2467}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f905295b0567e52e44bb58802c55c187ccd4ee645ce72a4db16939e540e6e41"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::commit::commit_file (cognitive 18): lore_revision::commit::commit_file has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11 (16 pts), boolean chains 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/commit.rs"},"region":{"startLine":2542}}}],"partialFingerprints":{"codehealthFindingId/v1":"b217be717320a060bf5168198c471f8d604e9d283a4c8a4bcfb44da9180e1a73"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::layer::walk_layer_subtree (cognitive 18): lore_revision::layer::walk_layer_subtree has cognitive complexity 18 (threshold 15). Drivers by points: if/else 5 (14 pts), match/switch 1 (3 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":"lore-revision/src/layer.rs"},"region":{"startLine":702}}}],"partialFingerprints":{"codehealthFindingId/v1":"a20d70550a1de27782b14a64ef54b526a9c3c7d2d632cf116f1525348012a253"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::file::stage::precreate_shared_ancestors (cognitive 18): lore_revision::file::stage::precreate_shared_ancestors has cognitive complexity 18 (threshold 15). Drivers by points: loops 5 (11 pts), if/else 2 (5 pts), boolean chains 1, match/switch 1 (nesting depth added 9). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/stage.rs"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"507bb10916ad72bdd25c6bfbba19e3f85ccca0e071c91961fb8282f0428d2c70"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::file::stage::classify_stage_path (cognitive 18): lore_revision::file::stage::classify_stage_path has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10 (14 pts), boolean chains 2, loops 2 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/stage.rs"},"region":{"startLine":1584}}}],"partialFingerprints":{"codehealthFindingId/v1":"74996ed74802883291c3037e559277ecf0cceb88d194e4556c6dd228c1877ddc"}},{"ruleId":"D2","level":"warning","message":{"text":"Connect::handle_auth (cognitive 18): Connect::handle_auth has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10 (16 pts), match/switch 1 (2 pts) (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/protocol/storage/connect.rs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f45cc10db8ff15715ad89239e23eb113b0d621a16348ea12c8769ca74c9429a"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_server::grpc::handlers::branch_list::branch_list_handler (cognitive 18): lore_server::grpc::handlers::branch_list::branch_list_handler has cognitive complexity 18 (threshold 15). Drivers by points: if/else 5 (11 pts), boolean chains 4, loops 2, 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":"lore-server/src/grpc/handlers/branch_list.rs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0edbd4e7bce913d02bb1849c34be099d4302018078eacc7fcbfe7a8502d449a"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_server::grpc::handlers::branch_push::verify_fragments (cognitive 18): lore_server::grpc::handlers::branch_push::verify_fragments has cognitive complexity 18 (threshold 15). Drivers by points: if/else 4 (8 pts), loops 3 (5 pts), match/switch 1 (3 pts), boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/handlers/branch_push.rs"},"region":{"startLine":757}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b9ce854f16bca303e719b5126df407777795b6bcbeed5385f8972e60de5005f"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_server::grpc::handlers::repository_delete::repository_delete (cognitive 18): lore_server::grpc::handlers::repository_delete::repository_delete has cognitive complexity 18 (threshold 15). Drivers by points: if/else 7 (13 pts), loops 2 (4 pts), boolean chains 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":"lore-server/src/grpc/handlers/repository_delete.rs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"0dfa72f496737e2fc1473bf8fcd06d7e5b6746106da60d38778916d03624f004"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_storage::compress::decompress_into (cognitive 18): lore_storage::compress::decompress_into has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11 (16 pts), boolean chains 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: one other method here (lore_storage::compress::decompress_into_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":"lore-storage/src/compress.rs"},"region":{"startLine":691}}}],"partialFingerprints":{"codehealthFindingId/v1":"eef04bdd0dec0139b4e1c5146911af41f00ab949e981fd06733094bffa16e6a3"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_storage::compress::decompress_into_slice (cognitive 18): lore_storage::compress::decompress_into_slice has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11 (16 pts), boolean chains 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: one other method here (lore_storage::compress::decompress_into) 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":"lore-storage/src/compress.rs"},"region":{"startLine":822}}}],"partialFingerprints":{"codehealthFindingId/v1":"f419f24103ffc837fa5d186158ecea785d60a172f2b196afc145c354d505fcfc"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_storage::local::immutable_store::maybe_fan_out_immutable_group (cognitive 18): lore_storage::local::immutable_store::maybe_fan_out_immutable_group has cognitive complexity 18 (threshold 15). Drivers by points: if/else 6 (9 pts), loops 7 (9 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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":4939}}}],"partialFingerprints":{"codehealthFindingId/v1":"6df994727aaf82e078048c623ede15ee4b4dbb46ac98fecf8f0b9bc7515535f7"}},{"ruleId":"D2","level":"warning","message":{"text":"RepositoryService::list (cognitive 18): RepositoryService::list has cognitive complexity 18 (threshold 15). Drivers by points: if/else 2 (8 pts), match/switch 2 (6 pts), 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":"lore-transport/src/grpc/repository_client.rs"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbafa0b26888287f4bcf1d8da81266fd5cc20fabc743df50348b1db5916fefeb"}},{"ruleId":"D2","level":"warning","message":{"text":"RevisionService::branch_list (cognitive 18): RevisionService::branch_list has cognitive complexity 18 (threshold 15). Drivers by points: if/else 2 (8 pts), match/switch 2 (6 pts), 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":"lore-transport/src/grpc/revision_client.rs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"72565d14dba3b1e0e0dd379fde4a09d59d57a3464a0b5ebcee39fcfdf79c20bd"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_transport::auth::exchange::auth_exchange_for_identity (cognitive 18): lore_transport::auth::exchange::auth_exchange_for_identity has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12 (16 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":"lore-transport/src/auth/exchange.rs"},"region":{"startLine":498}}}],"partialFingerprints":{"codehealthFindingId/v1":"033a9af7ec415892cd07d8a3d6705328f3f83c0cc32e8b32c06f4c0ad23027cd"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_client::cli::commands::branch::handle_branch_list (cognitive 17): lore_client::cli::commands::branch::handle_branch_list has cognitive complexity 17 (threshold 15). Drivers by points: if/else 5 (9 pts), boolean chains 4, match/switch 2 (4 pts) (nesting depth added 6). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-client/src/cli/commands/branch.rs"},"region":{"startLine":1354}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c19d68891bfb2f7a68f206afe334b467b4930fcab1767e180e6de3613063d0f"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_client::cli::commands::file::handle_file_diff (cognitive 17): lore_client::cli::commands::file::handle_file_diff has cognitive complexity 17 (threshold 15). Drivers by points: match/switch 3 (8 pts), if/else 2 (5 pts), loops 1 (3 pts), boolean chains 1 (nesting depth added 10). 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":"lore-client/src/cli/commands/file.rs"},"region":{"startLine":833}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0cdbad4ba1953e804f92b48005e6b6129da75452cf3bc7e16c99223d83edc59"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_io::iocp::reaper_loop (cognitive 17): lore_io::iocp::reaper_loop has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (13 pts), loops 2 (3 pts), boolean chains 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":"lore-io/src/iocp.rs"},"region":{"startLine":917}}}],"partialFingerprints":{"codehealthFindingId/v1":"90b3eb6413c5663aa9c57739b20dd0e78466d9635eb41de9367530207c50b219"}},{"ruleId":"D2","level":"warning","message":{"text":"State::block_file_metadata_cache (cognitive 17): State::block_file_metadata_cache has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9 (16 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":"lore-revision/src/state.rs"},"region":{"startLine":1567}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f20dc7f944e01cbd73ec80d63ba865cfd93332a56bba90ece832849cc7fe639"}},{"ruleId":"D2","level":"warning","message":{"text":"State::node_add (cognitive 17): State::node_add has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9 (15 pts), 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":"lore-revision/src/state.rs"},"region":{"startLine":2047}}}],"partialFingerprints":{"codehealthFindingId/v1":"19435614d6bf97fce31f2a610cebbf5b104e9429268598d28604eabb94b11bcf"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::repository::clone::clone_execute (cognitive 17): lore_revision::repository::clone::clone_execute has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (9 pts), loops 3 (4 pts), match/switch 2 (4 pts) (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/repository/clone.rs"},"region":{"startLine":1558}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7cfa91e7170ceb5df7f97627c192f01ec2781310134160fcf4be46e74d6da7a"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::repository::clone::clone_node (cognitive 17): lore_revision::repository::clone::clone_node has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8 (13 pts), loops 3 (4 pts) (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/repository/clone.rs"},"region":{"startLine":1645}}}],"partialFingerprints":{"codehealthFindingId/v1":"f74fa3f1f072d39f35836fe0b6a2b87ccfe46c68619bda9baf2b454ea9ae6fad"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::projfs::serve::get_placeholder_info_async (cognitive 17): lore_revision::projfs::serve::get_placeholder_info_async has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9 (16 pts), loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/projfs/serve.rs"},"region":{"startLine":829}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea94af9b7ac0eaec3b4e040f552dc13946b53009c239b014d5e2893bc32f5a5a"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::branch::delete (cognitive 17): lore_revision::branch::delete has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10 (14 pts), boolean chains 3 (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":"lore-revision/src/branch.rs"},"region":{"startLine":1930}}}],"partialFingerprints":{"codehealthFindingId/v1":"72a2f7d00b62c57a81715b5b03f3811c9cd2ec29409493ba8be06a4faa9728d3"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::commit::prune_dirty_recurse (cognitive 17): lore_revision::commit::prune_dirty_recurse has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (10 pts), loops 2 (4 pts), boolean chains 3 (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":"lore-revision/src/commit.rs"},"region":{"startLine":3780}}}],"partialFingerprints":{"codehealthFindingId/v1":"f06bd8f46b9a88666d8f4a428b3edff29e01554a0d1492592499d93881ff36f3"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::repository::register_instance_and_migrate_anchors (cognitive 17): lore_revision::repository::register_instance_and_migrate_anchors has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8 (10 pts), match/switch 2 (5 pts), boolean chains 2 (nesting depth added 5). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/repository.rs"},"region":{"startLine":2420}}}],"partialFingerprints":{"codehealthFindingId/v1":"88395227e5db16bc10d3859b3677049b515e07347d7bd7e233083c13abce7eaa"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::find::find_revision (cognitive 17): lore_revision::find::find_revision 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":"lore-revision/src/find.rs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"10bbaff1e9b724cb1af7316395f77d79118527277d789b32c89eb219704a5074"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::state::os_diff::diff_filesystem_matched_directory (cognitive 17): lore_revision::state::os_diff::diff_filesystem_matched_directory has cognitive complexity 17 (threshold 15). Drivers by points: if/else 13 (15 pts), boolean chains 2 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state/os_diff.rs"},"region":{"startLine":1559}}}],"partialFingerprints":{"codehealthFindingId/v1":"4eef1bf06754e8815a624a18bce75b8968f54924e25ba2b6e84b28626aa196f7"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::branch::create::create (cognitive 17): lore_revision::branch::create::create has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (13 pts), match/switch 2 (4 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":"lore-revision/src/branch/create.rs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"87e196a2cefb3f264815fb9f9b38e96d4923f4950278a5743a224129fda86b10"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::fs::os::rename_unifying (cognitive 17): lore_revision::fs::os::rename_unifying has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (11 pts), loops 2 (4 pts), boolean chains 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":"lore-revision/src/fs/os/mod.rs"},"region":{"startLine":492}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8b4a8b540360251a05d74ce428a6752fcc5adaff5f3a1da1911c9e240ee152e"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::file::stage::route_and_resolve_targets (cognitive 17): lore_revision::file::stage::route_and_resolve_targets has cognitive complexity 17 (threshold 15). Drivers by points: loops 5 (9 pts), if/else 2 (4 pts), match/switch 2 (3 pts), boolean chains 1 (nesting depth added 7). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/stage.rs"},"region":{"startLine":824}}}],"partialFingerprints":{"codehealthFindingId/v1":"68c9ac7fb0ec3678d9d3f2306de9023f91cba35e414c56c17ca1785fb95757ce"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_server::auth::jwt_axum_middleware::jwt_axum_verify_authorization (cognitive 17): lore_server::auth::jwt_axum_middleware::jwt_axum_verify_authorization has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (17 pts) (nesting depth added 10). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/auth/jwt_axum_middleware.rs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b3d1bb2b2646117809161cad86751478cc78e4f58d69fcdb118936a59516be6"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_server::grpc::repository::v1::repository_delete::handler (cognitive 17): lore_server::grpc::repository::v1::repository_delete::handler has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (11 pts), loops 2 (4 pts), boolean chains 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/repository/v1/repository_delete.rs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e1f19dfaff6105f496f4b44bb54b53fa35d6787e9c8885ceb377c43446f24b2"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_server::grpc::repository::v1::repository_create::repository_create_inner (cognitive 17): lore_server::grpc::repository::v1::repository_create::repository_create_inner has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10 (14 pts), boolean chains 2, match/switch 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/repository/v1/repository_create.rs"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9378c23fa951e85083068cecd7c84fe9e0431f9984a424e419965b323371b76"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalImmutableStore::copy_source_slot (cognitive 17): LocalImmutableStore::copy_source_slot has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (12 pts), boolean chains 4, 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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":1629}}}],"partialFingerprints":{"codehealthFindingId/v1":"5bbe9ceb85ac48487403aa1cbcd3eabe514d4e763948264764f22fbbf84d7cc3"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_storage::read::remote_get_retry (cognitive 17): lore_storage::read::remote_get_retry has cognitive complexity 17 (threshold 15). Drivers by points: if/else 5 (13 pts), match/switch 1 (2 pts), boolean chains 1, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/read.rs"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"95fe86da14d7557dbef5db92c12b3fa83485d6b41fe06409a3c72a800db2727f"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_client::cli::commands::repository::handle_repository_verify_fragment (cognitive 16): lore_client::cli::commands::repository::handle_repository_verify_fragment has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6 (10 pts), match/switch 2 (4 pts), loops 1 (2 pts) (nesting depth added 7). 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":"lore-client/src/cli/commands/repository.rs"},"region":{"startLine":1156}}}],"partialFingerprints":{"codehealthFindingId/v1":"db2820fee0822d786d0110002b8eddb91ebc718ab0ba602dfef49eb607ab4207"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::projfs::serve::prefetch_files (cognitive 16): lore_revision::projfs::serve::prefetch_files has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (12 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":"lore-revision/src/projfs/serve.rs"},"region":{"startLine":1131}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c1ea38b9e72ffbbc7bc70d578841b9ac710cf3c7aaeb941742202c913f94cf8"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::util::path::reduce_parent_segments (cognitive 16): lore_revision::util::path::reduce_parent_segments has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6 (12 pts), boolean chains 3, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/util/path.rs"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"47ada841a904f691d8b03f627cd2e6be8846d51f1860f95bfc00069411732812"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::commit::prepare_commit_metadata (cognitive 16): lore_revision::commit::prepare_commit_metadata has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6 (8 pts), match/switch 2 (5 pts), loops 1 (2 pts), boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/commit.rs"},"region":{"startLine":3633}}}],"partialFingerprints":{"codehealthFindingId/v1":"091d269a3c77b671f946fd1aa7832931d5a640c60d7a7e3ecd3cf29a965dbb5c"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::file::info::calculate_local_filtered_size_hash (cognitive 16): lore_revision::file::info::calculate_local_filtered_size_hash has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12 (16 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":"lore-revision/src/file/info.rs"},"region":{"startLine":450}}}],"partialFingerprints":{"codehealthFindingId/v1":"f22c30325ae27acce2c8d00a62360bd6317ccc8b239f84b7e57426f6efa61834"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::instance::reconcile_instances (cognitive 16): lore_revision::instance::reconcile_instances has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6 (12 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":"lore-revision/src/instance.rs"},"region":{"startLine":323}}}],"partialFingerprints":{"codehealthFindingId/v1":"937a4187946b1fa673615cee589d2ad8bc59dd55ae10a676f141abab9e7a01c9"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::branch::merge::apply_diff (cognitive 16): lore_revision::branch::merge::apply_diff has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10 (13 pts), boolean chains 2, match/switch 1 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, 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":"lore-revision/src/branch/merge.rs"},"region":{"startLine":2224}}}],"partialFingerprints":{"codehealthFindingId/v1":"475f42522cb17b447fb28953febe6ded5b95dc78c4acf8ecd92e3a56cf5fe1ca"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::branch::push::collect_divergent_history (cognitive 16): lore_revision::branch::push::collect_divergent_history has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6 (12 pts), loops 3 (4 pts) (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/push.rs"},"region":{"startLine":634}}}],"partialFingerprints":{"codehealthFindingId/v1":"e66bca55b0a2d7f7c86943f1068d2973b3fb5fa59aed19e85d4d23a1013ca123"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_revision::branch::reset::reset (cognitive 16): lore_revision::branch::reset::reset has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11 (12 pts), boolean chains 4 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/reset.rs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"cedaf07cb93cb6d67c1f4715a6c461aac5623872f38f38ae994ace6b775e1729"}},{"ruleId":"D2","level":"warning","message":{"text":"StorageServiceV4::run_request_handler (cognitive 16): StorageServiceV4::run_request_handler has cognitive complexity 16 (threshold 15). Drivers by points: if/else 3 (8 pts), match/switch 4 (7 pts), boolean chains 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":"lore-server/src/quic/storage_service_v4.rs"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"df759d9364c3677b208525d6508aa4214fe26ed070ee47ffa25bfb67dfc8cff0"}},{"ruleId":"D2","level":"warning","message":{"text":"StreamHandler::handle_message (cognitive 16): StreamHandler::handle_message has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11 (14 pts), match/switch 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, 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":"lore-server/src/quic/stream_handler.rs"},"region":{"startLine":271}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c038ab97162f484621851a79b4f4808b7d5cc9ce1b60b8344b476969a656b9d"}},{"ruleId":"D2","level":"warning","message":{"text":"TelemetryInitializer::from_config (cognitive 16): TelemetryInitializer::from_config 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":"lore-server/src/telemetry/mod.rs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"1294e5dc586b064074519411dbfa4faee389537b79b155bd83b871ceff8bba5e"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_server::server::log_base_address (cognitive 16): lore_server::server::log_base_address has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (9 pts), loops 1 (3 pts), match/switch 2 (3 pts), boolean chains 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":"lore-server/src/server.rs"},"region":{"startLine":1701}}}],"partialFingerprints":{"codehealthFindingId/v1":"06706833393d31725bf677e78276920cf516299c1d6c2ba2653319b9bcf2a5c9"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_server::grpc::handlers::revision_state_history::handler (cognitive 16): lore_server::grpc::handlers::revision_state_history::handler has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (11 pts), boolean chains 2, 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":"lore-server/src/grpc/handlers/revision_state_history.rs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"50474866404ef87ed77f51e3f01f889fc6f69255f247f930bf231bcb1e1d7d23"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_server::grpc::handlers::branch_diff::branch_diff_handler (cognitive 16): lore_server::grpc::handlers::branch_diff::branch_diff_handler has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (10 pts), loops 2 (4 pts), boolean chains 1, match/switch 1 (nesting depth added 7). 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":"lore-server/src/grpc/handlers/branch_diff.rs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec7fccc7be7b3e39d4602f5c57b3923b973509cd16856d8a90877ee9e6e0e3e2"}},{"ruleId":"D2","level":"warning","message":{"text":"lore_storage::write::file_matches (cognitive 16): lore_storage::write::file_matches has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9 (11 pts), boolean chains 3, match/switch 1 (2 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":"lore-storage/src/write.rs"},"region":{"startLine":1635}}}],"partialFingerprints":{"codehealthFindingId/v1":"69d22efeccf1cbb8aed2ff259a1b3c5741246fb0e9cb4f49102b1ec0a0ea72b1"}},{"ruleId":"D2","level":"warning","message":{"text":"EnvironmentConfig::from (cognitive 16): EnvironmentConfig::from has cognitive complexity 16 (threshold 15). Drivers by points: if/else 16. 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":"lore-transport/src/grpc/environment_client.rs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"64d222ce46d00ec6492f39eae5102eab111192f843bed6f452931a5e33cd767f"}},{"ruleId":"D2","level":"warning","message":{"text":"content_tabs._transform (cognitive 16): content_tabs._transform 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":"docs/assets/hooks/content_tabs.py"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"f748db8648c1a233d551af6d6aecdf18a24bf52527bbf03e2ccc54c182c6d225"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/state.rs: FileTooLong \u2014 5363 significant 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 73 free functions. The bar is 500 significant lines; this is 4863 over it, 10.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":"lore-revision/src/state.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a799a7b863a66ec456d1092e0e5e8bc4afbc6e4f70cd563cdc073056bcef597"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: local/immutable_store.rs: FileTooLong \u2014 3263 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 72% of them inside a single declaration: LocalImmutableStore (4 blocks, 314-4562). The bar is 500 significant lines; this is 2763 over it, 6.53\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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6bbbbfc034239def41f7c5fbe35ab89fa0a1f52d8ebef65ab43ac302dac8e7e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: branch/merge.rs: FileTooLong \u2014 3245 significant 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 53 free functions. The bar is 500 significant lines; this is 2745 over it, 6.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":"lore-revision/src/branch/merge.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a538194b2c195388ba2ae86145ed4ca367d4d34bba50ea5095c6c167b36b5d1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/commit.rs: FileTooLong \u2014 3049 significant 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 44 free functions. The bar is 500 significant lines; this is 2549 over it, 6.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":"lore-revision/src/commit.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"acff0aa3b19ccf003ace8e3a58154e2eb35d99c594e7a82fee1631537ab7f3ce"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: State: ClassTooLong \u2014 2378 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 122 methods, 3 blocks, lines 385-4420. The bar is 400 significant lines; this is 1978 over it, 5.95\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":385}}}],"partialFingerprints":{"codehealthFindingId/v1":"86e0ee32f67229f9f3258c9f7751b501a633e66b34794c60e79bb977b0b80800"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: LocalImmutableStore: ClassTooLong \u2014 2343 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 35 methods, 4 blocks, lines 314-4562. The bar is 400 significant lines; this is 1943 over it, 5.86\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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":314}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0f63787e4cef77ece6d6984250cb0993d444044d9ceee5616407aad1529de13"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/branch.rs: FileTooLong \u2014 2579 significant 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 82 free functions. The bar is 500 significant lines; this is 2079 over it, 5.16\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9aec720f7a9d4ddaaf457fc6e884eda2408f8c24838e757396900bc59af79391"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/stage.rs: FileTooLong \u2014 2530 significant 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 2030 over it, 5.06\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/stage.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f212a91d6a33dc2e3167cfc6987a8d38be2bcfb223ec58385d2a77119d5ec400"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/repository.rs: FileTooLong \u2014 2352 significant 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 53 free functions. The bar is 500 significant lines; this is 1852 over it, 4.70\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":"lore-revision/src/repository.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7818056e7c1bb767f5d23790be8809e37597a9d159f0800469b2113642032be"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/interface.rs: FileTooLong \u2014 2232 significant 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 304 free functions. The bar is 500 significant lines; this is 1732 over it, 4.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":"lore/src/interface.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb2c709bce511ac62851461893cffb040e020937a9289f4cb9cc2d8b40ae0b10"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: State: TooManyMethods \u2014 122 methods. The bar is 30 methods; this is 92 over it, 4.07\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":385}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d51e21c1966346003244dbb6f013d1dae82be55f9e8a27d29e63fd10f0f3794"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_server::server::async_main: FunctionTooLong \u2014 lore_server::server::async_main runs 402 significant 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 302 over it, 4.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":"lore-server/src/server.rs"},"region":{"startLine":1870}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec9eec3f83086623c53ebc096afb2c415ef65aa9de1429c2ce4d81aff4a7e75b"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::branch::push::collect_fragments_and_push: FunctionTooLong \u2014 lore_revision::branch::push::collect_fragments_and_push runs 388 significant 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 288 over it, 3.88\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/push.rs"},"region":{"startLine":704}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1e5b2a9585876e4f79c60c78e71ec49401a018a2922b79511cad0bfbdb01164"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::stage::stage_from_parent_revision_in_operation: FunctionTooLong \u2014 lore_revision::stage::stage_from_parent_revision_in_operation 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":"lore-revision/src/stage.rs"},"region":{"startLine":2575}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ebacbcd9aaa919841f0f7bfaa925369895af4e3f28ba78e4dd11d00b31c685e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: fs/realize.rs: FileTooLong \u2014 1807 significant 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 1307 over it, 3.61\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":"lore-revision/src/fs/realize.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"73abb4fd6f7f1bc1a2249271c324fc1eea5d95f13e68018861bd11f06ff885b2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: commands/revision.rs: FileTooLong \u2014 1802 significant 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 46 free functions. The bar is 500 significant lines; this is 1302 over it, 3.60\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-client/src/cli/commands/revision.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb0d6903d605661595263451f387791341767ac9c30a33c5bda0981f319749d4"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::revision::sync::sync: FunctionTooLong \u2014 lore_revision::revision::sync::sync runs 353 significant 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 253 over it, 3.53\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":"lore-revision/src/revision/sync.rs"},"region":{"startLine":418}}}],"partialFingerprints":{"codehealthFindingId/v1":"858fa0b9ce831b707e769d41207c5e0b9afe0179b9a2bc068960e24ce1ca8d54"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::stage::stage_node_from_metadata: FunctionTooLong \u2014 lore_revision::stage::stage_node_from_metadata runs 352 significant 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 252 over it, 3.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":"lore-revision/src/stage.rs"},"region":{"startLine":1949}}}],"partialFingerprints":{"codehealthFindingId/v1":"22e6c06e6c77f87068cef7d99b3f5a883377068b5811bda9c86ecbbce0837a17"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: state/os_diff.rs: FileTooLong \u2014 1739 significant 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 1239 over it, 3.48\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":"lore-revision/src/state/os_diff.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4ac5abcf68b168c0fa288f967924540d8922c11006045719e41cefaabf90fab"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::fs::realize::realize_file_merge: FunctionTooLong \u2014 lore_revision::fs::realize::realize_file_merge runs 343 significant 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 243 over it, 3.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":"lore-revision/src/fs/realize.rs"},"region":{"startLine":2175}}}],"partialFingerprints":{"codehealthFindingId/v1":"38dc824fef231a2ce89cab877e8263f019702967e5bbda2a2a393e41b5ac6967"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/server.rs: FileTooLong \u2014 1649 significant 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 39 free functions. The bar is 500 significant lines; this is 1149 over it, 3.30\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/server.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9b483effaae322706314a890185392454cfceac8172f986285689778785f0d9"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::repository::status::status: FunctionTooLong \u2014 lore_revision::repository::status::status runs 319 significant 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 219 over it, 3.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":"lore-revision/src/repository/status.rs"},"region":{"startLine":1365}}}],"partialFingerprints":{"codehealthFindingId/v1":"a36835b185518185c703587bf4bc0a4e811d54585c9acf36bfc1e97d8d0aba84"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::file::unstage::unstage_node: FunctionTooLong \u2014 lore_revision::file::unstage::unstage_node runs 290 significant 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 190 over it, 2.90\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":"lore-revision/src/file/unstage.rs"},"region":{"startLine":916}}}],"partialFingerprints":{"codehealthFindingId/v1":"79884bc6278652e549b4d93ebd1fc9b24092822840930d8be8757fab07684604"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::revision::restore::restore: FunctionTooLong \u2014 lore_revision::revision::restore::restore runs 288 significant 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 188 over it, 2.88\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/revision/restore.rs"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffa0a518e0928c8f14a444953d31e3c85c2289120db032dcd1ad1d28324f3718"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::state::diff::add_change_for_paired_nodes: FunctionTooLong \u2014 lore_revision::state::diff::add_change_for_paired_nodes runs 288 significant 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 188 over it, 2.88\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state/diff.rs"},"region":{"startLine":916}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa77a1223265f091dc7ed237fb41f4421c5e334d22ddd5680fc5f74940016f69"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::state::collect_new_fragments: FunctionTooLong \u2014 lore_revision::state::collect_new_fragments runs 287 significant 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 187 over it, 2.87\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":"lore-revision/src/state.rs"},"region":{"startLine":7484}}}],"partialFingerprints":{"codehealthFindingId/v1":"6dc8dde3ea206dcb418653271d5a0751678e8b0d4ecc0df0ca81c5a22489da29"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/link.rs: FileTooLong \u2014 1431 significant 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 931 over it, 2.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":"lore-revision/src/link.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fddca65ddd336419b1a8ee8c236252ec076a08ca389ad5b6951d456d35e3ef6e"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::link::add::add: FunctionTooLong \u2014 lore_revision::link::add::add runs 285 significant 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 185 over it, 2.85\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/link/add.rs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9b21a7fa5511b1b4ca6d10041693e4e58612431e8aaba66f113fc2ae7baa0fe"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: file/reset.rs: FileTooLong \u2014 1414 significant 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 914 over it, 2.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":"lore-revision/src/file/reset.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6f3af5606fc28260862ef0ae095b27046bea3dc2157c513513f85ab031540fc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: repository/clone.rs: FileTooLong \u2014 1404 significant 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 904 over it, 2.81\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":"lore-revision/src/repository/clone.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf65bbf3c5822eb69ce8be16101b97eeca6ffc595107dfe178bdb85deb94b945"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::file::stage::stage_move: FunctionTooLong \u2014 lore_revision::file::stage::stage_move runs 280 significant 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 180 over it, 2.80\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":"lore-revision/src/file/stage.rs"},"region":{"startLine":1168}}}],"partialFingerprints":{"codehealthFindingId/v1":"42dfef926937030477100d748beeb0b057962d1c0a8c70251c0540a62288a1fe"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_transport::connection::connect_impl: FunctionTooLong \u2014 lore_transport::connection::connect_impl runs 280 significant 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 180 over it, 2.80\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":"lore-transport/src/connection.rs"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"31575f595defaa0757834c5038f43b2493898cf27d739443c7ad98b50ca0c625"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/write.rs: FileTooLong \u2014 1364 significant 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 864 over it, 2.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":"lore-storage/src/write.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"15cbae808d8d88f3b2578621eba7f82aa3284a525b972f24116627c62e7ff546"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::branch::merge::merge_into: FunctionTooLong \u2014 lore_revision::branch::merge::merge_into runs 271 significant 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 171 over it, 2.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":"lore-revision/src/branch/merge.rs"},"region":{"startLine":4328}}}],"partialFingerprints":{"codehealthFindingId/v1":"3057ddb873607b341696894e91e743de0f06f4275f0189d6adee9d72830a44d3"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: store/immutable_store.rs: FileTooLong \u2014 1341 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 78% of them inside a single declaration: AwsImmutableStore (3 blocks, 533-2179). The bar is 500 significant lines; this is 841 over it, 2.68\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-aws/src/store/immutable_store.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d45b6beeb8e3fd9c5b18db2520b9737fa3a773735e45fd44771c2413d62f89e"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::revision::diff3_with_source_cap: FunctionTooLong \u2014 lore_revision::revision::diff3_with_source_cap runs 262 significant 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 162 over it, 2.62\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":"lore-revision/src/revision.rs"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"f469aa27c7c44524e574daeaca62d7091b5d69c4c3a50b78b64ac519ebf3ac51"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: AwsImmutableStore: ClassTooLong \u2014 1041 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 26 methods, 3 blocks, lines 533-2179. The bar is 400 significant lines; this is 641 over it, 2.60\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-aws/src/store/immutable_store.rs"},"region":{"startLine":533}}}],"partialFingerprints":{"codehealthFindingId/v1":"7502a3bfcdc70823fb6373533ff2c67734c3c211bb083f5fee77c1ba8befb25a"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: State.serialize: MethodTooLong \u2014 serialize runs 260 significant 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 160 over it, 2.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":"lore-revision/src/state.rs"},"region":{"startLine":744}}}],"partialFingerprints":{"codehealthFindingId/v1":"2653a86bc511d2dd97adbb6a51ba09241f21d5ce7980c8439043307ac2497bc0"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::fs::realize::verify_filesystem: FunctionTooLong \u2014 lore_revision::fs::realize::verify_filesystem runs 259 significant 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 159 over it, 2.59\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":"lore-revision/src/fs/realize.rs"},"region":{"startLine":571}}}],"partialFingerprints":{"codehealthFindingId/v1":"53513503ae9121dc487cd57eba0b5f14de1c2711114d1c3f3fa5b44a6a6fa53f"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::stage::stage_link_paths_from_parent_revision: FunctionTooLong \u2014 lore_revision::stage::stage_link_paths_from_parent_revision runs 258 significant 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 158 over it, 2.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":"lore-revision/src/stage.rs"},"region":{"startLine":3108}}}],"partialFingerprints":{"codehealthFindingId/v1":"b47ee7d47b7126afbe3419a9e1798fbb1e2a928353ce099fd9b73786e313de7a"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::commit::commit_with_metadata_in_operation: FunctionTooLong \u2014 lore_revision::commit::commit_with_metadata_in_operation runs 250 significant 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 150 over it, 2.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":"lore-revision/src/commit.rs"},"region":{"startLine":560}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2ac10d9cbbe8876e182e406936e4dbfbcab4147bb8b9aa2c1b160bff651f1d6"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::stage::stage_directory: FunctionTooLong \u2014 lore_revision::stage::stage_directory runs 246 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 146 over it, 2.46\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/stage.rs"},"region":{"startLine":1378}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef36f26457341021e04da66114e91000b42131ad4be276eb6c3a9edb0b595ccd"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: commands/repository.rs: FileTooLong \u2014 1215 significant 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 715 over it, 2.43\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":"lore-client/src/cli/commands/repository.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fd984b24a3a5d5f33c721dbb636a04685f0325bd69646767502172069495b5e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: commands/file.rs: FileTooLong \u2014 1213 significant 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 713 over it, 2.43\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":"lore-client/src/cli/commands/file.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3364849475518ee7dac28b98adbd47c677b9eb88b5e76e36cdc36d1cefb9afb2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: grpc/mod.rs: FileTooLong \u2014 1210 significant 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 710 over it, 2.42\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-transport/src/grpc/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"88a44c8d8c82e8be4e65dbce39193e1d65951b95e5361de02494b0cb8dd611cb"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/read.rs: FileTooLong \u2014 1188 significant 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 688 over it, 2.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":"lore-storage/src/read.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"09bb94dc4ef863db4f1d38e7e7ef0eb8167fb69e254af469526e25eb5d3500e4"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: repository/status.rs: FileTooLong \u2014 1184 significant 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 684 over it, 2.37\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":"lore-revision/src/repository/status.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3f24cd7f6775e4b7ee29394c40c3226973513dd403d15786ea37377dc273a44"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/revision.rs: FileTooLong \u2014 1180 significant 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 680 over it, 2.36\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":"lore-revision/src/revision.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab33fed8bdfc2bb0070b9440cdb97500e6bd29a3e6b38215d769f41d8d53c653"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: commands/branch.rs: FileTooLong \u2014 1179 significant 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 679 over it, 2.36\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":"lore-client/src/cli/commands/branch.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae4c3d22d72e3ab113a7a6bb0800db2749b79f3293a77af275a101c3be16c3d6"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::state::os_diff::diff_filesystem_directory_walk: FunctionTooLong \u2014 lore_revision::state::os_diff::diff_filesystem_directory_walk 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":"lore-revision/src/state/os_diff.rs"},"region":{"startLine":1169}}}],"partialFingerprints":{"codehealthFindingId/v1":"054e5bedfdb620aae2bc56cc596dbf300ea075166d03a26844bd38d646121b87"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: branch/push.rs: FileTooLong \u2014 1136 significant 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 636 over it, 2.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":"lore-revision/src/branch/push.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd1a307b660967feae97b39ac10ffb64fe910b46faeb9d5f1101cd7856cb9c1c"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_client::cli::commands::repository::handle_repository_status: FunctionTooLong \u2014 lore_client::cli::commands::repository::handle_repository_status 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":"lore-client/src/cli/commands/repository.rs"},"region":{"startLine":513}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8af898707472d3d3d88cedfe80754296df0e470047663be8f39f4cf96f92b8b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: file/unstage.rs: FileTooLong \u2014 1092 significant 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 592 over it, 2.18\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/unstage.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7ab747a4743970cea41be047d57107e36da1f3f42914b14bf162cb119c61bb9"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::stage::stage_filesystem_path: FunctionTooLong \u2014 lore_revision::stage::stage_filesystem_path 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":"lore-revision/src/stage.rs"},"region":{"startLine":369}}}],"partialFingerprints":{"codehealthFindingId/v1":"22b11d9ef33e897c661fd28045a15e0846b5148baab8957a4e9c8abca372426c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: file/stage.rs: FileTooLong \u2014 1089 significant 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 589 over it, 2.18\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/stage.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f43a644b2b456bd6fd1df9d79b55db8f677d954aa95c5e11563eb7db03275a29"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::commit::commit_link_only: FunctionTooLong \u2014 lore_revision::commit::commit_link_only 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":"lore-revision/src/commit.rs"},"region":{"startLine":1079}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae8612ba7a21860b22390cc3cf66222d0c53d209bdaac638b243361d1ef66478"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: local/mutable_store.rs: FileTooLong \u2014 1075 significant 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 575 over it, 2.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":"lore-storage/src/local/mutable_store.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f7f215c57d055f9a53c130440214d9121e15c252df2cdb3a057f07f54b37a7d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/node.rs: FileTooLong \u2014 1055 significant 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 555 over it, 2.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":"lore-revision/src/node.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"71240101f7d17c707ad83309056ced12ff6cbfa623afe6a2f06b266bfb7c75c1"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::commit::commit_directory: FunctionTooLong \u2014 lore_revision::commit::commit_directory runs 206 significant 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 106 over it, 2.06\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/commit.rs"},"region":{"startLine":1921}}}],"partialFingerprints":{"codehealthFindingId/v1":"64eca421689750cad69063d2f7c0f22525ebeeaa1941003a8965f42162a3ebea"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: LocalImmutableStore.store: MethodTooLong \u2014 store runs 204 significant 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 104 over it, 2.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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":1676}}}],"partialFingerprints":{"codehealthFindingId/v1":"93a40aaa5042f5fecc8920337a2629a042b003d475c301db3379f363e16b4826"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::projfs::serve::get_directory_enumeration_async: FunctionTooLong \u2014 lore_revision::projfs::serve::get_directory_enumeration_async runs 203 significant 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 103 over it, 2.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":"lore-revision/src/projfs/serve.rs"},"region":{"startLine":497}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c1d08427e4bc58f3f200c25247e5b78d8da47c5b03f36db874dd6811b30d2b0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: state/diff.rs: FileTooLong \u2014 1007 significant 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 507 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":"lore-revision/src/state/diff.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5813b765d6868f155761b36256e7384ba9214fcb5b34bc0b916358bcfae4384e"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::repository::load_and_connect_with_token: FunctionTooLong \u2014 lore_revision::repository::load_and_connect_with_token runs 201 significant 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 101 over it, 2.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":"lore-revision/src/repository.rs"},"region":{"startLine":2105}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc8d50699c4cb37f6921ff15a4dd8d8fe500377ad94c69a89b12b12cb9f16d1f"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: StorageServiceV4.run_request_handler: MethodTooLong \u2014 run_request_handler runs 198 significant 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 98 over it, 1.98\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":"lore-server/src/quic/storage_service_v4.rs"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a459b18d2c3793e5b1dee3f8f577dd5bb3e8b42998b10c13f0a156bc1cdbd8e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: file/dirty.rs: FileTooLong \u2014 978 significant 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 478 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":"lore-revision/src/file/dirty.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4d985da1d01b70414f7f5bf3e63b4910fc8c446029e4da7ad6b53c5831d3cc4"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::repository::clone::clone_into: FunctionTooLong \u2014 lore_revision::repository::clone::clone_into runs 192 significant 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 92 over it, 1.92\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":"lore-revision/src/repository/clone.rs"},"region":{"startLine":1019}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c41ec022d15f4f75895b525c8646b85166ad2325e3efda513279fe131e87581"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: LocalImmutableStore.verify_fragment: MethodTooLong \u2014 verify_fragment runs 192 significant 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 92 over it, 1.92\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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":4286}}}],"partialFingerprints":{"codehealthFindingId/v1":"a66ff02027378fcb102b6a215e4c305774d515e3ca1567bbc6da32478a8af729"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/layer.rs: FileTooLong \u2014 945 significant 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 445 over it, 1.89\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":"lore-revision/src/layer.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c28bbc8215a4044061335f7a8c6738dc89d08c48c480ef4d6a5b0f8e1835590"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::commit::weave_history: FunctionTooLong \u2014 lore_revision::commit::weave_history runs 184 significant 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 84 over it, 1.84\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":"lore-revision/src/commit.rs"},"region":{"startLine":3367}}}],"partialFingerprints":{"codehealthFindingId/v1":"7899315f7f0af060bb7c6853a4a8fbdec7490f6dba66878f2879f4937dfc76f5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: revision/sync.rs: FileTooLong \u2014 919 significant 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 419 over it, 1.84\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":"lore-revision/src/revision/sync.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffba77e19d38be685961dcf790a48644440bea02ed5f88d459d109bb56ed2ee2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: store/composite.rs: FileTooLong \u2014 914 significant 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 66% of them inside a single declaration: CompositeStore (3 blocks, 438-1405). The bar is 500 significant lines; this is 414 over it, 1.83\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":"lore-revision/src/store/composite.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fde03a4e87b20d6fccc235ac3e99bbcce9ce47f55e6ecc78c1443078f7d0b49"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/revision.rs: FileTooLong \u2014 914 significant 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 58 free functions. The bar is 500 significant lines; this is 414 over it, 1.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":"lore/src/revision.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d44717f50738f8b4be4715e8920f0489356aa0122209118ba8e6d45cfd407a5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/connection.rs: FileTooLong \u2014 911 significant 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 411 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":"lore-transport/src/connection.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfa8ff43db225fc9b972c6a8a69be645020984a8d7123d8cdefd9329a99c22d2"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::repository::branch_switch_target: FunctionTooLong \u2014 lore_revision::repository::branch_switch_target runs 181 significant 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 81 over it, 1.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":"lore-revision/src/repository.rs"},"region":{"startLine":2993}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a14a9aab9505af365ee36d07d18eb9274316d9d5b51977658fadf7609798f76"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: quic/client.rs: FileTooLong \u2014 902 significant 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 402 over it, 1.80\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":"lore-transport/src/quic/client.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b4d6403d6171dbd121bf9558daa9da2615edaf03db84e1ce6baa67350412465"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/branch.rs: FileTooLong \u2014 893 significant 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 53 free functions. The bar is 500 significant lines; this is 393 over it, 1.79\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":"lore/src/branch.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf9078b0bd0d7188cc277ab277592a41ad2d92ba1e1ed97c938db638009a337b"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: GrpcServerBuilder.with_jwt_verifier: MethodTooLong \u2014 with_jwt_verifier runs 178 significant 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 78 over it, 1.78\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":"lore-server/src/grpc/server.rs"},"region":{"startLine":656}}}],"partialFingerprints":{"codehealthFindingId/v1":"29f23551ee5ca405d5e082c12d392a7be7917fe898ab13aea78943f83818b889"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/defragment.rs: FileTooLong \u2014 889 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 389 over it, 1.78\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":"lore-storage/src/defragment.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5306ee2453011b1a637231991b5886db6bce2101c34d834d7c64ec6c7a745df4"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_server::quic::storage_service::build_storage_protocol_request_span: FunctionTooLong \u2014 lore_server::quic::storage_service::build_storage_protocol_request_span runs 174 significant 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 74 over it, 1.74\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":"lore-server/src/quic/storage_service.rs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"00e3616c039f78932988fa178a995e523f47105d4f6d0b02e29f7819796b768d"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: LocalMutableStore.flush_all: MethodTooLong \u2014 flush_all runs 173 significant 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 73 over it, 1.73\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":"lore-storage/src/local/mutable_store.rs"},"region":{"startLine":986}}}],"partialFingerprints":{"codehealthFindingId/v1":"94bf9d9bb2dbe86679d4587882e87038174320bdacc4ec6aa6e54c47187442c2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: file/diff.rs: FileTooLong \u2014 860 significant 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 360 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":"lore-revision/src/file/diff.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"03c038b08a9b2f4066c8badeae83950a2c24c0300bf2a404323a6ee93653536e"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::branch::merge::apply_diff: FunctionTooLong \u2014 lore_revision::branch::merge::apply_diff runs 172 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 72 over it, 1.72\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/merge.rs"},"region":{"startLine":2224}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d2c3839c8b3226ee19c60fa86c6d3223c556a4017369a2b469ed817b53d1c57"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/interface.rs: FileTooLong \u2014 857 significant 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 357 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":"lore-revision/src/interface.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f48c7019bb8ead2be0f8f396f4fb0384a813e750be0c5b7745c594ef16f9d04e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/repository.rs: FileTooLong \u2014 849 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 49 free functions. The bar is 500 significant lines; this is 349 over it, 1.70\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":"lore/src/repository.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed246295201ec6e6587b4e8c8d2867fdf1cdad7a0292287085b0920c34cd2882"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: projfs/serve.rs: FileTooLong \u2014 828 significant 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 328 over it, 1.66\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":"lore-revision/src/projfs/serve.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"31d1e0ba59c94e8f61aae57a1336c83c5a1c8c94e2fb0867f69f1dc94daa8369"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::commit::commit_link: FunctionTooLong \u2014 lore_revision::commit::commit_link runs 165 significant 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 65 over it, 1.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":"lore-revision/src/commit.rs"},"region":{"startLine":2848}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8b09511edb40eeeb3bc0d8c4e557ec55f160518cfd03df8a0323488647ed3c9"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::state::os_diff::diff_filesystem_new_entries: FunctionTooLong \u2014 lore_revision::state::os_diff::diff_filesystem_new_entries runs 165 significant 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 65 over it, 1.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":"lore-revision/src/state/os_diff.rs"},"region":{"startLine":1977}}}],"partialFingerprints":{"codehealthFindingId/v1":"3efa79f6f7418ff56435155502584b5e73f58b83aae9daa34a664bdc44718ff1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: grpc/storage_client.rs: FileTooLong \u2014 822 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 70% of them inside a single declaration: StorageService (2 blocks, 411-1262). The bar is 500 significant lines; this is 322 over it, 1.64\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-transport/src/grpc/storage_client.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3b05481c2e149e10b2c078d10c8ac8c6b0adddf9cfec69dcb848fdd81af1466"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::repository::layer_branch_switch: FunctionTooLong \u2014 lore_revision::repository::layer_branch_switch runs 162 significant 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 62 over it, 1.62\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":"lore-revision/src/repository.rs"},"region":{"startLine":3257}}}],"partialFingerprints":{"codehealthFindingId/v1":"cefe031741c375da26b0a6e0b5a049e6f36c0dbb8ab68b11bd6e642e1e57a5f4"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::branch::merge::merge_repository: FunctionTooLong \u2014 lore_revision::branch::merge::merge_repository runs 161 significant 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 61 over it, 1.61\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":"lore-revision/src/branch/merge.rs"},"region":{"startLine":445}}}],"partialFingerprints":{"codehealthFindingId/v1":"d859515fd39d4ec335b51bf30caeb5548fa78889a8896120139e9a6d759e626d"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::file::dirty::dirty_move: FunctionTooLong \u2014 lore_revision::file::dirty::dirty_move runs 161 significant 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 61 over it, 1.61\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":"lore-revision/src/file/dirty.rs"},"region":{"startLine":1141}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a09768850e622fc144b887a16eaa74b4d2a15bcb9bfb8507409f02b053e4974"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::file::reset::reset_walk_path: FunctionTooLong \u2014 lore_revision::file::reset::reset_walk_path runs 159 significant 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 59 over it, 1.59\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":"lore-revision/src/file/reset.rs"},"region":{"startLine":1199}}}],"partialFingerprints":{"codehealthFindingId/v1":"24b1c103e4c5b0e43dbdacd442662fcac738b54dc4e4581ba963bc7dd605a859"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: LocalImmutableStore.new: MethodTooLong \u2014 new runs 159 significant 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 59 over it, 1.59\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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":1031}}}],"partialFingerprints":{"codehealthFindingId/v1":"e13c1568c8422e56fd49b72f3831a543a8f683ce208a2ce9fc33bdb3efe36754"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/filter.rs: FileTooLong \u2014 793 significant 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 293 over it, 1.59\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":"lore-revision/src/filter.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1591791922112024d2da8981085a0a4aed7211e02e8a465054f856b63453e449"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Metadata: TooManyMethods \u2014 47 methods. The bar is 30 methods; this is 17 over it, 1.57\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":"lore-revision/src/metadata.rs"},"region":{"startLine":301}}}],"partialFingerprints":{"codehealthFindingId/v1":"5541606b5d2f8ebf4ce02c4e2e6f2c84852add57cbb27e5186e96fd14cb88d1d"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::file::stage::stage: FunctionTooLong \u2014 lore_revision::file::stage::stage runs 156 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 56 over it, 1.56\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/stage.rs"},"region":{"startLine":553}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc763bed78fd087a4d0d1fb2f818f4b1b31e81bb8b82073088d22332e8e6d4c3"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::projfs::serve::serve: FunctionTooLong \u2014 lore_revision::projfs::serve::serve runs 154 significant 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 54 over it, 1.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":"lore-revision/src/projfs/serve.rs"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbd3e37192193178588a5a314548348c056c07bc1f028e2d47be55fa8270e0d0"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: LocalImmutableStore.evict_group_sized: MethodTooLong \u2014 evict_group_sized runs 154 significant 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 54 over it, 1.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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":2230}}}],"partialFingerprints":{"codehealthFindingId/v1":"73cbc7b79d009f6ef073aa7a6fcde36e8ecec4e987bf736769aa090368087e7f"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: LocalMutableStore: ClassTooLong \u2014 609 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 6 methods, 3 blocks, lines 190-1631. The bar is 400 significant lines; this is 209 over it, 1.52\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":"lore-storage/src/local/mutable_store.rs"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8f0857240e55125965180f187010b8abe3ae17ba0c86b635f7010c1a18d5979"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::layer::add: FunctionTooLong \u2014 lore_revision::layer::add 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":"lore-revision/src/layer.rs"},"region":{"startLine":303}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8171b15927f03c0c26e2c7a7b9f9af17cb8c08d573408fb791dad4cd60fc20c"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_server::grpc::handlers::branch_push::try_fast_forward_merge: FunctionTooLong \u2014 lore_server::grpc::handlers::branch_push::try_fast_forward_merge 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":"lore-server/src/grpc/handlers/branch_push.rs"},"region":{"startLine":479}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2658a698c2e0ad325e4904db93a09dd7d7be5fa22783d30d07047bc218c93ab"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: RepositoryContext: TooManyMethods \u2014 45 methods. The bar is 30 methods; this is 15 over it, 1.50\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":"lore-revision/src/repository.rs"},"region":{"startLine":633}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ff63845b4547a24d1291e11602870cf1f5346ea89a304e1c46ade0fe0a9417f"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: CompositeStore: ClassTooLong \u2014 599 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 11 methods, 3 blocks, lines 438-1405. The bar is 400 significant lines; this is 199 over it, 1.50\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":"lore-revision/src/store/composite.rs"},"region":{"startLine":438}}}],"partialFingerprints":{"codehealthFindingId/v1":"a922165177b738484c3d95450d4c079fd6f04b983878f28409c474b0780aebe5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/event.rs: FileTooLong \u2014 746 significant 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 246 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":"lore-revision/src/event.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd8d5ae27c584f29e07147823d0532cfbbad6b540d717ec793336de9fb7788bf"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::branch::try_auto_resolve_conflict: FunctionTooLong \u2014 lore_revision::branch::try_auto_resolve_conflict 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":"lore-revision/src/branch.rs"},"region":{"startLine":2758}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8d598a4ff654aabffb0d4ce1b855f1202aceddd650c77e70e0df4705403c084"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::link::update::update: FunctionTooLong \u2014 lore_revision::link::update::update 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":"lore-revision/src/link/update.rs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ff5d088880a6c92dddf02889583cbbb5684b3ee8351806c9cbd982641203dac"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::lock::file::release::release: FunctionTooLong \u2014 lore_revision::lock::file::release::release 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":"lore-revision/src/lock/file/release.rs"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bf2e680a3dbf6fde6aaaddcd4a794315b0609eed85ce016fa941f2363f27992"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ReplicationStoreService.build_request_span: MethodTooLong \u2014 build_request_span runs 148 significant 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 48 over it, 1.48\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/quic/replication_store_service/server.rs"},"region":{"startLine":244}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e7d3ce8d1dea41dc8fc8ab5ab3365f42d847dea0f73f63650d4dfcca77bf2d4"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::state::os_diff::diff_filesystem_matched_directory: FunctionTooLong \u2014 lore_revision::state::os_diff::diff_filesystem_matched_directory 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":"lore-revision/src/state/os_diff.rs"},"region":{"startLine":1559}}}],"partialFingerprints":{"codehealthFindingId/v1":"737bdf5cf9278e1889ac53601020fad22388e9ab4881937a5b4c0d07c05bb45a"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: LocalImmutableStore.verify: MethodTooLong \u2014 verify 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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":3956}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7d0599d604d23b58415698d849d013ec5b53ae4d06fd57ac6bb3d5953efa839"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_storage::local::immutable_store::flush_locked_group: FunctionTooLong \u2014 lore_storage::local::immutable_store::flush_locked_group runs 146 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 46 over it, 1.46\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":4706}}}],"partialFingerprints":{"codehealthFindingId/v1":"78a30ee119099fa60f771223b1e7a36d32151afe3d239149062b45fed879b9fb"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/compress.rs: FileTooLong \u2014 725 significant 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 225 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":"lore-storage/src/compress.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2a91f2c9a9eb17ff1b2cd15ddfe08009109da805e51e9f3089a2791cadcefe5"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_storage::fragment_engine::write_fragmentlist_impl: FunctionTooLong \u2014 lore_storage::fragment_engine::write_fragmentlist_impl 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":"lore-storage/src/fragment_engine.rs"},"region":{"startLine":477}}}],"partialFingerprints":{"codehealthFindingId/v1":"118067c2d8e0582c023b590103b5feb02e8675b2b159a6fa60669e1ccc36d97a"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_transport::quic::response_reader::read_response: FunctionTooLong \u2014 lore_transport::quic::response_reader::read_response 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":"lore-transport/src/quic/response_reader.rs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd540a321fc5d55322f40fae2c1c6e891d40bcd1fa328025bad84ad9f02cc629"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: StorageService: ClassTooLong \u2014 578 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 19 methods, 2 blocks, lines 411-1262. The bar is 400 significant lines; this is 178 over it, 1.45\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":"lore-transport/src/grpc/storage_client.rs"},"region":{"startLine":411}}}],"partialFingerprints":{"codehealthFindingId/v1":"289f0ec2be3db53ff12ad98907dd08dd445960ad9a9afea32ca785ecdce00262"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/token_store.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), declaring 42 free functions. 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":"lore-credential/src/token_store.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1527582226687ce03769f04ec8323043672006ca597dbc9e5d1fc9da16269bdc"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::branch::create: FunctionTooLong \u2014 lore_revision::branch::create runs 144 significant 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 44 over it, 1.44\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":"lore-revision/src/branch.rs"},"region":{"startLine":1503}}}],"partialFingerprints":{"codehealthFindingId/v1":"1803d594e1689d04f7e8a50cebe754c7ceee9f880f473561106850149cd7aefe"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::repository::create::create_with_metadata: FunctionTooLong \u2014 lore_revision::repository::create::create_with_metadata runs 144 significant 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 44 over it, 1.44\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":"lore-revision/src/repository/create.rs"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"5344ba5f707706142e8516c24f470b17918f6f992a7f6812ff8315bb7ea309eb"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_storage::defragment::walk_intermediate_level: FunctionTooLong \u2014 lore_storage::defragment::walk_intermediate_level runs 144 significant 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 44 over it, 1.44\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":"lore-storage/src/defragment.rs"},"region":{"startLine":487}}}],"partialFingerprints":{"codehealthFindingId/v1":"4df66c3924ee60d73bbdfa0476337e369df64df1a45e4d92ae557817cff1f169"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::branch::merge::merge_start_all: FunctionTooLong \u2014 lore_revision::branch::merge::merge_start_all runs 142 significant 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 42 over it, 1.42\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/merge.rs"},"region":{"startLine":1260}}}],"partialFingerprints":{"codehealthFindingId/v1":"e711d29aa78e86c416280bcd2b230a6022d4d7ffad283d1c801427766ad1a276"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::stage::stage_from_parent_state: FunctionTooLong \u2014 lore_revision::stage::stage_from_parent_state runs 141 significant 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 41 over it, 1.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":"lore-revision/src/stage.rs"},"region":{"startLine":3489}}}],"partialFingerprints":{"codehealthFindingId/v1":"216845ca1e25829c7284fc7cf7785df8875bdc5de042322309ae9c1757b13419"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/file.rs: FileTooLong \u2014 694 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 47 free functions. The bar is 500 significant lines; this is 194 over it, 1.39\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":"lore/src/file.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd9964550b0c0a9b09864a322231cd994f940a9c0eb615affef00018e803c2a9"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore::revision_tree::move_node::plan_entries: FunctionTooLong \u2014 lore::revision_tree::move_node::plan_entries runs 137 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 37 over it, 1.37\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore/src/revision_tree/move_node.rs"},"region":{"startLine":345}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4fb09875b66507c8f42bda101647b7dc22e15c2fdb358d645f8421ad17d2c82"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: grpc/server.rs: FileTooLong \u2014 683 significant 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 183 over it, 1.37\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":"lore-server/src/grpc/server.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ab8a7e1d2b495d42342d8fc58cfe98734df586ca41aaa7be675e33c47dddbc1"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::lock::file::acquire::acquire: FunctionTooLong \u2014 lore_revision::lock::file::acquire::acquire 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":"lore-revision/src/lock/file/acquire.rs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a6204a96d58d6cddca233c2eac97f14e5478af818fb8a66caf29461016c77f2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/metadata.rs: FileTooLong \u2014 676 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 68% of them inside a single declaration: Metadata (4 blocks, 301-1157). The bar is 500 significant lines; this is 176 over it, 1.35\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":"lore-revision/src/metadata.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7149b19793f8f5e6f9ef71582aaebde6a7e09c5c956a7de975de41547882b1e"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::file::reset::reset_walk_node: FunctionTooLong \u2014 lore_revision::file::reset::reset_walk_node 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":"lore-revision/src/file/reset.rs"},"region":{"startLine":1452}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9f39b504031bf8ab0e751b385929353285ce0eae0a22b81094b8c3e4582b4a0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: util/path.rs: FileTooLong \u2014 671 significant 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 171 over it, 1.34\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/util/path.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"53169cc29de3833a348f37519fc531f6d3d2302e337a128687f4d3f23c54f080"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::commit::rehash_directory: FunctionTooLong \u2014 lore_revision::commit::rehash_directory 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":"lore-revision/src/commit.rs"},"region":{"startLine":3115}}}],"partialFingerprints":{"codehealthFindingId/v1":"afcc2aed28bcf47ec50a10e5669d39ce453021ab4e3a3846499a2c23b089484f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: v1/revision_list.rs: FileTooLong \u2014 668 significant 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 168 over it, 1.34\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/revision/v1/revision_list.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e34b3a0fa25590b6cf8ab8b56acce0155729ed30db9c9eedde9125c996b6c79"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/conformance.rs: FileTooLong \u2014 667 significant 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 167 over it, 1.33\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/conformance.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb6e35980a6b202f0d4929ca0abe3d9921d5041cdae3d42b2e86845cce98df21"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: OtelTokioRuntimeMetrics: TooManyFields \u2014 40 stored fields beside 2 methods. The bar is 30 stored fields; this is 10 over it, 1.33\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":"lore-server/src/telemetry/tokio_bridge.rs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"32429c26d8e8b4919667a09dc123558f85daf840d2666c3255314136c7cdfbf6"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: LoreStorageService: ClassTooLong \u2014 524 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 5 methods, 4 blocks, lines 73-839. The bar is 400 significant lines; this is 124 over it, 1.31\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":"lore-server/src/grpc/storage_service.rs"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"53ab5d523969666d312723659b80636210fef6f8bcd48b7bf32fd05984caef0d"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_client::cli::commands::repository::handle_repository_verify_fragment: FunctionTooLong \u2014 lore_client::cli::commands::repository::handle_repository_verify_fragment runs 130 significant 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 30 over it, 1.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":"lore-client/src/cli/commands/repository.rs"},"region":{"startLine":1156}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae9e31914497c46230e6dae8f3c8c103ea9c07395f8ae1fa5cbcae466757f21b"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::stage::stage_single_node: FunctionTooLong \u2014 lore_revision::stage::stage_single_node runs 130 significant 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 30 over it, 1.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":"lore-revision/src/stage.rs"},"region":{"startLine":687}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d05ccfae090150c75963c80937972b4a36da3ccb9aa1f2b1de00633ea27359a"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::state::os_diff::handle_single_file_compare_result: FunctionTooLong \u2014 lore_revision::state::os_diff::handle_single_file_compare_result 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":"lore-revision/src/state/os_diff.rs"},"region":{"startLine":606}}}],"partialFingerprints":{"codehealthFindingId/v1":"56c58e95fb73b8cbd300c32d468078f89bf7d8029388f7915b99e09262a0fb05"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/instance.rs: FileTooLong \u2014 642 significant 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 142 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":"lore-revision/src/instance.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cea8e2547110e4a39dd67bf404e467abec26a0f4aafb291c526c02c32c2f127e"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::branch::merge::merge_into_link: FunctionTooLong \u2014 lore_revision::branch::merge::merge_into_link 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":"lore-revision/src/branch/merge.rs"},"region":{"startLine":4155}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b8f89d83e6e64aaef913e482e8d14ebaca9a415c83e86f824af00f8f44b8335"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_server::grpc::handlers::repository_create::repository_create: FunctionTooLong \u2014 lore_server::grpc::handlers::repository_create::repository_create 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":"lore-server/src/grpc/handlers/repository_create.rs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc9079f666ef9a52419653557b2b76027ee2dd3ed3733b2feb19c72a0caaa887"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::branch::list_output: FunctionTooLong \u2014 lore_revision::branch::list_output 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":"lore-revision/src/branch.rs"},"region":{"startLine":2121}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6d78b17c749db1b5eeee3ab0bd069257104a452d90fc20a55af9ed7c07eb9db"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: StreamHandler.handle_stream: MethodTooLong \u2014 handle_stream 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":"lore-server/src/quic/stream_handler.rs"},"region":{"startLine":502}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2c5d533c3e25d8e6724a291947eabf583506983e6edc675e6369d87de272609"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Node: 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":"lore-revision/src/node.rs"},"region":{"startLine":336}}}],"partialFingerprints":{"codehealthFindingId/v1":"1892414d3af2db5b2971d30752764d9714effc981dd3bff14472fdd000200827"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::file::dirty::dirty_path: FunctionTooLong \u2014 lore_revision::file::dirty::dirty_path 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":"lore-revision/src/file/dirty.rs"},"region":{"startLine":602}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c7f0f360b2f50bfc1ec791121b132d8b6339e746ae73cdd8cb9221624d4e978"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::file::reset::reset_walk_directory: FunctionTooLong \u2014 lore_revision::file::reset::reset_walk_directory 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":"lore-revision/src/file/reset.rs"},"region":{"startLine":1644}}}],"partialFingerprints":{"codehealthFindingId/v1":"35864b60aa70cac271c5507122681aa3358833401e48fe1a765fd6b6bfa39aa6"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_server::grpc::revision::v1::branch_push::handler: FunctionTooLong \u2014 lore_server::grpc::revision::v1::branch_push::handler 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":"lore-server/src/grpc/revision/v1/branch_push.rs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6095c221c981ff46dec2bd408e39f9cad00698b232841b9ebea7990fe033aea"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: handlers/branch_push.rs: FileTooLong \u2014 610 significant 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 110 over it, 1.22\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/handlers/branch_push.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd3f7e5c6192b52ccdd437b51c87c5b375b63b85e73bfc6a05b0e8e50ab6058d"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: State.move_node: MethodTooLong \u2014 move_node 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":"lore-revision/src/state.rs"},"region":{"startLine":2692}}}],"partialFingerprints":{"codehealthFindingId/v1":"01f075332b243f33dd9c3659ee7d84de26fe90b86c9166e7f81518b01e0e098c"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: LocalMutableStore.new: MethodTooLong \u2014 new 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":"lore-storage/src/local/mutable_store.rs"},"region":{"startLine":715}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e82a76efe770d7561ec468f07275e00c7b95dfe35e65aab29fe4d6b2e4c73cf"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::file::reset::reset: FunctionTooLong \u2014 lore_revision::file::reset::reset 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":"lore-revision/src/file/reset.rs"},"region":{"startLine":512}}}],"partialFingerprints":{"codehealthFindingId/v1":"80f5eec25941b7543d5c22d669e2d3d98d8cb78b0668a005a672e51798699999"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: State.block_deserialize: MethodTooLong \u2014 block_deserialize 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":"lore-revision/src/state.rs"},"region":{"startLine":1367}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3dfae8c456db49c666c1c4111d2b22925c22e7284c82d094a7b0fe2946a17c5"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::branch::merge::merge_unresolve: FunctionTooLong \u2014 lore_revision::branch::merge::merge_unresolve runs 120 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 20 over it, 1.20\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/merge.rs"},"region":{"startLine":3261}}}],"partialFingerprints":{"codehealthFindingId/v1":"43d66ad6235ad0d1be22a2cd7a9e31de3581df1132160605f4f43dbe1d1b896e"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_server::grpc::handlers::branch_push::push: FunctionTooLong \u2014 lore_server::grpc::handlers::branch_push::push runs 120 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 20 over it, 1.20\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/handlers/branch_push.rs"},"region":{"startLine":286}}}],"partialFingerprints":{"codehealthFindingId/v1":"7993ed100af9be867c9195a3279be466603270185cf4532dac994c0579b46757"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_storage::local::immutable_store::oodle_migration::migrate_bucket: FunctionTooLong \u2014 lore_storage::local::immutable_store::oodle_migration::migrate_bucket runs 120 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 20 over it, 1.20\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/local/immutable_store/oodle_migration.rs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae4382cfcc9d38bf4c702fcf76098dfd5c1eccbcd78986b32e345a7e853c1bc4"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: fs/filesystem_provider.rs: FileTooLong \u2014 597 significant 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 97 over it, 1.19\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":"lore-revision/src/fs/filesystem_provider.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b0b9730e3ef6596eabaf690550ca0b26de9c8a7ffa380484065d05202feece2"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::commit::commit_files_and_rehash: FunctionTooLong \u2014 lore_revision::commit::commit_files_and_rehash 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":"lore-revision/src/commit.rs"},"region":{"startLine":1705}}}],"partialFingerprints":{"codehealthFindingId/v1":"55f5d3216fc7d2368d045b821e5c942acdbc08d4fc1c9a41b832b66b6ff1541d"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::file::info::info_path: FunctionTooLong \u2014 lore_revision::file::info::info_path 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":"lore-revision/src/file/info.rs"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ccffe26fb50296c520084c5a77d07695e7b79b1430c1670175742bbcd3270e1"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::revision::find_last_merged_revision: FunctionTooLong \u2014 lore_revision::revision::find_last_merged_revision 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":"lore-revision/src/revision.rs"},"region":{"startLine":1065}}}],"partialFingerprints":{"codehealthFindingId/v1":"c225819a9f89f893e5256766767b1fa2c206dbd30ab5b339b139db32e6317fb2"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_transport::auth::exchange::exchange_custom_resource: FunctionTooLong \u2014 lore_transport::auth::exchange::exchange_custom_resource 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":"lore-transport/src/auth/exchange.rs"},"region":{"startLine":271}}}],"partialFingerprints":{"codehealthFindingId/v1":"c557432438d3ca150104570dc3e6d438e1545afe88935bea9b93f5be51ae89b9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: file/info.rs: FileTooLong \u2014 591 significant 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 91 over it, 1.18\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/info.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6be9aaf9d979d9bcfafc7cbd7676fb4dca67e6765aefc7d04ae17c84801b3256"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: grpc/storage_service.rs: FileTooLong \u2014 590 significant 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 89% of them inside a single declaration: LoreStorageService (4 blocks, 73-839). The bar is 500 significant lines; this is 90 over it, 1.18\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":"lore-server/src/grpc/storage_service.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e8b23e904986664f616f4787ace63a8c69724898a2f0149693f52fb57fd4ae6"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_client::cli::commands::branch::handle_branch_push: FunctionTooLong \u2014 lore_client::cli::commands::branch::handle_branch_push 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":"lore-client/src/cli/commands/branch.rs"},"region":{"startLine":798}}}],"partialFingerprints":{"codehealthFindingId/v1":"c09f41ea86db2ea0c5ccbd3369943d6fa923b21a5888159db6a84b58bd493c79"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_server::grpc::thinclient::v1::revision_diff::run_three_way: FunctionTooLong \u2014 lore_server::grpc::thinclient::v1::revision_diff::run_three_way 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":"lore-server/src/grpc/thinclient/v1/revision_diff.rs"},"region":{"startLine":447}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a1790375293b939434991f89127ba22a744974d6c5e859776c298bfe5b4bce7"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: LocalImmutableStore: TooManyMethods \u2014 35 methods. The bar is 30 methods; this is 5 over it, 1.17\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":314}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fc67a1bfb05cc15df258f657e059edba81931bf2bc99cf3a4114e2c12d47b23"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::revision::info::info: FunctionTooLong \u2014 lore_revision::revision::info::info 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":"lore-revision/src/revision/info.rs"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"37bb02a9756c2caa02371fefd9129680039b5c864114b6916eb0670e545403e5"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::state::verify_node_name_case_impl: FunctionTooLong \u2014 lore_revision::state::verify_node_name_case_impl 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":"lore-revision/src/state.rs"},"region":{"startLine":7159}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb4513ade3d736b3cc0ac0ffe679ec0e014fe8aaf2177cadc56e9f786e478207"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_transport::auth::exchange::exchange: FunctionTooLong \u2014 lore_transport::auth::exchange::exchange 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":"lore-transport/src/auth/exchange.rs"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"4dbdcba6509b3453a6aa72f6beb11903b5cace808e56114ba5ed439f43df2867"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore::revision_tree::add::plan_entries: FunctionTooLong \u2014 lore::revision_tree::add::plan_entries 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":"lore/src/revision_tree/add.rs"},"region":{"startLine":472}}}],"partialFingerprints":{"codehealthFindingId/v1":"965ddcfde16ec169d4d83feaeedc36e5a41bfd76b7ffcc61ae51e6af5e837e9f"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::fs::realize::relink_moved_node: FunctionTooLong \u2014 lore_revision::fs::realize::relink_moved_node runs 115 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 15 over it, 1.15\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/fs/realize.rs"},"region":{"startLine":1949}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca3b22c329be94633ef6b09eed153914c4430035a5e577dfd55057a6aca3dec2"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::repository::branch_switch: FunctionTooLong \u2014 lore_revision::repository::branch_switch runs 115 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 15 over it, 1.15\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/repository.rs"},"region":{"startLine":2825}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a29803293f2bc11b17ce56e13168dd5ebfaf791c645918a305d6993a88fa5e1"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Metadata: ClassTooLong \u2014 457 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 47 methods, 4 blocks, lines 301-1157. The bar is 400 significant lines; this is 57 over it, 1.14\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/metadata.rs"},"region":{"startLine":301}}}],"partialFingerprints":{"codehealthFindingId/v1":"9adfccca4dcb8333b883e342533049ff38f14aa2f6554432b0e76977543a5d67"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/uring.rs: FileTooLong \u2014 570 significant 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 70 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":"lore-io/src/uring.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc49a7c747fb4f1674105d925f12e52413cbac3b3aef0296e73e80aaa44a8068"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::repository::clone::clone: FunctionTooLong \u2014 lore_revision::repository::clone::clone runs 114 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 14 over it, 1.14\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/repository/clone.rs"},"region":{"startLine":836}}}],"partialFingerprints":{"codehealthFindingId/v1":"096a4c0d820246db313499e0d6b7d2fbbf29926a6183cdd645f48c721ed6d176"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/dynamodb.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), about 79% of them inside a single declaration: DynamoDbImpl (2 blocks, 194-809). The bar is 500 significant lines; this is 68 over it, 1.14\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-aws/src/dynamodb.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ae51a3116846c16c2a6f5d374610f968194a34c36d997fae7229c8445bb1928"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: types/mod.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":"lore-base/src/types/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fe0208c6b2b55601463a312a83e6f71fad29ed4ad5ec3ba4601c28e95ce9c65"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: IocpDriver: 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":"lore-io/src/iocp.rs"},"region":{"startLine":293}}}],"partialFingerprints":{"codehealthFindingId/v1":"38ab9326b178900bb5bd5432dbcc8f4bd37b2da2e0097ec7f34c11bafcd85051"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/mutable_conformance.rs: FileTooLong \u2014 565 significant 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 65 over it, 1.13\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/mutable_conformance.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7134aa61398bad6df7c7e62b532957b17a7d2f889c04d281f5ffaf2b2d611d42"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::branch::merge::merge_start_link: FunctionTooLong \u2014 lore_revision::branch::merge::merge_start_link 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":"lore-revision/src/branch/merge.rs"},"region":{"startLine":824}}}],"partialFingerprints":{"codehealthFindingId/v1":"14aea4f02cd7d9b90112247ba2d37dfe965a0e4de3f9da6f995699b076674b46"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: LoreStorageService.copy: MethodTooLong \u2014 copy 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":"lore-server/src/grpc/storage_service.rs"},"region":{"startLine":477}}}],"partialFingerprints":{"codehealthFindingId/v1":"e37e36a30d621a3d42cf056752fbb0d8f36866ea017b032ce2a0fce6c159dd75"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_storage::write::leader_body: FunctionTooLong \u2014 lore_storage::write::leader_body 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":"lore-storage/src/write.rs"},"region":{"startLine":1044}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a53085e3237458d3d2ef78d33c637e75a112dcb8e0114f90c73600fab85fd31"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::branch::create_linked_branches: FunctionTooLong \u2014 lore_revision::branch::create_linked_branches 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":"lore-revision/src/branch.rs"},"region":{"startLine":1761}}}],"partialFingerprints":{"codehealthFindingId/v1":"109d0d9f62ccc8eac6d710a0348628ec4a76d9829bf4a70b64fc38bbd169a8ae"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: DynamoDbImpl: ClassTooLong \u2014 446 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 12 methods, 2 blocks, lines 194-809. The bar is 400 significant lines; this is 46 over it, 1.12\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-aws/src/dynamodb.rs"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a62a5b790054aee1dc98f3a9084c0bcc78312d8fc2fd2e2d998eeeada5a4758"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::commit::commit_file: FunctionTooLong \u2014 lore_revision::commit::commit_file runs 111 significant 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 11 over it, 1.11\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/commit.rs"},"region":{"startLine":2542}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c41d5d8997f48faf3524dc0fb902189f3f41d17b675143800e9288cfdfff00f"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: JwkServiceImpl.fetch_new_keys: MethodTooLong \u2014 fetch_new_keys runs 111 significant 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 11 over it, 1.11\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/auth/jwk.rs"},"region":{"startLine":524}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd7502db129adc2c642459169044c051f077043f5c0b537cc9658079bb6dec21"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: LocalImmutableStore.compact_packfiles: MethodTooLong \u2014 compact_packfiles runs 111 significant 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 11 over it, 1.11\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":2657}}}],"partialFingerprints":{"codehealthFindingId/v1":"572bbe2a7a0a1472ccc7d402ae29a5a8e234229694a78ac70a899528fa007143"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/immutable.rs: FileTooLong \u2014 554 significant 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 54 over it, 1.11\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/immutable.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6207bd0f9d802c5efd1c78f841a4c7faafd8f63dcd73b4df985875b77c304680"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::branch::diff::diff: FunctionTooLong \u2014 lore_revision::branch::diff::diff runs 110 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 10 over it, 1.10\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/diff.rs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"b732a9da9145ac240ab8b86a079bd7972a2e001b6ed408f3929841f0740c8e9c"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::commit::commit_layer_only: FunctionTooLong \u2014 lore_revision::commit::commit_layer_only runs 110 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 10 over it, 1.10\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/commit.rs"},"region":{"startLine":925}}}],"partialFingerprints":{"codehealthFindingId/v1":"3cf62ba3053f2274d7095bbbacf0fca94e3311aa482b57926b4de0400ef9573c"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::repository::create_local: FunctionTooLong \u2014 lore_revision::repository::create_local runs 110 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 10 over it, 1.10\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/repository.rs"},"region":{"startLine":2542}}}],"partialFingerprints":{"codehealthFindingId/v1":"c660da3e27dbc516efe232ab81d532ebded73a151c9cda03fb5a17df227f2a45"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::repository::clone::process_block_item: FunctionTooLong \u2014 lore_revision::repository::clone::process_block_item runs 110 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 10 over it, 1.10\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/repository/clone.rs"},"region":{"startLine":539}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d593937bcb521ff1dd44613d6bc75fd1dd6bae4be5be52039caac58e082768c"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_server::grpc::repository::v1::repository_create::repository_create_inner: FunctionTooLong \u2014 lore_server::grpc::repository::v1::repository_create::repository_create_inner 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":"lore-server/src/grpc/repository/v1/repository_create.rs"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c3f47a739c75434faf469577be2251a57296f1e8b889c9acaa8cc5e356490b6"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: LocalImmutableStore.compact_group_packfiles: MethodTooLong \u2014 compact_group_packfiles 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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":2821}}}],"partialFingerprints":{"codehealthFindingId/v1":"34d868588d34351f6284e0cc2fc9fb02adc40f6d025723e91c3ea90b527ebcf9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/iocp.rs: FileTooLong \u2014 544 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 63% of them inside a single declaration: IocpDriver (3 blocks, 293-864). The bar is 500 significant lines; this is 44 over it, 1.09\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-io/src/iocp.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffca74cff069efb39838895c45ebc68f73dcf1ed58cb17890ca5dead245c1ef5"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_client::cli::commands::revision::handle_revision_commit: FunctionTooLong \u2014 lore_client::cli::commands::revision::handle_revision_commit 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":"lore-client/src/cli/commands/revision.rs"},"region":{"startLine":1179}}}],"partialFingerprints":{"codehealthFindingId/v1":"0194f88e0f3bfd4b6a71eb5f0b5a23c91f5d48691c4cef2dfbffb31774c4bd67"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::branch::merge::merge_start: FunctionTooLong \u2014 lore_revision::branch::merge::merge_start 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":"lore-revision/src/branch/merge.rs"},"region":{"startLine":674}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebf616a1807b7340dfa253bd00232107af2840f6975514b2ef631ebe995b90e8"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::branch::reset::reset: FunctionTooLong \u2014 lore_revision::branch::reset::reset 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":"lore-revision/src/branch/reset.rs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1684cfa2aa754bac84db72269f655e50dc195c789a8bc326069f6b38c36ae69"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::immutable::cache_through: FunctionTooLong \u2014 lore_revision::immutable::cache_through 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":"lore-revision/src/immutable.rs"},"region":{"startLine":574}}}],"partialFingerprints":{"codehealthFindingId/v1":"171bf17f82853ff59499ffa28715c537ff83d8039fcd4af55ecbff1fb22d1c0d"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: StorageClient: ClassTooLong \u2014 429 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 2 methods, 5 blocks, lines 61-687. The bar is 400 significant lines; this is 29 over it, 1.07\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-transport/src/quic/storage_service/client.rs"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"07de9e0744ca94365cca95fcb6562bbcb8a3d2d0446b34f8158a25523fca5481"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_client::cli::commands::revision::handle_revision_info: FunctionTooLong \u2014 lore_client::cli::commands::revision::handle_revision_info 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":"lore-client/src/cli/commands/revision.rs"},"region":{"startLine":674}}}],"partialFingerprints":{"codehealthFindingId/v1":"86418593191ebaecbd740d5d0b6458cf6647003edd2ee1273b9399bfbdedddc7"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::fs::realize::realize_state: FunctionTooLong \u2014 lore_revision::fs::realize::realize_state 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":"lore-revision/src/fs/realize.rs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"8edf5da17710b80591a93d370c4b6aa3e7059f2b074b76dcf40adbc68a60baf4"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::fs::realize::realize_changes_delete: FunctionTooLong \u2014 lore_revision::fs::realize::realize_changes_delete 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":"lore-revision/src/fs/realize.rs"},"region":{"startLine":1342}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3d7daafbfad632118c5f5ab093e921b5d68b94de5ad81524cdad326f90666a7"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_transport::quic::client::reconnect: FunctionTooLong \u2014 lore_transport::quic::client::reconnect 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":"lore-transport/src/quic/client.rs"},"region":{"startLine":966}}}],"partialFingerprints":{"codehealthFindingId/v1":"3eb83f6be53da245fd476168e26c7f5d7c2ccdec17ce9ebcc703cc1af101c752"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::file::diff::emit_diff3_changes: FunctionTooLong \u2014 lore_revision::file::diff::emit_diff3_changes 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":"lore-revision/src/file/diff.rs"},"region":{"startLine":469}}}],"partialFingerprints":{"codehealthFindingId/v1":"008a3c64bbd7385516f7d2024d3cc0a702d1dc3684db4e0bf737a5fa65cf0355"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::file::unstage::unstage_parent: FunctionTooLong \u2014 lore_revision::file::unstage::unstage_parent 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":"lore-revision/src/file/unstage.rs"},"region":{"startLine":269}}}],"partialFingerprints":{"codehealthFindingId/v1":"74d7c02745770dcee30ca81eac2983889fd18b38d2ad26911a4710eabe5aebf3"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::lock::file::status::status: FunctionTooLong \u2014 lore_revision::lock::file::status::status 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":"lore-revision/src/lock/file/status.rs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"e98a2ff2f4f73817a92142304b120820477d1545a41636185a6b31ef9d05d8b6"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: IoDriver: 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":"lore-io/src/driver.rs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5cdab89530c8680ecd07ce88ed64ce2e61e744fda8d07f2d73b1b986860f51e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: LoreCli: TooManyFields \u2014 31 stored fields. The bar is 30 stored fields; this is 1 over it, 1.03\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-client/src/cli/cli.rs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a2662b7daa75b83967c4a1440aa261b4b29bb41da96f765b95e583de71bfb2b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: revision_tree/add.rs: FileTooLong \u2014 516 significant 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 16 over it, 1.03\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore/src/revision_tree/add.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"134dce8040f1671a048a7f1f03bb864b513667febafd849e8a0e83e7f51f48e0"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::layer::find_revision_match: FunctionTooLong \u2014 lore_revision::layer::find_revision_match 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":"lore-revision/src/layer.rs"},"region":{"startLine":1081}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba9c37feb9478cc643106fcb4e0c67710b0b91de6d45b795f614ef8023cd2fc9"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::state::os_diff::diff_filesystem_missing_nodes: FunctionTooLong \u2014 lore_revision::state::os_diff::diff_filesystem_missing_nodes 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":"lore-revision/src/state/os_diff.rs"},"region":{"startLine":1827}}}],"partialFingerprints":{"codehealthFindingId/v1":"d243b882bcff27782d4009b3798cc6197f02324431a2075cad8b660f1a0df593"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_storage::write::compare_previous_chunks: FunctionTooLong \u2014 lore_storage::write::compare_previous_chunks 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":"lore-storage/src/write.rs"},"region":{"startLine":2084}}}],"partialFingerprints":{"codehealthFindingId/v1":"92f443c93f71ccba7991baec7ea700b394a4b321a5eaf4678585e8c28b707e5f"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: DynamoDbLockStore.unlock_resources: MethodTooLong \u2014 unlock_resources 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":"lore-aws/src/store/lock_store.rs"},"region":{"startLine":571}}}],"partialFingerprints":{"codehealthFindingId/v1":"04d30db3661d0d5131141cb6bf8138c37d36dbdd936724a9d77ad0c6e260c691"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::state::gather_tree_paths_node: FunctionTooLong \u2014 lore_revision::state::gather_tree_paths_node 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":"lore-revision/src/state.rs"},"region":{"startLine":4984}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9434767a0af82befd7a03a9b2326da3463105da4aca65bb118e08a157253e7d"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_server::grpc::handlers::branch_push::handler: FunctionTooLong \u2014 lore_server::grpc::handlers::branch_push::handler 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":"lore-server/src/grpc/handlers/branch_push.rs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"15cfe04b53da2c37dab5029bb47cfe426d3cc4ebbb34c1887682f58226b2407b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/runtime.rs: FileTooLong \u2014 506 significant 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 40 free functions. The bar is 500 significant lines; this is 6 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":"lore-base/src/runtime.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1eb113e1b6655bdcd15937fea69cc231bb550ff6b724fa82f044f3a590ea3a39"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/psync.rs: FileTooLong \u2014 506 significant 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 6 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":"lore-io/src/psync.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"34e0c9840e9d84ef32f50b123bf0cfb1347af53c5c7593f2220991258a544384"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::link::remove::remove: FunctionTooLong \u2014 lore_revision::link::remove::remove 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":"lore-revision/src/link/remove.rs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bc9f45dafa22585cbebde5cb588d89567bfff2dbd7820f0d585b1b97ff99a3f"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: lore_revision::revision::resolve_revision: FunctionTooLong \u2014 lore_revision::revision::resolve_revision 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":"lore-revision/src/revision.rs"},"region":{"startLine":1738}}}],"partialFingerprints":{"codehealthFindingId/v1":"94cda8cf105c232c2752ba89fe8c4a61d0ed62de8d5be3c168800fa616def186"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: v1/revision_diff.rs: FileTooLong \u2014 503 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 3 over it, 1.01\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/thinclient/v1/revision_diff.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"90e0527b9df3afec69cda00956204ce003081d6df23ec30bb82990a639eb7be0"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member family (4 members, 30 shared lines): lore-client/src/cli/commands/branch.rs:1675-1725 | lore-client/src/cli/commands/file.rs:1013-1066 | lore-client/src/cli/commands/repository.rs:1582-1631 | lore-client/src/cli/commands/revision.rs:2347-2392 \u2014 These 4 members are variants of one another: a block of 30 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":"lore-client/src/cli/commands/branch.rs"},"region":{"startLine":1675}}}],"partialFingerprints":{"codehealthFindingId/v1":"59f88dff23f48135cf05e68bcf3dea92bf1164acb7af899c5401e49b6adce460"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member family (3 members, 39 shared lines): lore-server/src/grpc/storage_service.rs:120-243 | lore-server/src/grpc/storage_service.rs:265-412 | lore-server/src/grpc/storage_service.rs:480-645 \u2014 These 3 members are variants of one another: a block of 39 lines reported below appears in every one of them, and the pairwise near-duplicate rows they would otherwise produce are collapsed into this row. Read them as one construct written 3 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/storage_service.rs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"e932db88570e33632a38f14279b563688023022e8ea5bf4bba54077f6011a102"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (132 shared lines): lore-transport/src/auth/exchange.rs:107-260 | lore-transport/src/auth/exchange.rs:278-435 \u2014 These two members are variants of one another: 132 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":"lore-transport/src/auth/exchange.rs"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7fb7de4245ad74fa434c5a8ceb1054e6d08f2d92f30379b133ac4f63c406308"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (112 shared lines): lore-revision/src/branch/merge.rs:4165-4322 | lore-revision/src/branch/merge.rs:4333-4703 \u2014 These two members are variants of one another: 112 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":"lore-revision/src/branch/merge.rs"},"region":{"startLine":4165}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9f1c0bad4082d3de297956df1d3b8f14609871b53413dc28742efb170f78f3b"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (103 shared lines): lore-storage/src/compress.rs:695-820 | lore-storage/src/compress.rs:826-944 \u2014 These two members are variants of one another: 103 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":"lore-storage/src/compress.rs"},"region":{"startLine":695}}}],"partialFingerprints":{"codehealthFindingId/v1":"d998e992dc05f4a4cc003268f1724d85db456f8c968fd2b95b967ea1b1a15911"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (66 shared lines): lore-client/src/cli/commands/revision.rs:910-1037 | lore-client/src/cli/commands/revision.rs:1042-1177 \u2014 These two members are variants of one another: 66 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":"lore-client/src/cli/commands/revision.rs"},"region":{"startLine":910}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae8740f2449cb4e546538def491be16be5a1ad6afe131b063587b9d5fbfbe787"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (57 shared lines): lore-storage/src/local/immutable_store.rs:4943-5024 | lore-storage/src/local/mutable_store.rs:1645-1730 \u2014 These two members are variants of one another: 57 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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":4943}}}],"partialFingerprints":{"codehealthFindingId/v1":"e867ed8fa91c81b5eb5b012a16bced002a685eec264e537663782c8c4c946822"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (54 shared lines): lore-revision/src/revision/cherry_pick.rs:147-268 | lore-revision/src/revision/revert.rs:143-255 \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":"lore-revision/src/revision/cherry_pick.rs"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e9232e1a6996116c4b45010c4b5b49a73e2914b330d3db714ac1dfba1dd7988"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (43 shared lines): lore-revision/src/link/remove.rs:39-179 | lore-revision/src/link/update.rs:34-238 \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":"lore-revision/src/link/remove.rs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"298632ef072b2bc9b15e93757aa745924f64e473ed34e48ecfd2b93adae3089a"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (42 shared lines): lore-revision/src/branch/merge.rs:3266-3434 | lore-revision/src/branch/merge.rs:3511-3607 \u2014 These two members are variants of one another: 42 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/merge.rs"},"region":{"startLine":3266}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e79b153ca8f0fbd2323c7f9409ef98a7579ea3568a00f3630cd0a035f9938cf"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (42 shared lines): lore-revision/src/state.rs:3161-3218 | lore-revision/src/state.rs:3259-3314 \u2014 These two members are variants of one another: 42 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":3161}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b482a59081ac9f73ba2f9cb20b6b4db81ab230ada83f1ff434352ca69469414"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (42 shared lines): lore/src/dependency.rs:81-148 | lore/src/dependency.rs:194-257 \u2014 These two members are variants of one another: 42 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore/src/dependency.rs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f7c69f65fabf09d76d1f5682cac4129d71e27486364053cafa83f4582f3e50e"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (6 members, 50\u002B identical tokens): lore-revision/src/commit.rs:1719-1857 | lore-revision/src/commit.rs:1938-2187 | lore-revision/src/commit.rs:2451-2513 | lore-revision/src/commit.rs:2861-3091 | lore-revision/src/fs/realize.rs:2110-2172 | lore-server/src/server.rs:1870-2448 \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":"lore-revision/src/commit.rs"},"region":{"startLine":1719}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed939d7b82d8f7806460a80beb3133103d361313248247d2836b9a6efc3e79f0"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (6 members, 50\u002B identical tokens): lore-server/src/grpc/storage/v1/copy.rs:145-226 | lore-server/src/grpc/storage/v1/get.rs:111-186 | lore-server/src/grpc/storage/v1/get_metadata.rs:110-185 | lore-server/src/grpc/storage/v1/get_resolved.rs:131-258 | lore-server/src/grpc/storage/v1/put.rs:112-183 | lore-server/src/grpc/storage/v1/put_resolved.rs:168-295 \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":"lore-server/src/grpc/storage/v1/copy.rs"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a5a1c1346c33171fd90a84cf5a1184c2e2d1fec135b4029dd8e583a77e38433"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (6 members, 50\u002B identical tokens): lore-server/src/grpc/handlers/branch_create.rs:68-154 | lore-server/src/grpc/handlers/branch_delete.rs:39-101 | lore-server/src/grpc/handlers/branch_get.rs:29-50 | lore-server/src/grpc/handlers/branch_metadata_set.rs:96-190 | lore-server/src/grpc/handlers/branch_protect.rs:28-63 | lore-server/src/grpc/handlers/branch_unprotect.rs:28-62 \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":"lore-server/src/grpc/handlers/branch_create.rs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4ad396c6ef8db6df380cfe9a2d4098692c6129feae950e3ed60c074bbe435cb"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (5 members, 50\u002B identical tokens): lore/src/revision_tree/add.rs:476-630 | lore/src/revision_tree/delete.rs:176-259 | lore/src/revision_tree/metadata_clear.rs:129-141 | lore/src/revision_tree/metadata_set.rs:160-193 | lore/src/revision_tree/modify.rs:168-223 \u2014 These 5 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 5 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 5 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore/src/revision_tree/add.rs"},"region":{"startLine":476}}}],"partialFingerprints":{"codehealthFindingId/v1":"32080c104e722fe8bd3d80d62b0c3e88fe7173c883c48924e340da8fd40b7b6d"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (5 members, 50\u002B identical tokens): lore-client/src/cli/commands/branch.rs:624-728 | lore-client/src/cli/commands/link.rs:279-333 | lore-client/src/cli/commands/link.rs:335-378 | lore-client/src/cli/commands/revision.rs:568-672 | lore-client/src/cli/commands/revision.rs:674-822 \u2014 These 5 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 5 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 5 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-client/src/cli/commands/branch.rs"},"region":{"startLine":624}}}],"partialFingerprints":{"codehealthFindingId/v1":"8438b401c90f7344fbbeb666691634bbcf96d13f2ed91d6ccd954c032fe8bf5d"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (5 members, 50\u002B identical tokens): lore-client/src/cli/commands/file.rs:1515-1550 | lore-client/src/cli/commands/file.rs:1552-1592 | lore-client/src/cli/commands/file.rs:1594-1660 | lore-client/src/cli/commands/link.rs:113-182 | lore-client/src/cli/commands/link.rs:184-215 \u2014 These 5 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 5 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 5 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-client/src/cli/commands/file.rs"},"region":{"startLine":1515}}}],"partialFingerprints":{"codehealthFindingId/v1":"b85f39fbefde1f3d02a55b2f4de67b9a5ce32d396275871becc02e2d10e57848"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (5 members, 50\u002B identical tokens): lore-server/src/grpc/storage_service.rs:418-472 | lore-server/src/grpc/storage_service.rs:651-698 | lore-server/src/grpc/storage_service.rs:704-743 | lore-server/src/grpc/storage_service.rs:749-781 | lore-server/src/grpc/storage_service.rs:787-832 \u2014 These 5 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 5 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 5 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/storage_service.rs"},"region":{"startLine":418}}}],"partialFingerprints":{"codehealthFindingId/v1":"0225fb843e70f52b12e36e09534c9554b339ad3550c00f0c58d5fe17ef091356"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (5 members, 50\u002B identical tokens): lore-server/src/grpc/handlers/branch_diff.rs:41-76 | lore-server/src/grpc/handlers/revision_diff.rs:36-103 | lore-server/src/grpc/handlers/revision_tree.rs:35-97 | lore-server/src/grpc/thinclient/v1/revision_diff.rs:119-186 | lore-server/src/grpc/thinclient/v1/revision_tree.rs:58-116 \u2014 These 5 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 5 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 5 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/handlers/branch_diff.rs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"66f4b2d50fdffe996f70632b0a31fab59e2dcf6511e03e4af23c92fcd4d7bcac"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): lore/src/revision_tree/add.rs:883-893 | lore/src/revision_tree/delete.rs:566-575 | lore/src/revision_tree/modify.rs:366-375 | lore/src/revision_tree/move_node.rs:688-697 \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":"lore/src/revision_tree/add.rs"},"region":{"startLine":883}}}],"partialFingerprints":{"codehealthFindingId/v1":"211a3201cad3596f04b3d34072072d21287fa0ea033953b6f1312de446f5bfa4"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): lore-client/src/cli/commands/branch.rs:1008-1079 | lore-client/src/cli/commands/branch.rs:1081-1142 | lore-client/src/cli/commands/revision.rs:1647-1705 | lore-client/src/cli/commands/revision.rs:1707-1783 \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":"lore-client/src/cli/commands/branch.rs"},"region":{"startLine":1008}}}],"partialFingerprints":{"codehealthFindingId/v1":"75a23192f825cf95396cfb1e8fc3b31e039cbcb2baa67c5b701073d229a7eb35"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): lore-client/src/cli/commands/file.rs:1121-1188 | lore-client/src/cli/commands/file.rs:1190-1238 | lore-client/src/cli/commands/file.rs:1252-1292 | lore-client/src/cli/commands/file.rs:1313-1370 \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":"lore-client/src/cli/commands/file.rs"},"region":{"startLine":1121}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a56ca88fc602d0a6db6d4e30199f25cdd8b84653e1121b094ab9a588bf8b613"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): lore-credential/src/token_store.rs:208-257 | lore-credential/src/token_store.rs:545-592 | lore-credential/src/token_store.rs:777-809 | lore-credential/src/token_store.rs:862-894 \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":"lore-credential/src/token_store.rs"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b29a8a19d0a831c764ca48a7272a68fc0c587ce8579cd4be6ae9b733528e9ff"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): lore-revision/src/branch/merge.rs:3103-3147 | lore-revision/src/branch/merge.rs:3820-3915 | lore-revision/src/revision/cherry_pick.rs:297-341 | lore-revision/src/revision/revert.rs:277-317 \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":"lore-revision/src/branch/merge.rs"},"region":{"startLine":3103}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6003acbcda8cb4ce7c7394c077c8a60a85420fae33142d5ecccfe3c3800cb6d"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): lore-revision/src/metadata.rs:661-697 | lore-revision/src/metadata.rs:699-737 | lore-revision/src/metadata.rs:893-1017 | lore-revision/src/metadata.rs:1120-1152 \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":"lore-revision/src/metadata.rs"},"region":{"startLine":661}}}],"partialFingerprints":{"codehealthFindingId/v1":"63b0109ff5ae56d393001083e00d44aaf3b72bfdd32799eddfa941d77ceace99"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): lore-revision/src/metadata/get.rs:19-44 | lore-revision/src/metadata/get.rs:60-90 | lore-revision/src/metadata/list.rs:18-43 | lore-revision/src/metadata/list.rs:49-79 \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":"lore-revision/src/metadata/get.rs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"376cd721ede20e320dbda531f0c2b663a78235ba960814d46667834e8fff3d88"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): lore-server/src/protocol/replication_store/get.rs:49-58 | lore-server/src/protocol/replication_store/get_metadata.rs:49-58 | lore-server/src/protocol/replication_store/obliterate.rs:48-57 | lore-server/src/protocol/replication_store/put.rs:71-104 \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":"lore-server/src/protocol/replication_store/get.rs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f4e0fc161d2065d8a5fb618c1a88fd6e837ed6c3292636fc2b0ae534a2a2179"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): lore-server/src/grpc/handlers/repository_query.rs:103-157 | lore-server/src/grpc/handlers/repository_query.rs:165-215 | lore-server/src/grpc/repository/v1/repository_get.rs:179-227 | lore-server/src/grpc/repository/v1/repository_get.rs:239-284 \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":"lore-server/src/grpc/handlers/repository_query.rs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a6300516ec9319ec2023ea1abe5dcf53ff3857c301d80428602e4615c645eb7"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): lore-server/src/grpc/storage/v1/mutable_compare_and_swap.rs:26-66 | lore-server/src/grpc/storage/v1/mutable_load.rs:27-68 | lore-server/src/grpc/storage/v1/mutable_store.rs:25-56 | lore-server/src/grpc/storage/v1/verify.rs:26-71 \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":"lore-server/src/grpc/storage/v1/mutable_compare_and_swap.rs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"f90bd362df5d49150e4c851c28a5704e6a098446f1b63bd79e991a1bd0e4daba"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): lore-storage/src/conformance.rs:507-572 | lore-storage/src/conformance.rs:704-739 | lore-storage/src/conformance.rs:751-786 | lore-storage/src/conformance.rs:967-1005 \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":"lore-storage/src/conformance.rs"},"region":{"startLine":507}}}],"partialFingerprints":{"codehealthFindingId/v1":"623bb83838b7bf1e9a9a70acdddaf867d42b4a095923c711f61bc5a4c3c1825c"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): lore-storage/src/local/immutable_store.rs:1683-1982 | lore-storage/src/local/immutable_store.rs:2087-2194 | lore-storage/src/local/immutable_store.rs:3408-3437 | lore-storage/src/local/immutable_store.rs:4202-4282 \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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":1683}}}],"partialFingerprints":{"codehealthFindingId/v1":"49488292027c3c5dbeadc930c8ccbf0bcbd630c877de4dec823e9b3218d29e4a"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): lore-transport/src/grpc/storage_client.rs:916-994 | lore-transport/src/grpc/storage_client.rs:1000-1078 | lore-transport/src/grpc/storage_client.rs:1083-1120 | lore-transport/src/grpc/storage_client.rs:1128-1165 \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":"lore-transport/src/grpc/storage_client.rs"},"region":{"startLine":916}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e73446ec2c0dcbbe163e5b1a6e362420a46aa85429b7407fd8b4db290ed4002"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (62 lines \u00D7 2): lore-storage/src/compress.rs:746-807 | lore-storage/src/compress.rs:876-937 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/compress.rs"},"region":{"startLine":746}}}],"partialFingerprints":{"codehealthFindingId/v1":"70940558068a2f1f920d4bfd8ba3784b574167e5d140312d8f3f38ee4d68d0dd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (55\u201357 lines \u00D7 2): lore-transport/src/auth/exchange.rs:150-206 | lore-transport/src/auth/exchange.rs:327-381 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-transport/src/auth/exchange.rs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d02d2e74cceae5b36741d8c1116a368888a39b21f0f44493cd21d3e45acf62c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (53 lines \u00D7 2): lore-transport/src/auth/exchange.rs:208-260 | lore-transport/src/auth/exchange.rs:383-435 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-transport/src/auth/exchange.rs"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"295995c807667581c063d6f6c8a76d2328277ef2a3c44cf08db1a59020a6ef06"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (46\u201347 lines \u00D7 2): lore-revision/src/commit.rs:1787-1833 | lore-revision/src/commit.rs:2942-2987 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/commit.rs"},"region":{"startLine":1787}}}],"partialFingerprints":{"codehealthFindingId/v1":"37352eecbcff4e66041e88cc03a55b68de20f3356afce60d568594726edeb023"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (39\u201341 lines \u00D7 2): lore-server/src/grpc/handlers/repository_create.rs:268-308 | lore-server/src/grpc/repository/v1/repository_create.rs:318-356 \u2014 before extracting anything, compare \u0060lore-server/src/grpc/handlers/repository_create.rs\u0060 and \u0060lore-server/src/grpc/repository/v1/repository_create.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 97 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":"lore-server/src/grpc/handlers/repository_create.rs"},"region":{"startLine":268}}}],"partialFingerprints":{"codehealthFindingId/v1":"36abd6b1c7e533d55cb1413027316060afc905d53ce3e572362f141d7147ce1c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (40 lines \u00D7 2): lore-revision/src/util/fs.rs:559-598 | lore-revision/src/util/fs.rs:686-725 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/util/fs.rs"},"region":{"startLine":559}}}],"partialFingerprints":{"codehealthFindingId/v1":"d90597ad88317a736f275c0daddb75fa9c1989204c22a5bef36b917ffae7d1b6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (38\u201339 lines \u00D7 2): lore-server/src/grpc/handlers/repository_query.rs:111-149 | lore-server/src/grpc/repository/v1/repository_get.rs:187-224 \u2014 before extracting anything, compare \u0060lore-server/src/grpc/handlers/repository_query.rs\u0060 and \u0060lore-server/src/grpc/repository/v1/repository_get.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 83 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":"lore-server/src/grpc/handlers/repository_query.rs"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd38966e63a3b10252528310c3764d473416236ca22b36d4cb67d89a01ebce13"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (33 lines \u00D7 2): lore-server/src/grpc/revision/v1/service.rs:96-128 | lore-server/src/grpc/revision_service.rs:79-111 \u2014 before extracting anything, compare \u0060lore-server/src/grpc/revision/v1/service.rs\u0060 and \u0060lore-server/src/grpc/revision_service.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 84 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":"lore-server/src/grpc/revision/v1/service.rs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"be60c7e7fdc2299901dbc9f278a4a35c4da03a0f9ef991c731a611dc25093dd7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (28\u201332 lines \u00D7 2): lore-transport/src/auth/exchange.rs:506-537 | lore-transport/src/auth/exchange.rs:667-694 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-transport/src/auth/exchange.rs"},"region":{"startLine":506}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2b22f71e751d4e402345bf98c053b8e17453e892769251fb5ba9411311679c1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (30 lines \u00D7 2): lore-revision/src/branch/merge.rs:4293-4322 | lore-revision/src/branch/merge.rs:4674-4703 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/merge.rs"},"region":{"startLine":4293}}}],"partialFingerprints":{"codehealthFindingId/v1":"c761b694ea6edb488ddf930919efb9c1602345f3d470caad56d073d73f7df627"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (30 lines \u00D7 2): lore-revision/src/history.rs:84-113 | lore-revision/src/history.rs:114-143 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/history.rs"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba65c70671539a671867bd335062a494c05d0afbf0bc059f4aac091e4ee7fef6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23\u201328 lines \u00D7 2): lore-storage/src/read.rs:441-468 | lore-storage/src/read.rs:1878-1900 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/read.rs"},"region":{"startLine":441}}}],"partialFingerprints":{"codehealthFindingId/v1":"32340f7069f1da42d69e6654f734ec24eba68e95c4b0b9d47261b319fe8973fd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26\u201327 lines \u00D7 3): lore-revision/src/state.rs:7591-7616 | lore-revision/src/state.rs:7653-7678 | lore-revision/src/state.rs:7689-7715 \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":"lore-revision/src/state.rs"},"region":{"startLine":7591}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b4172cdacca8842036c390836af6e876b5820603c962ce84fdb3eb5d1b531e0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21\u201327 lines \u00D7 2): lore-server/src/grpc/handlers/branch_push.rs:117-137 | lore-server/src/grpc/revision/v1/branch_push.rs:96-122 \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":"lore-server/src/grpc/handlers/branch_push.rs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3e0aedfa73bf28379a0463f3555ebad5ce9bc307ba5e1376259436c8f2bdd08"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26\u201327 lines \u00D7 2): lore-server/src/grpc/handlers/repository_query.rs:181-207 | lore-server/src/grpc/repository/v1/repository_get.rs:256-281 \u2014 before extracting anything, compare \u0060lore-server/src/grpc/handlers/repository_query.rs\u0060 and \u0060lore-server/src/grpc/repository/v1/repository_get.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 83 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":"lore-server/src/grpc/handlers/repository_query.rs"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"e18b5cb8cf5ea5dc2b09a71875714a99a9567858601234cd7cdeb4dbc7e51e16"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 2): lore-storage/src/compress.rs:716-742 | lore-storage/src/compress.rs:846-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":"lore-storage/src/compress.rs"},"region":{"startLine":716}}}],"partialFingerprints":{"codehealthFindingId/v1":"80baeaf6aefc2b39fe7e812847c1d0417de887f026c7e26d150717508af95a64"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 3): lore-server/src/grpc/handlers/branch_metadata_set.rs:64-89 | lore-server/src/grpc/handlers/repository_metadata_set.rs:64-89 | lore-server/src/grpc/repository/v1/repository_metadata_set.rs:175-200 \u2014 before extracting anything, compare \u0060lore-server/src/grpc/handlers/branch_metadata_set.rs\u0060 and \u0060lore-server/src/grpc/handlers/repository_metadata_set.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 55 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":"lore-server/src/grpc/handlers/branch_metadata_set.rs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb2b6a25876fcf20a5446fce364798117b771d6d5d894410e6aca7b0a7c5a935"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): lore-revision/src/branch.rs:2786-2811 | lore-revision/src/branch.rs:2870-2895 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch.rs"},"region":{"startLine":2786}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fe7dd43f2ac98f16e274e52f97dbf857dfbe0c589ca09035761b82902d4ec0c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23\u201326 lines \u00D7 2): lore-revision/src/dependency/mod.rs:701-723 | lore-revision/src/metadata/set.rs:241-266 \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":"lore-revision/src/dependency/mod.rs"},"region":{"startLine":701}}}],"partialFingerprints":{"codehealthFindingId/v1":"60d52d7c7d4f5959cc79fbd0e1ba86accba33e376aaa06280629ebdfd38ef0d3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25\u201326 lines \u00D7 2): lore-revision/src/state.rs:5619-5643 | lore-revision/src/state.rs:5645-5670 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":5619}}}],"partialFingerprints":{"codehealthFindingId/v1":"50b391719c255aaa998cf9170bb143107bc87671fffdcfc3aa89089347d0f574"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): lore-revision/src/link/add.rs:417-442 | lore-revision/src/link/update.rs:207-232 \u2014 before extracting anything, compare \u0060lore-revision/src/link/add.rs\u0060 and \u0060lore-revision/src/link/update.rs\u0060 as WHOLE FILES: this scan already matched 3 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":"lore-revision/src/link/add.rs"},"region":{"startLine":417}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2c2027ae83fc31c725100684050152c13f0436b5a19aeccfb1659b77f5b9da3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): lore-server/src/grpc/handlers/repository_create.rs:122-147 | lore-server/src/grpc/repository/v1/repository_create.rs:196-221 \u2014 before extracting anything, compare \u0060lore-server/src/grpc/handlers/repository_create.rs\u0060 and \u0060lore-server/src/grpc/repository/v1/repository_create.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 97 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":"lore-server/src/grpc/handlers/repository_create.rs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ae9b1efb01a6e1ccb9e642c7136a6cc2f1300a841b85cfcdec1b5986e978881"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): lore-storage/src/local/immutable_store.rs:797-822 | lore-storage/src/local/mutable_store.rs:472-497 \u2014 before extracting anything, compare \u0060lore-storage/src/local/immutable_store.rs\u0060 and \u0060lore-storage/src/local/mutable_store.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 150 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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":797}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b05b4911284b39148ed77ad064289d45e1fc3b72920d9c0b6c4c223d15676d5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23\u201325 lines \u00D7 4): lore-client/src/cli/commands/branch.rs:1680-1702 | lore-client/src/cli/commands/file.rs:1017-1041 | lore-client/src/cli/commands/repository.rs:1587-1609 | lore-client/src/cli/commands/revision.rs:2350-2372 \u2014 before extracting anything, compare \u0060lore-client/src/cli/commands/branch.rs\u0060 and \u0060lore-client/src/cli/commands/file.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 43 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":"lore-client/src/cli/commands/branch.rs"},"region":{"startLine":1680}}}],"partialFingerprints":{"codehealthFindingId/v1":"09cd54aabceb8d319a8c31413c86362589aa293e189a894dc8f21d5c1f6bbd4e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): lore-transport/src/quic/storage_service/client.rs:357-381 | lore-transport/src/quic/storage_service/client.rs:461-485 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-transport/src/quic/storage_service/client.rs"},"region":{"startLine":357}}}],"partialFingerprints":{"codehealthFindingId/v1":"96628ec041745335cde08c707ff02397b8fd6c642f339acaa02da69e9408fe9f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): lore/src/dependency.rs:116-139 | lore/src/dependency.rs:225-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":"lore/src/dependency.rs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"a30232ba07986dcc907a5b6749dd582a074ae538993cd7da29c63d73d73f2566"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20\u201324 lines \u00D7 2): lore-revision/src/revision/cherry_pick.rs:164-183 | lore-revision/src/revision/revert.rs:155-178 \u2014 before extracting anything, compare \u0060lore-revision/src/revision/cherry_pick.rs\u0060 and \u0060lore-revision/src/revision/revert.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 67 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":"lore-revision/src/revision/cherry_pick.rs"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe459d2aa481304c6e794906fd888de002ac263199f8c5260ef8a2d6422e3a7a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22\u201324 lines \u00D7 2): lore-storage/src/packstore.rs:453-474 | lore-storage/src/packstore.rs:506-529 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/packstore.rs"},"region":{"startLine":453}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c46671cf55fec2348815b2c8e0e5a5968c74d4937dd3bd6c85de59ea67eb2a2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): lore-revision/src/branch/merge.rs:2396-2418 | lore-revision/src/branch/merge.rs:2431-2453 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/merge.rs"},"region":{"startLine":2396}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a40edd11f7f362703e11e1b5b7289cb57d0e0a2c40b84a8904028cd9fa57c6e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19\u201323 lines \u00D7 2): lore-revision/src/branch.rs:2185-2203 | lore-revision/src/branch.rs:2264-2286 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch.rs"},"region":{"startLine":2185}}}],"partialFingerprints":{"codehealthFindingId/v1":"5430b23f22d3254cc49671c606f4e1d3ec8b980c4515235dc14b64432b2c4ee7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): lore-revision/src/fs/realize.rs:1588-1610 | lore-revision/src/fs/realize.rs:2145-2167 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/fs/realize.rs"},"region":{"startLine":1588}}}],"partialFingerprints":{"codehealthFindingId/v1":"1babee832cefc5a5d2ed8b0d064a42e0cf86bdf5429a00483baa900bbf938b3a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): lore-revision/src/metadata/branch.rs:400-422 | lore-revision/src/metadata/repository.rs:387-409 \u2014 before extracting anything, compare \u0060lore-revision/src/metadata/branch.rs\u0060 and \u0060lore-revision/src/metadata/repository.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 88 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":"lore-revision/src/metadata/branch.rs"},"region":{"startLine":400}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a5eca0cbbff7186a3de05947111b3fe0b34543b1a7cbfda8802533f7df24e64"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22\u201323 lines \u00D7 2): lore-server/src/grpc/handlers/repository_metadata_set.rs:107-129 | lore-server/src/grpc/repository/v1/repository_metadata_set.rs:59-80 \u2014 before extracting anything, compare \u0060lore-server/src/grpc/handlers/repository_metadata_set.rs\u0060 and \u0060lore-server/src/grpc/repository/v1/repository_metadata_set.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 95 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":"lore-server/src/grpc/handlers/repository_metadata_set.rs"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee6b38758d66124e45f19baab752d0ef2ee93ed011aaf4df0cc41abe03eab510"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 3): lore-server/src/grpc/handlers/branch_metadata_set.rs:35-56 | lore-server/src/grpc/handlers/repository_metadata_set.rs:35-56 | lore-server/src/grpc/repository/v1/repository_metadata_set.rs:146-167 \u2014 before extracting anything, compare \u0060lore-server/src/grpc/handlers/branch_metadata_set.rs\u0060 and \u0060lore-server/src/grpc/handlers/repository_metadata_set.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 55 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":"lore-server/src/grpc/handlers/branch_metadata_set.rs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"df0f251fa0839910af8ee0059167c6c7f828447b0aa7fba3d02930ec98ed6693"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15\u201322 lines \u00D7 3): lore-storage/src/read.rs:447-468 | lore-storage/src/read.rs:524-545 | lore-storage/src/read.rs:1886-1900 \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":"lore-storage/src/read.rs"},"region":{"startLine":447}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c51e6893c7bffd807d30f859d05bb979f0dd03c149606567e01ef1eab1c405d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): lore-client/src/cli/commands/revision.rs:2428-2449 | lore-client/src/cli/commands/revision.rs:2455-2476 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-client/src/cli/commands/revision.rs"},"region":{"startLine":2428}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef5ff9d2e5290e4bc4e90e1123de6f3d87bd992883a1fcc4a78332e6406c442e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): lore-io/src/psync.rs:684-705 | lore-io/src/uring.rs:175-196 \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":"lore-io/src/psync.rs"},"region":{"startLine":684}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7b7a34e1bc43b635ae80dd0a8c39225357a915b9c9fe660b9373bfff8f577e7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20\u201322 lines \u00D7 2): lore-revision/src/util/fs.rs:522-541 | lore-revision/src/util/fs.rs:643-664 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/util/fs.rs"},"region":{"startLine":522}}}],"partialFingerprints":{"codehealthFindingId/v1":"748f08543125d7b8e1b07043c281c8420e01af9eab63dfc6cfa44cdf6b4969f8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): lore-storage/src/read.rs:179-200 | lore-storage/src/read.rs:1820-1841 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/read.rs"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"1223cc63463752ee6cf9c49a920869bd760dc26a7db96aca00b1cb163fc7b838"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19\u201321 lines \u00D7 3): lore-server/src/grpc/storage_service.rs:121-139 | lore-server/src/grpc/storage_service.rs:266-286 | lore-server/src/grpc/storage_service.rs:481-500 \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":"lore-server/src/grpc/storage_service.rs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"604a48d319e903f02eac2c536f2bb4973a64ad860a64b383d5df58b06a60cac6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): lore/src/repository.rs:490-510 | lore/src/repository.rs:554-574 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore/src/repository.rs"},"region":{"startLine":490}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d3d654eda5b54361a64b33575844c7d79271248b8ad6c9eb4c8cc4a3e3a2602"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): lore-revision/src/fs/realize.rs:2399-2419 | lore-revision/src/fs/realize.rs:2518-2538 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/fs/realize.rs"},"region":{"startLine":2399}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7e0419c20b5a9a0c77be7dc4f83655977abcbc59af672c26938d882c2cd4681"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): lore-revision/src/metadata/branch.rs:298-318 | lore-revision/src/metadata/repository.rs:287-307 \u2014 before extracting anything, compare \u0060lore-revision/src/metadata/branch.rs\u0060 and \u0060lore-revision/src/metadata/repository.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 88 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":"lore-revision/src/metadata/branch.rs"},"region":{"startLine":298}}}],"partialFingerprints":{"codehealthFindingId/v1":"8107a601d660d14e86c11253c3f6517122669eb963da102df24511e43252acb9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): lore-transport/src/grpc/storage_client.rs:1085-1105 | lore-transport/src/grpc/storage_client.rs:1130-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":"lore-transport/src/grpc/storage_client.rs"},"region":{"startLine":1085}}}],"partialFingerprints":{"codehealthFindingId/v1":"db2ad373140edfda4c7ad97e3fade21326869065fe388d82c116aabdbca38a1d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18\u201320 lines \u00D7 3): lore-revision/src/branch/merge.rs:2368-2385 | lore-revision/src/branch/merge.rs:2399-2418 | lore-revision/src/branch/merge.rs:2434-2453 \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":"lore-revision/src/branch/merge.rs"},"region":{"startLine":2368}}}],"partialFingerprints":{"codehealthFindingId/v1":"ddca9a6cd6a474f13fb0c78b016a8ef0ac7625750a22043c488530baaaee70b5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): lore-revision/src/branch/merge.rs:3279-3298 | lore-revision/src/stage.rs:2688-2707 \u2014 before extracting anything, compare \u0060lore-revision/src/branch/merge.rs\u0060 and \u0060lore-revision/src/stage.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 60 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":"lore-revision/src/branch/merge.rs"},"region":{"startLine":3279}}}],"partialFingerprints":{"codehealthFindingId/v1":"abfb1ee40ae263320d1fe504cbbaf32cdf0f715bdb36f98fd826b029bc118823"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): lore-revision/src/branch/merge.rs:4229-4248 | lore-revision/src/branch/merge.rs:4581-4600 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/merge.rs"},"region":{"startLine":4229}}}],"partialFingerprints":{"codehealthFindingId/v1":"387842734cd17f50b656213cef63cf4a5d6ebbecdd93ab095b3a3ebdd206ef0c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): lore-revision/src/file/diff.rs:478-497 | lore-revision/src/file/diff.rs:728-747 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/diff.rs"},"region":{"startLine":478}}}],"partialFingerprints":{"codehealthFindingId/v1":"92520cd30fb6ff02eafc4b7a2bd772e36c0bbecb3b06b55b21e505241d8c260e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): lore-revision/src/metadata/set.rs:90-109 | lore-revision/src/metadata/set.rs:328-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":"lore-revision/src/metadata/set.rs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f70e7a2ceedfd5d81319d19695c7e4031a31cc6bfda028e1cf33631c4e34426"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): lore-revision/src/stage.rs:1468-1487 | lore-revision/src/stage.rs:1612-1631 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/stage.rs"},"region":{"startLine":1468}}}],"partialFingerprints":{"codehealthFindingId/v1":"4348aef77376dbc4d1469227408dc8a1bee663771220da50d518a7c7486dfaf5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19\u201320 lines \u00D7 2): lore-revision/src/stage.rs:2877-2896 | lore-revision/src/stage.rs:2949-2967 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/stage.rs"},"region":{"startLine":2877}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e15d30dea4d4b566b7e7403f65064d1311848a6c28ea81a196545bbbdbcba65"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): lore-revision/src/state.rs:7360-7379 | lore-revision/src/state.rs:7390-7409 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":7360}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7e2de1dbc4310dd73c876dbfff0961a3b88b89cf4fc4fe89faf13471dc95555"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): lore-server/src/grpc/handlers/repository_metadata_get.rs:40-59 | lore-server/src/grpc/repository/v1/repository_metadata_get.rs:44-63 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/handlers/repository_metadata_get.rs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf2e0c6d4e03bd769a227d5433257d56b934111c8a4abf04f8bd5e27d7f6c068"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19\u201320 lines \u00D7 2): lore-server/src/grpc/handlers/repository_create.rs:62-81 | lore-server/src/grpc/repository/v1/repository_create.rs:141-159 \u2014 before extracting anything, compare \u0060lore-server/src/grpc/handlers/repository_create.rs\u0060 and \u0060lore-server/src/grpc/repository/v1/repository_create.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 97 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":"lore-server/src/grpc/handlers/repository_create.rs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"64ed60840e72c6449b9f666dab9f8b927be7e81d6c0ef1963b055e9a2c512b14"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): lore-server/src/grpc/handlers/branch_create.rs:34-53 | lore-server/src/grpc/revision/v1/branch_create.rs:36-55 \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":"lore-server/src/grpc/handlers/branch_create.rs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"57abf907de42fe747ff40586e1e82c3e9f35dd8f6afedbbdf510782d56c1a0c1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19\u201320 lines \u00D7 2): lore-storage/src/local/immutable_store.rs:5006-5024 | lore-storage/src/local/mutable_store.rs:1711-1730 \u2014 before extracting anything, compare \u0060lore-storage/src/local/immutable_store.rs\u0060 and \u0060lore-storage/src/local/mutable_store.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 150 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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":5006}}}],"partialFingerprints":{"codehealthFindingId/v1":"1778c8babfafa791d1b40bb9129342d74f6ee8775be84b84cf07be0c89e3e085"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): lore-storage/src/read.rs:415-434 | lore-storage/src/read.rs:897-916 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/read.rs"},"region":{"startLine":415}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2fd4f709fe91babe60e7da0f6103ff9fa1c619d436fd98c66f6f4f157d7eeb9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): lore-aws/src/store/immutable_store.rs:1409-1427 | lore-aws/src/store/immutable_store.rs:1649-1667 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-aws/src/store/immutable_store.rs"},"region":{"startLine":1409}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d389fc1c7422663f973b74d21961f3396deb7a174e6208af14abbb0e5d332cb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): lore-client/src/cli/commands/branch.rs:1061-1079 | lore-client/src/cli/commands/revision.rs:1687-1705 \u2014 before extracting anything, compare \u0060lore-client/src/cli/commands/branch.rs\u0060 and \u0060lore-client/src/cli/commands/revision.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 172 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":"lore-client/src/cli/commands/branch.rs"},"region":{"startLine":1061}}}],"partialFingerprints":{"codehealthFindingId/v1":"82a7d5ca8b5713f6e18f6683a6cb6d9d59cf87210249923f0fe1c4d91474c19e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): lore-client/src/cli/commands/branch.rs:1707-1725 | lore-client/src/cli/commands/repository.rs:1613-1631 \u2014 before extracting anything, compare \u0060lore-client/src/cli/commands/branch.rs\u0060 and \u0060lore-client/src/cli/commands/repository.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 125 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":"lore-client/src/cli/commands/branch.rs"},"region":{"startLine":1707}}}],"partialFingerprints":{"codehealthFindingId/v1":"6986803476b871df2db4f4ca1a1113be612ed9227f3ed43cd5439945a9d49152"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): lore-revision/src/commit.rs:1961-1979 | lore-revision/src/commit.rs:3139-3157 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/commit.rs"},"region":{"startLine":1961}}}],"partialFingerprints":{"codehealthFindingId/v1":"a95365c8c46711a00d18ebeef651587b46fc5ba7271a63f9cf69cfd6a1864e30"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18\u201319 lines \u00D7 2): lore-revision/src/commit.rs:3385-3403 | lore-revision/src/commit.rs:3538-3555 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/commit.rs"},"region":{"startLine":3385}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8b077d6399fe250d5d9b707b1fb9f8e689c543480b066cb319cf354fb22150e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18\u201319 lines \u00D7 2): lore-revision/src/file/reset.rs:1382-1399 | lore-revision/src/file/reset.rs:1522-1540 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/reset.rs"},"region":{"startLine":1382}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf836ff97627daade8125d74d867a680a04bf24a7883a685a6a4a162c8f6f140"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18\u201319 lines \u00D7 2): lore-revision/src/stage.rs:2774-2791 | lore-revision/src/stage.rs:3293-3311 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/stage.rs"},"region":{"startLine":2774}}}],"partialFingerprints":{"codehealthFindingId/v1":"679dda961eb85af1404b072e55dac01c2d111a365dba41cd04a6034d0f50ddc9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18\u201319 lines \u00D7 2): lore-revision/src/stage.rs:3356-3373 | lore-revision/src/stage.rs:3402-3420 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/stage.rs"},"region":{"startLine":3356}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6d46b724f6f6f9528a1f99e8e4197cece3bf7f30b6bd3e5d1bc749b9ba8f370"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17\u201319 lines \u00D7 2): lore-server/src/cache/revision.rs:152-170 | lore-server/src/cache/revision.rs:206-222 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/cache/revision.rs"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"2789d83c8648f885036d41fcd63ff183603e9de8845c08d99af7845951d3c9dc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15\u201319 lines \u00D7 2): lore-server/src/grpc/thinclient/v1/helpers.rs:176-190 | lore-server/src/grpc/thinclient/v1/revision_info.rs:86-104 \u2014 before extracting anything, compare \u0060lore-server/src/grpc/thinclient/v1/helpers.rs\u0060 and \u0060lore-server/src/grpc/thinclient/v1/revision_info.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":"lore-server/src/grpc/thinclient/v1/helpers.rs"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"a442adc715dff00ceb3547aebadae4296ded4763e74f25098e938f6df3e12341"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): lore-storage/src/local/mutable_store.rs:1280-1298 | lore-storage/src/local/mutable_store.rs:1417-1435 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/local/mutable_store.rs"},"region":{"startLine":1280}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e98e48263b6833c607661bc17522bcb6b49ea90014b337a0f4e6f5f20d74b9a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): lore-storage/src/mutable_conformance.rs:504-522 | lore-storage/src/mutable_conformance.rs:551-569 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/mutable_conformance.rs"},"region":{"startLine":504}}}],"partialFingerprints":{"codehealthFindingId/v1":"a78e94e11041db962a8c5a937791e7ecaf88801ee8425b1f668a9e55a83c988f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 4): lore-revision/src/metadata/get.rs:20-37 | lore-revision/src/metadata/get.rs:61-78 | lore-revision/src/metadata/list.rs:19-36 | lore-revision/src/metadata/list.rs:50-67 \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":"lore-revision/src/metadata/get.rs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"c14c8c68cb466c69413c0b2d8582f4fd4c96a28b3b8f394cc78cdbda9ada0ee2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): lore-io/src/psync.rs:640-657 | lore-io/src/uring.rs:153-170 \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":"lore-io/src/psync.rs"},"region":{"startLine":640}}}],"partialFingerprints":{"codehealthFindingId/v1":"c591cbf084409f3e4b47d4e9e7deb4d6c9983adbe193a34dbd52cfc2d7559ec3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): lore-revision/src/branch/merge.rs:4265-4282 | lore-revision/src/branch/merge.rs:4628-4645 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/merge.rs"},"region":{"startLine":4265}}}],"partialFingerprints":{"codehealthFindingId/v1":"d278ff94dc30baa2f1029a95e8b44013245c89c9cf68962ebf87970c5a41958c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): lore-revision/src/metadata.rs:662-679 | lore-revision/src/metadata.rs:700-717 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/metadata.rs"},"region":{"startLine":662}}}],"partialFingerprints":{"codehealthFindingId/v1":"f96aed7d94381a629f6d5c718e831509eb44b0e15275ec47523a5732de3792dd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17\u201318 lines \u00D7 2): lore-revision/src/repository/clone.rs:581-598 | lore-revision/src/repository/clone.rs:706-722 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/repository/clone.rs"},"region":{"startLine":581}}}],"partialFingerprints":{"codehealthFindingId/v1":"86ec372bd1c2fbe0888349ce8e9f298ed3b13ddb0f9416c51d40e69c1eecfb50"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17\u201318 lines \u00D7 2): lore-revision/src/state.rs:3201-3218 | lore-revision/src/state.rs:3298-3314 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":3201}}}],"partialFingerprints":{"codehealthFindingId/v1":"4cd32262984c83dbdfa8a7db6e7b53b5d193bb80e46c80ab73ccd12543f2bc78"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16\u201318 lines \u00D7 2): lore-revision/src/util/fs.rs:543-558 | lore-revision/src/util/fs.rs:667-684 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/util/fs.rs"},"region":{"startLine":543}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cc90394b8c8f3a33e9dabb1f0bbcb94e519eb8a7c4a2ba8f578401b641781fb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): lore-revision/src/link/info.rs:64-81 | lore-revision/src/link/remove.rs:69-86 \u2014 before extracting anything, compare \u0060lore-revision/src/link/info.rs\u0060 and \u0060lore-revision/src/link/remove.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 39 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/link/info.rs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3060f29f8120558178234e3e136b1e612047e9437fa99c9ae93248a775cfdb9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): lore-server/src/quic/stream_handler.rs:545-562 | lore-transport/src/quic/response_reader.rs:156-173 \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":"lore-server/src/quic/stream_handler.rs"},"region":{"startLine":545}}}],"partialFingerprints":{"codehealthFindingId/v1":"06731eea4173becebfd2e00794dd755c84daf95b038a04aa425e9d007c085bf9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17\u201318 lines \u00D7 2): lore-transport/src/grpc/mod.rs:105-121 | lore-transport/src/grpc/mod.rs:158-175 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-transport/src/grpc/mod.rs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d8eb3f4c6a0ac42248fc2ba7859bef5a0ca1e91ad196af66ce8a7d957e9ec4f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): lore-transport/src/grpc/repository_client.rs:223-240 | lore-transport/src/grpc/revision_client.rs:364-381 \u2014 before extracting anything, compare \u0060lore-transport/src/grpc/repository_client.rs\u0060 and \u0060lore-transport/src/grpc/revision_client.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 40 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":"lore-transport/src/grpc/repository_client.rs"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"99582bb1eafdb1aa92ef614a185235413768919bf4de0c81dab0d055746416a0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): lore-transport/src/grpc/storage_client.rs:933-950 | lore-transport/src/grpc/storage_client.rs:1017-1034 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-transport/src/grpc/storage_client.rs"},"region":{"startLine":933}}}],"partialFingerprints":{"codehealthFindingId/v1":"374da49b6d31eef000b980cd14c8be42a5524e0743aa9b9339c018508cc639f0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15\u201317 lines \u00D7 6): lore-server/src/grpc/storage/v1/copy.rs:150-164 | lore-server/src/grpc/storage/v1/get.rs:113-128 | lore-server/src/grpc/storage/v1/get_metadata.rs:112-127 | lore-server/src/grpc/storage/v1/get_resolved.rs:133-148 | lore-server/src/grpc/storage/v1/put.rs:114-130 | lore-server/src/grpc/storage/v1/put_resolved.rs:170-185 \u2014 before extracting anything, compare \u0060lore-server/src/grpc/storage/v1/get.rs\u0060 and \u0060lore-server/src/grpc/storage/v1/get_metadata.rs\u0060 as WHOLE FILES: this scan already matched 5 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":"lore-server/src/grpc/storage/v1/copy.rs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"1565490eb617161563454d18ceb719f129677fd58f308aa81af488870cdf82fb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 4): lore-server/src/grpc/handlers/repository_metadata_get.rs:40-56 | lore-server/src/grpc/handlers/repository_metadata_set.rs:110-126 | lore-server/src/grpc/repository/v1/repository_metadata_get.rs:44-60 | lore-server/src/grpc/repository/v1/repository_metadata_set.rs:62-78 \u2014 before extracting anything, compare \u0060lore-server/src/grpc/handlers/repository_metadata_set.rs\u0060 and \u0060lore-server/src/grpc/repository/v1/repository_metadata_set.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 95 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":"lore-server/src/grpc/handlers/repository_metadata_get.rs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7274b85ea4612ec9e13ee62da01589ff74ab4b695a5f6e23bfeb23cddc14dc4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 3): lore-revision/src/link/add.rs:423-439 | lore-revision/src/link/remove.rs:154-170 | lore-revision/src/link/update.rs:213-229 \u2014 before extracting anything, compare \u0060lore-revision/src/link/add.rs\u0060 and \u0060lore-revision/src/link/update.rs\u0060 as WHOLE FILES: this scan already matched 3 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":"lore-revision/src/link/add.rs"},"region":{"startLine":423}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd3e1d95f815773f0488db2d68229f4ece807d92381eaafe0d3f2be10948b516"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 3): lore-transport/src/connection.rs:1133-1149 | lore-transport/src/connection.rs:1166-1182 | lore-transport/src/connection.rs:1189-1205 \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":"lore-transport/src/connection.rs"},"region":{"startLine":1133}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d99e85d3de7ffbfdb3b385354fe86d114a1d9e93a10ace2b8d6b916a1c97111"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): lore-client/src/cli/commands/revision.rs:956-972 | lore-client/src/cli/commands/revision.rs:1089-1105 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-client/src/cli/commands/revision.rs"},"region":{"startLine":956}}}],"partialFingerprints":{"codehealthFindingId/v1":"01dd124e033c2e0c1939c52139c5f0624d89dada98fb6ba54149f8ddf5e39b10"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): lore-revision/src/branch/merge.rs:3354-3370 | lore-revision/src/branch/merge.rs:3567-3583 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/merge.rs"},"region":{"startLine":3354}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2bc82c0afcca4287ca0ab9b787ddf4bda1c6fc659f4b3385242c60a7bddb8b3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16\u201317 lines \u00D7 2): lore-revision/src/branch/merge.rs:3725-3741 | lore-revision/src/stage.rs:2694-2709 \u2014 before extracting anything, compare \u0060lore-revision/src/branch/merge.rs\u0060 and \u0060lore-revision/src/stage.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 60 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":"lore-revision/src/branch/merge.rs"},"region":{"startLine":3725}}}],"partialFingerprints":{"codehealthFindingId/v1":"a65cc1cd2befff94813d70319f2b547c67e0ece33c0cc0cfe9597502ab930cbc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): lore-revision/src/branch/merge.rs:4211-4227 | lore-revision/src/branch/merge.rs:4562-4578 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/merge.rs"},"region":{"startLine":4211}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d33c25f04b2e79aa249a4021bcb5d210382370bfa760e124038fa72153d6ef2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): lore-revision/src/file/info.rs:702-718 | lore-revision/src/file/info.rs:796-812 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/info.rs"},"region":{"startLine":702}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d3081f71612e4fc39d23b8d8d594541ffab298594d421155518905ea493af6f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): lore-revision/src/metadata/clear.rs:60-76 | lore-revision/src/metadata/clear.rs:150-166 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/metadata/clear.rs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"96419920d4711cdde89fa6f77eef131c846ba3db1a11e0c72a77347496da01b9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15\u201317 lines \u00D7 2): lore-revision/src/repository/verify.rs:404-418 | lore-revision/src/repository/verify.rs:552-568 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/repository/verify.rs"},"region":{"startLine":404}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fc5c6de2c6c3716f7a791ec276dd7310acb315fa77c55bf8e7682d894fa2769"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): lore-revision/src/state.rs:877-893 | lore-revision/src/state.rs:969-985 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":877}}}],"partialFingerprints":{"codehealthFindingId/v1":"712821a16faf5f5fe8f263b3bf7b581159c633bbc967b7100a41db84ff1d0d1a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15\u201317 lines \u00D7 2): lore-server/src/grpc/handlers/branch_push.rs:90-106 | lore-server/src/grpc/revision/v1/branch_push.rs:72-86 \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":"lore-server/src/grpc/handlers/branch_push.rs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"c543552658ff41866b979f048a454e831b5b96009e2da92f68734ed6f6810cf2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16\u201317 lines \u00D7 2): lore-storage/src/local/immutable_store.rs:3592-3608 | lore-storage/src/local/immutable_store.rs:3646-3661 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":3592}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f09b0bf292b4e3f4d21e0b6ed2b42ea4f19b3defef4793d5e8b55260dbc4d03"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): lore-transport/src/grpc/repository_client.rs:165-181 | lore-transport/src/grpc/revision_client.rs:141-157 \u2014 before extracting anything, compare \u0060lore-transport/src/grpc/repository_client.rs\u0060 and \u0060lore-transport/src/grpc/revision_client.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 40 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":"lore-transport/src/grpc/repository_client.rs"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"6463bb2078fc4bd075026aeefc838742db3a9d2def1a111e96f38a3ab0f8e079"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15\u201316 lines \u00D7 4): lore-revision/src/branch/merge.rs:2370-2384 | lore-revision/src/branch/merge.rs:2401-2416 | lore-revision/src/branch/merge.rs:2436-2451 | lore-revision/src/branch/merge.rs:4189-4203 \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":"lore-revision/src/branch/merge.rs"},"region":{"startLine":2370}}}],"partialFingerprints":{"codehealthFindingId/v1":"6217de865c2354236bba238f5d0a91e072a5a62cf08aa79138ec6d8123ba2b7d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13\u201316 lines \u00D7 2): lore/src/revision_tree/handle.rs:209-221 | lore/src/storage/store.rs:256-271 \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":"lore/src/revision_tree/handle.rs"},"region":{"startLine":209}}}],"partialFingerprints":{"codehealthFindingId/v1":"95cc7069f5c13070a2016517cbe15aaf455c768c664068fbd92cc90fac3aaca3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): lore-client/src/cli/commands/auth.rs:486-501 | lore-client/src/cli/commands/lock.rs:321-336 \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":"lore-client/src/cli/commands/auth.rs"},"region":{"startLine":486}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f12b623f07a9e65b50f2fa9e60c15c9619412e62902c8820cd956610fd83fd5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): lore-client/src/cli/commands/branch.rs:1655-1670 | lore-client/src/cli/commands/repository.rs:1559-1574 \u2014 before extracting anything, compare \u0060lore-client/src/cli/commands/branch.rs\u0060 and \u0060lore-client/src/cli/commands/repository.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 125 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":"lore-client/src/cli/commands/branch.rs"},"region":{"startLine":1655}}}],"partialFingerprints":{"codehealthFindingId/v1":"452bb867abe42c2dfe074363638b3c8f91b2f7b294f39cd7598c016769400743"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): lore-client/src/cli/commands/branch.rs:1736-1751 | lore-client/src/cli/commands/repository.rs:1644-1659 \u2014 before extracting anything, compare \u0060lore-client/src/cli/commands/branch.rs\u0060 and \u0060lore-client/src/cli/commands/repository.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 125 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":"lore-client/src/cli/commands/branch.rs"},"region":{"startLine":1736}}}],"partialFingerprints":{"codehealthFindingId/v1":"fdd6dbd98953c879c05ccedef0ff9984d1e8b53ae34fdb30f36f15ab33ce27be"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): lore-revision/src/branch/merge.rs:4442-4457 | lore-revision/src/revision/restore.rs:305-320 \u2014 before extracting anything, compare \u0060lore-revision/src/branch/merge.rs\u0060 and \u0060lore-revision/src/revision/restore.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 48 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":"lore-revision/src/branch/merge.rs"},"region":{"startLine":4442}}}],"partialFingerprints":{"codehealthFindingId/v1":"079c1b354eacaf5df77f72d6f90fc5bfa891e37efa912d0e907116c864de17dc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): lore-revision/src/diff.rs:166-181 | lore-revision/src/repository/status.rs:1203-1218 \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":"lore-revision/src/diff.rs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"057af16feb81ac6cda10eebaf3ee3238ec3e6c23d4afcc635d404061ca13c27f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): lore-revision/src/file/dirty.rs:1235-1250 | lore-revision/src/fs/realize.rs:2023-2038 \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":"lore-revision/src/file/dirty.rs"},"region":{"startLine":1235}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5a3910307735d9af6067a8e634e4479d2a0b230b86e304d834e403f2852d9c7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15\u201316 lines \u00D7 2): lore-revision/src/fs/realize.rs:2551-2565 | lore-revision/src/fs/realize.rs:2618-2633 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/fs/realize.rs"},"region":{"startLine":2551}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff085981d9649b86025afd90f4ec1736a852dc56c0240bde072dd2f714e65d24"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): lore-revision/src/stage.rs:2711-2726 | lore-revision/src/stage.rs:2972-2987 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/stage.rs"},"region":{"startLine":2711}}}],"partialFingerprints":{"codehealthFindingId/v1":"797dcf48a16b9d8a2620b9dfbc1e7854573e767395d73200bb7c9c94728c14d0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): lore-revision/src/stage.rs:2854-2869 | lore-revision/src/stage.rs:3016-3031 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/stage.rs"},"region":{"startLine":2854}}}],"partialFingerprints":{"codehealthFindingId/v1":"07775204e48f653c9a92c3dcd0d3d98099103076f6cf2aa0fe501fba99efb249"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): lore-server/src/grpc/storage_service.rs:212-227 | lore-server/src/grpc/storage_service.rs:616-631 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/storage_service.rs"},"region":{"startLine":212}}}],"partialFingerprints":{"codehealthFindingId/v1":"695400a257f31e9727a0d42042cfe87e83fda595a98cd24acec01c3cd663fce2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): lore-storage/src/read.rs:422-437 | lore-storage/src/read.rs:492-507 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/read.rs"},"region":{"startLine":422}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ce1f3e0a81d32d698f212aedc282f66b54d4d5c0a0c2ce90cd759367c3e7a0a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): lore-transport/src/grpc/storage_client.rs:971-986 | lore-transport/src/grpc/storage_client.rs:1055-1070 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-transport/src/grpc/storage_client.rs"},"region":{"startLine":971}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc0065236dc1cca549c9ca10247b2854863c010df56604fd9a38661897c30172"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201316 lines \u00D7 2): lore-transport/src/quic/response_reader.rs:230-245 | lore-transport/src/quic/response_reader.rs:275-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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-transport/src/quic/response_reader.rs"},"region":{"startLine":230}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a3b1fba288578adafbafda677ac274bab080b3546f8fa369807d047d31dfc97"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 3): lore-client/src/cli/commands/branch.rs:992-1006 | lore-client/src/cli/commands/revision.rs:1852-1866 | lore-client/src/cli/commands/revision.rs:2144-2158 \u2014 before extracting anything, compare \u0060lore-client/src/cli/commands/branch.rs\u0060 and \u0060lore-client/src/cli/commands/revision.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 172 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":"lore-client/src/cli/commands/branch.rs"},"region":{"startLine":992}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c630c96b7cb681c6123defc990b92ca13a8db60722a264f9c725614a4699cd6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 3): lore-client/src/cli/commands/branch.rs:1197-1211 | lore-client/src/cli/commands/revision.rs:1941-1955 | lore-client/src/cli/commands/revision.rs:2223-2237 \u2014 before extracting anything, compare \u0060lore-client/src/cli/commands/branch.rs\u0060 and \u0060lore-client/src/cli/commands/revision.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 172 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":"lore-client/src/cli/commands/branch.rs"},"region":{"startLine":1197}}}],"partialFingerprints":{"codehealthFindingId/v1":"61eadf1af08990d51d0b01261e659a21e5044e6fa0393cfacad2fd53b0cb138d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 3): lore-revision/src/file/stage.rs:1144-1158 | lore-revision/src/file/stage.rs:1542-1556 | lore-revision/src/stage.rs:3082-3096 \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":"lore-revision/src/file/stage.rs"},"region":{"startLine":1144}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bb8dc215797047683f973cd8f45dc0b8b193042798aa6e67837fe5562c56012"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 3): lore-server/src/grpc/storage_service.rs:705-719 | lore-server/src/grpc/storage_service.rs:750-764 | lore-server/src/grpc/storage_service.rs:788-802 \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":"lore-server/src/grpc/storage_service.rs"},"region":{"startLine":705}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b628d7bf04a2b78a95467027cd29488169e2c450a66b8d37556135f977f06c3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201315 lines \u00D7 2): lore/src/layer/add.rs:22-36 | lore/src/layer/remove.rs:26-39 \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":"lore/src/layer/add.rs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e0217c79a813b6135eae5b6e418febf8c175e3d7623174c9560ebe93c111b19"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): lore-client/src/cli/commands/layer.rs:141-155 | lore-client/src/cli/commands/layer.rs:199-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":"lore-client/src/cli/commands/layer.rs"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"075b56ee1c695b79da14cb033150e585d906bc687208fa5538fe4b181d496900"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201315 lines \u00D7 2): lore-client/src/cli/commands/lock.rs:172-186 | lore-client/src/cli/commands/lock.rs:223-236 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-client/src/cli/commands/lock.rs"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc3328196dd27d5d0c74673c6bd83c9fcb9f56ceb6163dca4d333623536352c8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201315 lines \u00D7 2): lore-credential/src/token_store.rs:558-571 | lore-credential/src/token_store.rs:867-881 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-credential/src/token_store.rs"},"region":{"startLine":558}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6dcf7aaabc336d2ea790d2fd79a40ba921d1f40bd9014b0fc9e87dc42625a5c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): lore-revision/src/file/diff.rs:308-322 | lore-revision/src/file/diff.rs:449-463 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/diff.rs"},"region":{"startLine":308}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0b2c3543f46ec10013e6127b11ca8bfde530ab71e817d722aedde3728191d18"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): lore-revision/src/file/diff.rs:508-522 | lore-revision/src/file/diff.rs:656-670 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/diff.rs"},"region":{"startLine":508}}}],"partialFingerprints":{"codehealthFindingId/v1":"04691ed0dc1ecd5ae6b23aaa0d3d42a4d05ecf095550626cb783cb4997c7eb14"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201315 lines \u00D7 2): lore-revision/src/file/obliterate.rs:131-145 | lore-revision/src/file/write.rs:236-249 \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":"lore-revision/src/file/obliterate.rs"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e182508c7c0735265b809e3f11d9b90fff5c4fa6ee92b27798c4fd02234f0c3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): lore-revision/src/fs/realize.rs:301-315 | lore-revision/src/fs/realize.rs:323-337 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/fs/realize.rs"},"region":{"startLine":301}}}],"partialFingerprints":{"codehealthFindingId/v1":"d095bf37667e502b52bf5bcfcac3ef68e4428ac67717551523a261d0ce4ee40a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): lore-revision/src/fs/realize.rs:2421-2435 | lore-revision/src/fs/realize.rs:2529-2543 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/fs/realize.rs"},"region":{"startLine":2421}}}],"partialFingerprints":{"codehealthFindingId/v1":"a640aa41882c8030bdb2ca443e0f0575d4bbe5d13999a326847b24f4bc38979d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): lore-revision/src/metadata.rs:449-463 | lore-revision/src/metadata.rs:483-497 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/metadata.rs"},"region":{"startLine":449}}}],"partialFingerprints":{"codehealthFindingId/v1":"8638708d388c1ff021c5d0f6003c3602c6552f71c6485873472ee96c350ffff9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): lore-revision/src/node.rs:1318-1332 | lore-revision/src/node.rs:1342-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":"lore-revision/src/node.rs"},"region":{"startLine":1318}}}],"partialFingerprints":{"codehealthFindingId/v1":"a600fe38d95b98e35721b27489389f94a6cd04a3b6a886b1d2dd3a1b02a62316"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): lore-revision/src/stage.rs:934-948 | lore-revision/src/stage.rs:960-974 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/stage.rs"},"region":{"startLine":934}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9b34a2d15cc6e4a50914bab34afd995e4993303a8b9c5fd8628aa4fb09e851a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): lore-revision/src/state.rs:225-240 | lore-revision/src/state.rs:329-343 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"a060a25f9142d213a96eb77f5a141fa0027d2bba7ec01bbc816cb80a670b1f84"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): lore-revision/src/state.rs:898-912 | lore-revision/src/state.rs:990-1004 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":898}}}],"partialFingerprints":{"codehealthFindingId/v1":"a963dfc1a2ae39b12703028fba4a006b37d78430564426750a2398a8497be31e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): lore-revision/src/state/dump.rs:149-163 | lore-revision/src/state/dump.rs:166-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":"lore-revision/src/state/dump.rs"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2002b2ba19e8e153bee6ce2252f299e8f74f14daae146000d92a665d503d996"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): lore-revision/src/branch/diff.rs:86-100 | lore-revision/src/branch/diff.rs:103-117 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/diff.rs"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6b4f31c4a1c47306338fdab942bc5d831076d369f719ca523ce389e9df0e66f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): lore-revision/src/state/os_diff.rs:1521-1535 | lore-revision/src/state/os_diff.rs:1700-1714 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state/os_diff.rs"},"region":{"startLine":1521}}}],"partialFingerprints":{"codehealthFindingId/v1":"40a61b2132c63dc845a69db2a1589cec37e1d9a670c179d330097b7ec0403eea"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): lore-server/src/grpc/revision/v1/service.rs:226-240 | lore-server/src/grpc/revision_service.rs:201-215 \u2014 before extracting anything, compare \u0060lore-server/src/grpc/revision/v1/service.rs\u0060 and \u0060lore-server/src/grpc/revision_service.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 84 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":"lore-server/src/grpc/revision/v1/service.rs"},"region":{"startLine":226}}}],"partialFingerprints":{"codehealthFindingId/v1":"74386d04dcfa784ced01a3e64e79e71221eee63b78df17bd0aea654935d028e6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13\u201315 lines \u00D7 2): lore-server/src/grpc/storage_service.rs:152-164 | lore-server/src/grpc/storage_service.rs:299-313 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/storage_service.rs"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"2815add2b00fb91a9efdad67d1e67ba9236fcedb5aa4710cd02b3d17a050555f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201315 lines \u00D7 2): lore-server/src/grpc/handlers/repository_delete.rs:46-60 | lore-server/src/grpc/repository/v1/repository_delete.rs:48-61 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/handlers/repository_delete.rs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"807531a748d7914eeb290379526194d8aac09510bc3f7a50622859518d1da565"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201315 lines \u00D7 2): lore-storage/src/compress.rs:700-714 | lore-storage/src/compress.rs:831-844 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/compress.rs"},"region":{"startLine":700}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fce3d119855f2d519e29178cc5aaf4ce0e0093219df7c1e0711be3dd31c9d04"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201315 lines \u00D7 2): lore-storage/src/local/immutable_store.rs:1712-1725 | lore-storage/src/local/immutable_store.rs:2094-2108 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":1712}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c1a52eb00cb9cc2400a3468f18cc339d8382e417edaadd03ac80133b31ad824"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201315 lines \u00D7 2): lore-transport/src/auth/exchange.rs:456-470 | lore-transport/src/auth/exchange.rs:624-637 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-transport/src/auth/exchange.rs"},"region":{"startLine":456}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bab5c357d48095b7fb659d88c93157794ef48abe38c931883339bca87fd7e3d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 5): lore-client/src/cli/commands/file.rs:1537-1550 | lore-client/src/cli/commands/file.rs:1579-1592 | lore-client/src/cli/commands/file.rs:1647-1660 | lore-client/src/cli/commands/link.rs:169-182 | lore-client/src/cli/commands/link.rs:202-215 \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":"lore-client/src/cli/commands/file.rs"},"region":{"startLine":1537}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4e68d2072624d0ecfccecfc43013426637e421bdd467a68a8b84b337a8364d3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201314 lines \u00D7 5): lore-server/src/grpc/storage_service.rs:419-430 | lore-server/src/grpc/storage_service.rs:652-665 | lore-server/src/grpc/storage_service.rs:707-717 | lore-server/src/grpc/storage_service.rs:752-762 | lore-server/src/grpc/storage_service.rs:790-800 \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":"lore-server/src/grpc/storage_service.rs"},"region":{"startLine":419}}}],"partialFingerprints":{"codehealthFindingId/v1":"309518515c1ffb131120774797aeceb08304d41ecf671b4c86bcb4f9298c9888"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 3): lore/src/call.rs:92-105 | lore/src/call.rs:153-166 | lore/src/call.rs:205-218 \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":"lore/src/call.rs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"0be5c6846ff5f796aca7dafb5f997ca1319cc56ff20381b312708ae01becded6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13\u201314 lines \u00D7 3): lore-client/src/cli/commands/branch.rs:639-651 | lore-client/src/cli/commands/revision.rs:586-599 | lore-client/src/cli/commands/revision.rs:713-726 \u2014 before extracting anything, compare \u0060lore-client/src/cli/commands/branch.rs\u0060 and \u0060lore-client/src/cli/commands/revision.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 172 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":"lore-client/src/cli/commands/branch.rs"},"region":{"startLine":639}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf26bf44e07837d6335fb8a0733be35a0ec4da05254932e4ec2519eb3f48f04c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 3): lore-revision/src/branch/merge.rs:3285-3298 | lore-revision/src/branch/merge.rs:3725-3739 | lore-revision/src/stage.rs:2694-2707 \u2014 before extracting anything, compare \u0060lore-revision/src/branch/merge.rs\u0060 and \u0060lore-revision/src/stage.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 60 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":"lore-revision/src/branch/merge.rs"},"region":{"startLine":3285}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a6d16041266cd6b6fc5d9064a82ef6b0c464863019f874e78bffb693957dded"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 3): lore-storage/src/read.rs:421-434 | lore-storage/src/read.rs:491-504 | lore-storage/src/read.rs:903-916 \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":"lore-storage/src/read.rs"},"region":{"startLine":421}}}],"partialFingerprints":{"codehealthFindingId/v1":"53fbf67a8748cd952fd6c8bfd87411d3c4b69961ab0df9875bacfcb373f2e128"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): lore/src/branch.rs:1671-1684 | lore/src/repository.rs:1279-1292 \u2014 before extracting anything, compare \u0060lore/src/branch.rs\u0060 and \u0060lore/src/repository.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":"lore/src/branch.rs"},"region":{"startLine":1671}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc795bc9e1f7e59a442410b3914822f512e3789c8a0936a115f8e145d5d4707e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): lore/src/storage/mutable_compare_and_swap.rs:124-137 | lore/src/storage/mutable_load.rs:118-131 \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":"lore/src/storage/mutable_compare_and_swap.rs"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"76ac3b8490ece74f3555a11c51198579d475be393c8d1968a0ce96c514b43eac"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): lore/src/call.rs:71-84 | lore/src/call.rs:184-197 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore/src/call.rs"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c5c71cb4486a32e91870d40cb02c68aa7ba6be32be24c147c8bee21da55c189"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13\u201314 lines \u00D7 2): lore-aws/src/dynamodb.rs:313-326 | lore-aws/src/dynamodb.rs:544-556 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-aws/src/dynamodb.rs"},"region":{"startLine":313}}}],"partialFingerprints":{"codehealthFindingId/v1":"15c4ccd2e0a11ff4c8410a2c6f5faa1f3f2d1cc30b6a5df52773da61f09e7fee"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13\u201314 lines \u00D7 2): lore-base/src/allocator/growvec.rs:52-65 | lore-base/src/allocator/growvec.rs:143-155 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-base/src/allocator/growvec.rs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"cad5e3e1091cd4adc4ce68997bf792fcbb26b19c1a5b6d648711a096474c4276"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): lore-client/src/cli/commands/file.rs:1050-1063 | lore-client/src/cli/commands/revision.rs:2376-2389 \u2014 before extracting anything, compare \u0060lore-client/src/cli/commands/file.rs\u0060 and \u0060lore-client/src/cli/commands/revision.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 80 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":"lore-client/src/cli/commands/file.rs"},"region":{"startLine":1050}}}],"partialFingerprints":{"codehealthFindingId/v1":"259beff867496d9b3e413b521ad387c5dcfa530cbe23393ebb66968ec7441139"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): lore-client/src/cli/commands/repository.rs:1028-1041 | lore-client/src/cli/commands/revision.rs:1481-1494 \u2014 before extracting anything, compare \u0060lore-client/src/cli/commands/repository.rs\u0060 and \u0060lore-client/src/cli/commands/revision.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":"lore-client/src/cli/commands/repository.rs"},"region":{"startLine":1028}}}],"partialFingerprints":{"codehealthFindingId/v1":"742579580f7194ea70002435a31ffa1ad744a760cc753af867da7d48853d270a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): lore-client/src/cli/commands/repository.rs:1141-1154 | lore-client/src/cli/commands/repository.rs:1305-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":"lore-client/src/cli/commands/repository.rs"},"region":{"startLine":1141}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcc55a89bf3382a6bc5876122dc5c972f58e8c9730b280359da62ebf65f13745"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): lore-client/src/cli/commands/revision.rs:981-994 | lore-client/src/cli/commands/revision.rs:1114-1127 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-client/src/cli/commands/revision.rs"},"region":{"startLine":981}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4e301a89937cab919277167def4695cd6b818d1dc3e33c660f0ecf71b4a618c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): lore-client/src/cli/commands/revision.rs:1770-1783 | lore-client/src/cli/commands/revision.rs:2066-2079 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-client/src/cli/commands/revision.rs"},"region":{"startLine":1770}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b2f6503663354c0f516a057cb03a03ca4140323dff15c6e92e308e52e9880df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13\u201314 lines \u00D7 2): lore-revision/src/branch/merge.rs:1654-1667 | lore-revision/src/branch/merge.rs:2791-2803 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/merge.rs"},"region":{"startLine":1654}}}],"partialFingerprints":{"codehealthFindingId/v1":"3dc24ad079907752c34bde4f7ee0216b1bccffcee2f58eb73cec4b47422420c7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): lore-revision/src/branch/merge.rs:4196-4209 | lore-revision/src/branch/merge.rs:4547-4560 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/merge.rs"},"region":{"startLine":4196}}}],"partialFingerprints":{"codehealthFindingId/v1":"25a0c43ce24c3d44822c75e575209c1a24de3b3c99ef13eb3e241a73f9f3d6c8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13\u201314 lines \u00D7 2): lore-revision/src/commit.rs:3381-3393 | lore-revision/src/commit.rs:3454-3467 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/commit.rs"},"region":{"startLine":3381}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1d92a47d10bf6aa3bea4295f40fa82b15851b95872a3d0dc4e6bcb1aa248419"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201314 lines \u00D7 2): lore-revision/src/layer.rs:1125-1136 | lore-revision/src/layer.rs:1149-1162 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/layer.rs"},"region":{"startLine":1125}}}],"partialFingerprints":{"codehealthFindingId/v1":"80ca1e95c499fd4184b1a85ddcb0df218652656fa1663f849389c6248876d8a7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): lore-revision/src/link.rs:1728-1741 | lore-revision/src/link/info.rs:72-85 \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":"lore-revision/src/link.rs"},"region":{"startLine":1728}}}],"partialFingerprints":{"codehealthFindingId/v1":"9df14626b39e66895496a32bb111178f8e41f4476ebd96a6026f75fcf5d19e73"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): lore-revision/src/repository.rs:3756-3769 | lore-revision/src/repository/delete.rs:38-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":"lore-revision/src/repository.rs"},"region":{"startLine":3756}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b5fc8e698e79a12805145796a34041a2d8dbf9ff6aa8ebe46f1121754a48998"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): lore-revision/src/state/diff.rs:1447-1460 | lore-revision/src/state/diff.rs:1471-1484 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state/diff.rs"},"region":{"startLine":1447}}}],"partialFingerprints":{"codehealthFindingId/v1":"dab511c9acbfa1894288d1ab2a8b094678ba79fd14d1e447f205b4c76e1dfd95"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): lore-revision/src/state.rs:3808-3821 | lore-revision/src/state.rs:3883-3896 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":3808}}}],"partialFingerprints":{"codehealthFindingId/v1":"726edbda2fcf37b3d0bc25af4c1d5f4ca4de64587ceaa1c8a07cda3b74995691"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): lore-revision/src/link/remove.rs:63-76 | lore-revision/src/link/update.rs:58-71 \u2014 before extracting anything, compare \u0060lore-revision/src/link/remove.rs\u0060 and \u0060lore-revision/src/link/update.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 52 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. 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":"lore-revision/src/link/remove.rs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"d524d5ac92d70f14e669465f550e5e6a5c1fc553c216d5cbd9178c806bf71a54"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): lore-revision/src/branch/diff.rs:53-66 | lore-revision/src/branch/diff.rs:67-80 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/diff.rs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"57c57aecf0d19d16b38ab8b47041270f15b182268050b164651f0ba59693edd5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): lore-server/src/store/replica.rs:270-283 | lore-server/src/store/replicated_store.rs:295-308 \u2014 before extracting anything, compare \u0060lore-server/src/store/replica.rs\u0060 and \u0060lore-server/src/store/replicated_store.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 40 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":"lore-server/src/store/replica.rs"},"region":{"startLine":270}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e1959da68ad5b0e84c48af75eab14c0c91e32859fce3a4f4c3ed15af3163bb6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): lore-server/src/grpc/handlers/repository_query.rs:104-117 | lore-server/src/grpc/handlers/repository_query.rs:174-187 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/handlers/repository_query.rs"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9dae18d7c2f4f6a4d3f447e765665c9d537ee3dce4fc990cdae5dccb931ab15"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): lore-server/src/grpc/repository/v1/repository_get.rs:180-193 | lore-server/src/grpc/repository/v1/repository_get.rs:249-262 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/repository/v1/repository_get.rs"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e646aeb704c0e030e8fd885bc54bb05eb693e59445ae407c143b956cfeaf496"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): lore-server/src/grpc/handlers/branch_delete.rs:48-61 | lore-server/src/grpc/revision/v1/branch_delete.rs:105-118 \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":"lore-server/src/grpc/handlers/branch_delete.rs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"95ef539c8d713d75d46ab0d86f21cdb67be22c3f86762697d4d2211bfb27595d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): lore-storage/src/local/immutable_store.rs:836-849 | lore-storage/src/local/mutable_store.rs:510-523 \u2014 before extracting anything, compare \u0060lore-storage/src/local/immutable_store.rs\u0060 and \u0060lore-storage/src/local/mutable_store.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 150 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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":836}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d361ae7f96caaff1962ea0c153589d0cf2455fcb35c8b0026beb696b755fa06"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 4): lore-client/src/cli/commands/file.rs:976-988 | lore-client/src/cli/commands/file.rs:995-1007 | lore-client/src/cli/commands/revision.rs:2311-2323 | lore-client/src/cli/commands/revision.rs:2329-2341 \u2014 before extracting anything, compare \u0060lore-client/src/cli/commands/file.rs\u0060 and \u0060lore-client/src/cli/commands/revision.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 80 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":"lore-client/src/cli/commands/file.rs"},"region":{"startLine":976}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe60999aef48612a75de782ba9f2805e9871021e9fe341460f2e3c5120f997ea"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): lore-client/src/cli/commands/branch.rs:1542-1554 | lore-client/src/cli/commands/branch.rs:1569-1581 | lore-client/src/cli/commands/branch.rs:1600-1612 \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":"lore-client/src/cli/commands/branch.rs"},"region":{"startLine":1542}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6d99cf33906feacc0b5a76207708decbf3c52d4476542976a3486a502880a86"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): lore-client/src/cli/commands/repository.rs:1730-1742 | lore-client/src/cli/commands/repository.rs:1765-1777 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-client/src/cli/commands/repository.rs"},"region":{"startLine":1730}}}],"partialFingerprints":{"codehealthFindingId/v1":"2edacf640575797db2b13a6ff39d869a46a7872e9990a79d42b1d4af72eca754"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 2): lore-io/src/iocp.rs:529-541 | lore-io/src/iocp.rs:568-579 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-io/src/iocp.rs"},"region":{"startLine":529}}}],"partialFingerprints":{"codehealthFindingId/v1":"353b5bd58b6cf2114c7be811e6ae7ab5c987860c502b3d5aee470973c083a95b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): lore-io/src/uring.rs:435-447 | lore-io/src/uring.rs:465-477 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-io/src/uring.rs"},"region":{"startLine":435}}}],"partialFingerprints":{"codehealthFindingId/v1":"34f962ea39bb08cfeee9e68a847bac49032e2507d40050d3a043e2c0e6b01d4d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): lore-revision/src/auth/login.rs:186-198 | lore-revision/src/auth/login.rs:267-279 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/auth/login.rs"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ca2a1771918372dfdd148a6aaf670a6b28fbfefe20f092336a72467e3c9e2d5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): lore-revision/src/branch/merge.rs:4252-4264 | lore-revision/src/branch/merge.rs:4609-4621 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/merge.rs"},"region":{"startLine":4252}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a6cd57325cff783901164e138c4ef4b6a850484be7a93483535cff1ecb65c14"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): lore-revision/src/file/dirty.rs:1341-1353 | lore-revision/src/file/dirty.rs:1424-1436 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/dirty.rs"},"region":{"startLine":1341}}}],"partialFingerprints":{"codehealthFindingId/v1":"1185b161a5e87114bb07f46034c505bfa43f4fd7010912463e5b42b226fa6529"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): lore-revision/src/metadata/branch.rs:145-157 | lore-revision/src/metadata/repository.rs:137-149 \u2014 before extracting anything, compare \u0060lore-revision/src/metadata/branch.rs\u0060 and \u0060lore-revision/src/metadata/repository.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 88 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":"lore-revision/src/metadata/branch.rs"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c3ce2e83ebfa85b2ac8324671e941a90e38f974b9b4dd617e050692b6e4dbd0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 2): lore-revision/src/stage.rs:1524-1536 | lore-revision/src/stage.rs:1637-1648 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/stage.rs"},"region":{"startLine":1524}}}],"partialFingerprints":{"codehealthFindingId/v1":"7af2a735a8fcf378b1fddaf78c2cbbb1855ec0736f02645cc2529e236d37b9e5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): lore-revision/src/state.rs:1615-1627 | lore-revision/src/state.rs:1808-1820 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":1615}}}],"partialFingerprints":{"codehealthFindingId/v1":"f69f5d5afd84b364159d92a23061dc67849b8538244e60ef4ed1c2bf4823954b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 2): lore-revision/src/state.rs:3225-3237 | lore-revision/src/state.rs:3322-3333 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":3225}}}],"partialFingerprints":{"codehealthFindingId/v1":"7650ae72d8fffb4cd087fbaeee05634a149db39cde4205b33aa5408c24a8a6af"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): lore-revision/src/state.rs:7847-7859 | lore-revision/src/state.rs:7865-7877 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":7847}}}],"partialFingerprints":{"codehealthFindingId/v1":"b48f8e8fe941f257069d760d39ff7f7c412b9a64fc4b41b05647490d395716cb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): lore-revision/src/dependency/resolve.rs:129-141 | lore-revision/src/dependency/resolve.rs:272-284 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/dependency/resolve.rs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"afb49ef0606820a4402807b4cce1ed834b6c4432fd2fecea82d8c6da2ce5a869"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): lore-storage/src/fragment_engine.rs:102-114 | lore-storage/src/fragment_engine.rs:553-565 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/fragment_engine.rs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e08c0d04a071150996bc775ad6f6104a12b8fbc7fbc590b23803a6b3dc2f39b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): lore-storage/src/local/immutable_store.rs:1126-1138 | lore-storage/src/local/mutable_store.rs:806-818 \u2014 before extracting anything, compare \u0060lore-storage/src/local/immutable_store.rs\u0060 and \u0060lore-storage/src/local/mutable_store.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 150 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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":1126}}}],"partialFingerprints":{"codehealthFindingId/v1":"51d3086b7b0afe1d05a449c4c71b005b815e09f55f716bc57d4dc1a39d460f88"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201313 lines \u00D7 2): lore-storage/src/local/immutable_store.rs:4990-5000 | lore-storage/src/local/mutable_store.rs:1696-1708 \u2014 before extracting anything, compare \u0060lore-storage/src/local/immutable_store.rs\u0060 and \u0060lore-storage/src/local/mutable_store.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 150 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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":4990}}}],"partialFingerprints":{"codehealthFindingId/v1":"952c3ece1c4af4ee94898034bbe28e6e20e278e59e143d7a6dea06863994fa13"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): lore-transport/src/auth/exchange.rs:110-122 | lore-transport/src/auth/exchange.rs:281-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":"lore-transport/src/auth/exchange.rs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd361782a577b667c42e5cc3f9d9dc99a7fee40c1873f701ab94f4284a1949be"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201312 lines \u00D7 11): lore-client/src/cli/commands/branch.rs:1221-1230 | lore-client/src/cli/commands/branch.rs:1243-1252 | lore-client/src/cli/commands/branch.rs:1262-1271 | lore-client/src/cli/commands/branch.rs:1737-1748 | lore-client/src/cli/commands/repository.rs:1645-1656 | lore-client/src/cli/commands/revision.rs:1876-1885 | lore-client/src/cli/commands/revision.rs:1965-1974 | lore-client/src/cli/commands/revision.rs:1988-1997 | lore-client/src/cli/commands/revision.rs:2165-2174 | lore-client/src/cli/commands/revision.rs:2247-2256 | lore-client/src/cli/commands/revision.rs:2269-2278 \u2014 before extracting anything, compare \u0060lore-client/src/cli/commands/branch.rs\u0060 and \u0060lore-client/src/cli/commands/repository.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 125 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":"lore-client/src/cli/commands/branch.rs"},"region":{"startLine":1221}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf1b950556966addaf6e0284fdbbbba7a269efb35a75f8b2f491d9f98a40ce13"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201312 lines \u00D7 4): lore-client/src/cli/commands/branch.rs:1663-1673 | lore-client/src/cli/commands/repository.rs:1567-1577 | lore-client/src/cli/commands/revision.rs:1771-1782 | lore-client/src/cli/commands/revision.rs:2067-2078 \u2014 before extracting anything, compare \u0060lore-client/src/cli/commands/branch.rs\u0060 and \u0060lore-client/src/cli/commands/repository.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 125 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":"lore-client/src/cli/commands/branch.rs"},"region":{"startLine":1663}}}],"partialFingerprints":{"codehealthFindingId/v1":"30b03996077162826208800cb8b187864a11c36fe5e1f84e3c61db40c10443e9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): lore-client/src/cli/commands/branch.rs:1019-1030 | lore-client/src/cli/commands/branch.rs:1088-1099 | lore-client/src/cli/commands/revision.rs:1729-1740 \u2014 before extracting anything, compare \u0060lore-client/src/cli/commands/branch.rs\u0060 and \u0060lore-client/src/cli/commands/revision.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 172 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":"lore-client/src/cli/commands/branch.rs"},"region":{"startLine":1019}}}],"partialFingerprints":{"codehealthFindingId/v1":"93894b2cb5db151089e3bcbf0a1e525259397f40a012880daf6b0434b0e46771"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): lore-client/src/cli/commands/branch.rs:1128-1139 | lore-client/src/cli/commands/revision.rs:1769-1780 | lore-client/src/cli/commands/revision.rs:2065-2076 \u2014 before extracting anything, compare \u0060lore-client/src/cli/commands/branch.rs\u0060 and \u0060lore-client/src/cli/commands/revision.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 172 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":"lore-client/src/cli/commands/branch.rs"},"region":{"startLine":1128}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b10857cf4c9e7e20f1636045dfefda0b7dcaa728ff83a387abf9dabd73b91ba"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201312 lines \u00D7 3): lore-server/src/grpc/handlers/branch_create.rs:88-99 | lore-server/src/grpc/handlers/branch_delete.rs:48-58 | lore-server/src/grpc/revision/v1/branch_delete.rs:105-115 \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":"lore-server/src/grpc/handlers/branch_create.rs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"36b73e1d0e334b28723e83b081b5fbdf0e64c63d8475b160f645f0a9bd655767"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): lore/src/storage/remote.rs:54-65 | lore/src/storage/remote.rs:73-84 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore/src/storage/remote.rs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"04f1105aae3ad85941b2a737ba27e7696a048d7ba575949cbde139ef1b4b836f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): lore-aws/src/dynamodb.rs:361-372 | lore-aws/src/dynamodb.rs:570-581 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-aws/src/dynamodb.rs"},"region":{"startLine":361}}}],"partialFingerprints":{"codehealthFindingId/v1":"f504f1192b9860aaa9c129c302d10163b75cd3e7334fa0e85b5f2cfbd489a6ae"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): lore-client/src/cli/commands/revision.rs:1287-1298 | lore-client/src/cli/commands/revision.rs:1348-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":"lore-client/src/cli/commands/revision.rs"},"region":{"startLine":1287}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a00ea2375d99f433d0ecef9fc2d0514d420b87d1e6d37ade79524c712134b6d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): lore-revision/src/branch/merge.rs:3974-3985 | lore-revision/src/branch/merge.rs:4000-4011 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/merge.rs"},"region":{"startLine":3974}}}],"partialFingerprints":{"codehealthFindingId/v1":"be2cbcb417c0080519204742b1a8bce6d1f2c226ffc1761159e079644a583bef"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): lore-revision/src/commit.rs:3405-3416 | lore-revision/src/commit.rs:3501-3512 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/commit.rs"},"region":{"startLine":3405}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2f95193742e9bdbb247a01e399e0d30b5f20e2293a9b7dfc6c2137f9985c945"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): lore-revision/src/dependency/add.rs:48-59 | lore-revision/src/dependency/remove.rs:41-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":"lore-revision/src/dependency/add.rs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"031cfdbd85499e7f689689d0221c572bfd38a072478bfaa0a0739a9a48e82432"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): lore-revision/src/dependency/add.rs:122-133 | lore-revision/src/dependency/remove.rs:81-93 \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":"lore-revision/src/dependency/add.rs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5531bbf92017b017eb5dd85276564f28e3b4caed8c7167101b0a2256f894b26"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): lore-revision/src/file/reset.rs:1369-1380 | lore-revision/src/file/reset.rs:1509-1520 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/reset.rs"},"region":{"startLine":1369}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5c5a73fef697c1d5c4c385926d64427655b2acc6c4912d0fc7d3debc277fe16"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): lore-revision/src/metadata/clear.rs:44-55 | lore-revision/src/metadata/clear.rs:99-110 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/metadata/clear.rs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdd320f4a67a75e2f67af0fd30114254c338f9f2fa6b757a153869ea2cf66ecf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): lore-revision/src/projfs/serve.rs:1205-1216 | lore-revision/src/projfs/serve.rs:1228-1239 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/projfs/serve.rs"},"region":{"startLine":1205}}}],"partialFingerprints":{"codehealthFindingId/v1":"f540039c802901c53ca8e9b332fe9d558b6be78f647d20bff6a933caaa3647ea"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): lore-revision/src/repository.rs:981-992 | lore-revision/src/repository.rs:1028-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":"lore-revision/src/repository.rs"},"region":{"startLine":981}}}],"partialFingerprints":{"codehealthFindingId/v1":"44fc564388b8f3c798bbeb0c2ec492b83cc5d445c4916ca6fa1bb0dd14aaf65b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): lore-revision/src/state/diff.rs:689-700 | lore-revision/src/state/diff.rs:782-793 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state/diff.rs"},"region":{"startLine":689}}}],"partialFingerprints":{"codehealthFindingId/v1":"39e10e6543368b3aec2300d61584a193ae997205d1a663dc5f87c877c96a09fd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): lore-revision/src/state.rs:207-218 | lore-revision/src/state.rs:298-309 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":207}}}],"partialFingerprints":{"codehealthFindingId/v1":"63f83313fba538980d81eb447a5ac735bbef42616342839aac85ecda2322708c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): lore-revision/src/store/remote.rs:90-101 | lore-revision/src/store/remote.rs:323-334 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/store/remote.rs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfc3d64e3da536b931aaffb01d43307745af0a57b136dee12d855401067d1f0c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201312 lines \u00D7 2): lore-server/src/http/presigned/repository/redeem.rs:79-89 | lore-server/src/http/repositories/repository/contents/content/get_repository_content.rs:67-78 \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":"lore-server/src/http/presigned/repository/redeem.rs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"890e0261d96e7b42401408d81ed544fc987cd42a09960a76cba60fab10c1d5d6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): lore-server/src/store/replica.rs:311-322 | lore-server/src/store/replica.rs:359-370 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/store/replica.rs"},"region":{"startLine":311}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ee42f829d40c3cf80e969e72ee79ff4b242779d86cd1d088ff398278b84df24"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): lore-server/src/grpc/handlers/branch_metadata_set.rs:107-118 | lore-server/src/grpc/revision/v1/branch_metadata_set.rs:60-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":"lore-server/src/grpc/handlers/branch_metadata_set.rs"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"10bda8cd111d10623d34b76312320377c593fe4177a71af4228019b229384fc6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): lore-storage/src/local/immutable_store.rs:4411-4422 | lore-storage/src/local/immutable_store.rs:4429-4440 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":4411}}}],"partialFingerprints":{"codehealthFindingId/v1":"970e3d9765d0d17b781450cde073c99ee59f16a883fc943fe98985a466a2275c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): lore-storage/src/local/mutable_store.rs:1319-1330 | lore-storage/src/local/mutable_store.rs:1460-1471 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/local/mutable_store.rs"},"region":{"startLine":1319}}}],"partialFingerprints":{"codehealthFindingId/v1":"73fef315119635bd2cdd05e9f6efa0390c188a775f83925d6426969470e90e56"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201312 lines \u00D7 2): lore-storage/src/write.rs:450-461 | lore-storage/src/write.rs:472-481 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/write.rs"},"region":{"startLine":450}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f148f70a5402c5d110eba0229fca3eafd20adfdfe216bf8ee249244bdb38906"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): lore-transport/src/grpc/storage_client.rs:1187-1198 | lore-transport/src/grpc/storage_client.rs:1235-1246 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-transport/src/grpc/storage_client.rs"},"region":{"startLine":1187}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1acd719a80b4a1f54cb8d4c0ee632de413b9eb9dbf9fd87031567981b7fde30"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201311 lines \u00D7 4): lore-revision/src/util/fs.rs:532-541 | lore-revision/src/util/fs.rs:570-579 | lore-revision/src/util/fs.rs:655-665 | lore-revision/src/util/fs.rs:697-706 \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":"lore-revision/src/util/fs.rs"},"region":{"startLine":532}}}],"partialFingerprints":{"codehealthFindingId/v1":"e872cfa0e84418805acd8477a9f4eb0ad54c9a0efa4192859513d3f5f8775035"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): lore/src/branch.rs:1667-1677 | lore/src/repository.rs:1275-1285 | lore/src/revision.rs:567-577 \u2014 before extracting anything, compare \u0060lore/src/branch.rs\u0060 and \u0060lore/src/repository.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":"lore/src/branch.rs"},"region":{"startLine":1667}}}],"partialFingerprints":{"codehealthFindingId/v1":"c87e07c27b4d2dd437308bfd2d4d63b6c2324eae84afb9a6f5ecdb958337c26c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): lore-client/src/cli/commands/auth.rs:482-492 | lore-client/src/cli/commands/lock.rs:317-327 | lore-client/src/cli/commands/revision.rs:2569-2579 \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":"lore-client/src/cli/commands/auth.rs"},"region":{"startLine":482}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c40b85e4e44106f2d37c6a4afa0be3b389e3ea6cf1368c28edbee3d89926939"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): lore-client/src/cli/commands/file.rs:1144-1154 | lore-client/src/cli/commands/file.rs:1193-1203 | lore-client/src/cli/commands/file.rs:1335-1345 \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":"lore-client/src/cli/commands/file.rs"},"region":{"startLine":1144}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9d9eb9167d1c042ae1989348e90e0b11f82c470d06e5813d65141c7b945ed6a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): lore-client/src/cli/commands/file.rs:1144-1154 | lore-client/src/cli/commands/file.rs:1279-1289 | lore-client/src/cli/commands/file.rs:1335-1345 \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":"lore-client/src/cli/commands/file.rs"},"region":{"startLine":1144}}}],"partialFingerprints":{"codehealthFindingId/v1":"b52df54f71cbec61d1a19413ecfbcdd7f78b219346e2638bebcb7e701067289a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): lore-revision/src/link.rs:1727-1737 | lore-revision/src/link/info.rs:71-81 | lore-revision/src/link/remove.rs:76-86 \u2014 before extracting anything, compare \u0060lore-revision/src/link/info.rs\u0060 and \u0060lore-revision/src/link/remove.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 39 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/link.rs"},"region":{"startLine":1727}}}],"partialFingerprints":{"codehealthFindingId/v1":"37c2601e6a8137225fc50c97837593275a5999124d969b860ad1a76c11f41e74"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): lore-revision/src/lock/file/acquire.rs:127-137 | lore-revision/src/lock/file/release.rs:131-141 | lore-revision/src/lock/file/status.rs:132-142 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from all 3 call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/lock/file/acquire.rs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ea0b331419591c1fb275e9e1d4b517cde8a715f489baf2e4da42850d5750f76"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): lore-revision/src/metadata/branch.rs:297-307 | lore-revision/src/metadata/repository.rs:286-296 | lore-revision/src/metadata/set.rs:86-96 \u2014 before extracting anything, compare \u0060lore-revision/src/metadata/branch.rs\u0060 and \u0060lore-revision/src/metadata/repository.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 88 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":"lore-revision/src/metadata/branch.rs"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"7745398f6e3d059402b314501ad55e01f46546f6bfe975a12ed7bc3283b4baca"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): lore/src/storage/put_file.rs:147-157 | lore/src/storage/put_file_resolved.rs:166-176 \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":"lore/src/storage/put_file.rs"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"f39463e321859f6f7c9ee0f07ba528250d9ea63d608ee98bafcd3bf62ba2060e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201311 lines \u00D7 2): lore-client/src/cli/commands/link.rs:124-133 | lore-client/src/cli/commands/repository.rs:1042-1052 \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":"lore-client/src/cli/commands/link.rs"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a1755844f5d597119f4f29ed5d1e706e4be15821ee737c0b351503afc4d1ab3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): lore-revision/src/branch/merge.rs:4459-4469 | lore-revision/src/revision/restore.rs:322-332 \u2014 before extracting anything, compare \u0060lore-revision/src/branch/merge.rs\u0060 and \u0060lore-revision/src/revision/restore.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 48 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":"lore-revision/src/branch/merge.rs"},"region":{"startLine":4459}}}],"partialFingerprints":{"codehealthFindingId/v1":"49aabf0e1eef7f1be1451c1b0db059700fa3a06416a29f589e5bcaeb75ae6aae"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): lore-revision/src/branch/merge.rs:4497-4507 | lore-revision/src/revision/restore.rs:365-375 \u2014 before extracting anything, compare \u0060lore-revision/src/branch/merge.rs\u0060 and \u0060lore-revision/src/revision/restore.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 48 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":"lore-revision/src/branch/merge.rs"},"region":{"startLine":4497}}}],"partialFingerprints":{"codehealthFindingId/v1":"948806c9337b6eaaf20a3763c3cab9a157fe811eaac9b5bc8aade32c07d47f24"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): lore-revision/src/commit.rs:2685-2695 | lore-revision/src/commit.rs:2737-2747 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/commit.rs"},"region":{"startLine":2685}}}],"partialFingerprints":{"codehealthFindingId/v1":"db34dff300c3222cf331cf1480527afba3d1641b53f5b08e14a95fe2a6d4906f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201311 lines \u00D7 2): lore-revision/src/file/dirty.rs:716-726 | lore-revision/src/file/reset.rs:1352-1361 \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":"lore-revision/src/file/dirty.rs"},"region":{"startLine":716}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ce8350b8244916bb5a7c617b3c172bf223fab7996459f295553d3931919fe69"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201311 lines \u00D7 2): lore-revision/src/file/dirty.rs:947-957 | lore-revision/src/state/os_diff.rs:70-78 \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":"lore-revision/src/file/dirty.rs"},"region":{"startLine":947}}}],"partialFingerprints":{"codehealthFindingId/v1":"f402c5172752844ad5770934683366f4dbae6648e66a4a4dfc551cb9a4ef4525"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): lore-revision/src/file/stage.rs:704-717 | lore-revision/src/metadata/set.rs:417-427 \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":"lore-revision/src/file/stage.rs"},"region":{"startLine":704}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8f04eb8c4bfffaab97ac69499fef89a44b8c1dd2f64f94e0aea9071aadb2e80"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201311 lines \u00D7 2): lore-revision/src/history.rs:177-186 | lore-revision/src/history.rs:188-198 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/history.rs"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"392799eeeeb429c99570b6778b7e6b2d4c9dacc980aae1ce05799e4599840e7d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): lore-revision/src/metadata/branch.rs:175-185 | lore-revision/src/metadata/repository.rs:168-178 \u2014 before extracting anything, compare \u0060lore-revision/src/metadata/branch.rs\u0060 and \u0060lore-revision/src/metadata/repository.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 88 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":"lore-revision/src/metadata/branch.rs"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbe32289ca524525df108632772bafd1f44884f650926665bc9471701d12095c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): lore-revision/src/projfs/serve.rs:924-934 | lore-revision/src/projfs/serve.rs:970-980 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/projfs/serve.rs"},"region":{"startLine":924}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f515a6aa703dd9476b07938d6f9087b8a355db8d3d225fbe6d50b74b814ad28"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): lore-revision/src/revision.rs:567-577 | lore-revision/src/revision.rs:612-622 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/revision.rs"},"region":{"startLine":567}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bed9ef20e89b9309a40def8e467a402173c44b0e109ab760dabd5a13be3e997"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): lore-revision/src/state.rs:4178-4188 | lore-revision/src/state.rs:4253-4263 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":4178}}}],"partialFingerprints":{"codehealthFindingId/v1":"453a508d82f3312eb8cc3d020e685c9461615045b68e8535f2a78a084909e000"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): lore-revision/src/state.rs:6105-6115 | lore-revision/src/state.rs:6117-6127 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":6105}}}],"partialFingerprints":{"codehealthFindingId/v1":"0607ba5a2391584514bc3c848265057a418739ba5af613aef85f9994a812eef9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): lore-revision/src/state.rs:7178-7188 | lore-revision/src/state.rs:7202-7212 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":7178}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9b682fec13d21f41940b0aed473f26dd639c87cbd733d1a8d051f8d4a4a2aa0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): lore-revision/src/link/remove.rs:51-61 | lore-revision/src/link/update.rs:46-56 \u2014 before extracting anything, compare \u0060lore-revision/src/link/remove.rs\u0060 and \u0060lore-revision/src/link/update.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 52 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. 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":"lore-revision/src/link/remove.rs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1501173d0999d4100396c91198228746a279925a239995f4731a09711ddf19d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u201311 lines \u00D7 2): lore-revision/src/link/add.rs:105-115 | lore-revision/src/link/add.rs:140-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":"lore-revision/src/link/add.rs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"e22be4b691ab0e625a9c11ecceb3837186e459f521f5eaa253fa12b2f00427ee"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): lore-server/src/grpc/handlers/revision_list.rs:287-297 | lore-server/src/grpc/revision/v1/revision_list.rs:558-568 \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":"lore-server/src/grpc/handlers/revision_list.rs"},"region":{"startLine":287}}}],"partialFingerprints":{"codehealthFindingId/v1":"39e233b22941d67e75113c0573a185ec548bbd2a84d3f590174911096ae3c5b5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): lore-server/src/grpc/thinclient/v1/helpers.rs:189-199 | lore-server/src/grpc/thinclient/v1/revision_info.rs:247-257 \u2014 before extracting anything, compare \u0060lore-server/src/grpc/thinclient/v1/helpers.rs\u0060 and \u0060lore-server/src/grpc/thinclient/v1/revision_info.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":"lore-server/src/grpc/thinclient/v1/helpers.rs"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ab232cc719432f8f4362e5c6b5d07a790f2bded77dc1a30e1385baef4a78f56"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): lore-server/src/quic/stream_handler.rs:617-627 | lore-transport/src/quic/response_reader.rs:250-260 \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":"lore-server/src/quic/stream_handler.rs"},"region":{"startLine":617}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3bd66431f8c0032ef0881e2360262eb7bdc0056ed4095dbf296f10f691a98ea"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): lore-server/src/grpc/handlers/branch_query.rs:97-107 | lore-server/src/grpc/handlers/branch_query.rs:139-149 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/handlers/branch_query.rs"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fbce37f36fdd27cb7840c5ffa817679c6378fd284cf73e9787f968f3dac88d1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): lore-storage/src/defragment.rs:755-765 | lore-storage/src/defragment.rs:1314-1326 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/defragment.rs"},"region":{"startLine":755}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d94f5372450bd22b8f1c9d66549e205da5593ec2c9798af180f8935dc2bb3c3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): lore-telemetry/src/metrics/grpc_tower_layer.rs:87-97 | lore-telemetry/src/metrics/http_tower_layer.rs:85-95 \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":"lore-telemetry/src/metrics/grpc_tower_layer.rs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"52d076423b98d32cad455127055e2fe410e9acd01981123da30373bb87cba20a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): lore-transport/src/auth/exchange.rs:135-145 | lore-transport/src/auth/exchange.rs:311-321 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-transport/src/auth/exchange.rs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"46400104c236b125bfd911975d77d2ab16c78689857a13e806fedbbe2d6734de"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): lore-transport/src/grpc/storage_client.rs:959-969 | lore-transport/src/grpc/storage_client.rs:1043-1053 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-transport/src/grpc/storage_client.rs"},"region":{"startLine":959}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab2a20c78d2a03bf93b6fe075aa70e17eda5e0e748cc07830d002f2db7c40e48"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): lore-transport/src/quic/client.rs:1088-1098 | lore-transport/src/quic/client.rs:1116-1126 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-transport/src/quic/client.rs"},"region":{"startLine":1088}}}],"partialFingerprints":{"codehealthFindingId/v1":"b03b8918a63484a70b0b6abbbe1b7a4886b02e538dff55b1f4d4d719d26d548a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 29): lore-client/src/cli/commands/branch.rs:612-622 | lore-client/src/cli/commands/branch.rs:786-796 | lore-client/src/cli/commands/branch.rs:1132-1142 | lore-client/src/cli/commands/branch.rs:1223-1233 | lore-client/src/cli/commands/branch.rs:1245-1255 | lore-client/src/cli/commands/branch.rs:1264-1274 | lore-client/src/cli/commands/branch.rs:1302-1312 | lore-client/src/cli/commands/branch.rs:1520-1530 | lore-client/src/cli/commands/branch.rs:1547-1557 | lore-client/src/cli/commands/branch.rs:1574-1584 | lore-client/src/cli/commands/branch.rs:1605-1615 | lore-client/src/cli/commands/branch.rs:1636-1646 | lore-client/src/cli/commands/file.rs:958-968 | lore-client/src/cli/commands/file.rs:981-990 | lore-client/src/cli/commands/repository.rs:1085-1095 | lore-client/src/cli/commands/repository.rs:1383-1393 | lore-client/src/cli/commands/repository.rs:1806-1816 | lore-client/src/cli/commands/revision.rs:1600-1610 | lore-client/src/cli/commands/revision.rs:1635-1645 | lore-client/src/cli/commands/revision.rs:1808-1818 | lore-client/src/cli/commands/revision.rs:1878-1888 | lore-client/src/cli/commands/revision.rs:1967-1977 | lore-client/src/cli/commands/revision.rs:1990-2000 | lore-client/src/cli/commands/revision.rs:2104-2114 | lore-client/src/cli/commands/revision.rs:2167-2177 | lore-client/src/cli/commands/revision.rs:2249-2259 | lore-client/src/cli/commands/revision.rs:2271-2281 | lore-client/src/cli/commands/revision.rs:2294-2304 | lore-client/src/cli/commands/revision.rs:2316-2325 \u2014 before extracting anything, compare \u0060lore-client/src/cli/commands/branch.rs\u0060 and \u0060lore-client/src/cli/commands/file.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 43 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":"lore-client/src/cli/commands/branch.rs"},"region":{"startLine":612}}}],"partialFingerprints":{"codehealthFindingId/v1":"1eb300feb393939946dcc8c4908c75d6006c26d1e712f49e8615c10139d04ee4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 6): lore-server/src/quic/storage_service.rs:87-96 | lore-server/src/quic/storage_service.rs:100-109 | lore-server/src/quic/storage_service.rs:113-122 | lore-server/src/quic/storage_service.rs:150-159 | lore-server/src/quic/storage_service.rs:199-208 | lore-server/src/quic/storage_service.rs:212-221 \u2014 all 6 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/quic/storage_service.rs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8b1183450b034d6e676a6c5b7c278a62924234699d8c76ef5945614b954d2cf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201310 lines \u00D7 4): lore-revision/src/link/add.rs:249-257 | lore-revision/src/link/info.rs:41-50 | lore-revision/src/link/remove.rs:50-59 | lore-revision/src/link/update.rs:45-54 \u2014 before extracting anything, compare \u0060lore-revision/src/link/add.rs\u0060 and \u0060lore-revision/src/link/update.rs\u0060 as WHOLE FILES: this scan already matched 3 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":"lore-revision/src/link/add.rs"},"region":{"startLine":249}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9f901a9faf4a0a67a27f2695eec5afd10dbe8ed47684969a34dd018f8d98b4c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 4): lore-server/src/grpc/handlers/repository_query.rs:109-118 | lore-server/src/grpc/handlers/repository_query.rs:179-188 | lore-server/src/grpc/repository/v1/repository_get.rs:185-194 | lore-server/src/grpc/repository/v1/repository_get.rs:254-263 \u2014 before extracting anything, compare \u0060lore-server/src/grpc/handlers/repository_query.rs\u0060 and \u0060lore-server/src/grpc/repository/v1/repository_get.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 83 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":"lore-server/src/grpc/handlers/repository_query.rs"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"54c2ff2ca823a6b44e973fa78a8f4abb9f1724a72009d2eb65dfb2c2189dd7e3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u201310 lines \u00D7 4): lore-server/src/grpc/storage/v1/mutable_compare_and_swap.rs:28-34 | lore-server/src/grpc/storage/v1/mutable_load.rs:29-35 | lore-server/src/grpc/storage/v1/mutable_store.rs:27-33 | lore-server/src/grpc/storage/v1/verify.rs:28-37 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from all 4 call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/storage/v1/mutable_compare_and_swap.rs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"14e44d280d872feb74ffc25ecaa9ebd859f098ad4aaf0bd53038ea144ca263c5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): lore-client/src/cli/commands/file.rs:822-831 | lore-client/src/cli/commands/file.rs:1057-1066 | lore-client/src/cli/commands/revision.rs:2383-2392 \u2014 before extracting anything, compare \u0060lore-client/src/cli/commands/file.rs\u0060 and \u0060lore-client/src/cli/commands/revision.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 80 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":"lore-client/src/cli/commands/file.rs"},"region":{"startLine":822}}}],"partialFingerprints":{"codehealthFindingId/v1":"e63bb275a558b5f3d27a01c228f44dbac54264523da10016acdfd3e65f069a53"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): lore-revision/src/repository.rs:1616-1625 | lore-revision/src/repository.rs:1872-1881 | lore-revision/src/repository.rs:1958-1967 \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":"lore-revision/src/repository.rs"},"region":{"startLine":1616}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba267d9ad1ab62b272fc02dcac0bfe8b9b0a099af1d32cb8fca1d1fb543bcd9b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): lore-revision/src/store/remote.rs:61-70 | lore-revision/src/store/remote.rs:91-100 | lore-revision/src/store/remote.rs:324-333 \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":"lore-revision/src/store/remote.rs"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"80d52025bb310ce8c018e39f14fbd925349aa3cd9de1645ccf513f627ce3234a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): lore-server/src/grpc/storage_service.rs:212-221 | lore-server/src/grpc/storage_service.rs:374-385 | lore-server/src/grpc/storage_service.rs:616-625 \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":"lore-server/src/grpc/storage_service.rs"},"region":{"startLine":212}}}],"partialFingerprints":{"codehealthFindingId/v1":"22af9246a2eabfbaf305852cb3a33a263e96097b73af2481cb23a0a4c5bda9cc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore/src/file.rs:452-461 | lore/src/revision.rs:574-583 \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":"lore/src/file.rs"},"region":{"startLine":452}}}],"partialFingerprints":{"codehealthFindingId/v1":"bcb318328921cadddc76c630e678cb24dad096a281d888f65f863db8a7457768"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore-client/src/cli/commands/file.rs:1677-1686 | lore-client/src/cli/commands/file.rs:1730-1739 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-client/src/cli/commands/file.rs"},"region":{"startLine":1677}}}],"partialFingerprints":{"codehealthFindingId/v1":"0657fe874c7df29e6b5f1ac542d63886658e03f14b0e1fce4784750d15538f7b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore-revision/src/branch/merge.rs:3394-3403 | lore-revision/src/branch/merge.rs:3879-3888 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/merge.rs"},"region":{"startLine":3394}}}],"partialFingerprints":{"codehealthFindingId/v1":"83ca01ec216214e6c63530cf0cf25256d541f2ee845875618476725cfd3921ea"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore-revision/src/branch/merge.rs:4647-4656 | lore-revision/src/revision/restore.rs:522-531 \u2014 before extracting anything, compare \u0060lore-revision/src/branch/merge.rs\u0060 and \u0060lore-revision/src/revision/restore.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 48 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":"lore-revision/src/branch/merge.rs"},"region":{"startLine":4647}}}],"partialFingerprints":{"codehealthFindingId/v1":"34a20bcd0592208f7bc0097072dfeb3a792523ceefd47d9ae540fe6c846e329c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore-revision/src/commit.rs:1252-1262 | lore-revision/src/link/remove.rs:56-65 \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":"lore-revision/src/commit.rs"},"region":{"startLine":1252}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed4a4216557cdf302eb0c01817ca2edab7b8af942d101763610405e0cdd3e320"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore-revision/src/file/dirty.rs:1157-1166 | lore-revision/src/file/dirty.rs:1369-1378 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/dirty.rs"},"region":{"startLine":1157}}}],"partialFingerprints":{"codehealthFindingId/v1":"44dd0247f903b4f01f62a2f1a1fdd6b5e88006091f6baa25460e5c9b2c7570f6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore-revision/src/file/dirty.rs:1254-1263 | lore-revision/src/file/stage.rs:1423-1432 \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":"lore-revision/src/file/dirty.rs"},"region":{"startLine":1254}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0149a0e75351274cc1674a4477c434ff5ea505be2dda3b6696821c6142b526e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore-revision/src/fs/realize.rs:2518-2527 | lore-revision/src/fs/realize.rs:2578-2587 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/fs/realize.rs"},"region":{"startLine":2518}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3052ac3850a923bb9821ba16a4ccaf865a757bd06e5c3e365d33b61dc9bf54b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore-revision/src/repository/clone.rs:848-857 | lore-revision/src/repository/create.rs:217-226 \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":"lore-revision/src/repository/clone.rs"},"region":{"startLine":848}}}],"partialFingerprints":{"codehealthFindingId/v1":"472c86d1b5b29f4332a9d6c10b4273382e510772567dc2defbc09bfa928ef65d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore-revision/src/repository/info.rs:130-139 | lore-revision/src/repository/info.rs:175-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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/repository/info.rs"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"92dba3a82480a6ee4b0184ddf5c7187b96db721e2a25417347566ebf69812f37"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore-revision/src/state.rs:1444-1453 | lore-revision/src/state.rs:1798-1807 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":1444}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e1d196684476f0ed18e80605628785b714f5c5ee77ce985d9fc9a9df5754a16"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore-revision/src/state.rs:1489-1498 | lore-revision/src/state.rs:1526-1535 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":1489}}}],"partialFingerprints":{"codehealthFindingId/v1":"df6adb0a8decc33950d11a59c0d59e2696f0fcc9c40b9a709e44d85373675230"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201310 lines \u00D7 2): lore-revision/src/state.rs:3162-3170 | lore-revision/src/state.rs:3260-3269 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":3162}}}],"partialFingerprints":{"codehealthFindingId/v1":"54585fd15f693e2a013ef28afd8e3e123408dc71e21360d5b3213d5b7f1f178b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore-revision/src/state.rs:5264-5273 | lore-revision/src/state.rs:5374-5383 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":5264}}}],"partialFingerprints":{"codehealthFindingId/v1":"74d5cb13d5becc8e7eddfc68b575743a1cb504b80ca46e194e332dac507a1e74"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore-server/src/grpc/storage_service.rs:141-150 | lore-server/src/grpc/storage_service.rs:288-297 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/storage_service.rs"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e82ed272414f064d380d1c307e95696b9a31adffdaccbf7f90a998e363ef47e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore-server/src/grpc/thinclient/v1/helpers.rs:204-213 | lore-server/src/grpc/thinclient/v1/revision_info.rs:125-134 \u2014 before extracting anything, compare \u0060lore-server/src/grpc/thinclient/v1/helpers.rs\u0060 and \u0060lore-server/src/grpc/thinclient/v1/revision_info.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":"lore-server/src/grpc/thinclient/v1/helpers.rs"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6dcf3376391386c36374aa44ec982144dbc50a0a40f75e425a567b1a9682c97"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore-server/src/notification/local.rs:120-129 | lore-server/src/notification/local.rs:143-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":"lore-server/src/notification/local.rs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3162368a9df49e57750488582fa64c6bacf0a30ad5bf1cefc6e8167c5555068"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore-server/src/store/replica.rs:228-237 | lore-server/src/store/replicated_store.rs:256-265 \u2014 before extracting anything, compare \u0060lore-server/src/store/replica.rs\u0060 and \u0060lore-server/src/store/replicated_store.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 40 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":"lore-server/src/store/replica.rs"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f0749ae512bf1301d330cceaa85c7e82208d9ed22b46fef16e0cafe34b73d7e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201310 lines \u00D7 2): lore-storage/src/local/immutable_store.rs:4944-4952 | lore-storage/src/local/mutable_store.rs:1646-1655 \u2014 before extracting anything, compare \u0060lore-storage/src/local/immutable_store.rs\u0060 and \u0060lore-storage/src/local/mutable_store.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 150 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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":4944}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7cd5ec0baf69a86ed8870c71e687025f34438ee0d873c2055b49876b2717411"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore-storage/src/mutable_conformance.rs:335-344 | lore-storage/src/mutable_conformance.rs:453-462 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/mutable_conformance.rs"},"region":{"startLine":335}}}],"partialFingerprints":{"codehealthFindingId/v1":"a99b1f1af8c20a0949d9815c3735a1703ff1c22ec6e9039e9e77ed75221fe404"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore-storage/src/mutable_conformance.rs:743-752 | lore-storage/src/mutable_conformance.rs:776-785 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/mutable_conformance.rs"},"region":{"startLine":743}}}],"partialFingerprints":{"codehealthFindingId/v1":"bed160c66ea48731a0aeaabed01f6f92ae31307e5f5457616a7fd1836de3603e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore-storage/src/read.rs:283-292 | lore-storage/src/read.rs:1434-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":"lore-storage/src/read.rs"},"region":{"startLine":283}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef60d31521795eca139850db482e94b79f681359cebdaa6790fdfd70ee218ba1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore-telemetry/src/metrics/grpc_metrics.rs:31-40 | lore-telemetry/src/metrics/http_metrics.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":"lore-telemetry/src/metrics/grpc_metrics.rs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8d0ca3353f3865f66848a2fdd9343155a8ae38ab2ca5cc20a827c7cef45fa67"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore-transport/src/connection.rs:606-615 | lore-transport/src/connection.rs:640-649 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-transport/src/connection.rs"},"region":{"startLine":606}}}],"partialFingerprints":{"codehealthFindingId/v1":"40f661a67ce15cc922d8eaa70d2d6a8b3ce1b1f869072c429ad0523e4d508c39"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore-transport/src/grpc/mod.rs:484-493 | lore-transport/src/grpc/mod.rs:519-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":"lore-transport/src/grpc/mod.rs"},"region":{"startLine":484}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a1b84f089d4e06b20049421cefeb2bb68c75eeab298caaa5437a20890f5e0fe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore-transport/src/grpc/storage_client.rs:1174-1183 | lore-transport/src/grpc/storage_client.rs:1222-1231 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-transport/src/grpc/storage_client.rs"},"region":{"startLine":1174}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e49383b8f12d74300b156c8e0bf5b67d09ea5a9c3b31e7a7bb6adf7d4d42eb0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 6): lore-server/src/quic/replication_store_service/server.rs:289-297 | lore-server/src/quic/replication_store_service/server.rs:301-309 | lore-server/src/quic/replication_store_service/server.rs:335-343 | lore-server/src/quic/replication_store_service/server.rs:347-355 | lore-server/src/quic/replication_store_service/server.rs:370-378 | lore-server/src/quic/replication_store_service/server.rs:382-390 \u2014 all 6 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/quic/replication_store_service/server.rs"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"10df13bd09b0617eabaa6c3b293266d953e1928d33de73980e82266a5066a5d7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 4): lore-client/src/cli/commands/branch.rs:1022-1030 | lore-client/src/cli/commands/branch.rs:1091-1099 | lore-client/src/cli/commands/revision.rs:1650-1658 | lore-client/src/cli/commands/revision.rs:1732-1740 \u2014 before extracting anything, compare \u0060lore-client/src/cli/commands/branch.rs\u0060 and \u0060lore-client/src/cli/commands/revision.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 172 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":"lore-client/src/cli/commands/branch.rs"},"region":{"startLine":1022}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f638b22bc2a7259c219823bb8e53ad6f14a28d6f57439a2fc0961ad8a0bda64"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u20139 lines \u00D7 3): lore-revision/src/store/remote.rs:58-66 | lore/src/storage/remote.rs:54-61 | lore/src/storage/remote.rs:73-80 \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":"lore-revision/src/store/remote.rs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d39feada8560eb0a49e2d84ba611ac6fdce9eb99f99f206e5e8a2fef33104e3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): lore-client/src/cli/commands/branch.rs:639-647 | lore-client/src/cli/commands/link.rs:296-304 | lore-client/src/cli/commands/revision.rs:713-721 \u2014 before extracting anything, compare \u0060lore-client/src/cli/commands/branch.rs\u0060 and \u0060lore-client/src/cli/commands/revision.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 172 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":"lore-client/src/cli/commands/branch.rs"},"region":{"startLine":639}}}],"partialFingerprints":{"codehealthFindingId/v1":"79736244bdf1664dd83642d2b25d2191885e20f1e8e5cea2d73a2c8a78e2a950"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): lore-credential/src/token_store.rs:209-217 | lore-credential/src/token_store.rs:558-566 | lore-credential/src/token_store.rs:867-875 \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":"lore-credential/src/token_store.rs"},"region":{"startLine":209}}}],"partialFingerprints":{"codehealthFindingId/v1":"b95c32dde7ca4b32b0d961c3758d80284b5e0e8198749dbea6d08285deb3d19a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6\u20139 lines \u00D7 3): lore-revision/src/file/dirty.rs:148-153 | lore-revision/src/file/dirty.rs:1156-1164 | lore-revision/src/file/dirty.rs:1368-1376 \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":"lore-revision/src/file/dirty.rs"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"814ede3dbb9dd3bcf3ff514cec3b49a7b272d28c438ca1cf42914fcdc694f88d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u20139 lines \u00D7 3): lore-storage/src/conformance.rs:509-517 | lore-storage/src/conformance.rs:720-727 | lore-storage/src/conformance.rs:753-760 \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":"lore-storage/src/conformance.rs"},"region":{"startLine":509}}}],"partialFingerprints":{"codehealthFindingId/v1":"781d917cbe1df77d2dfa3de09c61fdb90eae1075e62f40b2759d89ef13f9b633"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): lore/src/dependency.rs:82-90 | lore/src/dependency.rs:195-203 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore/src/dependency.rs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"b193eeab3da73047c4f580d2415744f01bd632647d44c3d5841178bb05932797"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): lore/src/dependency.rs:93-101 | lore/src/dependency.rs:206-214 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore/src/dependency.rs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3b891a7b0b7a644721cfcc8dc0e07fcad2ae4f668312769c64f5bdc7a0f7595"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): lore/src/revision_tree/delete.rs:181-189 | lore/src/revision_tree/modify.rs:173-181 \u2014 before extracting anything, compare \u0060lore/src/revision_tree/delete.rs\u0060 and \u0060lore/src/revision_tree/modify.rs\u0060 as WHOLE FILES: this scan already matched 5 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":"lore/src/revision_tree/delete.rs"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"363de44d35b535f9cf8a94b70956e4e2c7d782d4135c7149f889195ba1ce0d3e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u20139 lines \u00D7 2): lore/src/revision_tree/metadata_clear.rs:131-138 | lore/src/revision_tree/metadata_set.rs:164-172 \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":"lore/src/revision_tree/metadata_clear.rs"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfee9d83b56e2cef695671c0138a9f4ac01d9936958e85ded4ea86ea0ce5cf77"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): lore-aws/src/store/immutable_store.rs:1092-1100 | lore-aws/src/store/immutable_store.rs:1155-1163 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-aws/src/store/immutable_store.rs"},"region":{"startLine":1092}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf3336914ac9f7e78812ec912113b10bb1a057a5cfdfcb73e4e523c1df635df6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): lore-io/src/iocp.rs:209-217 | lore-io/src/uring.rs:112-120 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-io/src/iocp.rs"},"region":{"startLine":209}}}],"partialFingerprints":{"codehealthFindingId/v1":"380a9c74a0468dc82b5b36257877568bbf2b2836ec249238ed465c329df6703c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): lore-io/src/iocp.rs:994-1002 | lore-io/src/uring.rs:950-958 \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":"lore-io/src/iocp.rs"},"region":{"startLine":994}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e89bea8ffb7940274e2f56f6260f9e7a56f022e2f4ff51fc70db0577e3f2cc2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): lore-revision/src/branch/merge.rs:2280-2288 | lore-revision/src/branch/merge.rs:3205-3213 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/merge.rs"},"region":{"startLine":2280}}}],"partialFingerprints":{"codehealthFindingId/v1":"76634ccadf77fca447aa19ccec842366887e06ee74bff42e7f65c458580a1409"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): lore-revision/src/branch.rs:2163-2171 | lore-revision/src/branch.rs:2242-2250 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch.rs"},"region":{"startLine":2163}}}],"partialFingerprints":{"codehealthFindingId/v1":"48e3d9cf4551244427121d886523d3fa8c79ac56076df5791d66f4219caaa90c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): lore-revision/src/metadata/set.rs:157-165 | lore-revision/src/metadata/set.rs:425-433 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/metadata/set.rs"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0faa8142b574a8f652ad4db56ec86e4ede3e4b69de88f57b94ccbf48e9dcef8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): lore-revision/src/repository/clone.rs:1608-1616 | lore-revision/src/repository/clone.rs:1623-1631 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/repository/clone.rs"},"region":{"startLine":1608}}}],"partialFingerprints":{"codehealthFindingId/v1":"536d83167dab816e47ccfe5043c3fb815036e915e13f1db140264271b6b225e0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): lore-revision/src/repository.rs:1086-1094 | lore-revision/src/repository.rs:1191-1199 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/repository.rs"},"region":{"startLine":1086}}}],"partialFingerprints":{"codehealthFindingId/v1":"baea31133982f5cde9877f791ef5d4fe3775ca15a0a625574d9c337a862b4522"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): lore-revision/src/state.rs:3393-3401 | lore-revision/src/state.rs:3414-3422 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":3393}}}],"partialFingerprints":{"codehealthFindingId/v1":"69f62d2e4789cdd7998707b35fde3bd0cba4ca0cc4441cc43cd14ee3fa304f14"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): lore-revision/src/state.rs:10242-10250 | lore-revision/src/state.rs:10252-10260 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":10242}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e8a435ac6845cd5466a148fac77ac05a909fc9796f04117cb6a9facfd161be1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): lore-server/src/grpc/thinclient/v1/helpers.rs:201-209 | lore-server/src/grpc/thinclient/v1/revision_info.rs:259-267 \u2014 before extracting anything, compare \u0060lore-server/src/grpc/thinclient/v1/helpers.rs\u0060 and \u0060lore-server/src/grpc/thinclient/v1/revision_info.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":"lore-server/src/grpc/thinclient/v1/helpers.rs"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb91cbbf1fcf2e278a1fe23a70ef608f09ce034500124922dbc7c503c0653be5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): lore-server/src/grpc/handlers/path_diff.rs:73-81 | lore-server/src/grpc/handlers/path_diff.rs:90-98 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/handlers/path_diff.rs"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f2ad2b350931238e0812b6b7f1b12e19479fa5e3ac59fae42801ebc8c163054"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): lore-storage/src/conformance.rs:303-311 | lore-storage/src/mutable_conformance.rs:251-259 \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":"lore-storage/src/conformance.rs"},"region":{"startLine":303}}}],"partialFingerprints":{"codehealthFindingId/v1":"24aac7b23306778a0498a564829d02b5ac472b2977b6ecfa67edca5c008562d5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): lore-storage/src/local/immutable_store.rs:954-962 | lore-storage/src/local/mutable_store.rs:590-598 \u2014 before extracting anything, compare \u0060lore-storage/src/local/immutable_store.rs\u0060 and \u0060lore-storage/src/local/mutable_store.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 150 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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":954}}}],"partialFingerprints":{"codehealthFindingId/v1":"173a4b6da578c8dc6c98cdf517f6987d9dab852d018309bb566e2dc7fbc21a0b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u20139 lines \u00D7 2): lore-storage/src/local/immutable_store.rs:1999-2007 | lore-storage/src/local/immutable_store.rs:4309-4316 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":1999}}}],"partialFingerprints":{"codehealthFindingId/v1":"35ab6056556cbe98e9e8846e5aac91eeac31ca2a5063cfd5905b4455b9e6748c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): lore-storage/src/local/immutable_store.rs:4954-4962 | lore-storage/src/local/mutable_store.rs:1660-1668 \u2014 before extracting anything, compare \u0060lore-storage/src/local/immutable_store.rs\u0060 and \u0060lore-storage/src/local/mutable_store.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 150 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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":4954}}}],"partialFingerprints":{"codehealthFindingId/v1":"66087a51c007086a84ff7015d2ed6bb8d97dc1e2be7397b1aced00a74cd7cd4b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u20139 lines \u00D7 2): lore-storage/src/local/immutable_store.rs:4965-4973 | lore-storage/src/local/mutable_store.rs:1674-1681 \u2014 before extracting anything, compare \u0060lore-storage/src/local/immutable_store.rs\u0060 and \u0060lore-storage/src/local/mutable_store.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 150 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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":4965}}}],"partialFingerprints":{"codehealthFindingId/v1":"c21d44c6a74f264703cf66637aba7210da7530e360edd365f1bf4052d820980e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): lore-storage/src/mutable_conformance.rs:406-414 | lore-storage/src/mutable_conformance.rs:428-436 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/mutable_conformance.rs"},"region":{"startLine":406}}}],"partialFingerprints":{"codehealthFindingId/v1":"c605643c8591dbc7944f174f47017b8de3e46550c45522491c01a6e61910b7c5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): lore-storage/src/read.rs:607-615 | lore-storage/src/read.rs:854-862 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/read.rs"},"region":{"startLine":607}}}],"partialFingerprints":{"codehealthFindingId/v1":"df66d6ef69d2ec1cc3809f5f77c9e8f7d7bac7496585b7a805358a8468d24eaf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): lore-telemetry/src/metrics/grpc_tower_layer.rs:129-137 | lore-telemetry/src/metrics/http_tower_layer.rs:127-135 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-telemetry/src/metrics/grpc_tower_layer.rs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0307ff2de4c709d0a6d39ae40277ffae434136a96ee8d6345d593080ec5514d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): lore-error-set-macro/src/codegen.rs:569-577 | lore-error-set-macro/src/codegen.rs:603-611 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-error-set-macro/src/codegen.rs"},"region":{"startLine":569}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ebecfebc31f1eedebb2b9d053fd1246d57c3470b9c5552d98433c4dd178f91c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): lore-error-set-macro/src/codegen.rs:778-786 | lore-error-set-macro/src/codegen.rs:815-823 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-error-set-macro/src/codegen.rs"},"region":{"startLine":778}}}],"partialFingerprints":{"codehealthFindingId/v1":"27c1f9bb6686c0d19d8252bbf061ca678d2d8e392d96685ca52eb418bc90bf9e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 4): lore-revision/src/commit.rs:1746-1753 | lore-revision/src/commit.rs:2039-2046 | lore-revision/src/commit.rs:2110-2117 | lore-revision/src/commit.rs:2905-2912 \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":"lore-revision/src/commit.rs"},"region":{"startLine":1746}}}],"partialFingerprints":{"codehealthFindingId/v1":"accaf85a58fc68bc2a0c44a9d8a9a2fd4f7a383f8923f5b95f0b08932d0bad41"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u20138 lines \u00D7 4): lore-storage/src/conformance.rs:511-518 | lore-storage/src/conformance.rs:722-728 | lore-storage/src/conformance.rs:755-761 | lore-storage/src/conformance.rs:971-977 \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":"lore-storage/src/conformance.rs"},"region":{"startLine":511}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d106804f1de0f6a46a557e3efb7cfd7ccccda8c74b4c04ff5e9ae9f33ae136f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u20138 lines \u00D7 4): lore-storage/src/local/immutable_store.rs:1711-1718 | lore-storage/src/local/immutable_store.rs:2093-2100 | lore-storage/src/local/immutable_store.rs:3414-3420 | lore-storage/src/local/immutable_store.rs:4217-4224 \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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":1711}}}],"partialFingerprints":{"codehealthFindingId/v1":"36d9c45afe83d226c6a5f986c41a665d096718dff03c2ac1cfdf58adddbba4ff"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): lore/src/branch.rs:1659-1666 | lore/src/repository.rs:1267-1274 | lore/src/revision.rs:559-566 \u2014 before extracting anything, compare \u0060lore/src/branch.rs\u0060 and \u0060lore/src/repository.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":"lore/src/branch.rs"},"region":{"startLine":1659}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e792de484f8d38398ce60e9b391aa8cebc8852534fa48e679f412b4740050e1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): lore-credential/src/token_store.rs:559-566 | lore-credential/src/token_store.rs:782-789 | lore-credential/src/token_store.rs:868-875 \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":"lore-credential/src/token_store.rs"},"region":{"startLine":559}}}],"partialFingerprints":{"codehealthFindingId/v1":"221f8d634bd619ef75fbed9b79bb04c84afca798ef8db9e761cb256ad79835ae"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): lore-credential/src/token_store.rs:654-661 | lore-credential/src/token_store.rs:709-716 | lore-credential/src/token_store.rs:738-745 \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":"lore-credential/src/token_store.rs"},"region":{"startLine":654}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bf76b1e6d2e58b5da538ecdc933074cd33dacd7285295f19cfefcd4f5add54a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): lore-revision/src/branch/merge.rs:3159-3166 | lore-revision/src/stage.rs:2688-2695 | lore-revision/src/stage.rs:3130-3137 \u2014 before extracting anything, compare \u0060lore-revision/src/branch/merge.rs\u0060 and \u0060lore-revision/src/stage.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 60 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":"lore-revision/src/branch/merge.rs"},"region":{"startLine":3159}}}],"partialFingerprints":{"codehealthFindingId/v1":"b06d579d88704049e32c0f527d7357184a3ce7e57f042f476c51ad19214b5239"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): lore-transport/src/connection.rs:575-582 | lore-transport/src/connection.rs:606-613 | lore-transport/src/connection.rs:640-647 \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":"lore-transport/src/connection.rs"},"region":{"startLine":575}}}],"partialFingerprints":{"codehealthFindingId/v1":"a696765028da9211bb8b869937648121b2462bc5614747bd734cd18849923396"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): lore-aws/src/store/immutable_store.rs:1072-1079 | lore-aws/src/store/immutable_store.rs:1132-1139 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-aws/src/store/immutable_store.rs"},"region":{"startLine":1072}}}],"partialFingerprints":{"codehealthFindingId/v1":"49dc6ccf101ef338d3d8f3710c57daca4a7997a2016c6c9f850309a79e30d300"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): lore-client/src/cli/commands/revision.rs:1303-1311 | lore-client/src/cli/commands/revision.rs:1364-1371 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-client/src/cli/commands/revision.rs"},"region":{"startLine":1303}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1a94ef7e41d18a48cce21a2939c804882a2cfc5d8c8be9bc865a8d637f9ee91"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): lore-revision/src/branch/merge.rs:3313-3320 | lore-revision/src/branch/merge.rs:3512-3519 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/merge.rs"},"region":{"startLine":3313}}}],"partialFingerprints":{"codehealthFindingId/v1":"b97dac524a3a2a0354a8ad893050ad07f6eb7ee801dcff74634f84f3f826a631"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): lore-revision/src/fs/realize.rs:2266-2275 | lore-revision/src/fs/realize.rs:2366-2373 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/fs/realize.rs"},"region":{"startLine":2266}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a1db2842b4fa72dc7e1277f82f9edf08b1183ea17a0faebcd8be08f6141a76b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): lore-revision/src/metadata.rs:680-687 | lore-revision/src/metadata.rs:719-726 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/metadata.rs"},"region":{"startLine":680}}}],"partialFingerprints":{"codehealthFindingId/v1":"e66d73bb603a1a8b0f12d464effd920f25220642c3d9b90d09ad96ac37ad05c7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): lore-revision/src/repository.rs:1077-1084 | lore-revision/src/repository.rs:1182-1189 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/repository.rs"},"region":{"startLine":1077}}}],"partialFingerprints":{"codehealthFindingId/v1":"33e8883dff1bd6fa15adaeddb4460d3b35ec8fc87f5c1728c61c88f95caff3e9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u20138 lines \u00D7 2): lore-revision/src/state.rs:5717-5724 | lore-revision/src/state.rs:5726-5732 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":5717}}}],"partialFingerprints":{"codehealthFindingId/v1":"1bae78fab47cb7f73e589a20e340150420b4ec0967047a260f2179e9321c1bcc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): lore-server/src/lock/store.rs:94-101 | lore-server/src/lock/store.rs:115-122 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/lock/store.rs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"e27b221515a73e9685bfeafb6fa38567cd39729a0ebe2467aa8ef256da35c090"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): lore-server/src/grpc/storage/v1/get.rs:97-104 | lore-server/src/grpc/storage/v1/get_metadata.rs:92-99 \u2014 before extracting anything, compare \u0060lore-server/src/grpc/storage/v1/get.rs\u0060 and \u0060lore-server/src/grpc/storage/v1/get_metadata.rs\u0060 as WHOLE FILES: this scan already matched 5 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":"lore-server/src/grpc/storage/v1/get.rs"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a6ad80325d0c208d49bfc1d00f61d7ad1c04791ae7917bb07a0e0508ed39a05"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): lore-server/src/grpc/revision/v1/branch_get.rs:117-124 | lore-server/src/grpc/revision/v1/branch_push.rs:233-240 \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":"lore-server/src/grpc/revision/v1/branch_get.rs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"21450fbf307c19e1c1ac8d1e64c7334950c85de52c1a13e945ee1beb74d0ae42"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): lore-server/src/grpc/handlers/repository_metadata_get.rs:31-38 | lore-server/src/grpc/handlers/repository_metadata_set.rs:98-105 \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":"lore-server/src/grpc/handlers/repository_metadata_get.rs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"b511fa2751366693676869f482b75c8667570670cf4a97cdc18fae5c31c404a9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): lore-server/src/grpc/handlers/repository_create.rs:161-170 | lore-server/src/grpc/repository/v1/repository_create.rs:235-242 \u2014 before extracting anything, compare \u0060lore-server/src/grpc/handlers/repository_create.rs\u0060 and \u0060lore-server/src/grpc/repository/v1/repository_create.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 97 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":"lore-server/src/grpc/handlers/repository_create.rs"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"6db4517db3de98fba902981e8e6379f247cda197a8f65adf2bcc46bf83a9d7e8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): lore-server/src/grpc/repository/v1/repository_metadata_get.rs:35-42 | lore-server/src/grpc/repository/v1/repository_metadata_set.rs:50-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":"lore-server/src/grpc/repository/v1/repository_metadata_get.rs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8f2bab9ea6f283c689cf8ced1171e81515a633ec5bb173d2e562b58143b5d06"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): lore-server/src/grpc/revision/v1/branch_metadata_get.rs:37-44 | lore-server/src/grpc/revision/v1/branch_metadata_set.rs:51-58 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/revision/v1/branch_metadata_get.rs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"34c099109910c2f0b61c423b7852f6ba4809f5fd3bafd20a801e5d1b0665fd00"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): lore-storage/src/fragment_engine.rs:139-146 | lore-storage/src/fragment_engine.rs:567-574 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/fragment_engine.rs"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"3dd2a82c6c77e1824d46bc450f3863402f777ebe5909f990ea6f3a7b93ab9cad"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): lore-storage/src/local/immutable_store.rs:2001-2008 | lore-storage/src/local/mutable_store.rs:1351-1358 \u2014 before extracting anything, compare \u0060lore-storage/src/local/immutable_store.rs\u0060 and \u0060lore-storage/src/local/mutable_store.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 150 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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":2001}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f0fb7be8eb52c6c0587a856859426a5dcd4dc8f4a77899d62518ea9b27c9bbb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): lore-storage/src/mutable_conformance.rs:318-325 | lore-storage/src/mutable_conformance.rs:382-389 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/mutable_conformance.rs"},"region":{"startLine":318}}}],"partialFingerprints":{"codehealthFindingId/v1":"dee2367c1e28540244151706b1588d0d1adda5adf166fae76a92a06cb7b0a360"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): lore-transport/src/grpc/storage_client.rs:918-925 | lore-transport/src/grpc/storage_client.rs:1002-1009 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-transport/src/grpc/storage_client.rs"},"region":{"startLine":918}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a99ca574ef2267679b4be38d0d04ee75e61cf2b8fd351c43184499ac4a2f97d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): lore-client/src/cli/commands/branch.rs:1706-1712 | lore-client/src/cli/commands/file.rs:1049-1055 | lore-client/src/cli/commands/repository.rs:1612-1618 | lore-client/src/cli/commands/revision.rs:2375-2381 \u2014 before extracting anything, compare \u0060lore-client/src/cli/commands/branch.rs\u0060 and \u0060lore-client/src/cli/commands/file.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 43 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":"lore-client/src/cli/commands/branch.rs"},"region":{"startLine":1706}}}],"partialFingerprints":{"codehealthFindingId/v1":"34365e1dd650ca03f83199d4d5a6df72747539797fa6525da0fa8e4417a34562"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): lore-revision/src/commit.rs:2457-2463 | lore-revision/src/fs/realize.rs:2114-2120 | lore-server/src/server.rs:2144-2150 | lore-server/src/server.rs:2249-2255 \u2014 there are 4 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 4 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/commit.rs"},"region":{"startLine":2457}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b30762713175e0a4b24bd54804b0fc53cf620fdf3445f48814715022bd97001"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): lore-server/src/grpc/handlers/branch_metadata_set.rs:107-113 | lore-server/src/grpc/handlers/repository_metadata_set.rs:107-113 | lore-server/src/grpc/repository/v1/repository_metadata_set.rs:59-65 | lore-server/src/grpc/revision/v1/branch_metadata_set.rs:60-66 \u2014 before extracting anything, compare \u0060lore-server/src/grpc/handlers/branch_metadata_set.rs\u0060 and \u0060lore-server/src/grpc/handlers/repository_metadata_set.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 55 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":"lore-server/src/grpc/handlers/branch_metadata_set.rs"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"b506c02a7458ef4815e4973847c027e834e881cace894f3427e509e4497165e6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): lore-transport/src/grpc/storage_client.rs:917-923 | lore-transport/src/grpc/storage_client.rs:1001-1007 | lore-transport/src/grpc/storage_client.rs:1084-1090 | lore-transport/src/grpc/storage_client.rs:1129-1135 \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":"lore-transport/src/grpc/storage_client.rs"},"region":{"startLine":917}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e45b01d8e93db390bf645499a5557c834c45a744f9d78ca2bcb0dab58e78b72"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): lore-revision/src/commit.rs:1793-1799 | lore-revision/src/commit.rs:2947-2953 | lore-revision/src/file/unstage.rs:539-545 \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":"lore-revision/src/commit.rs"},"region":{"startLine":1793}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8da0ceaf9e772a8dc41db034357771e873fd01aa033ba1c3e8969da8f910abd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): lore-revision/src/commit.rs:2046-2052 | lore-revision/src/commit.rs:2459-2465 | lore-revision/src/fs/realize.rs:2119-2125 \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":"lore-revision/src/commit.rs"},"region":{"startLine":2046}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f645485b32a82b3e2e08d2435c1c054d785e0cf5df15229366eb5615698e263"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): lore-revision/src/repository.rs:1090-1096 | lore-revision/src/repository.rs:1163-1169 | lore-revision/src/repository.rs:1195-1201 \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":"lore-revision/src/repository.rs"},"region":{"startLine":1090}}}],"partialFingerprints":{"codehealthFindingId/v1":"aad85cefd295a9890e8fd1b2c793cc41b9a705f80428543cecd869ea0aa01d5b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): lore-revision/src/stage.rs:2721-2727 | lore-revision/src/stage.rs:2766-2772 | lore-revision/src/stage.rs:2982-2988 \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":"lore-revision/src/stage.rs"},"region":{"startLine":2721}}}],"partialFingerprints":{"codehealthFindingId/v1":"c86aa1aef4deb9bf17081b54d20d72d27beef78ee44705fd3d0742194884e3f3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): lore-revision/src/state.rs:1428-1434 | lore-revision/src/state.rs:1475-1481 | lore-revision/src/state.rs:1514-1520 \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":"lore-revision/src/state.rs"},"region":{"startLine":1428}}}],"partialFingerprints":{"codehealthFindingId/v1":"76e551fe469bb5fbda5026d804ab68e0cb3c43745524a7d2a105fda41150d4bc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): lore/src/revision_tree/delete.rs:198-204 | lore/src/revision_tree/modify.rs:183-189 \u2014 before extracting anything, compare \u0060lore/src/revision_tree/delete.rs\u0060 and \u0060lore/src/revision_tree/modify.rs\u0060 as WHOLE FILES: this scan already matched 5 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":"lore/src/revision_tree/delete.rs"},"region":{"startLine":198}}}],"partialFingerprints":{"codehealthFindingId/v1":"6738c0b3b3ab9c4f5e8bd44483b8088c6b00c9c618cb7dfe0ddaa36f3a702e78"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): lore-aws/src/store/lock_store.rs:540-546 | lore-aws/src/store/lock_store.rs:594-601 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-aws/src/store/lock_store.rs"},"region":{"startLine":540}}}],"partialFingerprints":{"codehealthFindingId/v1":"4af9dcc643ec0a6ff0d8450a69ef335a88abedf6b00c1228c8a8a3c0bd5dd638"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): lore-client/src/cli/commands/revision.rs:916-922 | lore-client/src/cli/commands/revision.rs:1047-1053 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-client/src/cli/commands/revision.rs"},"region":{"startLine":916}}}],"partialFingerprints":{"codehealthFindingId/v1":"55e5190c343956d98909a58074e3b5794f317b35bc928ff6535a727ad2be964f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): lore-client/src/cli/commands/revision.rs:974-980 | lore-client/src/cli/commands/revision.rs:1107-1113 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-client/src/cli/commands/revision.rs"},"region":{"startLine":974}}}],"partialFingerprints":{"codehealthFindingId/v1":"50a1b38dcd99e1ff0a89316fee7da238ee9a09817ca518b15645fd58f94d17f2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): lore-client/src/cli/commands/revision.rs:1004-1010 | lore-client/src/cli/commands/revision.rs:1137-1144 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-client/src/cli/commands/revision.rs"},"region":{"startLine":1004}}}],"partialFingerprints":{"codehealthFindingId/v1":"d87bf1b714943bebd3d3497afb985a2f67cffccb93eb5d6ef0b5b0fa8872710e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6\u20137 lines \u00D7 2): lore-io/src/uring.rs:344-349 | lore-io/src/uring.rs:399-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":"lore-io/src/uring.rs"},"region":{"startLine":344}}}],"partialFingerprints":{"codehealthFindingId/v1":"0309991a46fe63792ea8a392759795f876471bdc874a38564f9850a6b092589d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): lore-revision/src/commit.rs:2723-2730 | lore-revision/src/commit.rs:3120-3126 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/commit.rs"},"region":{"startLine":2723}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7dcfc3d3a6edbfe3e834cedc11de34d7d36b3dc22e221f8e2718381d1222962"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): lore-revision/src/file/stage.rs:568-574 | lore-revision/src/repository/status.rs:1388-1396 \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":"lore-revision/src/file/stage.rs"},"region":{"startLine":568}}}],"partialFingerprints":{"codehealthFindingId/v1":"49963fbe19741ad2935d2f35bda77324e93cd0919a477f8ae71cde17e42a62f6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): lore-revision/src/state.rs:249-257 | lore-revision/src/state.rs:347-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":"lore-revision/src/state.rs"},"region":{"startLine":249}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ea6bd6682a026af5396e8fd8b792c2b483472becb743776a0e5e1e8e9a30e49"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): lore-revision/src/state.rs:3413-3419 | lore-revision/src/state.rs:6218-6225 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":3413}}}],"partialFingerprints":{"codehealthFindingId/v1":"4530406d7f82302fb6bef4cd0186e842072b5c7af56a9df1d794bb356e0641ae"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): lore-revision/src/store/mutable.rs:130-136 | lore-revision/src/store/mutable.rs:177-183 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/store/mutable.rs"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"76ccff49f6ff5a862242b3ea5753f7f50dc261e64a168418b831b8188cc5a7c6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): lore-revision/src/util/path.rs:693-699 | lore-revision/src/util/path.rs:722-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":"lore-revision/src/util/path.rs"},"region":{"startLine":693}}}],"partialFingerprints":{"codehealthFindingId/v1":"2875d7554401556004f5943b723aa12574fbd18a44b183e62c6671a626d331da"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): lore-revision/src/state/os_diff.rs:1478-1484 | lore-revision/src/state/os_diff.rs:1580-1586 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state/os_diff.rs"},"region":{"startLine":1478}}}],"partialFingerprints":{"codehealthFindingId/v1":"d70a5f12132adfe48f9b288598fcbc4667ad4e80fca9a6645c144bd918b1c575"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): lore-revision/src/metadata/find.rs:52-58 | lore-revision/src/metadata/find.rs:63-70 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/metadata/find.rs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d9ff7fe5974c5251fa5eb23775db8d926fb5ddaa3222b0c9dcab4199c6de586"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): lore-server/src/grpc/handlers/revision_list.rs:268-274 | lore-server/src/grpc/revision/v1/revision_list.rs:537-543 \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":"lore-server/src/grpc/handlers/revision_list.rs"},"region":{"startLine":268}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c7c9c3ea3b8f45cc8ede3fb23c8d9d50829b45ff36f363b57524abcb34d126f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (4\u20137 lines \u00D7 5): lore-server/src/grpc/handlers/branch_diff.rs:42-45 | lore-server/src/grpc/handlers/revision_diff.rs:37-40 | lore-server/src/grpc/handlers/revision_tree.rs:36-39 | lore-server/src/grpc/thinclient/v1/revision_diff.rs:121-127 | lore-server/src/grpc/thinclient/v1/revision_tree.rs:60-66 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 5 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 5 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/handlers/branch_diff.rs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b4e2544619664e4eee3590ea44bce59f9af199c40d20374ae304b19c0fc6cbe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): lore-server/src/protocol/storage/mutable_cas.rs:44-50 | lore-server/src/protocol/storage/mutable_store_handler.rs:41-47 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/protocol/storage/mutable_cas.rs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"3aba064918a132b413ae64f8513ffa79cdd8996d1e9cc571f0c13e1c8c4320fb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): lore-server/src/grpc/handlers/repository_query.rs:171-177 | lore-server/src/grpc/repository/v1/repository_get.rs:246-252 \u2014 before extracting anything, compare \u0060lore-server/src/grpc/handlers/repository_query.rs\u0060 and \u0060lore-server/src/grpc/repository/v1/repository_get.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 83 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":"lore-server/src/grpc/handlers/repository_query.rs"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"1eb4b2dccd06e90ed997b313b4074a0b1a3284cc4273455574cbecbcb96cf340"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6\u20137 lines \u00D7 2): lore-storage/src/local/immutable_store.rs:696-702 | lore-storage/src/local/mutable_store.rs:380-385 \u2014 before extracting anything, compare \u0060lore-storage/src/local/immutable_store.rs\u0060 and \u0060lore-storage/src/local/mutable_store.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 150 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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":696}}}],"partialFingerprints":{"codehealthFindingId/v1":"5424b159a744d86213ba4cecb47735a5b5ccb8734bcad6f98ba98398d09d5f61"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): lore-storage/src/local/immutable_store.rs:709-715 | lore-storage/src/local/mutable_store.rs:393-399 \u2014 before extracting anything, compare \u0060lore-storage/src/local/immutable_store.rs\u0060 and \u0060lore-storage/src/local/mutable_store.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 150 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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":709}}}],"partialFingerprints":{"codehealthFindingId/v1":"8182274240f085602c18205376ca1e8bb3b0537979789687b0c8d9898cdb7c26"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): lore-storage/src/local/mutable_store.rs:1273-1279 | lore-storage/src/local/mutable_store.rs:1410-1416 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/local/mutable_store.rs"},"region":{"startLine":1273}}}],"partialFingerprints":{"codehealthFindingId/v1":"3eef6465e0b61b0053d75adc52d196f9ebe89c3cf2b5aeda1f10e735e1903dfa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): lore-transport/src/grpc/storage_client.rs:708-714 | lore-transport/src/grpc/storage_client.rs:771-777 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-transport/src/grpc/storage_client.rs"},"region":{"startLine":708}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3532c5aad06d54e71521d4e79e71f08188efd251e129eb39ae8083d042623c0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): lore-error-set-macro/src/codegen.rs:175-181 | lore-error-set-macro/src/codegen.rs:331-337 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-error-set-macro/src/codegen.rs"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"b18b14dcae1c5b31d5c098f9d400149c6b246250949e2b2d4b9a4de7535dbb81"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5\u20136 lines \u00D7 6): lore-server/src/grpc/handlers/branch_create.rs:69-74 | lore-server/src/grpc/handlers/branch_delete.rs:40-44 | lore-server/src/grpc/handlers/branch_get.rs:30-34 | lore-server/src/grpc/handlers/branch_metadata_set.rs:97-102 | lore-server/src/grpc/handlers/branch_protect.rs:29-33 | lore-server/src/grpc/handlers/branch_unprotect.rs:29-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 all 6 call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/handlers/branch_create.rs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"572ec02ca2a883d24dd9641639cd70e792a523f0daa92999bdd96f3f42ff51ce"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 4): lore/src/revision_tree/add.rs:885-890 | lore/src/revision_tree/delete.rs:567-572 | lore/src/revision_tree/modify.rs:367-372 | lore/src/revision_tree/move_node.rs:689-694 \u2014 before extracting anything, compare \u0060lore/src/revision_tree/delete.rs\u0060 and \u0060lore/src/revision_tree/modify.rs\u0060 as WHOLE FILES: this scan already matched 5 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":"lore/src/revision_tree/add.rs"},"region":{"startLine":885}}}],"partialFingerprints":{"codehealthFindingId/v1":"db82c09d0d51f5eb79d3dfeb99fe343f52cc5af4e98957cc41a35519941e33e6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 4): lore-revision/src/file/stage.rs:1417-1422 | lore-revision/src/stage.rs:2721-2726 | lore-revision/src/stage.rs:2766-2771 | lore-revision/src/stage.rs:2982-2987 \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":"lore-revision/src/file/stage.rs"},"region":{"startLine":1417}}}],"partialFingerprints":{"codehealthFindingId/v1":"18aaad507b0b3f0b11c1f8e876a4627bc5f6629b4bba598322319e3be47b5b76"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 4): lore-server/src/protocol/replication_store/get.rs:50-55 | lore-server/src/protocol/replication_store/get_metadata.rs:50-55 | lore-server/src/protocol/replication_store/obliterate.rs:49-54 | lore-server/src/protocol/replication_store/put.rs:72-77 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from all 4 call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/protocol/replication_store/get.rs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d384b7b871a488dd69900a0dc8607750e40ea8c4c83285c57e8d66e481c45ec"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): lore-base/src/allocator/growvec.rs:51-56 | lore-base/src/allocator/growvec.rs:77-82 | lore-base/src/allocator/growvec.rs:142-147 \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":"lore-base/src/allocator/growvec.rs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"187ecd0fc1961604eaf255cb6c6c3d24fdd44d92aa19dc869579b6b801d40f34"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): lore-client/src/cli/commands/revision.rs:575-580 | lore-client/src/cli/commands/revision.rs:697-702 | lore-client/src/cli/commands/revision.rs:1332-1338 \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":"lore-client/src/cli/commands/revision.rs"},"region":{"startLine":575}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad044f766d13d93837cf05795c892a10ead462f8bc5448767606369c064403fe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5\u20136 lines \u00D7 3): lore-server/src/grpc/handlers/branch_query.rs:45-49 | lore-server/src/grpc/revision/v1/revision_list.rs:160-165 | lore-server/src/grpc/thinclient/v1/revision_info.rs:48-53 \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":"lore-server/src/grpc/handlers/branch_query.rs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"642036e35825ecd5db6572932a277e9704383b72f20a689b6f5882b1a352ca89"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): lore-transport/src/grpc/storage_client.rs:707-712 | lore-transport/src/grpc/storage_client.rs:739-744 | lore-transport/src/grpc/storage_client.rs:770-775 \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":"lore-transport/src/grpc/storage_client.rs"},"region":{"startLine":707}}}],"partialFingerprints":{"codehealthFindingId/v1":"610f629547ea9002911c09dbd8f3d36aa19940e69fcff815d3bf22ca1f401b65"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): lore-client/src/cli/commands/lock.rs:144-149 | lore-client/src/cli/commands/lock.rs:202-207 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-client/src/cli/commands/lock.rs"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"14c318c88392c99be22d6338821ee50a45b93c932722889b6f42d9a0091fb9b0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): lore-revision/src/branch/push.rs:777-783 | lore-revision/src/branch/push.rs:874-879 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/push.rs"},"region":{"startLine":777}}}],"partialFingerprints":{"codehealthFindingId/v1":"943465e4ca84d7043f0ee4ba71a53fc61046e9e734b14c345ad8d3d07376a610"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): lore-revision/src/file/reset.rs:602-607 | lore-revision/src/file/reset.rs:792-797 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/reset.rs"},"region":{"startLine":602}}}],"partialFingerprints":{"codehealthFindingId/v1":"735a3addfd1357e245ab2a8d74680331d1cde09db688dfa30b942f5888c55d3f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): lore-revision/src/metadata.rs:714-719 | lore-revision/src/metadata.rs:1128-1133 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/metadata.rs"},"region":{"startLine":714}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ca19c1c44d6d0c9abb4a12a1fc666e547e0f4412d97f0913541fff592ec279b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): lore-server/src/protocol/storage/mutable_cas.rs:37-42 | lore-server/src/protocol/storage/mutable_store_handler.rs:35-40 \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":"lore-server/src/protocol/storage/mutable_cas.rs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bda610ad7c03df31002e47ecad607050a1e7536bef3e8d5caaa9b3be36d22e8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): lore-storage/src/compress.rs:712-717 | lore-storage/src/compress.rs:1126-1131 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/compress.rs"},"region":{"startLine":712}}}],"partialFingerprints":{"codehealthFindingId/v1":"b533654f1fa53ab2275370937662d670dfca295df9bb201cb467265df75fe6cd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): lore-storage/src/defragment.rs:123-129 | lore-storage/src/defragment.rs:504-509 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/defragment.rs"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"92c04f6594929c12fe35b779def3f762e7d5829fe19a7767db20723ca55932cf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 5): lore/src/revision_tree/add.rs:482-486 | lore/src/revision_tree/delete.rs:181-185 | lore/src/revision_tree/metadata_clear.rs:131-135 | lore/src/revision_tree/metadata_set.rs:164-168 | lore/src/revision_tree/modify.rs:173-177 \u2014 before extracting anything, compare \u0060lore/src/revision_tree/delete.rs\u0060 and \u0060lore/src/revision_tree/modify.rs\u0060 as WHOLE FILES: this scan already matched 5 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":"lore/src/revision_tree/add.rs"},"region":{"startLine":482}}}],"partialFingerprints":{"codehealthFindingId/v1":"21808e7d82dad2ce4a91344a5d205b5703e839940b5058fda61d7aa3b5c18f51"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 4): lore-revision/src/branch/merge.rs:3104-3111 | lore-revision/src/branch/merge.rs:3821-3825 | lore-revision/src/revision/cherry_pick.rs:298-305 | lore-revision/src/revision/revert.rs:278-282 \u2014 before extracting anything, compare \u0060lore-revision/src/revision/cherry_pick.rs\u0060 and \u0060lore-revision/src/revision/revert.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 67 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":"lore-revision/src/branch/merge.rs"},"region":{"startLine":3104}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7526c8136dd5de6010ba9c247fb6a196c36879c89d8c7e14534626d219bc162"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): lore-client/src/cli/commands/file.rs:1682-1686 | lore-client/src/cli/commands/file.rs:1735-1739 | lore-client/src/cli/commands/file.rs:1780-1784 \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":"lore-client/src/cli/commands/file.rs"},"region":{"startLine":1682}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a3193f2a15be123039ee5b831c645c823cce1e8fcd59d0eca70c96b4fcf49a9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): lore-revision/src/metadata.rs:713-717 | lore-revision/src/metadata.rs:913-917 | lore-revision/src/metadata.rs:1127-1131 \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":"lore-revision/src/metadata.rs"},"region":{"startLine":713}}}],"partialFingerprints":{"codehealthFindingId/v1":"d14ba1c833ccbf1a51f6408b3538470cd5c006bc06ad6e11188adcf844bddd77"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): lore/src/storage/get.rs:319-323 | lore/src/storage/get_resolved.rs:303-307 \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":"lore/src/storage/get.rs"},"region":{"startLine":319}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5d47cc3076f1fb090ab7831ccf5ef6a57eb43e0718afd404f3bcba690a28ab8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): lore-revision/src/diff.rs:64-68 | lore-revision/src/diff.rs:155-159 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/diff.rs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"b887d4906fe24833698043d0e4e30b8126483b914d123073c45e2d57da69320a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): lore-revision/src/file/stage.rs:961-966 | lore-revision/src/link.rs:1718-1722 \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":"lore-revision/src/file/stage.rs"},"region":{"startLine":961}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9332bb2d1bd7ade7bbe80204627e23c8cfcafbce5bc4479cc5bb5cccd33bd94"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): lore-revision/src/repository.rs:3654-3661 | lore-revision/src/repository.rs:3673-3677 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/repository.rs"},"region":{"startLine":3654}}}],"partialFingerprints":{"codehealthFindingId/v1":"8dcf76ce07e346b77a713efbd5b83607345ecdcbaa7ba4fed61962f4ade89e97"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): lore-server/src/protocol/storage/copy.rs:43-47 | lore-server/src/protocol/storage/copy.rs:62-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":"lore-server/src/protocol/storage/copy.rs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"092348a38d2b0bbe2a626fcecdc361183eea7d5e77c19deb533bf0fc37a1b39d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): lore-transport/src/grpc/repository_client.rs:153-157 | lore-transport/src/grpc/revision_client.rs:133-137 \u2014 before extracting anything, compare \u0060lore-transport/src/grpc/repository_client.rs\u0060 and \u0060lore-transport/src/grpc/revision_client.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 40 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":"lore-transport/src/grpc/repository_client.rs"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"23fad62dca20068783271cff034ebbe323ba947cad6f9b04e859f8e57701c5df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore/src/file.rs:413-422 | lore/src/revision.rs:543-552 \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":"lore/src/file.rs"},"region":{"startLine":413}}}],"partialFingerprints":{"codehealthFindingId/v1":"6888d32f28e05b6eec03d2a7b92c9dcb37e145470e95945888ab04f5bcab73ea"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): lore/src/revision_tree/handle.rs:267-274 | lore/src/storage/handle.rs:95-102 \u2014 \u0060lore/src/revision_tree/handle.rs\u0060 and \u0060lore/src/storage/handle.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 4 separate duplicated blocks between them, totalling at least 33 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":"lore/src/revision_tree/handle.rs"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e88ca33b42fa6e9c15a1d3e6bbcceadada5f3379ae646d38e9a10af8bab3576"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): lore-revision/src/metadata/branch.rs:108-116 | lore-revision/src/metadata/repository.rs:101-109 \u2014 before extracting anything, compare \u0060lore-revision/src/metadata/branch.rs\u0060 and \u0060lore-revision/src/metadata/repository.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 88 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":"lore-revision/src/metadata/branch.rs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"2150ac98762322c8006f5785f35f80c7eab1bdbae209a952218dd1f9dcfe0ddc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): lore-revision/src/state/diff.rs:442-450 | lore-revision/src/state/os_diff.rs:2262-2270 \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":"lore-revision/src/state/diff.rs"},"region":{"startLine":442}}}],"partialFingerprints":{"codehealthFindingId/v1":"5bd6ebd11e3fbf38118aa6f584abc2fe0e898ed9bc41fee85fa3d213d3760af6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): lore-server/src/grpc/environment/v1/service.rs:91-98 | lore-server/src/grpc/environment_service.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":"lore-server/src/grpc/environment/v1/service.rs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3d03741d6b3cedf7dff7c1b4b5249b6c3c2ed02087e47c972686c90646b0166"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): lore-server/src/grpc/forwarded_revision/v1/service.rs:74-87 | lore-server/src/grpc/revision_service.rs:119-132 \u2014 before extracting anything, compare \u0060lore-server/src/grpc/forwarded_revision/v1/service.rs\u0060 and \u0060lore-server/src/grpc/revision_service.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 39 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. 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":"lore-server/src/grpc/forwarded_revision/v1/service.rs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b45f14930f74fcfdd059a7e136d782c12e5c0af75ed842320d74eada1492eee"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): lore-server/src/grpc/forwarded_revision/v1/service.rs:92-105 | lore-server/src/grpc/revision_service.rs:137-150 \u2014 before extracting anything, compare \u0060lore-server/src/grpc/forwarded_revision/v1/service.rs\u0060 and \u0060lore-server/src/grpc/revision_service.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 39 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. 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":"lore-server/src/grpc/forwarded_revision/v1/service.rs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"397cbf197533843cb42a82989819160ea41ef0a4f23cec825a074a7743c486a4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): lore-server/src/grpc/forwarded_revision/v1/service.rs:110-120 | lore-server/src/grpc/revision_service.rs:155-165 \u2014 before extracting anything, compare \u0060lore-server/src/grpc/forwarded_revision/v1/service.rs\u0060 and \u0060lore-server/src/grpc/revision_service.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 39 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. 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":"lore-server/src/grpc/forwarded_revision/v1/service.rs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"96e3f18aa945f4b6969c84f7f94a3d36833ce04f649179257c0c2792f031c910"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): lore-server/src/grpc/grpc_internal_server.rs:254-258 | lore-server/src/grpc/server.rs:904-908 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/grpc_internal_server.rs"},"region":{"startLine":254}}}],"partialFingerprints":{"codehealthFindingId/v1":"75fe59f991002658dff646d4f1befcc6eb8880460217276f3ea102961018bb74"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): lore-server/src/grpc/repository/v1/service.rs:178-189 | lore-server/src/grpc/repository_service.rs:142-153 \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":"lore-server/src/grpc/repository/v1/service.rs"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"3654e983070a6a4a34221c6e64ab3d96dc5d538aaf88581d548301a6863c7b30"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): lore-server/src/grpc/repository/v1/service.rs:194-205 | lore-server/src/grpc/repository_service.rs:158-169 \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":"lore-server/src/grpc/repository/v1/service.rs"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbea37e24372d0ae57ed3a609ca27f66d57dde69fc08f09416c346078e38e0bf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): lore-server/src/grpc/revision/v1/service.rs:245-255 | lore-server/src/grpc/revision_service.rs:328-338 \u2014 before extracting anything, compare \u0060lore-server/src/grpc/revision/v1/service.rs\u0060 and \u0060lore-server/src/grpc/revision_service.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 84 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":"lore-server/src/grpc/revision/v1/service.rs"},"region":{"startLine":245}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fafddb02080475011fe4ac5b3370c3a80f974d488dec4ae4e5ce151e410e090"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): lore-server/src/grpc/revision/v1/service.rs:260-270 | lore-server/src/grpc/revision_service.rs:343-353 \u2014 before extracting anything, compare \u0060lore-server/src/grpc/revision/v1/service.rs\u0060 and \u0060lore-server/src/grpc/revision_service.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 84 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":"lore-server/src/grpc/revision/v1/service.rs"},"region":{"startLine":260}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0a8de4e8f82112cb687c472267e927bf81cfeb40744d684f31b7f579a67e824"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): lore-server/src/grpc/revision/v1/service.rs:275-288 | lore-server/src/grpc/revision_service.rs:373-386 \u2014 before extracting anything, compare \u0060lore-server/src/grpc/revision/v1/service.rs\u0060 and \u0060lore-server/src/grpc/revision_service.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 84 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":"lore-server/src/grpc/revision/v1/service.rs"},"region":{"startLine":275}}}],"partialFingerprints":{"codehealthFindingId/v1":"d31edf030e9edb4bfbe83e10b21f61cb0f4f89eeaa1c0183356b717cf3599827"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): lore-storage/src/local/immutable_store.rs:522-526 | lore-storage/src/local/mutable_store.rs:268-272 \u2014 before extracting anything, compare \u0060lore-storage/src/local/immutable_store.rs\u0060 and \u0060lore-storage/src/local/mutable_store.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 150 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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":522}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b9392d8bae5f1d307d26172314eab5580a17c4733f57334699ffcfb4a96e8dd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 5): lore/src/branch.rs:908-917 | lore/src/branch.rs:1438-1447 | lore/src/link.rs:75-84 | lore/src/link.rs:157-166 | lore/src/link.rs:339-348 \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":"lore/src/branch.rs"},"region":{"startLine":908}}}],"partialFingerprints":{"codehealthFindingId/v1":"33dfdf1d03c610dd463c5f90e44920e9f7883b08d3c0493417f9b2cdb3449276"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 7): lore/src/revision_tree/add.rs:138-144 | lore/src/revision_tree/delete.rs:118-124 | lore/src/revision_tree/metadata_clear.rs:103-109 | lore/src/revision_tree/metadata_get.rs:123-129 | lore/src/revision_tree/metadata_set.rs:120-126 | lore/src/revision_tree/modify.rs:123-129 | lore/src/revision_tree/move_node.rs:133-139 \u2014 before extracting anything, compare \u0060lore/src/revision_tree/delete.rs\u0060 and \u0060lore/src/revision_tree/modify.rs\u0060 as WHOLE FILES: this scan already matched 5 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":"lore/src/revision_tree/add.rs"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"5efd2033cfae04994284c8e6a98007a694f5922b22c9a2a74e3c76a939092a0b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore/src/revision_tree/handle.rs:234-243 | lore/src/storage/handle.rs:42-52 \u2014 \u0060lore/src/revision_tree/handle.rs\u0060 and \u0060lore/src/storage/handle.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 4 separate duplicated blocks between them, totalling at least 33 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":"lore/src/revision_tree/handle.rs"},"region":{"startLine":234}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba8509fe8693aedd61812946797ef3f5e3f7108f1f5c01716589ec8e62e5fdb1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): lore/src/revision_tree/handle.rs:247-252 | lore/src/storage/handle.rs:56-61 \u2014 \u0060lore/src/revision_tree/handle.rs\u0060 and \u0060lore/src/storage/handle.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 4 separate duplicated blocks between them, totalling at least 33 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":"lore/src/revision_tree/handle.rs"},"region":{"startLine":247}}}],"partialFingerprints":{"codehealthFindingId/v1":"681df8875bbe475e0be0129d1d7b44631ccab4593f891f324af489c797e74a48"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): lore/src/revision_tree/handle.rs:296-303 | lore/src/storage/handle.rs:123-128 \u2014 \u0060lore/src/revision_tree/handle.rs\u0060 and \u0060lore/src/storage/handle.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 4 separate duplicated blocks between them, totalling at least 33 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":"lore/src/revision_tree/handle.rs"},"region":{"startLine":296}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba225af6cf41c299dc6e2bc613055eca0f421b938e8e74c5b54b310e1b5d2d59"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): lore/src/storage/get_metadata.rs:254-268 | lore/src/storage/upload.rs:203-217 \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":"lore/src/storage/get_metadata.rs"},"region":{"startLine":254}}}],"partialFingerprints":{"codehealthFindingId/v1":"411ff4c6e9cdb4f2ff449db6c19165f8a1113e429cb7f2f3a1ff7db9c7d1d9a9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): lore/src/storage/mutable_list.rs:139-146 | lore/src/storage/mutable_store.rs:152-159 \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":"lore/src/storage/mutable_list.rs"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"47c2d8cf568bc9f7bbcf2642cef7cb7f3bf572fe39bb90996aca514529f87691"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): lore-client/src/cli/commands/branch.rs:1756-1762 | lore-client/src/cli/commands/repository.rs:1664-1670 \u2014 before extracting anything, compare \u0060lore-client/src/cli/commands/branch.rs\u0060 and \u0060lore-client/src/cli/commands/repository.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 125 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":"lore-client/src/cli/commands/branch.rs"},"region":{"startLine":1756}}}],"partialFingerprints":{"codehealthFindingId/v1":"a700be1e18d9232bc2e01638013fd57235a89285176e062de835a4cfece9e669"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): lore-server/src/grpc/mod.rs:346-351 | lore-server/src/http/mod.rs:28-33 \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":"lore-server/src/grpc/mod.rs"},"region":{"startLine":346}}}],"partialFingerprints":{"codehealthFindingId/v1":"612db63b1e2270479758706cba9d8d777b6ff38beb75cb6e3277b80c3741f680"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): lore-server/src/protocol/replication_store/copy.rs:84-91 | lore-server/src/protocol/replication_store/obliterate.rs:97-105 \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":"lore-server/src/protocol/replication_store/copy.rs"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c1b9326fcfdbf7e98d7281dc2749d0155c44ee4b6e6c7b33069c83fa250ffe4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): lore-server/src/protocol/replication_store/get.rs:94-103 | lore-server/src/protocol/replication_store/get_metadata.rs:92-101 | lore-server/src/protocol/replication_store/query.rs:137-146 \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":"lore-server/src/protocol/replication_store/get.rs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"78f47783eddaed716c79c84262647b6250aee4fa48407b52660fbe36f69545be"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): lore-server/src/quic/storage_service.rs:541-554 | lore-server/src/quic/storage_service_v4.rs:457-470 \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":"lore-server/src/quic/storage_service.rs"},"region":{"startLine":541}}}],"partialFingerprints":{"codehealthFindingId/v1":"e33d66d837b051440325019dd7d1e6ae2399d1e26b0fefb57c0fc992f3d16b3a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 3): lore-server/src/grpc/forwarded_repository/v1/repository_create.rs:27-40 | lore-server/src/grpc/forwarded_revision/v1/branch_create.rs:28-41 | lore-server/src/grpc/forwarded_revision/v1/branch_delete.rs:28-41 \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":"lore-server/src/grpc/forwarded_repository/v1/repository_create.rs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"e15a1bd930651a4c60d43dee4b01f5f346bd465099b0246794fa975c31b9e88f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 5): lore-server/src/grpc/repository/v1/repository_create.rs:101-113 | lore-server/src/grpc/revision/v1/branch_create.rs:102-114 | lore-server/src/grpc/revision/v1/branch_delete.rs:76-88 | lore-server/src/grpc/revision/v1/branch_get.rs:58-70 | lore-server/src/grpc/revision/v1/branch_list.rs:84-96 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 5 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 5 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/repository/v1/repository_create.rs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc8feb629b231d043dd5594763b72b016ae605db27c63242285f4ae82c52fb3c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): lore-transport/src/auth/mod.rs:80-87 | lore-transport/src/auth/mod.rs:127-134 | lore-transport/src/connection.rs:68-75 \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":"lore-transport/src/auth/mod.rs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1bfcc3a5b115bdbf2cf31ac96568dff4fb6b8e3332e86ac1202936175f56b2c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): lore-revision/src/revision/cherry_pick.rs:190-209 | lore-revision/src/revision/revert.rs:185-205 \u2014 before extracting anything, compare \u0060lore-revision/src/revision/cherry_pick.rs\u0060 and \u0060lore-revision/src/revision/revert.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 67 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":"lore-revision/src/revision/cherry_pick.rs"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e92d3dcbee5c67cfaa753822efe220bcd98155ef3ca5fe3e479b51ca86a6e9a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): lore-storage/src/read.rs:1029-1044 | lore-storage/src/read.rs:1613-1631 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/read.rs"},"region":{"startLine":1029}}}],"partialFingerprints":{"codehealthFindingId/v1":"1cc76bca2848a58b1a25bc776c5cb3cb7cc8632119f661292b4d700cc262af73"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): lore-server/src/grpc/revision/v1/revision_list.rs:302-318 | lore-server/src/grpc/revision/v1/revision_list.rs: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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/revision/v1/revision_list.rs"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"8902d376b0a8d9dc0994f2a4b8d2ade684a9c34e00afa75593bdef5801eadc37"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): lore-revision/src/branch/merge.rs:3336-3352 | lore-revision/src/branch/merge.rs:3549-3565 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/merge.rs"},"region":{"startLine":3336}}}],"partialFingerprints":{"codehealthFindingId/v1":"38295aa8be276256fc9a9605d5fe5a118bc487fc5e14b4a0823bd6bf7f8d8ab9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): lore-storage/src/local/mutable_store.rs:1111-1125 | lore-storage/src/local/mutable_store.rs:1174-1190 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/local/mutable_store.rs"},"region":{"startLine":1111}}}],"partialFingerprints":{"codehealthFindingId/v1":"74aaed3fb59faf7ca0cfef841a68f626bf023fa003a1ead1d0f720e7caa1b37f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): lore-storage/src/local/immutable_store.rs:4809-4823 | lore-storage/src/local/immutable_store.rs:4867-4883 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":4809}}}],"partialFingerprints":{"codehealthFindingId/v1":"b91d4335d5cd0ac145634ec7d9e784bd0cfb35fc3159b8d0e8652822af1f6012"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): lore-server/src/plugins/registry.rs:153-168 | lore-server/src/plugins/registry.rs:199-214 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/plugins/registry.rs"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"f46bcfad5f3c082d1ec3e152d6020015b00710b21df5a7045ca98daf542769c5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): lore-server/src/store/replica.rs:239-254 | lore-server/src/store/replicated_store.rs:272-287 \u2014 before extracting anything, compare \u0060lore-server/src/store/replica.rs\u0060 and \u0060lore-server/src/store/replicated_store.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 40 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":"lore-server/src/store/replica.rs"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"6580c01ec0848de65d7287deb1b3a9618ca8ac3957beac2494465210ce8b13f5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): lore-server/src/plugins/registry.rs:632-647 | lore-server/src/plugins/registry.rs:670-685 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/plugins/registry.rs"},"region":{"startLine":632}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b38f2fbc3315604bb27999823e491c8fd0d5e599137ad720c817805492dcfeb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): lore-server/src/plugins/registry.rs:398-413 | lore-server/src/plugins/registry.rs:444-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":"lore-server/src/plugins/registry.rs"},"region":{"startLine":398}}}],"partialFingerprints":{"codehealthFindingId/v1":"431f73292179daf31ac72c027dcaa3f5f4c2b9a1f309fcad36d6622b6fdaa400"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): lore-server/src/plugins/registry.rs:521-536 | lore-server/src/plugins/registry.rs:567-582 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/plugins/registry.rs"},"region":{"startLine":521}}}],"partialFingerprints":{"codehealthFindingId/v1":"f29cf99126b2e6a71dd8e5d7455fcfbc4746937ae3c67edc595826a51e0cfee8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): lore-server/src/plugins/registry.rs:275-290 | lore-server/src/plugins/registry.rs:322-337 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/plugins/registry.rs"},"region":{"startLine":275}}}],"partialFingerprints":{"codehealthFindingId/v1":"fdf766717fec0c32f24cd28d5022fde9b1ea001b3a8387e63ef03854abb83dbe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): lore-revision/src/state.rs:3184-3198 | lore-revision/src/state.rs:3280-3295 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":3184}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ac1fb55c305c4b2a237d7eb76abadc670f82bbd20d8ba87aef939acbdbbdc9b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): lore-server/src/grpc/repository/v1/repository_get.rs:111-125 | lore-server/src/grpc/revision/v1/branch_get.rs:79-92 \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":"lore-server/src/grpc/repository/v1/repository_get.rs"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"eccb99d6f0389f32ac16ef315f7447348ea0ea287a8d471c2e78bcf236df8d07"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): lore-server/src/hooks/dispatch.rs:313-327 | lore-server/src/hooks/dispatch.rs:424-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":"lore-server/src/hooks/dispatch.rs"},"region":{"startLine":313}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d6ac8461d097584154303a5475d8d5aca9ec12e02ff5747b24b2627c5095cc9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 3): lore-revision/src/branch.rs:2801-2815 | lore-revision/src/branch.rs:2847-2861 | lore-revision/src/branch.rs:2885-2899 \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":"lore-revision/src/branch.rs"},"region":{"startLine":2801}}}],"partialFingerprints":{"codehealthFindingId/v1":"e393d1b28b944803daebfae28ba3b4b7321a389da4f44052b175c1b819093b94"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): lore-server/src/grpc/storage/v1/get_resolved.rs:240-254 | lore-server/src/grpc/storage/v1/put_resolved.rs:277-291 \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":"lore-server/src/grpc/storage/v1/get_resolved.rs"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"eeec3c20ed02631b971efd4d1741639d848b49bda8997993099134c7c42e65aa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): lore-storage/src/conformance.rs:465-479 | lore-storage/src/conformance.rs:863-877 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/conformance.rs"},"region":{"startLine":465}}}],"partialFingerprints":{"codehealthFindingId/v1":"29c83ed5ee22166c1d5042a3869498306e86dd8cd18c129f964d67f433af235c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): lore-revision/src/state.rs:7760-7773 | lore-revision/src/state.rs:7776-7789 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":7760}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ae5e4e6e66f27fe5b209a54d45fa517b3be20ae40b14338d588a53d55d94097"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): lore-server/src/grpc/revision/v1/revision_list.rs:167-179 | lore-server/src/grpc/thinclient/v1/revision_info.rs:55-68 \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":"lore-server/src/grpc/revision/v1/revision_list.rs"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"18a6198c612e380b7f5cfbab7d7fbd6c2e68c9b683c775f9d5e128647f865723"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): lore/src/revision_tree/delete.rs:204-217 | lore/src/revision_tree/move_node.rs:386-399 \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":"lore/src/revision_tree/delete.rs"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c554d1dbea650a1e324269de4fbb8c72d8ea3f4aa755b45713e89c8f0052eca"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): lore-client/src/cli/commands/revision.rs:1024-1037 | lore-client/src/cli/commands/revision.rs:1164-1177 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-client/src/cli/commands/revision.rs"},"region":{"startLine":1024}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe03b3888dbabe228e9568cbe74c1edee58f302e1fd0acc8078f7f17f87cd06e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): lore-revision/src/revision/cherry_pick.rs:255-268 | lore-revision/src/revision/revert.rs:242-255 \u2014 before extracting anything, compare \u0060lore-revision/src/revision/cherry_pick.rs\u0060 and \u0060lore-revision/src/revision/revert.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 67 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":"lore-revision/src/revision/cherry_pick.rs"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5d90b14408632205c6971cf5dd2605b2bddcd6ec8755787eb448d27c233afbc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): lore-server/src/grpc/storage/v1/get.rs:79-91 | lore-server/src/grpc/storage/v1/get_metadata.rs:74-86 \u2014 before extracting anything, compare \u0060lore-server/src/grpc/storage/v1/get.rs\u0060 and \u0060lore-server/src/grpc/storage/v1/get_metadata.rs\u0060 as WHOLE FILES: this scan already matched 5 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":"lore-server/src/grpc/storage/v1/get.rs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"caddf6a1b24e0d1cef7011aabe9e8dd7ca25cccd68cff3d5c547bf0b5f3a0385"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): lore-server/src/grpc/storage/v1/get.rs:173-185 | lore-server/src/grpc/storage/v1/get_metadata.rs:172-184 \u2014 before extracting anything, compare \u0060lore-server/src/grpc/storage/v1/get.rs\u0060 and \u0060lore-server/src/grpc/storage/v1/get_metadata.rs\u0060 as WHOLE FILES: this scan already matched 5 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":"lore-server/src/grpc/storage/v1/get.rs"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"df3bcc010b793ce8ff7f8b91e63a6aacfa0bc1698381405544d13391991632c8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): lore-client/src/cli/commands/auth.rs:131-143 | lore-client/src/cli/commands/auth.rs:336-344 | lore-client/src/cli/commands/auth.rs:359-371 \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":"lore-client/src/cli/commands/auth.rs"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed77a9e88a274adfa9770ab068399dd38320885e6476cefa20e1179bd3fe14d3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): lore-storage/src/defragment.rs:755-765 | lore-storage/src/defragment.rs:1032-1042 | lore-storage/src/defragment.rs:1314-1326 \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":"lore-storage/src/defragment.rs"},"region":{"startLine":755}}}],"partialFingerprints":{"codehealthFindingId/v1":"23f68a210e7273e8341944887109aeef578e8cc1681421e8d9b7b921615fcf4c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): lore-revision/src/repository.rs:3755-3767 | lore-revision/src/repository/list.rs:28-40 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/repository.rs"},"region":{"startLine":3755}}}],"partialFingerprints":{"codehealthFindingId/v1":"58479eb9ab1d8e656ca79d5796a34b9dfc036092a8d0ac000758624b7bb72c2d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): lore/src/dependency.rs:401-413 | lore/src/dependency.rs:439-451 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore/src/dependency.rs"},"region":{"startLine":401}}}],"partialFingerprints":{"codehealthFindingId/v1":"123935e123ee1c9e40295069fb8989d04088d2826ea415376ddf2e5a88baf22e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): lore-revision/src/file/dirty.rs:246-257 | lore-revision/src/file/dirty.rs:368-380 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/dirty.rs"},"region":{"startLine":246}}}],"partialFingerprints":{"codehealthFindingId/v1":"53525a71fb8fec2916f766eb8ed2006e31fb11f559f18994b3e40150ee895212"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 4): lore-server/src/grpc/storage/v1/copy.rs:212-224 | lore-server/src/grpc/storage/v1/get.rs:172-184 | lore-server/src/grpc/storage/v1/get_metadata.rs:171-183 | lore-server/src/grpc/storage/v1/put.rs:169-181 \u2014 before extracting anything, compare \u0060lore-server/src/grpc/storage/v1/get.rs\u0060 and \u0060lore-server/src/grpc/storage/v1/get_metadata.rs\u0060 as WHOLE FILES: this scan already matched 5 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":"lore-server/src/grpc/storage/v1/copy.rs"},"region":{"startLine":212}}}],"partialFingerprints":{"codehealthFindingId/v1":"a05811026efbd29e2eb216021de3a195aa5b0c968c8112b44dfc3032a223d9aa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): lore-revision/src/branch/create.rs:120-132 | lore-revision/src/branch/create.rs:258-269 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/create.rs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1952bd653f7f48ea6b3c5a6dda8911fcce900f4919c8caf40ecd0a6254b631c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): lore-server/src/hooks/dispatch.rs:299-311 | lore-server/src/hooks/dispatch.rs:410-422 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/hooks/dispatch.rs"},"region":{"startLine":299}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1f68a608090dd7e6d0094802c408a48938c01229db2953ccaed8cc916f6627c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): lore/src/storage/mutable_compare_and_swap.rs:144-156 | lore/src/storage/mutable_load.rs:137-147 \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":"lore/src/storage/mutable_compare_and_swap.rs"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"6dd5f15abd8f9408848576d6367dfaa0590a0c50fc2dedebcf2397c50902e5e8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore-revision/src/file/dirty.rs:877-889 | lore-revision/src/file/dirty.rs:911-920 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/dirty.rs"},"region":{"startLine":877}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab4e8e0f9a631b493f161a6c1be3feba2c21686eff44bdd791e77df2a8c72698"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): lore-revision/src/revision.rs:966-977 | lore-revision/src/revision.rs:1082-1094 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/revision.rs"},"region":{"startLine":966}}}],"partialFingerprints":{"codehealthFindingId/v1":"e76e871bf7788669b0b1dd5cf4dc8690c88b585dfd2fb8f01c4e0200e51975e8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): lore-server/src/grpc/handlers/branch_metadata_get.rs:34-45 | lore-server/src/grpc/revision/v1/branch_metadata_get.rs:42-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":"lore-server/src/grpc/handlers/branch_metadata_get.rs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"b18c024129fd249173d0b14e73d2c36c7ecec4708241585284d1ee99faf7e34d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): lore-server/src/grpc/handlers/branch_protect.rs:35-46 | lore-server/src/grpc/handlers/branch_unprotect.rs:35-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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/handlers/branch_protect.rs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"c752f888147dd8f56c16243467b6cb78c109de79e3e834f03edbd49b6fa027e1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): lore-server/src/authnz/auth.rs:36-47 | lore-server/src/authnz/rebac.rs:50-61 \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":"lore-server/src/authnz/auth.rs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"1bd71e72822ffc3e3090848639cc89224cc064868d6fe98852c3ee38981385b6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): lore-revision/src/branch/push.rs:903-914 | lore-revision/src/branch/push.rs:946-957 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/push.rs"},"region":{"startLine":903}}}],"partialFingerprints":{"codehealthFindingId/v1":"a672097dd691095c923d74c03e6e4c0e0e6500c538a73ab201730bb46a7cc79a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): lore-server/src/http/server.rs:280-291 | lore-server/src/http/server.rs:348-359 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/http/server.rs"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"2549f8079bf99aefff0ebbcfda47f156326fa770f624e68e40dcdb024d635c9b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): lore-revision/src/state.rs:860-871 | lore-revision/src/state.rs:952-963 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":860}}}],"partialFingerprints":{"codehealthFindingId/v1":"6dc2a39c3e25eaf3dec6cd5ed23e9c98a082ff301d0ec6d4dbef2a49e51ec5e4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): lore-revision/src/file/dirty.rs:402-413 | lore-revision/src/file/dirty.rs:1332-1341 | lore-revision/src/file/dirty.rs:1415-1424 \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":"lore-revision/src/file/dirty.rs"},"region":{"startLine":402}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c8b7f5adb3f457bf23029941ab17872572f96b190f50ae34ee09802ab3a08ab"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): lore-revision/src/stage.rs:3281-3291 | lore-revision/src/stage.rs:3374-3385 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/stage.rs"},"region":{"startLine":3281}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4e0ad6c062e435e89f4f09606b0cb4bc16e2508b8e627f48b3acd03631f436f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): lore-server/src/grpc/storage_service.rs:151-160 | lore-server/src/grpc/storage_service.rs:298-309 | lore-server/src/grpc/storage_service.rs:510-519 \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":"lore-server/src/grpc/storage_service.rs"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"b70579345db6ba5971eeef42ed26761fe77508d4fdc93de522d4f6a0235f7a81"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): lore-server/src/protocol/storage/get.rs:152-162 | lore-server/src/protocol/storage/get.rs:201-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":"lore-server/src/protocol/storage/get.rs"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"104d60e908fbc1b9939f05daec46193a4aba6f5aa25d4340ad91f5c9889a36d8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): lore-transport/src/quic/storage_service/client.rs:620-630 | lore-transport/src/quic/storage_service/client.rs:669-679 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-transport/src/quic/storage_service/client.rs"},"region":{"startLine":620}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e900e0df266c6af5ebf26c69befd58e0a8368b2f7b0e1b1d4ebbdd3af2db544"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 8): lore-server/src/quic/storage_service.rs:73-83 | lore-server/src/quic/storage_service.rs:124-134 | lore-server/src/quic/storage_service.rs:136-146 | lore-server/src/quic/storage_service.rs:161-171 | lore-server/src/quic/storage_service.rs:173-183 | lore-server/src/quic/storage_service.rs:185-195 | lore-server/src/quic/storage_service.rs:225-235 | lore-server/src/quic/storage_service.rs:237-247 \u2014 all 8 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":"lore-server/src/quic/storage_service.rs"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d0797c0ded195045ba39411b6e8a8169334bc31813dae90069ee6089995ecbe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): lore-transport/src/grpc/storage_client.rs:501-511 | lore-transport/src/grpc/storage_client.rs:554-564 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-transport/src/grpc/storage_client.rs"},"region":{"startLine":501}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e6ce13daee35c6a58a6ac5ccbb64455b1cff7330c8a1376884e3db14161ea2b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): lore-storage/src/local/immutable_store.rs:3540-3548 | lore-storage/src/local/immutable_store.rs:3587-3596 | lore-storage/src/local/immutable_store.rs:3640-3650 \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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":3540}}}],"partialFingerprints":{"codehealthFindingId/v1":"84f425a7a7baa3bc672ea62def5990c9475851cbd5af1d06bee6a0ff8b6729c3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore-revision/src/metadata/find.rs:60-69 | lore-revision/src/metadata/find.rs:72-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":"lore-revision/src/metadata/find.rs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"719b3f78862fdcb47d1e0f51e6e4c3fbad1f0e3083f95c4d2a7cf7b952e0fdb1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): lore-revision/src/branch.rs:2998-3008 | lore-revision/src/branch.rs:3024-3034 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch.rs"},"region":{"startLine":2998}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad21f0dea93c4f61ac37df94cac74e384bcdc84c70fe3575b2bf01befefdbe70"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): lore-server/src/server.rs:613-623 | lore-server/src/server.rs:726-736 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/server.rs"},"region":{"startLine":613}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ff9a4c91a0bbd05d31a6a540b05da403f941414fdcd3a0098b2ba9a6e7ef85c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): lore/src/dependency.rs:415-425 | lore/src/dependency.rs:453-463 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore/src/dependency.rs"},"region":{"startLine":415}}}],"partialFingerprints":{"codehealthFindingId/v1":"935e9e881df6b09ff37a96acab49ba87727c7692f99e055a5b66a107bc9278e5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore-revision/src/branch/reset.rs:152-161 | lore-revision/src/file/reset.rs:735-744 \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":"lore-revision/src/branch/reset.rs"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b869086271eafb6ebd8621bc4af6c98cc3dd582f48b9e5ded8e9b0fbf88604b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore-client/src/cli/commands/link.rs:293-302 | lore-client/src/cli/commands/link.rs: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":"lore-client/src/cli/commands/link.rs"},"region":{"startLine":293}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb2fceb6bfe4a92000a46d979e4a1213483e4390de1f795d580028396e6af36b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): lore-storage/src/mutable_conformance.rs:404-412 | lore-storage/src/mutable_conformance.rs:691-700 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/mutable_conformance.rs"},"region":{"startLine":404}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f60bb313fa2cf6fd1872294825ccc68c0bc1dea1785bc060183de9453c1565b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore-storage/src/mutable_conformance.rs:705-714 | lore-storage/src/mutable_conformance.rs:754-763 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/mutable_conformance.rs"},"region":{"startLine":705}}}],"partialFingerprints":{"codehealthFindingId/v1":"e76664d5786b04e9b0f0b46c47b80c315c0a326d3620bc2a26a654915bf7642f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 4): lore-server/src/quic/replication_store_service/server.rs:311-320 | lore-server/src/quic/replication_store_service/server.rs:322-331 | lore-server/src/quic/replication_store_service/server.rs:357-366 | lore-server/src/quic/replication_store_service/server.rs:392-401 \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":"lore-server/src/quic/replication_store_service/server.rs"},"region":{"startLine":311}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0851ff4f09f2a2da39086efbda40a47038e587611f8bb7f83d7d00e571e14a6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore-server/src/telemetry/tokio_bridge.rs:143-152 | lore-server/src/telemetry/tokio_bridge.rs:289-298 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/telemetry/tokio_bridge.rs"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"0cba42c043e545c03e75b1e4a8284834cce1d0f001bccfbfbf90f6af1874a10d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): lore-storage/src/local/fan_out.rs:388-397 | lore-storage/src/local/immutable_store/info.rs:69-75 \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":"lore-storage/src/local/fan_out.rs"},"region":{"startLine":388}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2faf0c160e1930c377c24c27dfc7e092f6cb191e69ce574d758dcc262e78e84"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore-server/src/auth/jwk.rs:438-447 | lore-server/src/auth/jwk.rs:613-622 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/auth/jwk.rs"},"region":{"startLine":438}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fd657609efbb0c8c2c78c6a969db14ac7299380e149973a45809e116e2bc108"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): lore-revision/src/file/reset.rs:1784-1793 | lore-revision/src/file/reset.rs:1951-1960 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/reset.rs"},"region":{"startLine":1784}}}],"partialFingerprints":{"codehealthFindingId/v1":"063fb4d8586e62381a4d108cc6e343d916d1f7f3a90af08e5cc242143b114f6c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): lore-revision/src/branch.rs:598-606 | lore-revision/src/branch.rs:617-625 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch.rs"},"region":{"startLine":598}}}],"partialFingerprints":{"codehealthFindingId/v1":"47b9f84c3512613079db6ff1c010bbdf54ab7cb5a98be5659299bd3de20336bd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): lore-revision/src/file/info.rs:184-192 | lore-revision/src/revision/info.rs:185-193 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/info.rs"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"af5573dcba6a9c2247da567240879d35a4c7b4939c7e82fa351f42ac10ea39e1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): lore-server/src/grpc/handlers/branch_diff.rs:115-123 | lore-server/src/grpc/handlers/branch_diff.rs:130-138 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/handlers/branch_diff.rs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"29fb9d45432a8eb39efafa748e325b2b9e78bea429ff5989a88bd2828a535487"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): lore-storage/src/mutable_conformance.rs:341-349 | lore-storage/src/mutable_conformance.rs:459-467 | lore-storage/src/mutable_conformance.rs:480-488 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/mutable_conformance.rs"},"region":{"startLine":341}}}],"partialFingerprints":{"codehealthFindingId/v1":"5497307ccaae008f70e237e722b6060af18d0fcdf3c8540f9f81ab3f06fbc044"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): lore-revision/src/revision/sync.rs:477-484 | lore-revision/src/revision/sync.rs:1076-1083 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/revision/sync.rs"},"region":{"startLine":477}}}],"partialFingerprints":{"codehealthFindingId/v1":"a458e7affcd03d51158bb8dca9f9fe29023f23b48cf4943a15f0ac5f894cc117"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): lore-revision/src/commit.rs:798-805 | lore-revision/src/commit.rs:2770-2777 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/commit.rs"},"region":{"startLine":798}}}],"partialFingerprints":{"codehealthFindingId/v1":"037670144d83c9e80c253f4af8aeaf13df9383e6889d429e88c46a7839511276"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): lore-revision/src/file/dirty.rs:709-716 | lore-revision/src/file/dirty.rs:741-748 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/dirty.rs"},"region":{"startLine":709}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5d2c6b72eced38ad70ba72a26535e2a2f79bbb3740d5ce475d53a6a7b1a5d01"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): lore-revision/src/state.rs:2445-2452 | lore-revision/src/state.rs:2588-2595 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":2445}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc142c04e9ffd08f14742edb0be451296808f967693c43c035734a2cc2a70b41"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): lore-client/src/cli/commands/repository.rs:665-671 | lore-client/src/cli/commands/repository.rs:730-736 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-client/src/cli/commands/repository.rs"},"region":{"startLine":665}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f00b35ac9454e650e29eff4fc8dbcf6f5b24ba37f529e03cb9c166a70f1a55d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): lore-transport/src/quic/storage_service/client.rs:366-372 | lore-transport/src/quic/storage_service/client.rs:416-422 | lore-transport/src/quic/storage_service/client.rs:470-476 \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":"lore-transport/src/quic/storage_service/client.rs"},"region":{"startLine":366}}}],"partialFingerprints":{"codehealthFindingId/v1":"be737816b0da64c77361d482cbd9d61c129df936e251a008176588eb74d71671"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): lore-revision/src/file/stage.rs:1144-1150 | lore-revision/src/file/stage.rs:1542-1548 | lore-revision/src/stage.rs:3082-3088 | lore-revision/src/stage.rs:3440-3446 \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":"lore-revision/src/file/stage.rs"},"region":{"startLine":1144}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b5a387a540ee0337304499a98d434e82eee185de48593a2aaa401239c0cf214"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): lore-revision/src/commit.rs:658-664 | lore-revision/src/commit.rs:1171-1177 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/commit.rs"},"region":{"startLine":658}}}],"partialFingerprints":{"codehealthFindingId/v1":"671eea3a1a9db62a81eca096cd2743c6bfcf2fea678f8abd919555ac42ad8156"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): lore-server/src/grpc/revision/v1/branch_list.rs:161-167 | lore-server/src/grpc/revision/v1/branch_list.rs:220-226 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/revision/v1/branch_list.rs"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"48ef26330c7ae4c957381c7fcb1d8f100b615689abb7fb4bfa690586ab7cd253"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): lore-server/src/grpc/revision/v1/branch_get.rs:118-123 | lore-server/src/grpc/revision/v1/branch_get.rs:157-162 | lore-server/src/grpc/revision/v1/branch_push.rs:234-239 \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":"lore-server/src/grpc/revision/v1/branch_get.rs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"93408c98fcfe6ff1870b15ff179882f5c51d366b998633977ee88c84ca65d5a9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): lore-client/src/cli/commands/file.rs:1689-1693 | lore-client/src/cli/commands/file.rs:1742-1746 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-client/src/cli/commands/file.rs"},"region":{"startLine":1689}}}],"partialFingerprints":{"codehealthFindingId/v1":"90fdba0344418f8cd6c62bb94dd8df7e66d6d28b528ad7a28562308fbe1d131e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): lore-revision/src/commit.rs:1722-1726 | lore-revision/src/commit.rs:4227-4231 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/commit.rs"},"region":{"startLine":1722}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c2d7483170258666008813c236c91fc1216592c4bb8cc30f7e91ac925c38b3c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): lore-revision/src/file/dirty.rs:1146-1150 | lore-revision/src/file/dirty.rs:1362-1366 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/dirty.rs"},"region":{"startLine":1146}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4268a039396c0efc3de633c89a02488cf294dcc7f455f86ad5b08164d0bfcde"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): lore-storage/src/local/fan_out.rs:381-385 | lore-storage/src/local/immutable_store/info.rs:62-66 \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":"lore-storage/src/local/fan_out.rs"},"region":{"startLine":381}}}],"partialFingerprints":{"codehealthFindingId/v1":"b47aa5ad0d0a570b7b2e86fd2e65186a167fb47d78d587a2dd34de6968da29a0"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: lore-io: lore-io: abstractness 0.13, instability 0.00, distance 0.88 \u2014 zone of pain \u2014 concrete and depended on by 4 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"638e86e0e5dee8515cdea537549a5d024d34601176185a89a50f64ced5c5a0e9"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: lore-base: lore-base: abstractness 0.06, instability 0.18, distance 0.76 \u2014 zone of pain \u2014 concrete and depended on by 9 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"889ce7d7ffe33f4ec66dbfb2ef8d50fc9997d5c37da47a75f8717f3974b4f18d"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: StorageClient (LCOM4 15): StorageClient\u0027s methods fall into 15 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 15 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":"lore-transport/src/quic/storage_service/client.rs"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"d42d15883d12caaed20688887613d2dd3f07af0d5b6c0b174c604d48746e9f80"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: ReplicationStoreClient (LCOM4 9): ReplicationStoreClient\u0027s methods fall into 9 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 9 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":"lore-server/src/quic/replication_store_service/client.rs"},"region":{"startLine":187}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ab8422b2ffb8f1ab12e3b49762b59256ee47a7141e85685bbeebc0a7b0099a4"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: AwsMutableStore (LCOM4 5): AwsMutableStore\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":"lore-aws/src/store/mutable_store.rs"},"region":{"startLine":232}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7fbdb73386ec618a63bfe166b162c4e259aed539400ae26d900fb53a5bcc14e"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: ExternalAllocator (LCOM4 4): ExternalAllocator\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":"lore-base/src/allocator/mod.rs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"19c546f7e3ab28f30d602604f6bd60e42e28ff00eed31c79117ab8544b043773"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: ReplicationStoreService (LCOM4 4): ReplicationStoreService\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":"lore-server/src/quic/replication_store_service/server.rs"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"731e05e01948ab3c0f0e82f141f570df3f42ad37b6acdcb5c6ceea6c5b6de486"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: StorageService (LCOM4 4): StorageService\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":"lore-server/src/quic/storage_service.rs"},"region":{"startLine":441}}}],"partialFingerprints":{"codehealthFindingId/v1":"dffb7fdbe77c735d69a4bc5c569ad97d6d7f2cae7919a1a21ff1528e93beb764"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: StorageServiceV4 (LCOM4 4): StorageServiceV4\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":"lore-server/src/quic/storage_service_v4.rs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"3739a31a0e3946c616010f5a7a2f113366013fbe1543a2cae8a2f241394ba8e7"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: WriteOptions (LCOM4 4): WriteOptions\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":"lore-storage/src/options.rs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea0ed2ab5ba36fefa2f694a0c067f07d88e39065f48a76b6a33189d445490306"}},{"ruleId":"D11","level":"error","message":{"text":"Test declared unreliable: test_swfs_creates_external_dot_lore: This test is disabled or skipped with a reason naming unreliability \u2014 the repository\u0027s own words: \u0022swfs is generally not available; test fails randomly under parallel execution\u0022. A test that is skipped for flakiness is neither passing nor protecting the code it covers; either stabilise it or delete it, but do not leave it disabled indefinitely. (Found by reading the repository\u0027s own test source \u2014 the suite itself was not re-run, since the reliability runner does not support this ecosystem.)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/test/test_swfs.py"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e582b343d5f456e02a7036cc5ed5d8d2f6c2d1203cff3d5ac0ff1ad97ced0a8"}},{"ruleId":"D11","level":"error","message":{"text":"Test declared unreliable: test_swfs_repo_prevents_creating_non_swfs_repo: This test is disabled or skipped with a reason naming unreliability \u2014 the repository\u0027s own words: \u0022swfs is generally not available; test fails randomly under parallel execution\u0022. A test that is skipped for flakiness is neither passing nor protecting the code it covers; either stabilise it or delete it, but do not leave it disabled indefinitely. (Found by reading the repository\u0027s own test source \u2014 the suite itself was not re-run, since the reliability runner does not support this ecosystem.)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/test/test_swfs.py"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1f030674fdcf7c22598af37d1e32965092023029f131aca42b4e612034dc934"}},{"ruleId":"D11","level":"error","message":{"text":"Test declared unreliable: test_swfs_repo_prevents_creating_non_swfs_repo_after_restart: This test is disabled or skipped with a reason naming unreliability \u2014 the repository\u0027s own words: \u0022swfs is generally not available; test fails randomly under parallel execution\u0022. A test that is skipped for flakiness is neither passing nor protecting the code it covers; either stabilise it or delete it, but do not leave it disabled indefinitely. (Found by reading the repository\u0027s own test source \u2014 the suite itself was not re-run, since the reliability runner does not support this ecosystem.)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/test/test_swfs.py"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"83532c1a7c62e6dfc8e1976055a0dd924b2ffb45f2c04801ba4e5a012fac393a"}},{"ruleId":"D11","level":"error","message":{"text":"Test declared unreliable: test_swfs_repo_can_be_force_created_over: This test is disabled or skipped with a reason naming unreliability \u2014 the repository\u0027s own words: \u0022swfs is generally not available; test fails randomly under parallel execution\u0022. A test that is skipped for flakiness is neither passing nor protecting the code it covers; either stabilise it or delete it, but do not leave it disabled indefinitely. (Found by reading the repository\u0027s own test source \u2014 the suite itself was not re-run, since the reliability runner does not support this ecosystem.)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/test/test_swfs.py"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"059e2948297f9b83b2181f1213a553ca1e0d70f9d6faf8cc6bd64f17b56ded5c"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-revision/src/stage.rs: lore-revision/src/stage.rs changed 45 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 57 in lore_revision::stage::stage_node_from_metadata at line 1949. 2 of those changes were fix/bug commits, and the other 43 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-revision/src/stage.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":"lore-revision/src/stage.rs"},"region":{"startLine":1949}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8479b441b7d341d58b74fd6ccb5c381f2a5e13fc2792eab31ad7738b69d19bb"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-revision/src/state.rs: lore-revision/src/state.rs changed 78 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 25 in State::serialize at line 744. 5 of those changes were fix/bug commits, and the other 73 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-revision/src/state.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":744}}}],"partialFingerprints":{"codehealthFindingId/v1":"731d496c70529ecd0cd531a2074e8647dc9b52dcd7c83aceed40e4d0ae67faa2"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-revision/src/fs/realize.rs: lore-revision/src/fs/realize.rs changed 34 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 53 in lore_revision::fs::realize::realize_file_merge at line 2175. 2 of those changes were fix/bug commits, and the other 32 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-revision/src/fs/realize.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":"lore-revision/src/fs/realize.rs"},"region":{"startLine":2175}}}],"partialFingerprints":{"codehealthFindingId/v1":"36d97ca4b07cf27aa7cbaddc3a4e5943726b5c115e0fd259b517ad57396029cf"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-revision/src/revision/sync.rs: lore-revision/src/revision/sync.rs changed 28 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 55 in lore_revision::revision::sync::sync at line 418. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-revision/src/revision/sync.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":"lore-revision/src/revision/sync.rs"},"region":{"startLine":418}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e2a61d10fc943bbbcd2a372d9da8f043b39d2065e8ca72200a150d3a9c68dad"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-revision/src/repository.rs: lore-revision/src/repository.rs changed 36 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 38 in lore_revision::repository::load_and_connect_with_token at line 2105. 2 of those changes were fix/bug commits, and the other 34 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-revision/src/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":"lore-revision/src/repository.rs"},"region":{"startLine":2105}}}],"partialFingerprints":{"codehealthFindingId/v1":"26566a4b69588009a6569ba3bf588fbf06c8b25c8b30d6bb09074cb367a948e0"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-revision/src/repository/status.rs: lore-revision/src/repository/status.rs changed 26 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 49 in lore_revision::repository::status::status at line 1365. 3 of those changes were fix/bug commits, and the other 23 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-revision/src/repository/status.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":"lore-revision/src/repository/status.rs"},"region":{"startLine":1365}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfe04fc9907a9d0691ce4624e85ef7d6b74bc5b715736c9ff3414c5bfe3e4d86"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-revision/src/commit.rs: lore-revision/src/commit.rs changed 29 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 31 in lore_revision::commit::commit_with_metadata_in_operation at line 560. 1 of those changes was a fix/bug commit, and the other 28 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-revision/src/commit.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":"lore-revision/src/commit.rs"},"region":{"startLine":560}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f439e63ecd260375b15736a2c58f9b169547e1f9b6e356b58f59f837fc2e5c5"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-revision/src/file/stage.rs: lore-revision/src/file/stage.rs changed 29 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 30 in lore_revision::file::stage::stage_move at line 1168. 1 of those changes was a fix/bug commit, and the other 28 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-revision/src/file/stage.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":"lore-revision/src/file/stage.rs"},"region":{"startLine":1168}}}],"partialFingerprints":{"codehealthFindingId/v1":"f078183045032dd3f44cb95e5ecb32c686a998e0cceffcc3c392226366d70242"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-server/src/server.rs: lore-server/src/server.rs changed 28 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 29 in lore_server::server::async_main at line 1870. 2 of those changes were fix/bug commits, and the other 26 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-server/src/server.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":"lore-server/src/server.rs"},"region":{"startLine":1870}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0d654650de146e7b1f79ce17e5e257cf777b17a13ed2b6d9478225514ef7ea6"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-revision/src/file/unstage.rs: lore-revision/src/file/unstage.rs changed 23 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 35 in lore_revision::file::unstage::unstage_node at line 916. 1 of those changes was a fix/bug commit, and the other 22 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-revision/src/file/unstage.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":"lore-revision/src/file/unstage.rs"},"region":{"startLine":916}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7e62addc78742af82c474224148122588f23d89f20f5649617532ae45e6521d"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-revision/src/revision.rs: lore-revision/src/revision.rs changed 16 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 49 in lore_revision::revision::diff3_with_source_cap at line 327. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-revision/src/revision.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":"lore-revision/src/revision.rs"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"99b37ce474fe858bab78192993d2fc58231752f4a7f157bf133b5eaefee8de82"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-storage/src/local/immutable_store.rs: lore-storage/src/local/immutable_store.rs changed 22 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 31 in LocalImmutableStore::evict_group_sized at line 2230. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-storage/src/local/immutable_store.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":"lore-storage/src/local/immutable_store.rs"},"region":{"startLine":2230}}}],"partialFingerprints":{"codehealthFindingId/v1":"c24668585d089d3dc68b5ac6f8caeb9bc5f6deda6af746d2e8a8d26ef3270af0"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-revision/src/branch/push.rs: lore-revision/src/branch/push.rs changed 13 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 46 in lore_revision::branch::push::collect_fragments_and_push at line 704. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-revision/src/branch/push.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":"lore-revision/src/branch/push.rs"},"region":{"startLine":704}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ec1dd098bf6672060993915d7c5b8efe0fa26a67d32f04a93f4ac44f3f16a5b"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-revision/src/repository/clone.rs: lore-revision/src/repository/clone.rs changed 31 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 18 in lore_revision::repository::clone::process_block_item at line 539. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-revision/src/repository/clone.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":"lore-revision/src/repository/clone.rs"},"region":{"startLine":539}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9805bf64f93d131bea2b0b85a57347360cc295adc0cd5527cb4d0a4246632c6"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-storage/src/write.rs: lore-storage/src/write.rs changed 19 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 29 in lore_storage::write::leader_body at line 1044. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-storage/src/write.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":"lore-storage/src/write.rs"},"region":{"startLine":1044}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9c8327196210272a1a0ed3a1494b928d9f868086bd573d3faa4f0a4214a63a0"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-revision/src/immutable.rs: lore-revision/src/immutable.rs changed 21 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 26 in lore_revision::immutable::cache_through at line 574. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-revision/src/immutable.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":"lore-revision/src/immutable.rs"},"region":{"startLine":574}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b6e445d709b86ae4fcad1b8cc83b6e5409d47bece5c763bcf11fdb3c529109f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-revision/src/branch/merge.rs: lore-revision/src/branch/merge.rs changed 22 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 21 in lore_revision::branch::merge::merge_repository at line 445. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-revision/src/branch/merge.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":"lore-revision/src/branch/merge.rs"},"region":{"startLine":445}}}],"partialFingerprints":{"codehealthFindingId/v1":"92eecdaaf0cc571836606d651da9c2a82bbda42d87c796fb842aa6469f2ff38e"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-revision/src/state/diff.rs: lore-revision/src/state/diff.rs changed 16 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 28 in lore_revision::state::diff::add_change_for_paired_nodes at line 916. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-revision/src/state/diff.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":"lore-revision/src/state/diff.rs"},"region":{"startLine":916}}}],"partialFingerprints":{"codehealthFindingId/v1":"68b46e625aa6e2dd5062cc2a0041d869ed95a05db617da22b9552ef8fe1ac053"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-revision/src/branch.rs: lore-revision/src/branch.rs changed 29 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in lore_revision::branch::try_auto_resolve_conflict at line 2758. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-revision/src/branch.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":"lore-revision/src/branch.rs"},"region":{"startLine":2758}}}],"partialFingerprints":{"codehealthFindingId/v1":"3cd44628787e280e92a18be441ae70048e28d15423716e15150ad048042a083b"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-client/src/cli/commands/repository.rs: lore-client/src/cli/commands/repository.rs changed 10 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 41 in lore_client::cli::commands::repository::handle_repository_status at line 513. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-client/src/cli/commands/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":"lore-client/src/cli/commands/repository.rs"},"region":{"startLine":513}}}],"partialFingerprints":{"codehealthFindingId/v1":"6739e3148055a85334aafdf16794f15d6a7d9cc2bca0bf1d6b8fa2de79a84a5b"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-revision/src/file/reset.rs: lore-revision/src/file/reset.rs changed 24 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 17 in lore_revision::file::reset::reset_walk_path at line 1199. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-revision/src/file/reset.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":"lore-revision/src/file/reset.rs"},"region":{"startLine":1199}}}],"partialFingerprints":{"codehealthFindingId/v1":"6da53a08ff07769e9a9ad44f72886e5d700dcc54a666ef768c242a75f3fb682f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-client/src/cli/commands/branch.rs: lore-client/src/cli/commands/branch.rs changed 13 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 30 in lore_client::cli::commands::branch::handle_branch_push at line 798. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-client/src/cli/commands/branch.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":"lore-client/src/cli/commands/branch.rs"},"region":{"startLine":798}}}],"partialFingerprints":{"codehealthFindingId/v1":"09c584e02d25802acb27f1a095acb60b194b9f238d16294ccca74e6d963ae1e5"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-revision/src/link/add.rs: lore-revision/src/link/add.rs changed 19 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 18 in lore_revision::link::add::add at line 44. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-revision/src/link/add.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":"lore-revision/src/link/add.rs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"d571f8e750ad4f943498e998a74ebd794967d7fea496d8f4bd459f59368c4518"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-revision/src/util/fs.rs: lore-revision/src/util/fs.rs changed 20 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in lore_revision::util::fs::filesystem_path_and_info at line 372. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-revision/src/util/fs.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":"lore-revision/src/util/fs.rs"},"region":{"startLine":372}}}],"partialFingerprints":{"codehealthFindingId/v1":"32bfdef4d181a0c7e4d8192eab01639b2f71de6cf3fad07e3cd03fdd5b04f817"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-transport/src/connection.rs: lore-transport/src/connection.rs changed 10 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 25 in lore_transport::connection::connect_impl at line 317. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-transport/src/connection.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":"lore-transport/src/connection.rs"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4c162784221a63a08b6e03d7feb20b0bafab53cbd4533482cb38677648ad734"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-storage/src/read.rs: lore-storage/src/read.rs changed 13 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 18 in lore_storage::read::load_fragment at line 217. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-storage/src/read.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":"lore-storage/src/read.rs"},"region":{"startLine":217}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf911812993c9d7b51df5ae9b6e756b5bc38e95b1fa1c12e25b99122a7376caf"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-revision/src/file/dirty.rs: lore-revision/src/file/dirty.rs changed 13 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 17 in lore_revision::file::dirty::dirty_path at line 602. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-revision/src/file/dirty.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":"lore-revision/src/file/dirty.rs"},"region":{"startLine":602}}}],"partialFingerprints":{"codehealthFindingId/v1":"d484eb1c0e45d2eed96dec34b350fdf122fff1facbf8a83057386c665aa7471d"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-client/src/cli/commands/revision.rs: lore-client/src/cli/commands/revision.rs changed 11 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 20 in lore_client::cli::commands::revision::handle_revision_info at line 674. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-client/src/cli/commands/revision.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":"lore-client/src/cli/commands/revision.rs"},"region":{"startLine":674}}}],"partialFingerprints":{"codehealthFindingId/v1":"400cebf1baf3bec6ad898dac5a82631f5d5fc7d57abc4762726d202a5abc2517"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-server/src/auth/jwk.rs: lore-server/src/auth/jwk.rs changed 11 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 20 in JwkServiceImpl::fetch_new_keys at line 524. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-server/src/auth/jwk.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":"lore-server/src/auth/jwk.rs"},"region":{"startLine":524}}}],"partialFingerprints":{"codehealthFindingId/v1":"e910bcfa40b44ece8609b52b80808134663f6ebda70bbb1cd294246c77b14781"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-revision/src/store/composite.rs: lore-revision/src/store/composite.rs changed 12 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 17 in CompositeStore::query at line 931. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-revision/src/store/composite.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":"lore-revision/src/store/composite.rs"},"region":{"startLine":931}}}],"partialFingerprints":{"codehealthFindingId/v1":"9bbfd515d6c6051b1e6b3694454af0ab475338ffcdb17adab11c591df30f11a1"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-server/src/grpc/thinclient/v1/revision_diff.rs: lore-server/src/grpc/thinclient/v1/revision_diff.rs changed 12 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in lore_server::grpc::thinclient::v1::revision_diff::run_three_way at line 447. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-server/src/grpc/thinclient/v1/revision_diff.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":"lore-server/src/grpc/thinclient/v1/revision_diff.rs"},"region":{"startLine":447}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fd0f87eff39529d775452373a8ed0ea7feeffc28910a7ce811b38d9045d3609"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-server/src/grpc/revision/v1/revision_list.rs: lore-server/src/grpc/revision/v1/revision_list.rs changed 10 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 19 in lore_server::grpc::revision::v1::revision_list::walk_revisions at line 485. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-server/src/grpc/revision/v1/revision_list.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":"lore-server/src/grpc/revision/v1/revision_list.rs"},"region":{"startLine":485}}}],"partialFingerprints":{"codehealthFindingId/v1":"f53276d310ce8d61204db796b3009d4f968eb2d89d8980897ed1f0ce18962248"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-revision/src/file/diff.rs: lore-revision/src/file/diff.rs changed 9 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 21 in lore_revision::file::diff::emit_diff3_changes at line 469. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-revision/src/file/diff.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":"lore-revision/src/file/diff.rs"},"region":{"startLine":469}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f1877c5db684efe2bfe87893cc1f4d13d13cb3b8f35e031c09592780578c1fe"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-revision/src/revision/restore.rs: lore-revision/src/revision/restore.rs changed 9 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 21 in lore_revision::revision::restore::restore at line 216. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-revision/src/revision/restore.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":"lore-revision/src/revision/restore.rs"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"29cad7f91cb7ede4268f422ec06fbfc26ed735cf111ed441d4bda1b1fdeada06"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-server/src/quic/replication_store_service/server.rs: lore-server/src/quic/replication_store_service/server.rs changed 9 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 18 in ReplicationStoreService::build_request_span at line 244. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-server/src/quic/replication_store_service/server.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":"lore-server/src/quic/replication_store_service/server.rs"},"region":{"startLine":244}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c4f50cfa10019c397e86b4e128cec1a1f88410363c3043586bfac03366a991b"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-server/src/quic/storage_service_v4.rs: lore-server/src/quic/storage_service_v4.rs changed 7 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 23 in StorageServiceV4::run_request_handler at line 178. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-server/src/quic/storage_service_v4.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":"lore-server/src/quic/storage_service_v4.rs"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0bd73b7e7d7bca94a035673fa54a80430a19ac7e5f7d5dd17d8656962e54d73"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-aws/src/store/immutable_store/metadata_migrator.rs: lore-aws/src/store/immutable_store/metadata_migrator.rs changed 10 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in MetadataMigrator::process_fragment at line 239. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-aws/src/store/immutable_store/metadata_migrator.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":"lore-aws/src/store/immutable_store/metadata_migrator.rs"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"94751e128c070833624e1cde2b89c1fdded3312f56dbec978ad405ca07849a23"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-storage/src/defragment.rs: lore-storage/src/defragment.rs changed 10 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in lore_storage::defragment::walk_intermediate_level at line 487. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-storage/src/defragment.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":"lore-storage/src/defragment.rs"},"region":{"startLine":487}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fa1911fc370362ae6edb8a001c3b8850b0f873b635079e4a0f6623e42ddeaee"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-storage/src/local/mutable_store.rs: lore-storage/src/local/mutable_store.rs changed 10 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in LocalMutableStore::new at line 715. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-storage/src/local/mutable_store.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":"lore-storage/src/local/mutable_store.rs"},"region":{"startLine":715}}}],"partialFingerprints":{"codehealthFindingId/v1":"be43ce8d9aebb684165180f2d0361c8933197778a8d7c8d4b7212905f0ca41b5"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-revision/src/state/os_diff.rs: lore-revision/src/state/os_diff.rs changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 26 in lore_revision::state::os_diff::diff_filesystem_directory_walk at line 1169. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-revision/src/state/os_diff.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":"lore-revision/src/state/os_diff.rs"},"region":{"startLine":1169}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a3741298e0b4da5689900c705be5513339c4b2889152978b13606bd1da50afd"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore/src/revision_tree/add.rs: lore/src/revision_tree/add.rs changed 7 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 22 in lore::revision_tree::add::plan_entries at line 472. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore/src/revision_tree/add.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":"lore/src/revision_tree/add.rs"},"region":{"startLine":472}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b05610b3112b477656d03e89dab041cde3ec99a75a8178ac73f7730ebc5168d"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-server/src/grpc/handlers/branch_push.rs: lore-server/src/grpc/handlers/branch_push.rs changed 8 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in lore_server::grpc::handlers::branch_push::push at line 286. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-server/src/grpc/handlers/branch_push.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":"lore-server/src/grpc/handlers/branch_push.rs"},"region":{"startLine":286}}}],"partialFingerprints":{"codehealthFindingId/v1":"665b09e4b8318f1a6a7fd41aec59f043dabef49e84b15e6d853859c3bef47446"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-server/src/quic/stream_handler.rs: lore-server/src/quic/stream_handler.rs changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 20 in StreamHandler::handle_stream 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-server/src/quic/stream_handler.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":"lore-server/src/quic/stream_handler.rs"},"region":{"startLine":502}}}],"partialFingerprints":{"codehealthFindingId/v1":"c516387bc3972c549b6e53dac6f57c76b90dd0e0c54b625172cd73a58aa80aea"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-revision/src/revision/info.rs: lore-revision/src/revision/info.rs changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 19 in lore_revision::revision::info::info at line 173. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-revision/src/revision/info.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":"lore-revision/src/revision/info.rs"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"20f1fc7ea13f622f3a0e026e1ed104ca1545497f0ca049aac6bbca23765b9bb3"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-revision/src/revision/history.rs: lore-revision/src/revision/history.rs changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in lore_revision::revision::history::history at line 217. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-revision/src/revision/history.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":"lore-revision/src/revision/history.rs"},"region":{"startLine":217}}}],"partialFingerprints":{"codehealthFindingId/v1":"11298743b14ea2d3138ca522627304b00ed5f4bf60f1778485cb7e10ea5b852d"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-revision/src/repository/create.rs: lore-revision/src/repository/create.rs changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 17 in lore_revision::repository::create::create_with_metadata at line 155. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-revision/src/repository/create.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":"lore-revision/src/repository/create.rs"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"cad2ad11be082cc3378cd3b5559771413010bbbf82ebaafb67efa07662a996bf"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-revision/src/file/history.rs: lore-revision/src/file/history.rs changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 17 in lore_revision::file::history::find_start_revision at line 365. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-revision/src/file/history.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":"lore-revision/src/file/history.rs"},"region":{"startLine":365}}}],"partialFingerprints":{"codehealthFindingId/v1":"89e6444e21cbb9a57356f4891fd4ad4cf0533c756f1da627626685084c8c57dc"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-storage/src/packstore.rs: lore-storage/src/packstore.rs changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in PackStore::resume at line 165. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-storage/src/packstore.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":"lore-storage/src/packstore.rs"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0c715cb32aeac612017f911f1dffba9c5932c9b56233185fe41a21ab1be556c"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-client/src/cli/commands/file.rs: lore-client/src/cli/commands/file.rs changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in lore_client::cli::commands::file::handle_file_history at line 1397. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-client/src/cli/commands/file.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":"lore-client/src/cli/commands/file.rs"},"region":{"startLine":1397}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d96ce7e54d348893b85ca1e1bd94f91c873daa6af7da7a50d751ac304eb4990"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-revision/src/lock/file/release.rs: lore-revision/src/lock/file/release.rs changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 21 in lore_revision::lock::file::release::release at line 119. 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-revision/src/lock/file/release.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":"lore-revision/src/lock/file/release.rs"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc64df452f0324807d584312c2b6070a0bfb4085323338123d43d382a4369e3e"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: lore-revision/src/lock/file/acquire.rs: lore-revision/src/lock/file/acquire.rs changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 19 in lore_revision::lock::file::acquire::acquire 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 07:34:20 \u002B00:00\u0027 --until=\u00272026-09-29 07:34:20 \u002B00:00\u0027 --full-history --no-merges -- lore-revision/src/lock/file/acquire.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":"lore-revision/src/lock/file/acquire.rs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"5125714bc2ea887ca499c5fb58e6296504465c3c6930a6d086bfb804881aee88"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #1: If anonymized user #1 becomes unavailable, 59 significant file(s) lose their only recent owner: lore-revision/src/stage.rs, lore-storage/src/defragment.rs, lore/src/revision_tree/move_node.rs, lore/src/revision_tree/delete.rs, lore-revision/src/fs/filesystem_provider.rs, lore-aws/src/store/lock_store.rs, lore-revision/src/filter.rs, lore-server/src/hooks/dispatch.rs (\u002B51 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"e02ba9cc9e50cb985eab88956ce353873b905c46de3f75d2579d6a06688f2dea"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #2: If anonymized user #2 becomes unavailable, 20 significant file(s) lose their only recent owner: lore-server/src/quic/replication_store_service/client.rs, lore-storage/src/mutable_conformance.rs, lore-server/src/quic/replication_store_service/client_container.rs, lore-server/src/grpc/forwarded_requests.rs, lore-server/src/grpc/revision/v1/service.rs, lore-revision/src/dependency/resolve.rs, lore-server/src/quic/replication_store_service.rs, lore-server/src/grpc/forwarded_revision/v1/branch_create.rs (\u002B12 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6c5fa285c453bf84447e34b2558a1d1d4bedd777386f071a7bb8b46c094c99b9"}},{"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: lore-server/src/authnz/repository_authorizer.rs, lore-server/src/grpc/lock_service.rs, lore-server/src/protocol/storage/connect.rs, lore-server/src/grpc/revision_service.rs, lore-credential/src/util.rs. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"c9564554e7adbbfc9d37c9a0e778e7a4008a79530f3e66566d1b9bea29b0bd47"}},{"ruleId":"D16","level":"note","message":{"text":"Further sole-owners (lower concentration): 2 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 (86 single-owned of 508 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; 508 of the 694 production source files in this repository met that bar). They are anonymized user #4 (1 file(s)), anonymized user #5 (1 file(s)) \u2014 spread or document their files in the same way, at lower priority than the named off-boarding risks above."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6eac528f2429e724e1a97ed868f79eefbcf1888dab4af9a9e673429369bb5b2f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO(jcohen): Remove this when we\u0027re confident in the pagination support. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-aws/src/dynamodb.rs"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"11fd343bc711e42cc48d5f5a8f5ff9ffb81e375698a7f6034dc41e9653c7c48c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(jcohen): We should probably disallow the combination of \u0060Select::Count\u0060 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-aws/src/dynamodb.rs"},"region":{"startLine":681}}}],"partialFingerprints":{"codehealthFindingId/v1":"00da2118d37ebdfded1c6d8260da7b74d9959f64dd9d80a7ee9a10326364d8bd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: generate metric \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-aws/src/store/lock_store.rs"},"region":{"startLine":332}}}],"partialFingerprints":{"codehealthFindingId/v1":"edf09351ddab71c54b705f2590119f74f7201ec3c034e7045b1d7890d0ad75c6"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // Hack around EXE and DLL having the same file name for PDB file \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-capi/build.rs"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa58451b0c73299b8a5671c6ce371ddb7d142fa704f79f1a93ffd8aba09e5166"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // Hack around EXE and DLL having the same file name for PDB file \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-client/build.rs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"98660a20d54fc5a38073777489c4644eb383fdf4c548a9bc74c457eff46f2a66"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add files that are in directories \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-chaos-client/src/probability.rs"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5b86d70d53b9db81c1b6fab43e98abde89da35a01381013107cf13048ebb6f6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): If this is a relative path it should be made absolute \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-client/src/cli/util.rs"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b2325c99279f42f5175ceb30b8ae2a26ae28c52440ccf38ac449410c0c383c2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): Add command shortcuts \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-client/src/cli/cli.rs"},"region":{"startLine":432}}}],"partialFingerprints":{"codehealthFindingId/v1":"e543d6e883411554e66b6068a2b12a226124ad58d89fde102c0f72a95e5adf7e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): Add optional path arg? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-client/src/cli/commands/repository.rs"},"region":{"startLine":360}}}],"partialFingerprints":{"codehealthFindingId/v1":"232696ed8826e0a8e1f3c929183b6b001fea6f9a6df196176d2fe66053ead279"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): Add some more useful information \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-client/src/cli/commands/logfile.rs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a95b6d48913a900c44fd99d5aca3bf3ea290a34c375e16565d27db678efafe1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo(plockhart) we may want to bail out of the task with repeated failures \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-hashicorp/src/consul/service_peer_discovery.rs"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3b99c112918a709e746e2e1b3293bfa239e2dcd2e48bce84b668b57fad28bd9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo(plockhart) we may want to bail out of the task with repeated failures \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/topology/rotating_id_fixed.rs"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bb58080b39b6db7984d15de7780fd1f4842de1f7f0e2cc4c6d94c5a8b5d0914"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // hack inside \u0060put.rs\u0060 requires the source buffer to outlive every event, \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-integration-tests/tests/storage_test.rs"},"region":{"startLine":6058}}}],"partialFingerprints":{"codehealthFindingId/v1":"a36a9b74361de189e2905b5f7ba95ac71d7f7b8510d21f7f54e35089fe4fc1b9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): To support huge trees we might want to selectively \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":1440}}}],"partialFingerprints":{"codehealthFindingId/v1":"84bc39d859984681b28a8d21793b4856aa5d7555f18807a82191997081d6e12c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): To support huge trees we might want to selectively \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":1599}}}],"partialFingerprints":{"codehealthFindingId/v1":"63d7d26f6a9fdbab18cbcba552af8b5d381c0986dd60c46eed1745ae68447c1c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): To support huge trees we might want to selectively \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":1795}}}],"partialFingerprints":{"codehealthFindingId/v1":"31264af972ec8a9bd92c26f30af9df367e320a5734d93a4d479b5549625bf1e6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-15592 - Improve by iteratively walking children"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":3227}}}],"partialFingerprints":{"codehealthFindingId/v1":"01dc19d86f92901ae7774160629f8dd0949c5d59ae8fde5dae83495b4420b604"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): This does not actually need to grab the whole node \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":3529}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a764e608248462fc251688954fd735b2b2e6a49bd1751a47ce917cb3d25972c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): Link revision divergence \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":4293}}}],"partialFingerprints":{"codehealthFindingId/v1":"36bc073566a21245d80ca0116d046e6f4393d6912edbb3f1f3cc7b91693c16eb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(UCS-13059): Extend with file mode check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":6646}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3bd98e40fde1d300e819a348a9919bc20e0b669d4d835395f266235960fbfe7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): User input should be behind an --interactive command line/API option \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":7226}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3c5c0dc9bd5508fb972c2bb2496ec491cd8229f5a8dcb78212b48d799518c6d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(UCS-11623): Check if the target link repository has no local changes - if so,"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state.rs"},"region":{"startLine":10393}}}],"partialFingerprints":{"codehealthFindingId/v1":"e01ce2dd214c98bbfe90bda8e93615d93ae37177290c996dbef0f6e93e86ac7d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-19227 - Links: Handle renaming and mismatching in staging"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/stage.rs"},"region":{"startLine":2171}}}],"partialFingerprints":{"codehealthFindingId/v1":"5724f365b612cbe5f6578cbc71f1cf9a32185e804769f4cedabefe8d168cf2b3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-17955 - Merging and conflict resolution for links"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/stage.rs"},"region":{"startLine":2518}}}],"partialFingerprints":{"codehealthFindingId/v1":"07e3b9660424652bdb2605f854bd8ef15ff143173062d8672b7a38f4ac0203e1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-17955 - Merging and conflict resolution for links"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/stage.rs"},"region":{"startLine":2715}}}],"partialFingerprints":{"codehealthFindingId/v1":"388084e4cdbde6474db57d74df39e9267345b34c115a7583228f23cd7b0a199e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-17955 - Merging and conflict resolution for links"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/stage.rs"},"region":{"startLine":2746}}}],"partialFingerprints":{"codehealthFindingId/v1":"d09be00b171098a375262c2a13352cab7b0e4dd45a5d4aa62f35fbf0d1cfdb54"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-17955 - Merging and conflict resolution for links"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/stage.rs"},"region":{"startLine":2860}}}],"partialFingerprints":{"codehealthFindingId/v1":"a40b61efeceff0529fbba8691a669ff27cb9ec1f0ac38955e1767f160fe2cc17"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-17955 - Merging and conflict resolution for links"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/stage.rs"},"region":{"startLine":2976}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b140cd2e3e4abdbe3eaf2da459dc2d1dd3600ed229df03981d2417cdc070205"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-17955 - Merging and conflict resolution for links"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/stage.rs"},"region":{"startLine":3022}}}],"partialFingerprints":{"codehealthFindingId/v1":"522c23592bcef610a51c5b1f4a4e34d51a407c35954b6be8efb5c4a4b638c869"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-17955 - Merging and conflict resolution for links"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/stage.rs"},"region":{"startLine":3071}}}],"partialFingerprints":{"codehealthFindingId/v1":"552626399dfa3c1ae85927d3647d3a204dc975f650776a1775011f55b7a7a375"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-17955 - Merging and conflict resolution for links"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/stage.rs"},"region":{"startLine":3483}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d38573c65b43419f849a5f937219490618d356a1dced0f293177e583440b218"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-17955 - Merging and conflict resolution for links"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/stage.rs"},"region":{"startLine":3646}}}],"partialFingerprints":{"codehealthFindingId/v1":"a28be3e732435f2bbb2482863e7512cb63b398e0af6fd547dcd04dd73e830e83"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-17955 - Merging and conflict resolution for links"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/stage.rs"},"region":{"startLine":1073}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e382b9ff4d6fe43b1380c2a4b3bd5731c261123e3f329ca5890e14874351261"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-17955 - Merging and conflict resolution for links"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/stage.rs"},"region":{"startLine":1141}}}],"partialFingerprints":{"codehealthFindingId/v1":"637befeb053ec7bf23f86821c09bacb493c0181e555306b20dc9ba0dc626c219"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-17955 - Merging and conflict resolution for links"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/fs/realize.rs"},"region":{"startLine":1148}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b3ce3e82306f3e0921f268a0b99ad56ba3460ec88c2f4afcf405c199dece0a7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-17955 - Merging and conflict resolution for links"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/fs/realize.rs"},"region":{"startLine":2486}}}],"partialFingerprints":{"codehealthFindingId/v1":"c822da06968c62def5c02bc30e693868ed87db54b4f351c6523852ee8d9424cd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-17955 - Merging and conflict resolution for links"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/fs/realize.rs"},"region":{"startLine":2553}}}],"partialFingerprints":{"codehealthFindingId/v1":"894e33a5769a75c0603bdcd1410fc57e58cf5bb9856603912ad5220a15739871"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-17955 - Merging and conflict resolution for links"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/fs/realize.rs"},"region":{"startLine":2620}}}],"partialFingerprints":{"codehealthFindingId/v1":"29e9676a1e7101db08812bf4d11f00e920addedcbd3e772e3939e868c77812e0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Figure out a better way to store this metadata around file deletions \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/revision.rs"},"region":{"startLine":958}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0eb78d4cdb14915d6c888668b7297234fef601f3ec03fd6b9418df6fcb2fb5e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Figure out a better way to store this metadata around file deletions \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/revision.rs"},"region":{"startLine":1074}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac8237208135d1d931299d99cf67500d456661bd776a04d83c66bcb483ea827c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Follow merges from other branches bounded by revision number \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/revision.rs"},"region":{"startLine":1140}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b8f0ff7ecf567ce5b42f81910a252d0c0d39375c1b9d4ebe8b89f422a648e6f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): Upgrade and return connection \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/repository.rs"},"region":{"startLine":3748}}}],"partialFingerprints":{"codehealthFindingId/v1":"43233c3c3d32de57c50bdee95b8ace88a2fc3a88af75a9750f8bc2e8bc64884a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Garbage collect nametable by iterating entire merkle tree and rebuiling \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/nametable.rs"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"5af234e98b30b906c483974401411493c0af74565762c5298708fce3f60aee0b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Do we need to recreate branch hierarchies here, or fine to just branch \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/layer.rs"},"region":{"startLine":351}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a0b567a05ed35f70520313c90b204b991b6c5524e85debb8eb4f525a739b65a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Fuse the open and the head read through an \u0060open_read_head\u0060 on \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/infer.rs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"1907688d245eea22766966b85529abbbbf57bb46d35ee31dbe9803805d693f1d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Fuse the open and the first window read through an \u0060open_read_head\u0060 on \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/infer.rs"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1cf0778cbb2edaefd91eae7975e925f2dccc108347d7bb4a22e02fbdba53c95"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Accelerate by storing last synced hash for each remote and branch \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/history.rs"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"da949f0d0cd221d0c46c78ef9b42f1a2f6ddd617c47f9d23480ffc4689dd6b79"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Support finding through merged and other parent \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/history.rs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"7937701230ebc9e295483ac5ec29069ccbd76a4451cd661d221a51c6830ceee3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Support finding through merged and other parent \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/history.rs"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"28f2b646d5c285c4260b0ba13194fec4908f4e661703117c075aded2ef848c33"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Support finding through merged and other parent \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/history.rs"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d50a0a76c809efc6ecdf73350e4f197823c89ebdb6c8c9b9a777a0b2d791398"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Hide batch cache latency by issuing requests while iterating \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/find.rs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a2bfcb9cf394c7e8b7c45a4e87add42a821bf88d53ceec8fdd7a16ac9c54497"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): Implement with a union to enable command-specific progress events \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/event.rs"},"region":{"startLine":271}}}],"partialFingerprints":{"codehealthFindingId/v1":"51a23fdd35d3bd08fedb2b63972361485441c38ad2131353fc473f7084dafc06"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Layers that specify a path living inside a link need \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/commit.rs"},"region":{"startLine":1523}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d8a54f1e81ec888934bb85eeff902ec61a345737f647ec263f932c7b9468604"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Optionally find previous identical file content and deduplicate by using same context \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/commit.rs"},"region":{"startLine":2600}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1ab0a96bdc6f4a38d3ceea5c1163f24c73316103f1cb14c5589ae68514db733"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): Implement support for changed link nodeId \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/commit.rs"},"region":{"startLine":2812}}}],"partialFingerprints":{"codehealthFindingId/v1":"86f30066d03932e066796ac16e3cfcf3145f779a37ac727521e8a56a1e54d5ca"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): For the rename case where the node as renamed/moved as part \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/commit.rs"},"region":{"startLine":3572}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7a775c4935b4fd3040cde9e284c9646bab407c4563a50626fe93d0bfd193fc8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Extend this with UCS-Auth information \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/commit.rs"},"region":{"startLine":3658}}}],"partialFingerprints":{"codehealthFindingId/v1":"006ad7baafb9974d12bdfed12cb116d743ff4f968d6662eecaecd0dc70f708a5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Move this to external metadata \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/commit.rs"},"region":{"startLine":3679}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d38481668d452263d8b06b4ffb8feb05ad8d3efc48be97cde679ee81917e711"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Only record head pointer jumps, i.e force push operations. Otherwise \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch.rs"},"region":{"startLine":939}}}],"partialFingerprints":{"codehealthFindingId/v1":"f04003a7be51caf93d219f711f06fb1f86dfbcb6dc376991554e63414aa34273"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-19228 - Links: Realize link node files during branch sync"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch.rs"},"region":{"startLine":2797}}}],"partialFingerprints":{"codehealthFindingId/v1":"f641caaefd7fc115df84b7524a451de98b7e3e1753bab373932c9bdb87f2adf6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-19228 - Links: Realize link node files during branch sync"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch.rs"},"region":{"startLine":2843}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0a13345ae22324e30191b05b9e04db8aadd11b36a51a394cca97076640e46e0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-19228 - Links: Realize link node files during branch sync"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch.rs"},"region":{"startLine":2881}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b9cac42b9faa3f423ec05c51a5fe199e1712302f860b1cdff3ff72e2d6db7e1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): By keeping branch epochs and sequentially force push, we can \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch.rs"},"region":{"startLine":3274}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a0d6ecf307ad335fd585215fc25573b96fc8f4236b4a5b6f306a68c6fbae80a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): This only handles revision number rewrite for now, implement proper \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/push.rs"},"region":{"startLine":1044}}}],"partialFingerprints":{"codehealthFindingId/v1":"11138ebe7fd7f76b16437323d419d615660ee7b924125c44dbfec793edd5eb72"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-17135 - Push links in individual tasks"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/push.rs"},"region":{"startLine":1669}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0a8d7d637287408f42c7991c3eedec715f1738107dc4a5589d1dfed4a125124"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-19234 - Links: Implement merge support for cross-link node links"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/merge.rs"},"region":{"startLine":3306}}}],"partialFingerprints":{"codehealthFindingId/v1":"7afea983e469c26e967757b07de8497658399aa83b20bb0366366f2456bd2bdb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Ok if layer branch already exist, but switch to the branch \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/branch/create.rs"},"region":{"startLine":285}}}],"partialFingerprints":{"codehealthFindingId/v1":"401089a865cb51a9f9c2e1b1825281e3a08a4f2d02180b1ba87cd5a070c995b2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Need to be able to get an item from Metadata and also know its type! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/event/metadata.rs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"61e9eeeada530802605dc91b4d85185d52fb4dbbeb103e82cb358927274ac6f7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-12399 - Convert to separate tasks"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/unstage.rs"},"region":{"startLine":815}}}],"partialFingerprints":{"codehealthFindingId/v1":"e61b365d6c61a2bad42cd38ef5771b862a40eafde1ab266708a26d856744bfd7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-12299 - Unify codepaths to discard nodes"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/unstage.rs"},"region":{"startLine":1464}}}],"partialFingerprints":{"codehealthFindingId/v1":"336277048414c7e16e382edbb93fb0959f1cfd1ea00316ba886865699ca254ef"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): If this has gone past a link into a subrepository, we \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/stage.rs"},"region":{"startLine":222}}}],"partialFingerprints":{"codehealthFindingId/v1":"bae7b0d20f902e99ccfa4f4742e7e6a4e6d00325c643d9f2306fd73656aed1e5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Layers \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/stage.rs"},"region":{"startLine":1071}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9e42ac073676371ccdaadf2b3c05ab326233064159fc1f286897d23e1d4fd7a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-18009 - Implement stage move for linked changes"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/stage.rs"},"region":{"startLine":1223}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c4ff60a1e7091f33a335adc96a02746625be2e43b5a595ac0b530de52a67e51"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-18009 - Implement stage move for linked changes"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/stage.rs"},"region":{"startLine":1273}}}],"partialFingerprints":{"codehealthFindingId/v1":"a34e6dd0fac766e7adb6aaef9d0c6aff9db1f8397a06b14d95618ceb3e942b42"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-18009 - Implement stage move for linked changes"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/stage.rs"},"region":{"startLine":1286}}}],"partialFingerprints":{"codehealthFindingId/v1":"d538a51a0a3e15f1e97c9c938923465a52d5ff5723ac6003ed13146fad933a65"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-18009 - Implement stage move for linked changes"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/stage.rs"},"region":{"startLine":1307}}}],"partialFingerprints":{"codehealthFindingId/v1":"345e167876df7868f90eaf3a0bd5306e046b03282ac151fc3de7733c28333c32"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-18009 - Implement stage move for linked changes"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/stage.rs"},"region":{"startLine":1526}}}],"partialFingerprints":{"codehealthFindingId/v1":"c18fc73b22f93ddb29f62f6bc43541d2dc5491f2ad5c7a8deb002468636ef173"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-18010 - Implement obliterate for links"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/obliterate.rs"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"66afbaab92a80346b180a5b68bbef626680849178bd0686aadcb3e6b0644a421"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-19229 - Links: Handle link nodes in file info lookup"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/info.rs"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"89c0924659e55e3866fb251f3e9eb134a07a430a6b209cb44e5c9fd8c5a422cc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-19229 - Links: Handle link nodes in file info lookup"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/info.rs"},"region":{"startLine":560}}}],"partialFingerprints":{"codehealthFindingId/v1":"f732c96b1ebc3e35fc77e67f08339fc13016787811bc258334ba101417110fb6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): If this is a file in the repository, get the current address \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/file/hash.rs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e361707483941a1eb902ea690e455a7fe91d561ad9ab7ee93e2c6cd26ca01d6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Add early out path to compare to just get a boolean indicator \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/fs/realize.rs"},"region":{"startLine":824}}}],"partialFingerprints":{"codehealthFindingId/v1":"da048adcd735f7c317f9bdee450612cfb0934680e67de58fee27bbb4cdb1cef3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Group and let unrelated paths execute in parallel with spawn \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/fs/realize.rs"},"region":{"startLine":1357}}}],"partialFingerprints":{"codehealthFindingId/v1":"70952456ef7eeafe72803ff2be2adaabcedc75ab39dc3c0de2a16c1103ace615"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): File system virtualization \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/fs/realize.rs"},"region":{"startLine":1369}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2f94dca6a427e590d35c04bce89962da333f1f92257d34506f0aad68c855055"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-18008 - Investigate link tracking for sync/realize_changes"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/fs/realize.rs"},"region":{"startLine":1486}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e9fdc7c60627e7e1eea0449a7b50431b0a2e006816f585cf8b609ae586b403e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-18008 - Investigate link tracking for sync/realize_changes"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/fs/realize.rs"},"region":{"startLine":1876}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d931c1a0a190606dd7b8b471b8c6902eb3a968e7ced7a7d78161170b3a0914e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): Implement merging links/link nodes \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/fs/realize.rs"},"region":{"startLine":2229}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8488ab92a2eb1abe4c52786475f95cc646298e6abd95127ba710983a3954ebd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Provide a useful \u0060EventDispatcher\u0060 to handle errors. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/fs/swfs/mount_resources.rs"},"region":{"startLine":253}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8520770e65855160ad9dc90f0960e79f9ddeffb0e6833a11798d2228797cf2f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): Verify filesystem in any case for local modifications \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/link/update.rs"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"dcca22c172587f75b993f4cf80ea7b44f9ba635e71f67ba2a96c45c4a62b287d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): narrow this to \u0060link_path\u0060 once a scoped diff works. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/link/remove.rs"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"906431c48db35eb7118dc0e7eeef017bbc6d9475c62dc445e480ee7e85bf0e12"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-19230 - Links: Handle link nodes in ProjFS directory enumeration and find"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/projfs/serve.rs"},"region":{"startLine":548}}}],"partialFingerprints":{"codehealthFindingId/v1":"2de105899222034cf44e6495980f0fef0db234c0fcd6368dfbbdceb370d6d936"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-19230 - Links: Handle link nodes in ProjFS directory enumeration and find"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/projfs/serve.rs"},"region":{"startLine":603}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d466725e5ccf4de88d1e7997d9cf7576015334828d9921559ed30616c5e6355"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-19230 - Links: Handle link nodes in ProjFS directory enumeration and find"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/projfs/serve.rs"},"region":{"startLine":650}}}],"partialFingerprints":{"codehealthFindingId/v1":"26bed467c6b7c84fea3e033f8eefbf6b8a2db19193effef8b26483379ec84b31"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-19231 - Links: Handle link nodes in repository verify"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/repository/verify.rs"},"region":{"startLine":508}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd25a55f6c4dca1106e79ce4e89f049313869cebadf7000560bf4c0393e8663e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Make this configurable in arguments and command line \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/repository/create.rs"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"547c91a4caa504c05b16319bd276e67860698b44a5a0d430b38799464b250ec0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Make use of the initial connection for repository resolve \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/repository/clone.rs"},"region":{"startLine":876}}}],"partialFingerprints":{"codehealthFindingId/v1":"7dae8f27a9e28e94b575dbe2f039e479637ab8c9945e34f832c5dc69d701bd3c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Clean up this connect flow \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/repository/clone.rs"},"region":{"startLine":910}}}],"partialFingerprints":{"codehealthFindingId/v1":"b349148e20e1c44c7e51ff49ebf29ceedc8b4bc3be0c85d162ca9d89b2a482c0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Differentiate between not authorized and other connection failures \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/repository/clone.rs"},"region":{"startLine":1965}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8855a85032a208cf52c4b893970a9c3fb8244d0c5812d7dae4c0048e6689a7e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This needs tracking and free on clone complete \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/repository/clone.rs"},"region":{"startLine":2030}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3da57186b096c59e54840de368e8824c626c307b88fd307add27cf9e2bc5794"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Task parallelize this for multiple layers \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/revision/sync.rs"},"region":{"startLine":991}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3b15f2e38b50ce9cd03238ecc9f4c9ad7dff49cf1e57c83ff45bcfc9f07a1b1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Handle multiple nearest matches for main revision \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/revision/sync.rs"},"region":{"startLine":992}}}],"partialFingerprints":{"codehealthFindingId/v1":"b29451b90ec77690ec108c3f3ce593070a7b5e41cf8e0ed59b61ba199f2b89d0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Emit as events \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/revision/sync.rs"},"region":{"startLine":1137}}}],"partialFingerprints":{"codehealthFindingId/v1":"d895e8e20a97e8495b9070d482563720b472e39bde78b42cf8c6bd615f49fd5c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Sync disjoint layers in parallel \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/revision/sync.rs"},"region":{"startLine":1168}}}],"partialFingerprints":{"codehealthFindingId/v1":"21eaa6b5a573ef9047cc72fd795b925d698c5e2afed1989c3fb4c8e3f1adcc30"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Take merges into account when looking up information in the parent. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/revision/info.rs"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"2702078199e78a49a9f2e847d74269381fdc1d12f474b1be5d90e1c26b74186f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson) Use (radix) sorter on name for scaling to directories with many entries \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state/os_diff.rs"},"region":{"startLine":841}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c96e6c704f7f5c5d2797919a6ac516d73a1b44acaa62f3e6bb608c9dde4b9f3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): A node moved within a repository the working tree materializes below \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/state/diff.rs"},"region":{"startLine":755}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf37ce1ecefc453717379ee89502a65b4dd8299dd77b480694dff7b7a4a44c08"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): We could pass around a hashmap cache of directory to file list mappings \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/util/fs.rs"},"region":{"startLine":340}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfd91ca196d7fc70f6e2240e16f4b28b9550fbddc505606c94a0ff4d8e0aa15f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): This should be a test for file system case sensitivity, in the sense that the file system \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/util/fs.rs"},"region":{"startLine":378}}}],"partialFingerprints":{"codehealthFindingId/v1":"66dfea3ad572d4616ffb248e3c6e9fee3dc7b565e6f19a5306a79224990eb31a"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // Hack to mark all data as durably stored \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/tests/state.rs"},"region":{"startLine":352}}}],"partialFingerprints":{"codehealthFindingId/v1":"096d5ac956857590ff16faf7713545c66ca8f399adc15522af891e63be107734"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // Hack to mark all data as durably stored \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/tests/state.rs"},"region":{"startLine":369}}}],"partialFingerprints":{"codehealthFindingId/v1":"20179a97dc295c0ec271355e0906e9ff0b2a46b5f77b3c9277045c47376394ed"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Move more revision state and tree logic to Rust to be able to setup \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/tests/revision.rs"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"afd804df79fa067946d085ac827835af5463eaf97738d5f44f877a63acc5de53"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): The Settings and ServerSettings structs SHOULD use \u0060#[serde(deny_unknown_fields)]\u0060 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/settings.rs"},"region":{"startLine":1782}}}],"partialFingerprints":{"codehealthFindingId/v1":"05a44acb033b010a3997d2ed5013e60407303dea296fb1b98c888e38437d55ad"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Identity handling \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/server.rs"},"region":{"startLine":1461}}}],"partialFingerprints":{"codehealthFindingId/v1":"75e562c488435624f453c77534d2368b5109afb9ce5e767c63d96dad61c8194c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: if no authorization string is passed, do not add a metadata for \u0027authorization\u0027. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/authnz/common.rs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d341affcc88ade0a60419f5824b6f3d763c9f3a8b7fdc1963c484c005eb74d4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(psharpe): Make channel capacity configurable \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/storage_service.rs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5db52ac3fb94987028f03ed0d5bc9162d35e15c1099cf9de69da5b4262fb3cc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(psharpe): make this capacity configurable or unbounded \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/storage_service.rs"},"region":{"startLine":276}}}],"partialFingerprints":{"codehealthFindingId/v1":"723c1c33b2b1987ec19ea59f9c09ab3912045388a11e348864cc566407dc126c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(jcohen): make this capacity configurable or unbounded \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/replication_service.rs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"80dea2fa57fe222c00d271fe5bee1b2fe583a13f7b86a036b80f3887f3ea3764"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: UCS-13626 move branch out of individual resources into the main message"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/lock_service.rs"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2b7b85e09204b647c880c8c4009594352dbb66ab24592f585928d5b458087ee"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: UCS-13626 move branch out of individual resources into the main message"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/lock_service.rs"},"region":{"startLine":331}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e4918a945ce14d5b8286beaf1d1be65a343f3e1be4c13498220e4f7590f692b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Change this to a streaming response \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/handlers/repository_list.rs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"af4393f45c7f3e4c8bd98181dbd09c2193a18c8cb3dd4a572c17be6a19314f12"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Change this to a streaming response \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/handlers/branch_list.rs"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"1dd7738454b1d91e8492ddd18cae531b6957f4f60ab9e8e21f3f9dea5a9c44a1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Once we have authz permission model with read/write/admin \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/handlers/repository_delete.rs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"49b7ce8c51670c481bb8816a09bd63b8a9c5eec5a6e64a857b7a2c4e87926f49"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Once we have authz permission model with read/write/admin \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/handlers/branch_push.rs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2a715f5ab1d30ceef4896a472840b4de82a22071c2b9a972c6f4b4604a6c223"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo(plockhart): Once auth service supports Richer Error Model, change to look for an error code \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/handlers/repository_create.rs"},"region":{"startLine":378}}}],"partialFingerprints":{"codehealthFindingId/v1":"11c56eed28c9f4d34cde117b475c84c8d8ee05dc992fd29ef53b8eec997fa689"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): handle MOVE, for which we need to have 2 paths, so the existing NodeChange doesn\u0027t work \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/handlers/path_diff.rs"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"e421521ecf868f4be6d2fecec7d782db1d2a053137a61421bc01927a1acfd318"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(parroyo): do we want to handle Copy ? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/handlers/path_diff.rs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"6806b33a457326f7e7726f5a89f0a567080ba12181c48d7acda430132142b8c1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(jcohen): track metrics for stats \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/handlers/obliterate.rs"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"50e80225891e3e8899b21b46d5b84cb7b2cd9ad65d44c9a7f4bc84cf8a10ce66"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Once the authz model has read/write/admin, replace \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/grpc/repository/v1/repository_delete.rs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"cad8542796f26d00f9ca1f7519508a74a274eccb7b79b6d8f4bfa8a30b619ee9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(jcohen): we should put this behind an integration test feature \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/protocol/storage.rs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"48e7aab02c38acc3d39f8e5aba6565488bddc26980879223abe1a19b81dc3f60"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo(plockhart) differentiate this label value and add to alerting rules \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/quic/stream_handler.rs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"4131cb96b983c590c1ddca2a3cb635b77f556bbc021476e41e3d445dd5529ce6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo(UCS-18195) - configure the max query size to be whatever the QUIC Server says is the max_query_batch"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/store/replicated_store.rs"},"region":{"startLine":492}}}],"partialFingerprints":{"codehealthFindingId/v1":"721c4c6978ac277492cfdce2444e6e8861fa399471ceb5c621993f42d417b1bb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo(plockhart) configure expected_rtt_ms based off latency to replication target \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/store/replica_factory.rs"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"5cf085ab957d1e7799dd235f4ad2bb3117b1cd68c0473a370eeb7f61561051c7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo(plockhart) remove GRPC write replication after we gain confidence in QUIC \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-server/src/store/replica_factory.rs"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"83fe9131371082f52940843b6a2ca9a301d28736b0a76eb8db1ad67152ce2f51"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (raghav.narula) limit the number of deserialized buckets kept in memory on the client/cli \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-storage/src/local/mutable_store.rs"},"region":{"startLine":1507}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce5fbdd37e3b71966efe03a782c31a6714af27ba0faca3c4e21f5672b55b6b79"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(vri): UCS-19226 - Links: Connection reuse for already connected links"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-transport/src/connection.rs"},"region":{"startLine":1208}}}],"partialFingerprints":{"codehealthFindingId/v1":"512e08b0142864d07daff1c4254e32f5737b306e3799c34f222f0676a57501b4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): This needs to be configurable, URC source should not be Epic specific \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-transport/src/grpc/mod.rs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b9b12d830419495cb333709a82689635760b115d5f6ebbfcac0f79d7623b7f5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Make this more granular and only flush tasks for given repository \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore/src/repository.rs"},"region":{"startLine":719}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6cabd362ed687a784bddb0e4c4d28ae872a51c9b80a7d641c62c2321de68c53"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(mjansson): Events \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore/src/layer/add.rs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d3cf25e634410d9a86f40214a47ed9d2f4088a50be351f06102052669135736"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO(UCS-16094): Determine if this should be unbounded or bounded"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore/src/remote/connection.rs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd114d4c9d09b0548853ef2df1fff1236f45972c50c0db71f55a378aeaf19f87"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: # todo(plockhart) we need to artificially slow down this durable local store to make the test work \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060# REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/test/test_topology.py"},"region":{"startLine":340}}}],"partialFingerprints":{"codehealthFindingId/v1":"6de86de4c337920ea4daf9fe5ff1d01a6166d8e235687f46f49bb8b7f0c12cb7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: # todo(plockhart) we need to artificially slow down this durable local store to make the test work \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060# REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/test/test_topology.py"},"region":{"startLine":375}}}],"partialFingerprints":{"codehealthFindingId/v1":"6423347ac2b86aec286b74820abb1a165ca2d5be7537eae9918501fa7a9d55e6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: # TODO(UCS-11886) Once we support server side fast-forward this should succeed"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/test/test_sync.py"},"region":{"startLine":284}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc8e4f914abd78ea515dd8eda518232af1fcfcc1644851422cb17c1f0463a28b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: # todo(plockhart) enable obliterate test once test-suite Auth has been updated \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060# REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/test/test_replicated_store.py"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa4a8ec411f316234173ac3609502e3e871628470807bb8a3713f140f8857c0a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: # TODO: Remove the following section when pytest migrations are done \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060# REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/test/lore.py"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"de2397247f4ea7df569d46891f718f0327f40f2846ddefd3089fca4a30f1f3b0"}},{"ruleId":"D19","level":"note","message":{"text":"Documentation: contradicts the code: The linter tooling table lists Vale (prose), markdownlint (structural), and lychee (links) with config locations, but the referenced Vale .vale.ini is a local file not shared by the repo root\u0027s .vale.ini. Ensure all three tools are installed on the CI host so the pre-publish script runs without requiring local installation."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"docs/developing/doc-standards/tools/README.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1abedcd5dfbbcc832e626b9080df66ac9ecea9394de6905c72676253660bf43"}},{"ruleId":"D22","level":"warning","message":{"text":"Inconsistent return type for getter vs setter. The setter accepts u16, but the getter returns u64. This is likely a bug or unnecessary widening, as UDP payload sizes fit in u16.: Change the return type of \u0060get_max_udp_payload_size\u0060 to \u0060u16\u0060 to match the setter and the domain constraint. (signatures: EndpointConfig.get_max_udp_payload_size(): u64 | EndpointConfig.max_udp_payload_size(value: u16): Result)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"64669467a2a2cf82bdd8a4053a500bdc6653335fdcc7701786c389327e33517e"}},{"ruleId":"D22","level":"warning","message":{"text":"Inconsistent naming for key update operations. \u0060force_key_update\u0060 and \u0060initiate_key_update\u0060 appear to do the same thing (triggering a key update), with only the verb \u0027force\u0027 vs \u0027initiate\u0027 distinguishing them. This creates ambiguity about whether one is synchronous/asynchronous or has different side effects.: Remove one of the methods. If they are identical, keep \u0060initiate_key_update\u0060 as it is more standard. If they differ, clarify the distinction in naming (e.g., \u0060force_key_update\u0060 vs \u0060schedule_key_update\u0060). Given the context, they likely overlap. (signatures: Connection.ping() | Connection.force_key_update() | Connection.initiate_key_update())"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"aca67802a9354c241c29ba3489fe2fff9627886aa9a2fd7b98f6a44711ff93ad"}},{"ruleId":"D26","level":"note","message":{"text":"Split lore-revision: A sprawling revision-system project whose 25 namespaces are all parts of the same persistent-storage subsystem. Suggested: split into storage/revision, branch, file, repository, and util"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"c39369407e981dfd266291033b822c56ef653f8ae84b9ba692690fede605b865"}},{"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":"18b644f86ca4c47c31406b712faf8f7078869b3a038cba8cd96b425867b3cfb8"},"properties":{"commitSha":"8f50de7d1a7deab5ac041a740056abd89da230fb"}},{"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":"0073a17c272b0b1472d7a43255bf61c30c6063df149a34bd3d11bf30806c8cd1"},"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":"951c264ed1c96378d7ff96641f2e95535d78bf5bb2f78292ff852fef31fe392a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"92d5adce3ef4f30a6d862a9760e59c155b60382d01f06578deeacbb6ad9a060b"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a022adf46da32dae0f2732cd766ed190229409f2a4f7352feeebc8870e2f96e1"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"730e83f2e34cfc3a79da1694fbaa0aad52d3acc844f80c0a888e213cf2996da7"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"8a4311d1954a5b6463ee215a522618439b32817240dd7217695c16100511e9aa"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"fe8341dbf4ee0c928475d309b6f271cee0b27b6518a96e5ee5d66faeb72728aa"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"699bed1305e23aaecd07808397778af4559f64ff4e41a609e09f0fdb3dde40a4"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"30d1a64a912a366a8ea72e4f438a86684d256c4ddd6ce88baf00760daafb3bfc"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"21a6c1b0cc95a20936eda976373cc14bf03cb78b1e0c9d9bc71ba89a8bcb4d8f"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3249eccf24061a89444dbbada7dc595df11804a650ce5c737baaee938999295f"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"49abf34198961f3d069f9e4166060d5332cd7955c78c2bed4601e7da7e949961"},"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":"33e3b96dc9142571ab1b3d8d9a6caaba02aa43cbf0bc4818aee8f35c97acff20"},"taxa":[{"id":"CWE-1220","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":"bba3653b49ae6149ee8b92e5f3a6d8bc38c12a11b9e6ed2a4658d7d278fc0824"},"taxa":[{"id":"CWE-326","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":"fd23476b2d11d082e65c758cbd8b593848833c7b2e6025a9eee8f801a33bbf32"},"taxa":[{"id":"CWE-326","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":"73b3b3b99763cb49a1bd2ef803d7f0a6b19f9de0ac65a9740af1a9f795e26bb9"},"taxa":[{"id":"CWE-326","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":"0535585a7f6ab6983045d58e72db474e3c99404c7e468c0b5b8b4a6e715dcec1"},"taxa":[{"id":"CWE-326","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b995e75272b61cf5f3649600c4af60acb108488f8113b0f25a04ec6792e70778"},"properties":{"dependency":{"package":"cmov","version":"0.5.3","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"be9977d5d7ddb867e7f2e9fb5ad301e217dd9c03427d8e948d094761434f4502"},"properties":{"dependency":{"package":"jsonwebtoken","version":"9.3.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"525150c79769e3a8552e1d639a767bc181c181d5c769963ba9e0faa9d03741e3"},"properties":{"dependency":{"package":"opentelemetry_sdk","version":"0.31.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"29657cae34dd8cde614417a5e63194c90262d7543de5763d566a22c44f87c6e9"},"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":"422864efbc32ee020d94634a443edac9d818b90faf02ac96d91c4d66ffa4da37"},"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":"a7ac1525ee21f8396482ed6caafb5092cc4f1f938990a606ace871da2f8aa6f6"},"properties":{"dependency":{"package":"serde_with","version":"3.20.0","advisory":"[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.40","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":"374c36f0df8933454799c73ed72a8a42a9f9ccdaa505b505d587df20821f6555"},"properties":{"dependency":{"package":"h2","version":"0.4.14","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":"854da5cef13784fde7cfff8a79eb2a7417bef798a376f1ff9e501c0d2a107a1d"},"properties":{"dependency":{"package":"pygments","version":"2.19.2","advisory":"PYSEC-2026-2987","aliases":["[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b3b963e7bf60f1371568e0d0bf67026cbd1233bd6010bcb276f6666daa2f5d03"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e508626bd5ffc5b8fa3042bbbe5d8d7e694c3613fb43c18583e34f071d4d3a48"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e52382cc8ac43518649220642e20ca7d1ddb228d0fa9a365f9ff4e6df730d99a"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"2663265028e2b808446ab6d830ee37f2a158e3f51fd864b5265f634d5b46fe1c"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"602e2a6962bc87594aef1c45429fd3946b3cfb112a9091cf8609d0407a1db299"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"205d2c761060392302167a1bf832bd82b8913c6d15d568ba7f7fd415e1c6fef6"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"be755c83cd6fa268a3288eacdfcc3924344f08813ec91519dca98b55e7017ad4"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"27be6c766841216888868c28a9428c9ccf48aff733f4fe5b80657ab2fef83f87"},"taxa":[{"id":"CWE-345","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e9d080309f3bacdf3fbec3a6ee9c268bf01378fbb2d304aad584b331eb472f04"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"0b3a4928e0b3769167a0391025b7a0e65d5363f63ab3ff84428ce1993c22d3c6"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"39dba8405d6542326bc0e73ab3d175c2b1099aa3824351db344387da3c393cfc"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5937028072d4f8930d89be7a1043368048d05a08e737963c133b47df0fd17063"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"98e4696ae7341b9a307b447d11198f6fe8d851f6c05dfe6c925014914dcb911d"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"1dd669a3ef54b0e82506797e241b5b7403124da401def91fcecff52cf35762c6"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"bef56f402ae4ba31f9792a2dc0c169ba56e1f32119be7f4bce56e0910b28d3e1"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ae3f7383d6a5e269fbe983ee4e08e07d9288b34c957cef1d06e1e3e95078c670"}},{"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":"372669697d9fdaf7ed0a702dcd68f1b56e87b1569a151075c6d32479854b9540"}},{"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":"19c510736c02ab5abea207d2d0e79c3be0b1f8bd2bc39a5a0fccb01878cc787b"}},{"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":"2448cdbfb242860d536ce577a84b0733279d8c4262a78e6b1ebf78be9612c4b8"}},{"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":"cf6485a38e9fb2a964d0714d00dc0015c226fc3038940c673c25d7abb9093193"}},{"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":"8970b7624c193abc7775e28865492bbecb28549e29407f79a8e1fca51d789e2b"}},{"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":"e6dc4036e3541e359dc3ab44a6750ef6c18dbebbc535f5f01d5fd91193b96e21"},"taxa":[{"id":"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":"d5b3be64a06a652a572683dced567e563b07f715dea883111548c96452f57f1a"},"taxa":[{"id":"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":"887f8188d898e34dfc5d8a82c180f1c945137ad27b4b33a69d9ae281e5892406"},"taxa":[{"id":"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":"546a2288af81c692196727a0b9421c4a5b39416c3c19e6fc318049fc145f7a63"}},{"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":"b9bc20874fb36b190bd06cd3a23e486154990e607d71a2c33ca82e843f52f228"}},{"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":"acd0986983f757a35c13fe5bb58a0e97038d6872fbc38fb391e4ae875f2291eb"}},{"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":"1b535be54eb78fa078ec237d2d73fb43543a2926d72278a0b62d894847a05881"}},{"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":"920f7e95fc876ba5104da8a08540f46661a31fa5461f8c8d4978f71e0c2617ff"}},{"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":"833205c33f52ea183371476ff11cf5aedd0cb1a99354991b4162f185c486ad9e"}},{"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":"b65f15914508866cc49daec205dd7258a4ead0fafa628fb21c34a17e8c7b7221"}},{"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":"1f15540304de29ee2093569fe97033b7481c1184c1efb6a6434bdd747104308e"}},{"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":"7c5ed73eff23ec2102dfdc09436778332be46e8252a6d4471c95cfa0b5b0fded"}},{"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":"a23133cfc1740db2ec368e5bba00a0ea34962812e521f407e4865d5efa5eeef7"}},{"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":"0a5cfd70d330def05e4b80ee7965b12028ec5943ec49afddc1269ba59d79d60c"}},{"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":"85fdfb83696832510591226a82162f97ec81e1d72f2db742c7c7f2e6ccae4686"}},{"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":"24cc22f5b88daa4959f6619eb064b6b7b212ffe3da950911cfdd01a0233394ab"}},{"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":"f800a28eff829921880b6fc720c8a1ad4c51ee526fc98f765e49b50397490c94"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: interface.rs \u2194 command.rs: \u0060lore/src/interface.rs\u0060 and \u0060lore/src/remote/command.rs\u0060 change together 91% of the time (10 of the 11 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 10 shared commits counted here, the most recent 3 are \u0060b1dedcd4\u0060 lore-capi: Expose the branch latest listing as a C API entry point; \u006098afb207\u0060 lore-capi: Expose repository delete as a C API entry point; \u0060d04595e1\u0060 lore-client: add link info command \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore/src/interface.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"02984d5e6b7f55d44c87650314b9d34f1b9b60295f7f7fed7bfa2de328fe6514"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: mod.rs \u2194 stage.rs: \u0060lore-revision/src/fs/os/mod.rs\u0060 and \u0060lore-revision/src/stage.rs\u0060 change together 64% of the time (14 of the 22 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 14 shared commits counted here, the most recent 3 are \u00605a6804bf\u0060 lore-revision: Rename operation named properly and added tests in os \u2026; \u0060a03e294b\u0060 lore-revision: Derive the case variations a directory holds from its \u2026; \u0060c640418b\u0060 lore-revision: read directories through the filesystem provider \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/fs/os/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"75c3ca8afdfb22ddebf80156619ed2837524f78608da40550441fdf2a7699d92"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: mod.rs \u2194 realize.rs: \u0060lore-revision/src/fs/os/mod.rs\u0060 and \u0060lore-revision/src/fs/realize.rs\u0060 change together 59% of the time (13 of the 22 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 13 shared commits counted here, the most recent 3 are \u0060d8484098\u0060 lore-revision: Change file system provider operation trait to have a \u2026; \u00605a6804bf\u0060 lore-revision: Rename operation named properly and added tests in os \u2026; \u0060220a3286\u0060 lore-revision: Stream the filesystem diff instead of collecting to a Vec \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lore-revision/src/fs/os/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"90fa8be8bd7c9727b1e75c1aabfda7aff3723cc1464488fd7f099a38e5260f99"}},{"ruleId":"D36","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"1b213f6eedd4b140d0bc37bdf1496f72811a643f34064f12518b32e9e83bcfc7"}},{"ruleId":"D36","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"eb00976a698a5d68999b7ee6d27206fd374e916853e7ff1ead5eed42386f043f"}},{"ruleId":"D36","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"90f83b4fa27db32740afe9540c905f3c0499caed87f61049a8a903ecc95b41c3"}},{"ruleId":"D40","level":"note","message":{"text":"No network policy: No Kubernetes NetworkPolicy (or Cilium policy) found. Without one, every pod can talk to every other pod and reach out to the internet by default. Add a default-deny policy and open only the flows you need."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"295828650a2aaa1b03ae9b32ae6843a0c38011e5a70b1926442c4fa7187de5f0"}},{"ruleId":"D41","level":"note","message":{"text":"No AppArmor/SELinux confinement: Workloads declare no AppArmor or SELinux profile. A mandatory-access-control profile confines what a compromised container can touch on the host, complementing seccomp\u0027s syscall filter."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"e83fbc31033373d6c51983ed230eb4ba61f7775ed02afb30f5fc1840bde01d4f"}},{"ruleId":"M4","level":"note","message":{"text":"README/code drift: README omits the lore-aws repository (and its AWS integration) \u2014 reported by the model that read the README against this repository; no term search was run for this one, so nothing here has been checked against the tree. Treat it as a reading to confirm, not as a measured contradiction: verify it against the code before acting on it, and if the footprint it describes does exist, this row is wrong."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"253a63004c1ed09e9544d8ed23a90aaf15dc241d9f0ee03464673458592af847"}},{"ruleId":"M4","level":"note","message":{"text":"README/code drift: README omits the lore-base/native project \u2014 reported by the model that read the README against this repository; no term search was run for this one, so nothing here has been checked against the tree. Treat it as a reading to confirm, not as a measured contradiction: verify it against the code before acting on it, and if the footprint it describes does exist, this row is wrong."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"cac6ac14b6eea6e8814370ad53eff73c689edeac5ff3d4fac9df990e75312a01"}},{"ruleId":"P2","level":"note","message":{"text":"Logging is not universal: Only 11/13 runnable modules use logging (modules with no entry point or server are excluded \u2014 they are libraries a runnable module hosts). Silent: \u0060.\u0060, \u0060lore-transport\u0060."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"91a94e21d6d4d0e6a2003f94505b0b02b157176f0b24c4820f3f82b4447a97fe"}}],"taxonomies":[{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d","organization":"MITRE","informationUri":"https://cwe.mitre.org/","isComprehensive":false,"shortDescription":{"text":"The MITRE Common Weakness Enumeration (CWE)."},"taxa":[{"id":"CWE-1032","guid":"5f21e517-68aa-a650-9a25-5771ef024637","name":"OWASP Top Ten \u2014 Security Misconfiguration category","shortDescription":{"text":"OWASP Top Ten \u2014 Security Misconfiguration category"},"helpUri":"https://cwe.mitre.org/data/definitions/1032.html"},{"id":"CWE-1059","guid":"a2381a08-60f6-9554-a8b8-f3018cfaaca5","name":"Insufficient Technical Documentation","shortDescription":{"text":"Insufficient Technical Documentation"},"helpUri":"https://cwe.mitre.org/data/definitions/1059.html"},{"id":"CWE-1220","guid":"778dd409-4c3f-1951-90c2-50410b5c91ba","name":"CWE-1220","shortDescription":{"text":"CWE-1220"},"helpUri":"https://cwe.mitre.org/data/definitions/1220.html"},{"id":"CWE-1357","guid":"e4d2e772-757e-0a5c-bd7d-77052949d866","name":"Reliance on Insufficiently Trustworthy Component","shortDescription":{"text":"Reliance on Insufficiently Trustworthy Component"},"helpUri":"https://cwe.mitre.org/data/definitions/1357.html"},{"id":"CWE-1395","guid":"800e09e7-c11a-8654-9fa6-86f398995fed","name":"Dependency on Vulnerable Third-Party Component","shortDescription":{"text":"Dependency on Vulnerable Third-Party Component"},"helpUri":"https://cwe.mitre.org/data/definitions/1395.html"},{"id":"CWE-16","guid":"659db3ea-affc-8453-8add-c1218fbfcb92","name":"Configuration","shortDescription":{"text":"Configuration"},"helpUri":"https://cwe.mitre.org/data/definitions/16.html"},{"id":"CWE-259","guid":"ae9ad959-fbb6-9d5e-892d-3dca66da0b69","name":"Use of Hard-coded Password","shortDescription":{"text":"Use of Hard-coded Password"},"helpUri":"https://cwe.mitre.org/data/definitions/259.html"},{"id":"CWE-326","guid":"7ee78bef-7589-f65f-a9d7-619f3485e844","name":"CWE-326","shortDescription":{"text":"CWE-326"},"helpUri":"https://cwe.mitre.org/data/definitions/326.html"},{"id":"CWE-345","guid":"d80d4b65-bbbe-b65d-958e-7ac466af18f9","name":"CWE-345","shortDescription":{"text":"CWE-345"},"helpUri":"https://cwe.mitre.org/data/definitions/345.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-732","guid":"1da27e8f-b330-7650-ab63-bd61953eae5d","name":"Incorrect Permission Assignment for Critical Resource","shortDescription":{"text":"Incorrect Permission Assignment for Critical Resource"},"helpUri":"https://cwe.mitre.org/data/definitions/732.html"},{"id":"CWE-77","guid":"332c8ade-6612-9f56-a06b-d8d90b1a8750","name":"Command Injection","shortDescription":{"text":"Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/77.html"},{"id":"CWE-78","guid":"2e31ceaf-c7ae-2e5e-9661-cfb1362789cf","name":"OS Command Injection","shortDescription":{"text":"OS Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/78.html"},{"id":"CWE-79","guid":"fd45580b-e8c4-fc5e-8c2f-aa8fab0b4dbf","name":"Cross-site Scripting (XSS)","shortDescription":{"text":"Cross-site Scripting (XSS)"},"helpUri":"https://cwe.mitre.org/data/definitions/79.html"},{"id":"CWE-798","guid":"5e8f057d-fee3-995a-a0cb-9fc5b0d174d1","name":"Use of Hard-coded Credentials","shortDescription":{"text":"Use of Hard-coded Credentials"},"helpUri":"https://cwe.mitre.org/data/definitions/798.html"},{"id":"CWE-829","guid":"13c33925-97fb-5a5e-b40c-56d328b8a4d7","name":"CWE-829","shortDescription":{"text":"CWE-829"},"helpUri":"https://cwe.mitre.org/data/definitions/829.html"},{"id":"CWE-89","guid":"6d08fdad-37eb-c150-bbf0-d7d946863407","name":"SQL Injection","shortDescription":{"text":"SQL Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/89.html"},{"id":"CWE-937","guid":"16f316ae-415c-b354-a59b-1f7905f756e9","name":"Using Components with Known Vulnerabilities","shortDescription":{"text":"Using Components with Known Vulnerabilities"},"helpUri":"https://cwe.mitre.org/data/definitions/937.html"},{"id":"CWE-94","guid":"75e7f50c-6c2f-dd52-bf40-bf6c52b861fd","name":"Code Injection","shortDescription":{"text":"Code Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/94.html"}]}],"properties":{"codehealthPublication":{"public":true,"notice":"This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings \u2014 which rule fired, in which file, on which line, and how to fix it \u2014 are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.","securityFindingsRedacted":69,"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."]}]}