{"$schema":"https://json.schemastore.org/sarif-2.1.0.json","version":"2.1.0","runs":[{"tool":{"driver":{"name":"codehealth","informationUri":"https://codehealth.canine.dev","rules":[{"id":"D1","name":"Cyclomatic Complexity","shortDescription":{"text":"Cyclomatic Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D1"},{"id":"D2","name":"Cognitive Complexity","shortDescription":{"text":"Cognitive Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D2"},{"id":"D3","name":"God Classes","shortDescription":{"text":"God Classes"},"helpUri":"https://codehealth.canine.dev/dimensions/D3"},{"id":"D4","name":"Code Duplication","shortDescription":{"text":"Code Duplication"},"helpUri":"https://codehealth.canine.dev/dimensions/D4"},{"id":"D5","name":"Coupling","shortDescription":{"text":"Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D5"},{"id":"D6","name":"Cohesion (LCOM4)","shortDescription":{"text":"Cohesion (LCOM4)"},"helpUri":"https://codehealth.canine.dev/dimensions/D6"},{"id":"D9","name":"Test Distribution","shortDescription":{"text":"Test Distribution"},"helpUri":"https://codehealth.canine.dev/dimensions/D9"},{"id":"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":"D15","name":"Churn \u00D7 Complexity Hotspots","shortDescription":{"text":"Churn \u00D7 Complexity Hotspots"},"helpUri":"https://codehealth.canine.dev/dimensions/D15"},{"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":"D26","name":"Project Cohesion","shortDescription":{"text":"Project Cohesion"},"helpUri":"https://codehealth.canine.dev/dimensions/D26"},{"id":"D28","name":"Secrets (history)","shortDescription":{"text":"Secrets (history)"},"helpUri":"https://codehealth.canine.dev/dimensions/D28","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D29","name":"Static Analysis (SAST)","shortDescription":{"text":"Static Analysis (SAST)"},"helpUri":"https://codehealth.canine.dev/dimensions/D29","relationships":[{"target":{"id":"CWE-79","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-89","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-94","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-77","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-79","CWE-89","CWE-78","CWE-94","CWE-77"]}},{"id":"D30","name":"Dependency Vulnerabilities","shortDescription":{"text":"Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D30","relationships":[{"target":{"id":"CWE-1395","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-937","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1395","CWE-937"]}},{"id":"D31","name":"IaC \u0026 Container Security","shortDescription":{"text":"IaC \u0026 Container Security"},"helpUri":"https://codehealth.canine.dev/dimensions/D31","relationships":[{"target":{"id":"CWE-1032","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-732","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-16","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1032","CWE-732","CWE-16"]}},{"id":"D34","name":"Knowledge Freshness","shortDescription":{"text":"Knowledge Freshness"},"helpUri":"https://codehealth.canine.dev/dimensions/D34"},{"id":"D35","name":"Change Coupling","shortDescription":{"text":"Change Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D35"},{"id":"D36","name":"Supply-chain Provenance \u0026 Signing","shortDescription":{"text":"Supply-chain Provenance \u0026 Signing"},"helpUri":"https://codehealth.canine.dev/dimensions/D36","relationships":[{"target":{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1357","CWE-494"]}},{"id":"D43","name":"Malicious Dependencies","shortDescription":{"text":"Malicious Dependencies"},"helpUri":"https://codehealth.canine.dev/dimensions/D43","relationships":[{"target":{"id":"CWE-506","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-506"]}},{"id":"D44","name":"Platform End-of-Life","shortDescription":{"text":"Platform End-of-Life"},"helpUri":"https://codehealth.canine.dev/dimensions/D44"},{"id":"AX10","name":"Code composition","shortDescription":{"text":"Code composition"},"helpUri":"https://codehealth.canine.dev/dimensions/AX10"},{"id":"AX3","name":"Project dependency cycles","shortDescription":{"text":"Project dependency cycles"},"helpUri":"https://codehealth.canine.dev/dimensions/AX3"},{"id":"AX4","name":"Dependency direction","shortDescription":{"text":"Dependency direction"},"helpUri":"https://codehealth.canine.dev/dimensions/AX4"},{"id":"AX9","name":"CQS / query purity","shortDescription":{"text":"CQS / query purity"},"helpUri":"https://codehealth.canine.dev/dimensions/AX9"},{"id":"AXB2","name":"Runtime readiness","shortDescription":{"text":"Runtime readiness"},"helpUri":"https://codehealth.canine.dev/dimensions/AXB2"},{"id":"DM4","name":"Rich vs anemic domain model","shortDescription":{"text":"Rich vs anemic domain model"},"helpUri":"https://codehealth.canine.dev/dimensions/DM4"},{"id":"DM5","name":"Encapsulated state","shortDescription":{"text":"Encapsulated state"},"helpUri":"https://codehealth.canine.dev/dimensions/DM5"},{"id":"M1","name":"Documentation (README)","shortDescription":{"text":"Documentation (README)"},"helpUri":"https://codehealth.canine.dev/dimensions/M1"},{"id":"M2","name":"Architecture documentation","shortDescription":{"text":"Architecture documentation"},"helpUri":"https://codehealth.canine.dev/dimensions/M2"},{"id":"M3","name":"Folder \u0026 project structure","shortDescription":{"text":"Folder \u0026 project structure"},"helpUri":"https://codehealth.canine.dev/dimensions/M3"},{"id":"M4","name":"Documentation accuracy","shortDescription":{"text":"Documentation accuracy"},"helpUri":"https://codehealth.canine.dev/dimensions/M4"},{"id":"P1","name":"CI/CD gates","shortDescription":{"text":"CI/CD gates"},"helpUri":"https://codehealth.canine.dev/dimensions/P1"},{"id":"P10","name":"Library API \u0026 versioning","shortDescription":{"text":"Library API \u0026 versioning"},"helpUri":"https://codehealth.canine.dev/dimensions/P10"},{"id":"P12","name":"CI test-gate honesty","shortDescription":{"text":"CI test-gate honesty"},"helpUri":"https://codehealth.canine.dev/dimensions/P12"},{"id":"P2","name":"Observability","shortDescription":{"text":"Observability"},"helpUri":"https://codehealth.canine.dev/dimensions/P2"},{"id":"P3","name":"Security \u0026 performance tooling","shortDescription":{"text":"Security \u0026 performance tooling"},"helpUri":"https://codehealth.canine.dev/dimensions/P3"},{"id":"P4","name":"Deployment \u0026 Rollback","shortDescription":{"text":"Deployment \u0026 Rollback"},"helpUri":"https://codehealth.canine.dev/dimensions/P4"},{"id":"P6","name":"Release Hygiene","shortDescription":{"text":"Release Hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/P6"},{"id":"PF1","name":"Benchmark discipline","shortDescription":{"text":"Benchmark discipline"},"helpUri":"https://codehealth.canine.dev/dimensions/PF1"},{"id":"PF3","name":"Async \u0026 latency hygiene","shortDescription":{"text":"Async \u0026 latency hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/PF3"},{"id":"X10","name":"Duplicated predicate","shortDescription":{"text":"Duplicated predicate"},"helpUri":"https://codehealth.canine.dev/dimensions/X10"},{"id":"X32","name":"Type resolved by simple name across every loaded assembly","shortDescription":{"text":"Type resolved by simple name across every loaded assembly"},"helpUri":"https://codehealth.canine.dev/dimensions/X32"},{"id":"X6","name":"Hand-rolled structured-format parsing","shortDescription":{"text":"Hand-rolled structured-format parsing"},"helpUri":"https://codehealth.canine.dev/dimensions/X6"},{"id":"X7","name":"Silent fallback defaults","shortDescription":{"text":"Silent fallback defaults"},"helpUri":"https://codehealth.canine.dev/dimensions/X7"},{"id":"X9","name":"Subsumed condition operand","shortDescription":{"text":"Subsumed condition operand"},"helpUri":"https://codehealth.canine.dev/dimensions/X9"}]}},"results":[{"ruleId":"D1","level":"warning","message":{"text":"git_branchless_move::r#move (cyclomatic 57): git_branchless_move::r#move 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":"git-branchless-move/src/lib.rs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5bfb36e167c4dee07f83e3149844a804270633a6f9e733f456118a20f47bdd9"}},{"ruleId":"D1","level":"warning","message":{"text":"git_branchless::commands::split::split (cyclomatic 47): git_branchless::commands::split::split has cyclomatic complexity 47 (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":"git-branchless/src/commands/split.rs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c24cb6770103282f1c6cef715ad97042256c57b9ab990de9f2b1e2a129f6142"}},{"ruleId":"D1","level":"warning","message":{"text":"git_branchless::commands::command_main (cyclomatic 35): git_branchless::commands::command_main has cyclomatic complexity 35 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless/src/commands/mod.rs"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"e16ab2926518b37db3a57c5ec639666d5c9ced967eb1a8c26ac2099f68ffe5d8"}},{"ruleId":"D1","level":"warning","message":{"text":"git_branchless_lib::core::rewrite::execute::in_memory::rebase_in_memory (cyclomatic 31): git_branchless_lib::core::rewrite::execute::in_memory::rebase_in_memory has cyclomatic complexity 31 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/core/rewrite/execute.rs"},"region":{"startLine":461}}}],"partialFingerprints":{"codehealthFindingId/v1":"f801abfe091a7cc0dff582775422d7f5ac422b715a949ba1434cf7b7de3bcd65"}},{"ruleId":"D1","level":"warning","message":{"text":"git_branchless_lib::git::diff::process_diff_for_record (cyclomatic 30): git_branchless_lib::git::diff::process_diff_for_record 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":"git-branchless-lib/src/git/diff.rs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c6704c5817557b257c153784a23b6a5c8183c8d78bc4899b310c1f6bd24d218"}},{"ruleId":"D1","level":"warning","message":{"text":"ResolvedTestOptions::resolve (cyclomatic 28): ResolvedTestOptions::resolve has cyclomatic complexity 28 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-test/src/lib.rs"},"region":{"startLine":221}}}],"partialFingerprints":{"codehealthFindingId/v1":"6802289f12a54b5d3cfe655403eca0fa3a38401064ddb6140bc2bbf219576ffc"}},{"ruleId":"D1","level":"warning","message":{"text":"git_branchless_test::event_loop (cyclomatic 24): git_branchless_test::event_loop has cyclomatic complexity 24 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-test/src/lib.rs"},"region":{"startLine":1529}}}],"partialFingerprints":{"codehealthFindingId/v1":"625d682308be8d3a3fa87990df46ae6e73a76b7f3d560f1a0934d9c9dc6b0042"}},{"ruleId":"D1","level":"warning","message":{"text":"git_branchless_navigation::advance (cyclomatic 23): git_branchless_navigation::advance 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":"git-branchless-navigation/src/lib.rs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"79d04957ba52d2e21873c5dca6edfa955edf656c12013393325451ab8e92c521"}},{"ruleId":"D1","level":"warning","message":{"text":"git_branchless_smartlog::render::get_child_output (cyclomatic 23): git_branchless_smartlog::render::get_child_output 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":"git-branchless-smartlog/src/lib.rs"},"region":{"startLine":452}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e679135c32170a7f97d529a1440578eb26833ed59d046522a70daf947f16122"}},{"ruleId":"D1","level":"warning","message":{"text":"git_branchless_smartlog::graph::build_graph (cyclomatic 22): git_branchless_smartlog::graph::build_graph 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":"git-branchless-smartlog/src/lib.rs"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ca0b2bd542219507b4b615df9ab9842288d46fb4f50f93170a04d6e4aae67ec"}},{"ruleId":"D1","level":"warning","message":{"text":"RebasePlanBuilder::make_rebase_plan_for_current_commit (cyclomatic 21): RebasePlanBuilder::make_rebase_plan_for_current_commit 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":"git-branchless-lib/src/core/rewrite/plan.rs"},"region":{"startLine":755}}}],"partialFingerprints":{"codehealthFindingId/v1":"c99e375d803a9930bbdd968101eb602e7c7cc2f633be234f2e9dcbbdd1e22b9a"}},{"ruleId":"D1","level":"warning","message":{"text":"git_branchless_test::run_tests_inner (cyclomatic 21): git_branchless_test::run_tests_inner has cyclomatic complexity 21 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-test/src/lib.rs"},"region":{"startLine":1275}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b8169cdaf3ee34f267d364fe29c5a09290268ac334330a0dd8c079379269dca"}},{"ruleId":"D1","level":"warning","message":{"text":"git_branchless::commands::amend::amend (cyclomatic 20): git_branchless::commands::amend::amend 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":"git-branchless/src/commands/amend.rs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c21030648678e92024aee8621388c134d782bbb663e8380787269a415590e79"}},{"ruleId":"D1","level":"warning","message":{"text":"git_branchless_smartlog::smartlog (cyclomatic 20): git_branchless_smartlog::smartlog 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":"git-branchless-smartlog/src/lib.rs"},"region":{"startLine":765}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6081a36f2f6546e12c2439d52fbb04b2678a5ba419ddf1e80855c5671983358"}},{"ruleId":"D1","level":"warning","message":{"text":"git_branchless_lib::core::untracked_file_cache::process_untracked_files (cyclomatic 19): git_branchless_lib::core::untracked_file_cache::process_untracked_files has cyclomatic complexity 19 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/core/untracked_file_cache.rs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e11becba6b3748f338d3ec6f6e382a18e9498997cc6fa1d2be553b99cd0aa8c"}},{"ruleId":"D1","level":"warning","message":{"text":"git_branchless_reword::reword (cyclomatic 18): git_branchless_reword::reword has cyclomatic complexity 18 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-reword/src/lib.rs"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"bae87f27d5959eb45eb102673656ffa225c37b486d75c965af0823d0ea267eb4"}},{"ruleId":"D1","level":"warning","message":{"text":"PhabricatorForge::create (cyclomatic 18): PhabricatorForge::create has cyclomatic complexity 18 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-submit/src/phabricator.rs"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec4e9286cd33eb52f500163b212aa9f08b73eb322396d82a54e4dbd74f694e75"}},{"ruleId":"D1","level":"warning","message":{"text":"git_branchless_test::print_summary (cyclomatic 18): git_branchless_test::print_summary 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":"git-branchless-test/src/lib.rs"},"region":{"startLine":1733}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2d9ac1df4b489a5d1daa6c7e2f8562d7f4b68096b7d2b6a1a35c6175de58a8d"}},{"ruleId":"D1","level":"warning","message":{"text":"git_branchless_lib::core::rewrite::execute::move_branches (cyclomatic 17): git_branchless_lib::core::rewrite::execute::move_branches 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":"git-branchless-lib/src/core/rewrite/execute.rs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"d74f3028b587f255598f3e1d6548357274b0cb2c5274134c28bc0f9aa469ea90"}},{"ruleId":"D1","level":"warning","message":{"text":"TestStatus::describe (cyclomatic 17): TestStatus::describe 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":"git-branchless-test/src/lib.rs"},"region":{"startLine":911}}}],"partialFingerprints":{"codehealthFindingId/v1":"baee05a98388e6ab798787df00035536b2a82b4b753430b214a33d86e2757b3a"}},{"ruleId":"D1","level":"warning","message":{"text":"git_branchless_record::create_commit_with_changes (cyclomatic 17): git_branchless_record::create_commit_with_changes 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":"git-branchless-record/src/lib.rs"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"725528d159a68102b81b32870ae79f4cf33d0e5a6aa93027e32c37af70640f56"}},{"ruleId":"D1","level":"warning","message":{"text":"git_branchless_navigation::traverse_commits (cyclomatic 16): git_branchless_navigation::traverse_commits 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":"git-branchless-navigation/src/lib.rs"},"region":{"startLine":313}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5cf41a2241ed9372e7335cd9ec2527346e2d416f8cfafc784dd44f31b5de522"}},{"ruleId":"D1","level":"warning","message":{"text":"git_branchless_test::apply_fixes (cyclomatic 16): git_branchless_test::apply_fixes 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":"git-branchless-test/src/lib.rs"},"region":{"startLine":1935}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a6953fddb41cef1b7c0bd421847e3bad6c4b4ccd9bd8c0b3675558035db7e72"}},{"ruleId":"D1","level":"warning","message":{"text":"git_branchless_undo::select_past_event (cyclomatic 16): git_branchless_undo::select_past_event 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":"git-branchless-undo/src/lib.rs"},"region":{"startLine":431}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd264b08a0ea68ff72bf42e1759778f6329c94a37793eeffe104e7239d9ec79c"}},{"ruleId":"D2","level":"warning","message":{"text":"git_branchless_move::r#move (cognitive 106): git_branchless_move::r#move has cognitive complexity 106 (threshold 15). Drivers by points: if/else 27 (54 pts), loops 11 (23 pts), match/switch 14 (22 pts), boolean chains 7 (nesting depth added 47). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-move/src/lib.rs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"dba42231cc70ac8f6455df031fda08feabc1976e911582b7745f7013b0ab8011"}},{"ruleId":"D2","level":"warning","message":{"text":"git_branchless_lib::core::rewrite::execute::move_branches (cognitive 59): git_branchless_lib::core::rewrite::execute::move_branches has cognitive complexity 59 (threshold 15). Drivers by points: if/else 6 (28 pts), match/switch 7 (24 pts), loops 3 (7 pts) (nesting depth added 43). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/core/rewrite/execute.rs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"35f333c896a1e08deb0b0dd80d135ae118cbd4c05d4f48e74a689ebec82de6f4"}},{"ruleId":"D2","level":"warning","message":{"text":"git_branchless_lib::core::rewrite::execute::in_memory::rebase_in_memory (cognitive 58): git_branchless_lib::core::rewrite::execute::in_memory::rebase_in_memory has cognitive complexity 58 (threshold 15). Drivers by points: match/switch 10 (24 pts), if/else 11 (23 pts), loops 4 (11 pts) (nesting depth added 33). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/core/rewrite/execute.rs"},"region":{"startLine":461}}}],"partialFingerprints":{"codehealthFindingId/v1":"20a87642a1b99bc6a81b930332f0f65d62cee26af797379708f879e6ef8d0cc9"}},{"ruleId":"D2","level":"warning","message":{"text":"git_branchless_lib::git::diff::process_diff_for_record (cognitive 58): git_branchless_lib::git::diff::process_diff_for_record has cognitive complexity 58 (threshold 15). Drivers by points: if/else 14 (32 pts), match/switch 8 (19 pts), boolean chains 4, loops 2 (3 pts) (nesting depth added 30). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/git/diff.rs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"6222d289d374725e730576e33d7d754a02827fc6a82b81b56ddc3228aed60f32"}},{"ruleId":"D2","level":"warning","message":{"text":"git_branchless::commands::split::split (cognitive 56): git_branchless::commands::split::split has cognitive complexity 56 (threshold 15). Drivers by points: if/else 19 (29 pts), match/switch 16 (22 pts), loops 2 (3 pts), boolean chains 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":"git-branchless/src/commands/split.rs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"96437c11f30184825390d6acb9a21768b32b2a7e8e6caf48bd0d73d09c6f0fd3"}},{"ruleId":"D2","level":"warning","message":{"text":"git_branchless_smartlog::graph::build_graph (cognitive 43): git_branchless_smartlog::graph::build_graph has cognitive complexity 43 (threshold 15). Drivers by points: if/else 8 (17 pts), loops 9 (15 pts), match/switch 3 (8 pts), boolean chains 3 (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":"git-branchless-smartlog/src/lib.rs"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"372f1a68c9cb1f42d32e81a9b1ecd014e28729cc1dc97e37ad0dcbbfbfc8c3d2"}},{"ruleId":"D2","level":"warning","message":{"text":"RebasePlanBuilder::make_rebase_plan_for_current_commit (cognitive 42): RebasePlanBuilder::make_rebase_plan_for_current_commit has cognitive complexity 42 (threshold 15). Drivers by points: match/switch 9 (21 pts), if/else 15 (18 pts), loops 1 (2 pts), boolean chains 1 (nesting depth added 16). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/core/rewrite/plan.rs"},"region":{"startLine":755}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d5acaadd0f6c322b395294984e6817091ef589184fc2f9d6c015fffdccf99d2"}},{"ruleId":"D2","level":"warning","message":{"text":"git_branchless_navigation::advance (cognitive 41): git_branchless_navigation::advance has cognitive complexity 41 (threshold 15). Drivers by points: if/else 9 (19 pts), match/switch 8 (18 pts), loops 2 (4 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":"git-branchless-navigation/src/lib.rs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d5648fe9cf10659d5484500685ef1206a6c08515ed89aef0de0fbf3385f2176"}},{"ruleId":"D2","level":"warning","message":{"text":"git_branchless_test::event_loop (cognitive 40): git_branchless_test::event_loop has cognitive complexity 40 (threshold 15). Drivers by points: if/else 9 (18 pts), match/switch 7 (16 pts), loops 3 (6 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":"git-branchless-test/src/lib.rs"},"region":{"startLine":1529}}}],"partialFingerprints":{"codehealthFindingId/v1":"c32613134f8a2709fbd970ba277de48e1495f566275e41dbeedbe3e04cebb077"}},{"ruleId":"D2","level":"warning","message":{"text":"ResolvedTestOptions::resolve (cognitive 39): ResolvedTestOptions::resolve has cognitive complexity 39 (threshold 15). Drivers by points: match/switch 14 (26 pts), if/else 10 (13 pts) (nesting depth added 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-test/src/lib.rs"},"region":{"startLine":221}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebc045066447faab5858b455ea7b9efb2796e9a7832263c78c10f84969554f6e"}},{"ruleId":"D2","level":"warning","message":{"text":"git_branchless_smartlog::render::get_child_output (cognitive 31): git_branchless_smartlog::render::get_child_output has cognitive complexity 31 (threshold 15). Drivers by points: if/else 13 (19 pts), loops 3 (6 pts), match/switch 2 (5 pts), boolean chains 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-smartlog/src/lib.rs"},"region":{"startLine":452}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c527b52027990a341a88fe8c4ddbde08a7e824b5444f83a393a0c00d6a5a5e5"}},{"ruleId":"D2","level":"warning","message":{"text":"git_branchless_lib::core::untracked_file_cache::process_untracked_files (cognitive 29): git_branchless_lib::core::untracked_file_cache::process_untracked_files has cognitive complexity 29 (threshold 15). Drivers by points: match/switch 5 (12 pts), loops 3 (9 pts), if/else 5 (8 pts) (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/core/untracked_file_cache.rs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"084891c43aeeafe359227e5e911004c1d26190ebca1b069992ec3b2483ebd53d"}},{"ruleId":"D2","level":"warning","message":{"text":"git_branchless_smartlog::smartlog (cognitive 29): git_branchless_smartlog::smartlog has cognitive complexity 29 (threshold 15). Drivers by points: if/else 13 (16 pts), match/switch 5 (7 pts), boolean chains 5, loops 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":"git-branchless-smartlog/src/lib.rs"},"region":{"startLine":765}}}],"partialFingerprints":{"codehealthFindingId/v1":"a21691811e80a290c0189fadb94cc566d2405f676f3835414258a2fbeef032e2"}},{"ruleId":"D2","level":"warning","message":{"text":"git_branchless_test::print_summary (cognitive 29): git_branchless_test::print_summary has cognitive complexity 29 (threshold 15). Drivers by points: if/else 12 (18 pts), loops 3 (7 pts), boolean chains 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":"git-branchless-test/src/lib.rs"},"region":{"startLine":1733}}}],"partialFingerprints":{"codehealthFindingId/v1":"98ab66c31dc05ef3d9e61e3aee482978ca89067a0ef929c435a77389398b87b3"}},{"ruleId":"D2","level":"warning","message":{"text":"git_branchless_record::create_commit_with_changes (cognitive 26): git_branchless_record::create_commit_with_changes has cognitive complexity 26 (threshold 15). Drivers by points: if/else 14 (21 pts), match/switch 2 (4 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":"git-branchless-record/src/lib.rs"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ad5b4e7e9d2ae9de224c190e78e8f99727758b5b0a7bd1d41cde6bc988a5641"}},{"ruleId":"D2","level":"warning","message":{"text":"GithubForge::create (cognitive 25): GithubForge::create has cognitive complexity 25 (threshold 15). Drivers by points: match/switch 8 (16 pts), loops 3 (5 pts), if/else 1 (4 pts) (nesting depth added 13). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-submit/src/github.rs"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a2b6648cdf81b3327d4e95c2c794a06effd77e81d22b08e683f63dc6689a4e8"}},{"ruleId":"D2","level":"warning","message":{"text":"git_branchless::commands::amend::amend (cognitive 23): git_branchless::commands::amend::amend has cognitive complexity 23 (threshold 15). Drivers by points: if/else 12 (15 pts), match/switch 6 (7 pts), loops 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":"git-branchless/src/commands/amend.rs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bc12aa9d0a732e6904d7cffdc1e0a6583435d37092cf58195bef5efa7f973b9"}},{"ruleId":"D2","level":"warning","message":{"text":"git_branchless_test::run_tests_inner (cognitive 23): git_branchless_test::run_tests_inner has cognitive complexity 23 (threshold 15). Drivers by points: if/else 8 (11 pts), loops 4 (5 pts), match/switch 4 (5 pts), boolean chains 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-test/src/lib.rs"},"region":{"startLine":1275}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fb7960a67086b0dc1de23b74b68bdc676b1f1f9ab862449caf4275128c7054a"}},{"ruleId":"D2","level":"warning","message":{"text":"git_branchless_reword::prepare_messages (cognitive 22): git_branchless_reword::prepare_messages has cognitive complexity 22 (threshold 15). Drivers by points: if/else 11 (14 pts), match/switch 2 (4 pts), loops 2 (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":"git-branchless-reword/src/lib.rs"},"region":{"startLine":431}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e6dc7c2913617ad19f14db6d73f0b2fb31fff4f0c3fd0279f148af813398b8a"}},{"ruleId":"D2","level":"warning","message":{"text":"BranchForge::query_status (cognitive 22): BranchForge::query_status has cognitive complexity 22 (threshold 15). Drivers by points: match/switch 5 (10 pts), if/else 3 (7 pts), loops 4 (5 pts) (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":"git-branchless-submit/src/branch_forge.rs"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"748c333322336cd03e11b7aa648b76e0c0f6edeb1853c864d5cab7da7646748a"}},{"ruleId":"D2","level":"warning","message":{"text":"TestStatus::describe (cognitive 22): TestStatus::describe has cognitive complexity 22 (threshold 15). Drivers by points: if/else 9 (19 pts), match/switch 2 (3 pts) (nesting depth added 11). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-test/src/lib.rs"},"region":{"startLine":911}}}],"partialFingerprints":{"codehealthFindingId/v1":"1fbf4c9650f8470d219dff7c1510cee63ca4e1191929ddd929555ee94fee63f4"}},{"ruleId":"D2","level":"warning","message":{"text":"GithubForge::make_updated_pull_request_info (cognitive 20): GithubForge::make_updated_pull_request_info has cognitive complexity 20 (threshold 15). Drivers by points: match/switch 7 (11 pts), if/else 3 (5 pts), loops 4 (nesting depth added 6). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-submit/src/github.rs"},"region":{"startLine":519}}}],"partialFingerprints":{"codehealthFindingId/v1":"c26e280ea84e3ee1bd8eef0f0737119d091841ec98cd37449fe19e8607c3c2c8"}},{"ruleId":"D2","level":"warning","message":{"text":"ConstraintGraph::add_constraints (cognitive 19): ConstraintGraph::add_constraints has cognitive complexity 19 (threshold 15). Drivers by points: loops 7 (13 pts), match/switch 3 (5 pts), boolean chains 1 (nesting depth added 8). 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":"git-branchless-lib/src/core/rewrite/plan.rs"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1a2e18f9c9fb810a5a4d257d25f4468806fd968da5df714a00f8d9fbdc97406"}},{"ruleId":"D2","level":"warning","message":{"text":"Search::search (cognitive 19): Search::search has cognitive complexity 19 (threshold 15). Drivers by points: match/switch 5 (12 pts), loops 3 (5 pts), if/else 1 (2 pts) (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":"scm-bisect/src/search.rs"},"region":{"startLine":268}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac16f38df9bbd7d9a5bbf810f12e7dabd84146a3d31800c4e39ae1fb8b64991c"}},{"ruleId":"D2","level":"warning","message":{"text":"Repo::cherry_pick_fast (cognitive 17): Repo::cherry_pick_fast has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8 (14 pts), loops 1 (2 pts), 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":"git-branchless-lib/src/git/repo.rs"},"region":{"startLine":1374}}}],"partialFingerprints":{"codehealthFindingId/v1":"d00c83b2590a2ac61f6ddba1f647fbc0fda15d98140e911697f26afa8a774bba"}},{"ruleId":"D2","level":"warning","message":{"text":"git_branchless_lib::core::rewrite::execute::execute_rebase_plan (cognitive 17): git_branchless_lib::core::rewrite::execute::execute_rebase_plan has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (10 pts), match/switch 3 (7 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":"git-branchless-lib/src/core/rewrite/execute.rs"},"region":{"startLine":1259}}}],"partialFingerprints":{"codehealthFindingId/v1":"93fccc81b3b9fb6679e7a482b776a1ae85ac9e901876621258c11fa5c0123b80"}},{"ruleId":"D2","level":"warning","message":{"text":"git_branchless_lib::core::check_out::check_out_commit (cognitive 17): git_branchless_lib::core::check_out::check_out_commit has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10 (13 pts), match/switch 2 (3 pts), boolean chains 1 (nesting depth added 4). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, 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":"git-branchless-lib/src/core/check_out.rs"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"abeaccf91f8f7e0020eb1789b821a06b2a55660d84bfdd9e6cc7559c8bfa2944"}},{"ruleId":"D2","level":"warning","message":{"text":"git_branchless_lib::testing::pty::run_in_pty (cognitive 17): git_branchless_lib::testing::pty::run_in_pty has cognitive complexity 17 (threshold 15). Drivers by points: if/else 3 (10 pts), loops 3 (5 pts), match/switch 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":"git-branchless-lib/src/testing.rs"},"region":{"startLine":983}}}],"partialFingerprints":{"codehealthFindingId/v1":"8000900fdbb5cf4383e3422f2b9e3f62614f828b4c19686a053f080ac56a5ef2"}},{"ruleId":"D2","level":"warning","message":{"text":"PhabricatorForge::create (cognitive 17): PhabricatorForge::create has cognitive complexity 17 (threshold 15). Drivers by points: match/switch 7 (10 pts), if/else 4 (5 pts), loops 2 (nesting depth added 4). 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":"git-branchless-submit/src/phabricator.rs"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"2464b9bfbcb8945f95b15076fa825729021c756cfd95e1180417a5d29ef19a16"}},{"ruleId":"D2","level":"warning","message":{"text":"git_branchless_test::prepare_working_directory (cognitive 17): git_branchless_test::prepare_working_directory has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (11 pts), match/switch 4 (6 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":"git-branchless-test/src/lib.rs"},"region":{"startLine":2524}}}],"partialFingerprints":{"codehealthFindingId/v1":"97b636d1340e7c98c68defff3fd73f8e6de7f2a1f05a3628cf7b27b9d666a5d0"}},{"ruleId":"D2","level":"warning","message":{"text":"git_branchless::commands::hide::hide (cognitive 16): git_branchless::commands::hide::hide has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9 (13 pts), boolean chains 1, loops 1, match/switch 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless/src/commands/hide.rs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"4581534f4ca2ee74771efbeffbef68a4ed35d880e221ca62f7b83949ec727ceb"}},{"ruleId":"D2","level":"warning","message":{"text":"PhabricatorForge::query_status (cognitive 16): PhabricatorForge::query_status has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6 (8 pts), match/switch 4 (8 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":"git-branchless-submit/src/phabricator.rs"},"region":{"startLine":244}}}],"partialFingerprints":{"codehealthFindingId/v1":"175ab0b0f38eac3edecb7ea49c55e16391386789453a9359cb234b396db0eba8"}},{"ruleId":"D2","level":"warning","message":{"text":"PhabricatorForge::update_dependencies (cognitive 16): PhabricatorForge::update_dependencies has cognitive complexity 16 (threshold 15). Drivers by points: match/switch 3 (7 pts), if/else 3 (6 pts), loops 2 (3 pts) (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-submit/src/phabricator.rs"},"region":{"startLine":884}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a4ae7f2cf54b9e5e6ea45f02e7775f28455540cffddb1795b048cfb2daeb14e"}},{"ruleId":"D2","level":"warning","message":{"text":"git_branchless_test::apply_fixes (cognitive 16): git_branchless_test::apply_fixes has cognitive complexity 16 (threshold 15). Drivers by points: match/switch 5 (7 pts), if/else 4 (5 pts), loops 4 (nesting depth added 3). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-test/src/lib.rs"},"region":{"startLine":1935}}}],"partialFingerprints":{"codehealthFindingId/v1":"10902ec5a53f098e22fa6d3b51243a06f268bd2811f9bea76b790ba387977f74"}},{"ruleId":"D2","level":"warning","message":{"text":"git_branchless_undo::select_past_event (cognitive 16): git_branchless_undo::select_past_event has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (8 pts), match/switch 3 (7 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":"git-branchless-undo/src/lib.rs"},"region":{"startLine":431}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ddf821acbfe372ec065a58e0ebbb1a27491ea29835be665df85868372a0d8f3"}},{"ruleId":"D2","level":"warning","message":{"text":"git_branchless_undo::undo_events (cognitive 16): git_branchless_undo::undo_events has cognitive complexity 16 (threshold 15). Drivers by points: match/switch 3 (7 pts), if/else 6, loops 2, boolean chains 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-undo/src/lib.rs"},"region":{"startLine":788}}}],"partialFingerprints":{"codehealthFindingId/v1":"82cb91f5ae9afe86bd23a6e49be6059a2c5e5fc12fab188f16daf919f4e1ec05"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 2278 significant 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 1778 over it, 4.56\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-test/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4535383049fc3e0f932d9c09610076c0efd4dadd3d86b7d09685a397cdf54086"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless::commands::split::split: FunctionTooLong \u2014 git_branchless::commands::split::split runs 385 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 285 over it, 3.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":"git-branchless/src/commands/split.rs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e9c85f6e73f7d6b3cc4faf2caec72c609e305bcd68d309e733e7322202e117d"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless_move::r#move: FunctionTooLong \u2014 git_branchless_move::r#move runs 347 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 247 over it, 3.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":"git-branchless-move/src/lib.rs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"5341fb5893971f9cbd1a6e83c1c814a84d005cdd6c826f640bb65940b900b06e"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless_lib::core::rewrite::execute::in_memory::rebase_in_memory: FunctionTooLong \u2014 git_branchless_lib::core::rewrite::execute::in_memory::rebase_in_memory runs 302 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 202 over it, 3.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":"git-branchless-lib/src/core/rewrite/execute.rs"},"region":{"startLine":461}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba90aca612eac8640a3d588c9b6eb32a7472019b2c194897a44ef95e45bb2e35"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless::commands::amend::amend: FunctionTooLong \u2014 git_branchless::commands::amend::amend runs 265 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 165 over it, 2.65\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless/src/commands/amend.rs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfd5b40376609434b156a4da0a6193c6e09f81886bfa8013b5c0655d029a1bb3"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless_lib::git::diff::process_diff_for_record: FunctionTooLong \u2014 git_branchless_lib::git::diff::process_diff_for_record runs 263 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 163 over it, 2.63\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/git/diff.rs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"f540efe37c2fd015f5191439839d1e97029fdc22e7787ef7ce4b24b209d47c48"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless_submit::submit: FunctionTooLong \u2014 git_branchless_submit::submit 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":"git-branchless-submit/src/lib.rs"},"region":{"startLine":214}}}],"partialFingerprints":{"codehealthFindingId/v1":"953a0fb32c6edb408eeffcf8550d9c31b6ca5050f20950509190058f79f1dc3c"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless_undo::describe_event: FunctionTooLong \u2014 git_branchless_undo::describe_event runs 242 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 142 over it, 2.42\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-undo/src/lib.rs"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"f43f5148125a4afbe71762c7fdf9aca9ce27b8fe9b8217ac50e3b91c4865ac32"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: git/repo.rs: FileTooLong \u2014 1152 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 69% of them inside a single declaration: Repo (3 blocks, 466-1693). The bar is 500 significant lines; this is 652 over it, 2.30\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":"git-branchless-lib/src/git/repo.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"10817fe511b5fa1597af8b3cec1a909ef8a46b96f38646a4ca33edfbdee2b457"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless_test::apply_fixes: FunctionTooLong \u2014 git_branchless_test::apply_fixes runs 223 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 123 over it, 2.23\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-test/src/lib.rs"},"region":{"startLine":1935}}}],"partialFingerprints":{"codehealthFindingId/v1":"d56915ffab2519a3c66c9f2154c488b13c000e6f7b6978c9693bc10712075f53"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: PhabricatorForge.create: MethodTooLong \u2014 create 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":"git-branchless-submit/src/phabricator.rs"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5c13ed8f01dd9fe1a21e5cf1405233c5c3eb8ed1450c2cc2ee2de97659b43df"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Repo: ClassTooLong \u2014 800 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 56 methods, 3 blocks, lines 466-1693. The bar is 400 significant lines; this is 400 over it, 2.00\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/git/repo.rs"},"region":{"startLine":466}}}],"partialFingerprints":{"codehealthFindingId/v1":"25b731adb3cfcfaac6a861a02f58d2de113accf13521c8cc5bad6ef5469f5543"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless_reword::reword: FunctionTooLong \u2014 git_branchless_reword::reword 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":"git-branchless-reword/src/lib.rs"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d958bb36c9f1aaa9b28f35b834eb249cd01caa5aab72d359f703b38772e9e56"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ResolvedTestOptions.resolve: MethodTooLong \u2014 resolve runs 194 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 94 over it, 1.94\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-test/src/lib.rs"},"region":{"startLine":221}}}],"partialFingerprints":{"codehealthFindingId/v1":"54db16ab35bea7cd8aa1fff5c13782c203027eed14a9f97fb93607610cb30601"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless::commands::command_main: FunctionTooLong \u2014 git_branchless::commands::command_main runs 194 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 94 over it, 1.94\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless/src/commands/mod.rs"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5672b70749ce58b4f9258fe1392f63377f67a0ac347b9be3b6bb7bdf188c4b4"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: rewrite/plan.rs: FileTooLong \u2014 937 significant 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 437 over it, 1.87\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":"git-branchless-lib/src/core/rewrite/plan.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"15d8f59426d82da99b422d731b9fecadb3e9809251ccbb38cb3d6fb85fb228d1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Repo: TooManyMethods \u2014 56 methods. The bar is 30 methods; this is 26 over it, 1.87\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/git/repo.rs"},"region":{"startLine":466}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f214d3553b6e863d1ad13e261091f87a126c55ecb7c7208675f32926cad6c64"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless_test::run_tests_inner: FunctionTooLong \u2014 git_branchless_test::run_tests_inner runs 186 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 86 over it, 1.86\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-test/src/lib.rs"},"region":{"startLine":1275}}}],"partialFingerprints":{"codehealthFindingId/v1":"338fdd97d2626bb04248e49f98fd4a2fc576e9d4532ff95f756ce1fe6ddb3dc1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/github.rs: FileTooLong \u2014 910 significant 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 410 over it, 1.82\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-submit/src/github.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e9a1487421f0dcbdbed87b01b785aa9814821e5327d8453cf979b6b667713df"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: rewrite/execute.rs: FileTooLong \u2014 907 significant 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 407 over it, 1.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":"git-branchless-lib/src/core/rewrite/execute.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bbc7f4cd3c948dfa885f14734d0ea055ef9cd483e43120d77449eb8109b2f5c"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: RebasePlanBuilder.make_rebase_plan_for_current_commit: MethodTooLong \u2014 make_rebase_plan_for_current_commit 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":"git-branchless-lib/src/core/rewrite/plan.rs"},"region":{"startLine":755}}}],"partialFingerprints":{"codehealthFindingId/v1":"48c0703a57777ade9016e7fb87de912e64991363fd64d6b1981804270ed8ee6f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: core/eventlog.rs: FileTooLong \u2014 869 significant 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 369 over it, 1.74\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/core/eventlog.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a392f5dfd98eeb58d7d8ac4fcdb077780fc9d6d60e722a50a0b90392060532f5"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless_test::print_summary: FunctionTooLong \u2014 git_branchless_test::print_summary 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":"git-branchless-test/src/lib.rs"},"region":{"startLine":1733}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5e8204083a02d8e1e5b27f742f6b18e3d1a0352608aee8e0be20fa9aea6f6f0"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: PhabricatorForge: ClassTooLong \u2014 676 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 7 methods, 3 blocks, lines 233-1081. The bar is 400 significant lines; this is 276 over it, 1.69\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-submit/src/phabricator.rs"},"region":{"startLine":233}}}],"partialFingerprints":{"codehealthFindingId/v1":"2737b1b1e305384fe42ed01b129c73814cb8f685c67ba5b1087df8fabd8cbe8d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/phabricator.rs: FileTooLong \u2014 831 significant 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 81% of them inside a single declaration: PhabricatorForge (3 blocks, 233-1081). The bar is 500 significant lines; this is 331 over it, 1.66\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":"git-branchless-submit/src/phabricator.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5d5d4dcb515497a710fe0dbdb17783c7e795fbf5c16380d786e9ef584b3c335"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 809 significant 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 309 over it, 1.62\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-undo/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"51d2e5d205cbf9274061c9f61bfc5af30e46df24e3ef55c998cd2de928283274"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless_record::create_commit_with_changes: FunctionTooLong \u2014 git_branchless_record::create_commit_with_changes runs 160 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 60 over it, 1.60\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-record/src/lib.rs"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"bcff14c1f5834a5e9ad99f7c5c3f725a645cee8bcd80963bd10d205c886a56b1"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless_lib::core::untracked_file_cache::process_untracked_files: FunctionTooLong \u2014 git_branchless_lib::core::untracked_file_cache::process_untracked_files 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":"git-branchless-lib/src/core/untracked_file_cache.rs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"43e8a236983a7c273165b6b205a7aa6b16220c5e6c258da71b791af1eda5860c"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless_test::test_commit: FunctionTooLong \u2014 git_branchless_test::test_commit 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":"git-branchless-test/src/lib.rs"},"region":{"startLine":2644}}}],"partialFingerprints":{"codehealthFindingId/v1":"902aad174ebb41c4d01c55b2e9ae62bf05a6b9dc44a9f8030ce4092c481ffd42"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless_undo::select_past_event: FunctionTooLong \u2014 git_branchless_undo::select_past_event 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":"git-branchless-undo/src/lib.rs"},"region":{"startLine":431}}}],"partialFingerprints":{"codehealthFindingId/v1":"95aa6305b2f49c6ab106155990a4f7ff7305bd9b3132ca9edae530121d11fba2"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless_navigation::advance: FunctionTooLong \u2014 git_branchless_navigation::advance runs 153 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 53 over it, 1.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":"git-branchless-navigation/src/lib.rs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"af8184d32f6c287a24bc40c970fa7e92f29ad8799e559d05c6cddf98eae16087"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless_smartlog::render::get_child_output: FunctionTooLong \u2014 git_branchless_smartlog::render::get_child_output 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":"git-branchless-smartlog/src/lib.rs"},"region":{"startLine":452}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8d81123e8e94c18b3c823db3c80bfd0a46387db5ee37d5759276c87509f2832"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 730 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 230 over it, 1.46\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-record/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6f3c472c60e9a61c56d744f8644f21be8aa1e0fb64c6a82226392feb1d9b450"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless_smartlog::smartlog: FunctionTooLong \u2014 git_branchless_smartlog::smartlog 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":"git-branchless-smartlog/src/lib.rs"},"region":{"startLine":765}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8056088ead4d4288a439b2f7bf765ca8a783923440853de6d771f445a10eda5"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless_test::event_loop: FunctionTooLong \u2014 git_branchless_test::event_loop 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":"git-branchless-test/src/lib.rs"},"region":{"startLine":1529}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6303dd8aaf7cd1b2264dc7079da20c741b8cc823d74a74d697f0b38d1e95379"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Dag: TooManyMethods \u2014 42 methods. The bar is 30 methods; this is 12 over it, 1.40\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/core/dag.rs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"a040b2c625c3fbe08f68ce728578ba7763d12324a019e041d22d9a1d5ef05b6a"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: RebasePlanBuilder: ClassTooLong \u2014 543 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 15 methods, 2 blocks, lines 562-1505. The bar is 400 significant lines; this is 143 over it, 1.36\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":"git-branchless-lib/src/core/rewrite/plan.rs"},"region":{"startLine":562}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8a376f43e12873a0456c541f198ac5e6096b65d23b3c0e6006acf1f4ef18b4f"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless::commands::sync::execute_main_branch_sync_plan: FunctionTooLong \u2014 git_branchless::commands::sync::execute_main_branch_sync_plan runs 132 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 32 over it, 1.32\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless/src/commands/sync.rs"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c2ad12aeea3c2f56f4471daf3334db6b71f54d90271f7074cdf18396458ad16"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 658 significant 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 158 over it, 1.32\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":"git-branchless-smartlog/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"143984853d6b289b0ae73e802ca35ba52f0598f0daa860e327c158a826ab8a52"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless_reword::prepare_messages: FunctionTooLong \u2014 git_branchless_reword::prepare_messages runs 131 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 31 over it, 1.31\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-reword/src/lib.rs"},"region":{"startLine":431}}}],"partialFingerprints":{"codehealthFindingId/v1":"2de57f20cb6005ee4d41091cbe62eb9c7565e9493071b39c8a5f8d71e6708849"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless_record::record_interactive: FunctionTooLong \u2014 git_branchless_record::record_interactive 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":"git-branchless-record/src/lib.rs"},"region":{"startLine":563}}}],"partialFingerprints":{"codehealthFindingId/v1":"75506c450e5ae7e3463e99be05578837fd3f685ef9a20b81cfcf9e3460f5f1e9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/testing.rs: FileTooLong \u2014 647 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 147 over it, 1.29\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/testing.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"57069109f0831d42f549014112c3b7b9b37ca3d9f20ba0d5e9c1fd8f33ebb201"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless_lib::git::tree::get_changed_paths_between_trees_internal: FunctionTooLong \u2014 git_branchless_lib::git::tree::get_changed_paths_between_trees_internal 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":"git-branchless-lib/src/git/tree.rs"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"d64b4498b2907edb2fd583c3e83d4b27532c9de55c1ebaf982c183f5779e548e"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: GithubForge.create: MethodTooLong \u2014 create 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":"git-branchless-submit/src/github.rs"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5ab07429ac0080fb7e6d1ae08ba3a44c818bd99f4918d1beba9b9b64dea0856"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: PhabricatorForge.update: MethodTooLong \u2014 update 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":"git-branchless-submit/src/phabricator.rs"},"region":{"startLine":571}}}],"partialFingerprints":{"codehealthFindingId/v1":"64c7f65f8b6968f974c5f908a6df993114aa689a34d97d06a1eabb2652bc97ee"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless_undo::undo_events: FunctionTooLong \u2014 git_branchless_undo::undo_events 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":"git-branchless-undo/src/lib.rs"},"region":{"startLine":788}}}],"partialFingerprints":{"codehealthFindingId/v1":"82cdd6c4c874664ffd4791c4762ea4ccf2c470d8cf10a4400c22fd755eca9f30"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: core/effects.rs: FileTooLong \u2014 628 significant 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 128 over it, 1.26\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":"git-branchless-lib/src/core/effects.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f54edbd20311610c520c09dc3fdef1701ab471e0c041f07bfbc598f7763db073"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless_navigation::traverse_commits: FunctionTooLong \u2014 git_branchless_navigation::traverse_commits 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":"git-branchless-navigation/src/lib.rs"},"region":{"startLine":313}}}],"partialFingerprints":{"codehealthFindingId/v1":"5975a3b7b4332fb5c93ecbcaf6c63beb2ca68929ce87662fb74c833ca8683cff"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless_record::insert_before_siblings: FunctionTooLong \u2014 git_branchless_record::insert_before_siblings 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":"git-branchless-record/src/lib.rs"},"region":{"startLine":735}}}],"partialFingerprints":{"codehealthFindingId/v1":"40febf03304314a772b79d40c81e232aac81165418c5ed24eddc8a0edd1aa071"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless_navigation::switch: FunctionTooLong \u2014 git_branchless_navigation::switch 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":"git-branchless-navigation/src/lib.rs"},"region":{"startLine":474}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f67ff592208a9cec6e223b70ec54cd809cc076c660452edac0c580b0174eef0"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: GithubForge.make_updated_pull_request_info: MethodTooLong \u2014 make_updated_pull_request_info 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":"git-branchless-submit/src/github.rs"},"region":{"startLine":519}}}],"partialFingerprints":{"codehealthFindingId/v1":"de7ab9726209c4ade770e52c449d78f710ecdff1bfb9b784b23ee12e33bcf526"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless::commands::hide::hide: FunctionTooLong \u2014 git_branchless::commands::hide::hide 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":"git-branchless/src/commands/hide.rs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"e36100bc91e713457e44e7a138bc5aefeb504eda6ef107756cf82aefee490c8b"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless_record::record: FunctionTooLong \u2014 git_branchless_record::record 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":"git-branchless-record/src/lib.rs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd46b625233d4053e255b260233a3f5a03a053a6b666b33c304e16f7d7bfbc75"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/builtins.rs: FileTooLong \u2014 600 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 40 free functions. The bar is 500 significant lines; this is 100 over it, 1.20\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-revset/src/builtins.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c9f2b48e789911c07332fdae06b141766a0781ddae5c66a5df76eab96e45f73"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless_test::make_test_files: FunctionTooLong \u2014 git_branchless_test::make_test_files runs 118 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 18 over it, 1.18\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-test/src/lib.rs"},"region":{"startLine":2356}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ce781b61a03a993a718e1da2ae1866dda91c5f448f5d41c7c2eadc49b4b66fa"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: BranchForge.query_status: MethodTooLong \u2014 query_status 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":"git-branchless-submit/src/branch_forge.rs"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"448a13f3966e810bd6aa021717f65fa286d50cbf4df418b2cdb1640030d157eb"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless_lib::core::rewrite::execute::on_disk::write_rebase_state_to_disk: FunctionTooLong \u2014 git_branchless_lib::core::rewrite::execute::on_disk::write_rebase_state_to_disk 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":"git-branchless-lib/src/core/rewrite/execute.rs"},"region":{"startLine":986}}}],"partialFingerprints":{"codehealthFindingId/v1":"20477644aa66de27cf829136be9bacb829b3982fb8d72c19782f85bea62bae37"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: GithubForge: ClassTooLong \u2014 428 significant 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, 3 blocks, lines 110-698. The bar is 400 significant lines; this is 28 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":"git-branchless-submit/src/github.rs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"81a1bf82c1ab7d092f7eec70e233efbfa94593e3b79cb344cd2b8b8a3a697681"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 531 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 31 over it, 1.06\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-reword/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"11538e6f45f52abd647d51e325a42ad7925d179e684f8e8a027d01c278e0eb72"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless_test::run_test: FunctionTooLong \u2014 git_branchless_test::run_test runs 106 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 6 over it, 1.06\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-test/src/lib.rs"},"region":{"startLine":2212}}}],"partialFingerprints":{"codehealthFindingId/v1":"786c080d62e4a1c321995ff2b73ffe35a4893111280db4a3383d91ad4bae3f54"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Git: 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":"git-branchless-lib/src/testing.rs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8e8c13d4e39f51ae297dedcf588ddd03c29ce11b7a03ecdbc887dbf76ac4713"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: git_branchless_smartlog::graph::build_graph: FunctionTooLong \u2014 git_branchless_smartlog::graph::build_graph 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":"git-branchless-smartlog/src/lib.rs"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdf8c391b340dfb1d019e33d0d852f4f079c265104608fca31cfb8153f11cc7f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.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":"git-branchless-init/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ca7e7144d269ef3fb19d8a9c177fcff40d6d89b555b49d3d64e6310a0a33575"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (7 members, 50\u002B identical tokens): git-branchless-move/src/lib.rs:79-548 | git-branchless-reword/src/lib.rs:93-326 | git-branchless/src/commands/bug_report.rs:174-226 | git-branchless/src/commands/hide.rs:31-183 | git-branchless/src/commands/hide.rs:192-272 | git-branchless/src/commands/restack.rs:277-373 | git-branchless/src/commands/split.rs:56-612 \u2014 These 7 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 7 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 7 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-move/src/lib.rs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"ddc9659ad006e53c8142bffc1c3bccd2fa25915ede8cb437af569961b73e3cd7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (35 lines \u00D7 2): git-branchless-lib/src/core/worktree.rs:195-229 | git-branchless-lib/src/core/worktree.rs:255-289 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/core/worktree.rs"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"d818193580bfc022035a5614eb2b04289907dd44d55dd94925dd844b06099813"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (28 lines \u00D7 2): git-branchless-lib/src/core/effects.rs:147-174 | git-branchless-lib/src/core/effects.rs:317-344 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/core/effects.rs"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"478f16f5dd88685c40e24d2d3ab4c34c34ad90759396b9afb07eb0564bd263ba"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): git-branchless-submit/src/phabricator.rs:346-368 | git-branchless-submit/src/phabricator.rs:596-618 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-submit/src/phabricator.rs"},"region":{"startLine":346}}}],"partialFingerprints":{"codehealthFindingId/v1":"32e1bd2cfe888ba427d72b2916d67b17553df6b1d4b7c67e79999bf5ead5a576"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): git-branchless/src/commands/hide.rs:199-216 | git-branchless/src/commands/restack.rs:285-302 \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":"git-branchless/src/commands/hide.rs"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"2df898ccab2cadd653d2c99d671cd2f4fec67931d680437982c7a2ace72ca54a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): scm-bisect/src/basic.rs:52-69 | scm-bisect/src/basic.rs:84-101 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scm-bisect/src/basic.rs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"8daadc3db7d9f993be41777e6a94e5bd8c5851672971ff71d34a867a7a8da43d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): git-branchless/src/commands/restack.rs:329-345 | git-branchless/src/commands/sync.rs:89-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":"git-branchless/src/commands/restack.rs"},"region":{"startLine":329}}}],"partialFingerprints":{"codehealthFindingId/v1":"29a01a6ce1f21703f5b5195973bb0b504eeec5b2554886b96e67fa1f8947f312"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): git-branchless-lib/src/core/worktree.rs:232-248 | git-branchless-lib/src/core/worktree.rs:295-311 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/core/worktree.rs"},"region":{"startLine":232}}}],"partialFingerprints":{"codehealthFindingId/v1":"315106c7f5416ec75995333e972d36fb577d962387859539fd5de929e211042a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): git-branchless-test/src/lib.rs:1839-1855 | git-branchless-test/src/lib.rs:1869-1885 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-test/src/lib.rs"},"region":{"startLine":1839}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2e0f2ddeeeb0b924734ebf2ef808f6efd3972cf4dbb661cb43a60e6e7e43a7c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): git-branchless-test/src/lib.rs:2858-2874 | git-branchless-test/src/lib.rs:2952-2968 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-test/src/lib.rs"},"region":{"startLine":2858}}}],"partialFingerprints":{"codehealthFindingId/v1":"4939f98e5cce78b591c0b095f0958eec80fd9b43a7ec1720eb668cf6fb08d024"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201315 lines \u00D7 2): git-branchless-test/src/lib.rs:611-625 | git-branchless-test/src/lib.rs:2869-2882 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-test/src/lib.rs"},"region":{"startLine":611}}}],"partialFingerprints":{"codehealthFindingId/v1":"a379db13d6277586e628151385bb1a7465f624a813c9abce03fc973b5736c83c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201314 lines \u00D7 5): git-branchless-reword/src/lib.rs:95-106 | git-branchless/src/commands/bug_report.rs:178-189 | git-branchless/src/commands/hide.rs:35-46 | git-branchless/src/commands/hide.rs:196-209 | git-branchless/src/commands/split.rs:58-69 \u2014 there are 5 copies across 4 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 5 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-reword/src/lib.rs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd7693c5bcdf53f4655dc082167231932537d260fe6c7df98815469ea6452216"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201314 lines \u00D7 5): git-branchless-query/src/lib.rs:52-62 | git-branchless-submit/src/lib.rs:231-241 | git-branchless-test/src/lib.rs:595-608 | git-branchless-test/src/lib.rs:2857-2867 | git-branchless-test/src/lib.rs:2951-2961 \u2014 before extracting anything, compare \u0060git-branchless-query/src/lib.rs\u0060 and \u0060git-branchless-submit/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 31 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-query/src/lib.rs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"84678c9ec3833999695c28ca31d028e0843bdb4f6f06a8d10be4567303195132"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): git-branchless-record/src/lib.rs:427-440 | git-branchless-reword/src/lib.rs:152-165 \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":"git-branchless-record/src/lib.rs"},"region":{"startLine":427}}}],"partialFingerprints":{"codehealthFindingId/v1":"57275610341c6b913075e59c482b4f31910b2398fb69f9f27cc14077c6b1a11c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): scm-bisect/src/search.rs:427-440 | scm-bisect/src/search.rs:444-457 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scm-bisect/src/search.rs"},"region":{"startLine":427}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4544314d53101bea863c5a4481cca752f59f1c5eb716bc59bed57bac3e9415d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): git-branchless-revset/src/builtins.rs:677-689 | git-branchless-revset/src/builtins.rs:710-722 | git-branchless-revset/src/builtins.rs:745-757 \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":"git-branchless-revset/src/builtins.rs"},"region":{"startLine":677}}}],"partialFingerprints":{"codehealthFindingId/v1":"645b6f57d80768d9819850da77efe0a1420c4b0eb16c8f943997a077e508b0a2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): git-branchless-undo/src/lib.rs:182-194 | git-branchless-undo/src/lib.rs:259-271 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-undo/src/lib.rs"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"9854f5e58ddf095c43a438834e66efbf5aac304682bddc3f6ce222c07c8b2624"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): git-branchless-undo/src/lib.rs:238-250 | git-branchless-undo/src/lib.rs:257-269 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-undo/src/lib.rs"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"89535fb3f80f81f81d5872ef0c93990b6f78c8e68da9ad5383566d576fee0a93"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 6): git-branchless-move/src/lib.rs:103-114 | git-branchless-reword/src/lib.rs:95-106 | git-branchless/src/commands/bug_report.rs:178-189 | git-branchless/src/commands/hide.rs:35-46 | git-branchless/src/commands/hide.rs:196-207 | git-branchless/src/commands/split.rs:58-69 \u2014 there are 6 copies across 5 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 6 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-move/src/lib.rs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e1b893d2dd9349963427a73bba5063e4a7e8a43a1ea157e11c66cab509d111a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201312 lines \u00D7 6): git-branchless-query/src/lib.rs:51-62 | git-branchless-submit/src/lib.rs:230-241 | git-branchless-test/src/lib.rs:594-603 | git-branchless-test/src/lib.rs:2856-2867 | git-branchless-test/src/lib.rs:2950-2961 | git-branchless/src/commands/amend.rs:50-59 \u2014 before extracting anything, compare \u0060git-branchless-query/src/lib.rs\u0060 and \u0060git-branchless-submit/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 31 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-query/src/lib.rs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"7050c85f54cf58e54095af6f56ab214a37668ff117a4ff599be27a45dacb3586"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): git-branchless-lib/src/core/effects.rs:179-190 | git-branchless-lib/src/core/effects.rs:349-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":"git-branchless-lib/src/core/effects.rs"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"f35ec84f326a1d95c5dfaa86400c7ae7cc3aa7bda1aee9cc512fd5deade8ede0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): git-branchless-lib/src/git/diff.rs:357-368 | git-branchless-lib/src/git/diff.rs:379-390 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/git/diff.rs"},"region":{"startLine":357}}}],"partialFingerprints":{"codehealthFindingId/v1":"25a9b6ca8b693ca74e660b4342b6db401fd5ae4aa3434926a2074f5719379e34"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): git-branchless-undo/src/lib.rs:339-350 | git-branchless-undo/src/lib.rs:358-369 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-undo/src/lib.rs"},"region":{"startLine":339}}}],"partialFingerprints":{"codehealthFindingId/v1":"778e5966a55cc3599c7afb36f781901730461adb3cd40789452d5acc144c0bb3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): git-branchless/src/commands/hide.rs:49-59 | git-branchless/src/commands/hide.rs:209-219 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless/src/commands/hide.rs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"37e078238f9b81a2931496a7a757c5d8f8e72b212d436fa70964989d6a9854a4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): git-branchless-lib/src/core/effects.rs:642-652 | git-branchless-lib/src/core/effects.rs:657-667 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/core/effects.rs"},"region":{"startLine":642}}}],"partialFingerprints":{"codehealthFindingId/v1":"f481b62b0e339417f0f9bbd662d4a0f6604f52179551de9953e1889fc82c0cae"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): git-branchless-lib/src/core/untracked_file_cache.rs:68-78 | git-branchless-test/src/lib.rs:287-297 \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":"git-branchless-lib/src/core/untracked_file_cache.rs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec44778368b35a6a8f85e55bf1baa65204c29ef587adcdaf0c144cb71329f0e0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): git-branchless-lib/src/git/run.rs:164-174 | git-branchless-lib/src/git/run.rs:233-243 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/git/run.rs"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"c86df1a90fa857a09263072d92b7650d0d2a497dccffd036df81adbaecd21003"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): git-branchless-submit/src/phabricator.rs:735-745 | git-branchless-submit/src/phabricator.rs:985-995 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-submit/src/phabricator.rs"},"region":{"startLine":735}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e4954cc22f0faae8ed83315368bb67d1023307b96f6b2f59dc80219f3eb0655"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): git-branchless-move/src/lib.rs:312-322 | git-branchless-move/src/lib.rs:420-430 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-move/src/lib.rs"},"region":{"startLine":312}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c89bc24a7dfb66dce666a274b119e5b7e99127a49c371fc87e231ce983694ae"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): git-branchless-record/src/lib.rs:402-411 | git-branchless/src/commands/sync.rs:152-161 | git-branchless/src/commands/sync.rs:319-328 \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":"git-branchless-record/src/lib.rs"},"region":{"startLine":402}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6d0530b80a134515fb8c4bb03cacd6c476c0298b8895f9ea6f993d56a0c25a5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): git-branchless/src/commands/hide.rs:61-70 | git-branchless/src/commands/hide.rs:222-231 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless/src/commands/hide.rs"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"dce2c011d6607dcfae1adcab4e22408e9c13153794f7de35c223d9b2307e6dbb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): git-branchless-lib/src/git/object.rs:174-183 | git-branchless-lib/src/git/object.rs:202-211 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/git/object.rs"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"b939e2c6b94e535e8eb73ff245aa3f976fb403a076e9e5b673439fd5f0e06cfc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): git-branchless-submit/src/phabricator.rs:747-756 | git-branchless-submit/src/phabricator.rs:997-1006 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-submit/src/phabricator.rs"},"region":{"startLine":747}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e7d3eb5b9e496d178f481edb0c985797798e0ef484100153cc9bab2ce90700e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): git-branchless-lib/src/git/repo.rs:1234-1242 | git-branchless-lib/src/git/repo.rs:1262-1270 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/git/repo.rs"},"region":{"startLine":1234}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b4f173e014e392daabdf7cec58bd38e5380a4962e24c6c0f9946031ecb6f111"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): git-branchless-lib/src/git/run.rs:137-144 | git-branchless-lib/src/git/run.rs:216-223 | git-branchless/src/commands/wrap.rs:24-31 \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":"git-branchless-lib/src/git/run.rs"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"421bf4a6ec926330b06bdb03f65c41c287d51af3b967b4e5e31bafc95fed444e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): git-branchless/src/commands/hide.rs:49-56 | git-branchless/src/commands/hide.rs:209-216 | git-branchless/src/commands/restack.rs:295-302 \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":"git-branchless/src/commands/hide.rs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff7b65f22e4e0c8fbff565a6a0a7ec9bf765506df9f3e6f2d0983a3f959c99be"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): git-branchless-move/src/lib.rs:116-123 | git-branchless-move/src/lib.rs:124-131 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-move/src/lib.rs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"801c78f8b1e4216e7afbeea2dca8fd27e91ad338624960f381697092b888f226"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): git-branchless-move/src/lib.rs:117-123 | git-branchless-move/src/lib.rs:125-131 | git-branchless-submit/src/lib.rs:242-248 \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":"git-branchless-move/src/lib.rs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbbad58466d25776f1d38c98454f0d0e1a0a10a57ee7be69143b5c9db8cc5846"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): git-branchless-lib/src/git/tree.rs:171-177 | git-branchless-lib/src/git/tree.rs:179-185 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/git/tree.rs"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"2cb2a142ed7a5dc9d254bc08c9d5494286a7f871fb6dc20ebacfb6bee1d74858"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6\u20137 lines \u00D7 2): git-branchless-navigation/src/lib.rs:358-364 | git-branchless-navigation/src/lib.rs:488-493 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-navigation/src/lib.rs"},"region":{"startLine":358}}}],"partialFingerprints":{"codehealthFindingId/v1":"971f490c2d53502074e9326755c82dac6c4af5315f7c7846221dddec5098f8f5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): git-branchless-test/src/lib.rs:2377-2382 | git-branchless-test/src/lib.rs:2490-2495 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-test/src/lib.rs"},"region":{"startLine":2377}}}],"partialFingerprints":{"codehealthFindingId/v1":"7732409609ddfcc9d485e8df761bd2c95845d2a67b23db1e3b44b8ab47c98995"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 5): git-branchless-query/src/lib.rs:48-52 | git-branchless-submit/src/lib.rs:227-231 | git-branchless-test/src/lib.rs:2947-2951 | git-branchless/src/commands/amend.rs:47-51 | git-branchless/src/commands/repair.rs:18-22 \u2014 before extracting anything, compare \u0060git-branchless-query/src/lib.rs\u0060 and \u0060git-branchless-submit/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 31 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-query/src/lib.rs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"725a55371a21ef068b72fee267a046c34024342415a0a0a74aea8a177fc716e7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): git-branchless-undo/src/lib.rs:161-173 | git-branchless-undo/src/lib.rs:179-191 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-undo/src/lib.rs"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"343102c545282e790fa0d4e8cb919fa229591fb24e6d565bfad26deaf72b7a68"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): git-branchless-reword/src/lib.rs:208-219 | git-branchless-reword/src/lib.rs:225-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":"git-branchless-reword/src/lib.rs"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"614a72011adc6753b3a2c645f31811b442ee1febfca1fd95970c7fb6ff9e9226"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): git-branchless-undo/src/lib.rs:328-338 | git-branchless-undo/src/lib.rs:371-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":"git-branchless-undo/src/lib.rs"},"region":{"startLine":328}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d2d7b453062899b2c0b1ba1fc122d8dcbdd06c892f438bbc3535840cd5fd69e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): git-branchless-submit/src/lib.rs:421-431 | git-branchless-submit/src/lib.rs:467-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":"git-branchless-submit/src/lib.rs"},"region":{"startLine":421}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbe2f4285e5b789b3c0fc1c905de21d105593ac4304a0e3fb6ef5706c84020a6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): git-branchless-lib/src/git/repo.rs:1428-1435 | git-branchless-lib/src/git/repo.rs:1436-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":"git-branchless-lib/src/git/repo.rs"},"region":{"startLine":1428}}}],"partialFingerprints":{"codehealthFindingId/v1":"70a94629cb6dcd19aa46d073d9ccea9dbe3d38f899475075f7b74c574001cd52"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): git-branchless-test/src/lib.rs:589-593 | git-branchless-test/src/lib.rs:2851-2855 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-test/src/lib.rs"},"region":{"startLine":589}}}],"partialFingerprints":{"codehealthFindingId/v1":"df64f87d8456c273c783effb087144ad1a4f5daf88f916bdc1e142b2a922aaea"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project git-branchless-submit: git-branchless-submit has instability 0.83 with 1 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"371bd02dd347ac6e16c722cde9b05ce0d943a0a830dd8d925b943610fa65cac8"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: git-branchless-opts: git-branchless-opts: abstractness 0.00, instability 0.07, distance 0.93 \u2014 zone of pain \u2014 concrete and depended on by 13 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"29810eae59ef1e9004d14e0a4bbd135f67ae81a136942ae92f7fbfa7b0f5eee0"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: git-branchless-lib: git-branchless-lib: abstractness 0.10, instability 0.00, distance 0.90 \u2014 zone of pain \u2014 concrete and depended on by 15 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"c76135a441b977e86be28e26b4f4e6e77c0dd96226072af92deb2d8aa7d5f17a"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: git-branchless-invoke: git-branchless-invoke: abstractness 0.00, instability 0.20, distance 0.80 \u2014 zone of pain \u2014 concrete and depended on by 8 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"f714f80f69a306e0e30c25ec31b7e22e1c9b7a4d6f52781646a8e3015f77fd90"}},{"ruleId":"D9","level":"note","message":{"text":"Inverted test pyramid: Only 9 % of tests are unit tests (39 unit vs 394 integration, 0 BDD); a broader unit base gives faster, more localised feedback."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"3fc0c6fc621cd18b83a2d2c03ea6976b61fb4769f62dc21043f0af4cad912d10"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: git-branchless-move/src/lib.rs: git-branchless-move/src/lib.rs changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 57 in git_branchless_move::r#move at line 67. 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-04-16..2026-07-15, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-04-16 06:29:12 -04:00\u0027 --until=\u00272026-07-15 06:29:12 -04:00\u0027 --full-history --no-merges -- git-branchless-move/src/lib.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-move/src/lib.rs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"90429e33491fbda2937abb2f92ada70117be551f2bff79f09f0c1a8469c33afb"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: git-branchless-test/src/lib.rs: git-branchless-test/src/lib.rs changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 28 in ResolvedTestOptions::resolve at line 221. 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-04-16..2026-07-15, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-04-16 06:29:12 -04:00\u0027 --until=\u00272026-07-15 06:29:12 -04:00\u0027 --full-history --no-merges -- git-branchless-test/src/lib.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-test/src/lib.rs"},"region":{"startLine":221}}}],"partialFingerprints":{"codehealthFindingId/v1":"de9a48d7bfa72a759d3cec265f120cd3df16f04921ff0803ca5592f74831b700"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: git-branchless-lib/src/testing.rs: git-branchless-lib/src/testing.rs changed 6 times in last 90 days and 4 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 8 (its worst body is git_branchless_lib::testing::pty::run_in_pty at line 983), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix(tests): set TZ env var for test git\u201D; \u201Cfix(tests): use correct RFC2822 time format\u201D; \u201Cfix(docs): fix warnings for private items\u201D; \u201Cfix(tests): fix tests on macOS with Git v2.37\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-04-16..2026-07-15, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-04-16 06:29:12 -04:00\u0027 --until=\u00272026-07-15 06:29:12 -04:00\u0027 --full-history --no-merges -- git-branchless-lib/src/testing.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":"git-branchless-lib/src/testing.rs"},"region":{"startLine":983}}}],"partialFingerprints":{"codehealthFindingId/v1":"b023838e31683df0d19fb3ca3229425acee22b93018be20f3ea640908d9b7b21"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME actually support peeled refs in packed-refs \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-hook/src/lib.rs"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"673f87a16ea500a9812e757fde9f15c8e63422ba05530f13c245515787454d98"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: the path to the man directory is not shell-escaped. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-init/src/lib.rs"},"region":{"startLine":451}}}],"partialFingerprints":{"codehealthFindingId/v1":"50f397a531a90a3ba16e250f48831f30f8bb4c2879463034a1618c67a92aa2c5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO: return something that implements \u0060Display\u0060 instead of a \u0060String\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":"git-branchless-lib/src/core/formatting.rs"},"region":{"startLine":250}}}],"partialFingerprints":{"codehealthFindingId/v1":"98b0345694c8544f6dff4d0608b1d950993527bb6e6813d8642a7fd1eac9ccac"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: O(n^2) algorithm ( \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/core/dag.rs"},"region":{"startLine":684}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2330da42855c76f3a0440ade96aca32a13eb4daa615132ffe149675b9cdcb5c"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: /// FIXME: this function does not use a total ordering for the sort, which could \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/core/dag.rs"},"region":{"startLine":736}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c24baa102a92417c3a1e324fddd82be9fff6e7227e81d8403279c24426ecfba"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: it might be worth attempting to un-check-out this commit? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/core/check_out.rs"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"a73733dcfb79cbcd12b2493b7c04cbfe17b1c87ff2e3049f1c0c3e70857e131a"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: Untested, this probably doesn\u0027t work. Currently, \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/core/rewrite/plan.rs"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffa575e4c6687bbc8ac4e1146b783edee3582e070b5c04d92cd9385d3b866f08"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: O(n^2) algorithm. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/core/rewrite/plan.rs"},"region":{"startLine":427}}}],"partialFingerprints":{"codehealthFindingId/v1":"643e0f4adbf6f39eb58019f50a9b0f7473bb1ead37b3d600836bd5cdfb8b06e2"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: O(n^2) algorithm. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/core/rewrite/plan.rs"},"region":{"startLine":827}}}],"partialFingerprints":{"codehealthFindingId/v1":"78193a9bd9302c0657f20b6f1d212030aa74a33cfd8377caa3932c4421eccf33"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // HACK but this is unused \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":"git-branchless-lib/src/core/rewrite/plan.rs"},"region":{"startLine":476}}}],"partialFingerprints":{"codehealthFindingId/v1":"32a6924c507bc827cec09600f69d2e3e1db5dbea340e384004dd7f295222e0d7"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: we may recalculate common patch IDs many times, should be \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/core/rewrite/plan.rs"},"region":{"startLine":1365}}}],"partialFingerprints":{"codehealthFindingId/v1":"b92455312a150975cc060f73d2d6dec7185cc3968c5342761519fb4ef869b71b"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: this code path could be optimized further. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/core/rewrite/plan.rs"},"region":{"startLine":1502}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f549d6f65bab7c629f423e17501d9d73762cd2a629e8aa0e123bd5dbcda33e5"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // Hack? Never delete the main branch. We probably got here by syncing the \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":"git-branchless-lib/src/core/rewrite/execute.rs"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"d08659ea5530c16ba44165223d95ebcb6b599d9d11a5390371bb311158ae32e3"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: we could check to see if the OIDs are the same and, if so, \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/core/rewrite/execute.rs"},"region":{"startLine":296}}}],"partialFingerprints":{"codehealthFindingId/v1":"318d6f235e23da8ed799dc512cfc6fa3a785de3137030859418073543e882c1c"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME what #perf gains can be had by working directly on a tree? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/core/rewrite/execute.rs"},"region":{"startLine":632}}}],"partialFingerprints":{"codehealthFindingId/v1":"7dcedd07ab8eb37c0c427f3aca7e3e4318250d30b9cf5a45d025b57f3b3cac7a"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME should we instead be using the description of the base commit? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/core/rewrite/execute.rs"},"region":{"startLine":666}}}],"partialFingerprints":{"codehealthFindingId/v1":"369f4291b57b5d269e2e7a26c050e844cbef6fcd376672f4efc217b656349b0d"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: we may still want to propagate the exit code to the \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/core/rewrite/execute.rs"},"region":{"startLine":1315}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c890bd318c3e2a390390ba07e2e9b2c8801ee566544b388ce2133baeec886a4"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: /// FIXME: This abstraction seems uncomfortable and clunky to use; consider \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/git/reference.rs"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8053dfae76b1dca7583c14871f98766aa14b1311a84e32e7d18b7a78bc36cdf"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: should we rely on the caller to add the file contents to \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/src/git/diff.rs"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"22459e42e47bda7fd8ac7cfc6f98056f2e28ebbc6fd5182652ba2f1b6df8e6e8"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME This output is correct mathematically, but feels like it should \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-lib/tests/test_rewrite_plan.rs"},"region":{"startLine":448}}}],"partialFingerprints":{"codehealthFindingId/v1":"7388aa8e830aa930245c003c61e561f49b650e641efc1f4facce8da246de1760"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: /// FIXME: write man-page text \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-opts/src/lib.rs"},"region":{"startLine":470}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6a82af090ffe2195f9499794df1bb4cf428c8dec737d2f9899a0f592e02c5b1"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: unborn HEAD, what to do? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-record/src/lib.rs"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"411a449e7d58372040f6844124bb4941a4d6a0dd8e6367de7d46f50e1349bffc"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // HACK: \u0060lalrpop\u0060 doesn\u0027t let us customize the text of the string \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":"git-branchless-revset/src/parser.rs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"462f3de4b71a99ec3c24dde17097ed8e259fca4f50eae1588cf7d0ac5bd3bd2d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add \u0060default\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":"git-branchless-submit/src/phabricator.rs"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"387692e9f7249bfc9b6a146e0599d85bbc13d2b466cb780ae910da6f64be07e7"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // which case... FIXME. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-submit/src/phabricator.rs"},"region":{"startLine":863}}}],"partialFingerprints":{"codehealthFindingId/v1":"167f849e5fb867f59753ef7f306281bac209b98fce057a7ee2967bf7f6b0088b"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: this will exclude commits that used to be part of \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-submit/src/phabricator.rs"},"region":{"startLine":912}}}],"partialFingerprints":{"codehealthFindingId/v1":"80b06ec2dd6c43d510fb4d391a1dc03c7f422d8461b82f5c0d162210315e0aa2"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: is this actually necessary? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-submit/src/github.rs"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"be024a7a428eff4e48342f40fad8ed7b287759234775321790c53b82892cb9c3"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: destructure and use in \u0060run_gh\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":"git-branchless-submit/src/github.rs"},"region":{"startLine":829}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1aac0d7f66783dff14c456d47e7bddb77572e30c057518800d3fdb9d622aa48"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: in principle, it\u0027s possible for a branch to have been assigned \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-submit/src/branch_forge.rs"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"9bc7ced41f589bfbec0750a799028bab5297051bb6d1e0024ecb4cc8a22eb952"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: don\u0027t read entire file into memory \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-test/src/lib.rs"},"region":{"startLine":1064}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a250ae699ab959d7e3db7dc8cad161c1b63fccde17e2e562c5ffc97d2558f9c"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: it should be possible to execute the rebase plan but not \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-test/src/lib.rs"},"region":{"startLine":2130}}}],"partialFingerprints":{"codehealthFindingId/v1":"d76e3c1d14946a94d0b31aa0125cc42176abc55e1bb87ac727ef92d071be641b"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: surface information about the fix that failed to be applied. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-test/src/lib.rs"},"region":{"startLine":2776}}}],"partialFingerprints":{"codehealthFindingId/v1":"b98e1cc9a530de01ce1df1fe24b196d91b97b97da42b577082ca7bca343fb746"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: the information of which branch is checked out is not stored in \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless-undo/src/lib.rs"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"54ca2ecfa1d258b4438e9fa4177ca607f4f830ceae2360d9641d8bc603f19706"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: if two draft roots are ancestors of a single commit (due to a \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless/src/commands/sync.rs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"2672392b38db87ef6ae85943e9331ed13dda6eb87eaaa46564164c2d3e383f13"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: this is suboptimal since it relies on the working 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":"git-branchless/src/commands/sync.rs"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c29f684dbd0b24485356be9811ed7deabbb6a5b295882dc02c62c48efa6d1f7"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME terminology is wrong here: \u0022remainder\u0022 is correct for \u0060After\u0060 mode, \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless/src/commands/split.rs"},"region":{"startLine":318}}}],"partialFingerprints":{"codehealthFindingId/v1":"0cc2c2d927c8c3f2b55dea85c9ed9392954c5f0f75116486921d3daad818f513"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME terminology is also wrong here: \u0022extracted\u0022 is correct for \u0060After\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":"git-branchless/src/commands/split.rs"},"region":{"startLine":350}}}],"partialFingerprints":{"codehealthFindingId/v1":"22edcfda9fd3477345c26b9d90fafa7d50f3a166c5b8d2e6dd6811fab66864b3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO maybe this should happen after we\u0027ve confirmed the rebase has succeeded? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless/src/commands/split.rs"},"region":{"startLine":377}}}],"partialFingerprints":{"codehealthFindingId/v1":"35100d2a41d806c6e3aba3289eee637c3658d36673347321cf90af2b974d300f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Include the number of uncommitted changes. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless/src/commands/amend.rs"},"region":{"startLine":356}}}],"partialFingerprints":{"codehealthFindingId/v1":"534e638d5cb31d1d6eb77aa61fa83a9ce7597e53ff095bcf17aa2cf09651baa2"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: there is no topological relationship between the new initial commit and \u0060master\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":"git-branchless/tests/test_restack.rs"},"region":{"startLine":226}}}],"partialFingerprints":{"codehealthFindingId/v1":"830f4520f7e896293a89c2ebc2d35c53693051024d354a8f7a3fac07cff97876"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: This output is correct except for a known issue involving moving \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless/tests/test_move.rs"},"region":{"startLine":2044}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b513ea2106bbdf6f1fa2f832ee159bc6adb84b4fe7cd57a94f1fcaa0d18bd70"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: the smartlog handling for unrelated roots is wrong. There \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless/tests/test_move.rs"},"region":{"startLine":4322}}}],"partialFingerprints":{"codehealthFindingId/v1":"04b70f6362db90e3b3820f898ec5c83433bcb6f9cb787edf8d5a08597d3a1faa"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: /// FIXME: O(n) complexity. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scm-bisect/src/search.rs"},"region":{"startLine":232}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f520e5f97429fc48f3fdfd5fa23ea0b60fd80c44e5b8effab52ae1e7ce65050"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: /// FIXME: O(n) complexity. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scm-bisect/src/search.rs"},"region":{"startLine":249}}}],"partialFingerprints":{"codehealthFindingId/v1":"a88d4318b142cf4de39d05f081d9f27da7d875c1e6819440ea53b1b96c9ef6e5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO: Partitioning into groups of approximately equal size isn\u0027t \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scm-bisect/src/basic.rs"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"8720497c8c66ed66516d1d681e5bfb850becab13323baf05fa2e6ed215906477"}},{"ruleId":"D20","level":"note","message":{"text":"No ADRs found: No ADRs found. No recognised ADR directory (\u0060docs/adr/\u0060, \u0060docs/decisions/\u0060, \u0060adr/\u0060, \u0060docs/rfcs/\u0060, an \u0060ADR0001/\u0060 folder, or their siblings) exists anywhere in this tree. What was searched, so you can tell an empty log from a search that missed one: every directory under the tree (build output, dependencies and VCS metadata excepted), for a document that is either any non-index page inside a recognised ADR directory, whatever its name and however deeply nested (\u0060docs/adr/use-postgres.md\u0060, \u0060docs/adr/2024/0001-x.md\u0060); or a file anywhere whose name is ADR-shaped (\u00600001-use-postgres.md\u0060, \u0060adr-012-caching.md\u0060); or, when neither turned anything up, a document carrying the decision-record signature (an \u0022Architecture Decision Record\u0022 heading, or Status / Context / Decision / Consequences as section headings). A decision log that clears none of these \u2014 unnumbered files outside any recognised directory, without those headings \u2014 is not seen by this check and this row is then wrong. If that is your case, say so rather than renaming anything; otherwise, consider recording architectural decisions in \u0060docs/adr/\u0060."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d2bea044ff79d7d275f5a91a6e2f548586178eaf480274c33960ad020c854631"}},{"ruleId":"D22","level":"warning","message":{"text":"Inconsistent entry point naming and signature. The main entry point for the core library is named \u0060main\u0060, while hook and init modules use \u0060command_main\u0060. Furthermore, \u0060main\u0060 takes no arguments in the signature provided, whereas \u0060command_main\u0060 variants explicitly accept \u0060CommandContext\u0060 and specific \u0060Args\u0060 types, suggesting a lack of unified command dispatching interface.: Unify the entry point naming convention. If \u0060command_main\u0060 is the standard for subcommands/hooks, rename \u0060commands.main\u0060 to \u0060command_main\u0060 or create a unified \u0060run_command\u0060 interface that accepts a context and args, ensuring all entry points follow the same pattern. (signatures: git_branchless.commands.main() | git_branchless_hook.command_main(ctx: CommandContext, args: HookArgs): EyreExitOr | git_branchless_init.command_main(ctx: CommandContext, args: InitArgs): EyreExitOr)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"19dc60c164613e0997332482915b3d3b8c937474da393fab9b03a5894b860b76"}},{"ruleId":"D22","level":"warning","message":{"text":"Inconsistent cloning method naming. \u0060Repo\u0060 uses \u0060try_clone\u0060 while \u0060Dag\u0060 also uses \u0060try_clone\u0060. However, in Rust, \u0060try_clone\u0060 is often associated with file handles or streams, whereas \u0060clone\u0060 or \u0060duplicate\u0060 might be more semantically appropriate for graph structures. More importantly, if \u0060Repo\u0060 and \u0060Dag\u0060 are both core entities, they should ideally share a consistent trait or naming convention for duplication (e.g., both \u0060clone\u0060 or both \u0060duplicate\u0060).: Standardize on \u0060clone\u0060 or \u0060duplicate\u0060 for both \u0060Repo\u0060 and \u0060Dag\u0060 if they represent deep copies. If \u0060try_clone\u0060 implies a specific shallow copy or error-handling pattern distinct from standard \u0060Clone\u0060, ensure this is documented and consistent across all graph-like entities. (signatures: Dag.try_clone(repo: Repo): Result | Repo.try_clone(): Result)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"dd3a554684b965819e1ebeb9ff00d594b9e45e7ecce5a6d8dfa1b51e7d3d8a4f"}},{"ruleId":"D22","level":"warning","message":{"text":"Inconsistent method placement and return type for \u0027get only parent\u0027. \u0060Commit\u0060 has a method \u0060get_only_parent_oid\u0060 that returns \u0060NonZeroOid\u0060 directly (implying it panics or guarantees existence), while \u0060Dag\u0060 has \u0060get_only_parent_oid\u0060 that returns \u0060Result\u0060. This creates confusion about whether the operation can fail and where the responsibility for validation lies.: Align the return types. Either both should return \u0060Result\u003CNonZeroOid, Error\u003E\u0060 to handle cases where a commit has 0 or \u003E1 parents, or both should panic/return directly if the invariant is strictly enforced at the \u0060Commit\u0060 level. Prefer \u0060Result\u0060 for consistency and safety. (signatures: Commit.get_only_parent_oid(): NonZeroOid | Dag.get_only_parent_oid(oid: NonZeroOid): Result)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"260d78842368499b4449c6d1e88acdd02b9b4620307f01aeb7ec2d44109d2f6f"}},{"ruleId":"D22","level":"warning","message":{"text":"Redundant and confusingly named methods. \u0060find_commit\u0060 and \u0060find_commit_or_fail\u0060 both return \u0060Result\u0060. The distinction between them is not clear from the signature alone (likely one returns \u0060Option\u0060 inside the Result or panics, but the signature says \u0060Result\u0060 for both). This suggests a lack of clarity on error handling strategy.: Rename \u0060find_commit_or_fail\u0060 to \u0060get_commit\u0060 or \u0060require_commit\u0060 if it panics on failure, or ensure the \u0060Result\u0060 type clearly distinguishes between \u0027not found\u0027 and \u0027other error\u0027. Alternatively, remove \u0060find_commit_or_fail\u0060 if \u0060find_commit\u0060 is sufficient and handles errors consistently. (signatures: Repo.find_commit(oid: NonZeroOid): Result | Repo.find_commit_or_fail(oid: NonZeroOid): Result)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"2c41ce8cf5c43d100f0740b8be4ea96f7722cf5d1e1e1adb9a772aebcd7f07f6"}},{"ruleId":"D22","level":"warning","message":{"text":"Same redundancy as \u0060find_commit\u0060. \u0060find_blob\u0060 and \u0060find_blob_or_fail\u0060 have identical signatures (\u0060Result\u0060) but different names, implying different error handling behaviors that are not visible in the signature.: Unify naming. Use \u0060find_blob\u0060 for optional retrieval and \u0060get_blob\u0060 or \u0060require_blob\u0060 for fallible/panicking retrieval, ensuring the return types reflect the difference (e.g., \u0060Option\u0060 vs \u0060Result\u0060 or \u0060Self\u0060 vs \u0060Result\u0060). (signatures: Repo.find_blob(oid: NonZeroOid): Result | Repo.find_blob_or_fail(oid: NonZeroOid): Result)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"20e5dcd471a390a02fd5efa736ec96a9f38e0891aba86831de28afe5e82859b3"}},{"ruleId":"D22","level":"warning","message":{"text":"Same redundancy as \u0060find_commit\u0060 and \u0060find_blob\u0060. \u0060find_tree\u0060 and \u0060find_tree_or_fail\u0060 have identical signatures but different names.: Unify naming. Use \u0060find_tree\u0060 for optional retrieval and \u0060get_tree\u0060 or \u0060require_tree\u0060 for fallible/panicking retrieval, ensuring the return types reflect the difference. (signatures: Repo.find_tree(oid: NonZeroOid): Result | Repo.find_tree_or_fail(oid: NonZeroOid): Result)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"cbcfbf44b90994f8349944cae480db453411a02ca1fabebcc21c36a0c0ad65ef"}},{"ruleId":"D26","level":"note","message":{"text":"Projects may be oversized for their cohesion: 1 of 17 project(s) overshoot their size bounds, lowering Project Cohesion to 8.8/10. The most over is \u0060git-branchless-lib\u0060 (15303 LoC, 135 public types across 5 directories). Review these for cohesion \u2014 draw the boundary inside the module first (group each responsibility into its own package or directory and keep the cross-boundary members non-public), since splitting a published package moves types between packages and breaks consumers."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d5a94650dc74886a0f1f08eb9fb6775f1fc395279ef7e901c970c9d26f767a72"}},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d5b8f11381d61a58459ffc7c595fd52d09c03c711894a63a9578043d2338412b"},"taxa":[{"id":"CWE-829","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9f6cc9f8d1aeca7b21e795ba4bb8767b3aebb3367a66b7464a7f88008fe66618"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7a710a3d610296d862afdc8f3d5c668f4c7e979873385948154954287bc9bb72"},"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":"c9df357f23ade0b2f879dc218491fde5c58ee73de65e8f1510fa162ed9350317"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"99bed95c77233957c838a057d588e8ef81e3793d299cb80f7e0b5ff510efee20"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"12104b6bbe331eb564da74c0323616747ebd241a161ddd6b13fa7d99473470c7"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e99092634433de1f3e8a4720213cb81b23e0183d4edfd2cb5d815293829caddf"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6e042152b9cfe238544c0f87c631d0842fc2667cf4610a2f349a80a11295edca"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"220e0d6bdfa834d56443b2fbd842057d4fb04885a33eb07af50636077e0b4ee9"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b0ff3f869d32ff498028f6fac3894a22a1a706ff8cf66501d90e67c768f9e55f"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"46ddb08c5bf7161413d04e294304cb90e73e513a843335d36558c3f62d26cfc1"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e0b3fce0cf6f4be50ef2bf5ca99c66a2c15ff01f1190f2df53114222f8f44e21"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"730838cc73f0e8b02509fcfdb569cdb25b9ad182d4376c702aaa566397284daf"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e3a9fdeaca27708b0dae9ddc8a7740396996333065d7dd0ebab928a16554e2dc"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"fb697f986bfaf2b4bde305dadc08080760856ffcaa1f23a6591d0d364090b0e8"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a1925e270555e32a2d0cfc5e4d6df04fdf435549e3b73461fd65f2abd34bd902"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"99a8c664d35faabf7ec0637e73d1ccea10a3ac8f0c451f4f12629092e7d7b752"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"49de31f530f9826c8956cd584c54d42c5ec6bbb24ac7f4d49b1e68178444c3be"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b37f41fce1e469df87f5aef9b0f8079c4a11b9bd9d18c5484cbebcfc1301953e"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"71aa5ebdd916aee053a96ee4058a3a64436af024cb0f909170d2b66e887ed41b"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c9ce05f42694a23fe46cadec84595d3895d7db8cd25f3721458ebe6f23c92abb"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7b3aa547d9360769d3812ec6966c5adae40c8640bd454f7fadd3329f329a72e5"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"165b800a235348f1135c4ca2d46056a86b213b65607ff1bd4f8a3148d45f8b7e"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"99847444559041bc5a85088edf040c1c38cca8f1f3b36c1234fab8c8abbb0948"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"0d59c58f88cefee3f822f843bf9accc1c02d9e0bcf9e5ae3ace9ca72f536b3c7"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c6ef2f316ca631b692d03c475bed7e473e93f3db6fa35d9ef86248c50808e234"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"75762ab0e75d806bf31cca6eee4ec45e90e6fbde82f831aa4cdc05ca38fa4f03"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d40ca5f6448da5ab58da77f158ca164f9f772997ce1c9e783cfd31deca6343f9"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"74384aecd95294d3b967381d55bea77259ce7b00f8ac82c62a378fe053214ff3"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"74fcd194e30e7727813ce0464babc40c95feff0c131586f6ffa6a5ab89b92005"},"taxa":[{"id":"CWE-1104","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","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":"07cbb45a863e0f49531e96cba21632217f3c992e3aa6eb4d38b7015b93ed6989"},"taxa":[{"id":"CWE-1104","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","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":"cfaeddba1c4dc4df4e004d4fd040cefefceb3fc8a7e3ef3fa1c6e4a8d06f15a1"},"taxa":[{"id":"CWE-1104","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","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":"88c0b509ab9046cddc8d6b65b87577e8e65548264515abc96958468ba13ecfdc"},"taxa":[{"id":"CWE-1104","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","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":"82d0a6d9623082223a6946b43cfd3d356c22b76be3b571d1744c8c31a06ffed8"},"taxa":[{"id":"CWE-1104","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","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":"98d7f59cab831ae20562fb8b461da4f34da9292e8a4b331f7765ef00e28d3e49"},"taxa":[{"id":"CWE-1104","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","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":"c217447c51eae521e1d17d32e70fa7d0865e07135c1a44b7e8826fe4f2e07e81"},"taxa":[{"id":"CWE-1104","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","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":"1b95a5e7ac1541c7d010533e93c1654a8b733e2a96cbb57d25641b43609f5329"},"taxa":[{"id":"CWE-1104","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","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":"d9e5be25826414f3174621124fc0366f9b8e925fe9155b8d711c3d19aa1fcbe2"},"taxa":[{"id":"CWE-1104","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","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":"d6b7f7ca0e92925ca6a3ece2742ea11d43bc7183a12031a4cb05dd27bd83a4df"},"taxa":[{"id":"CWE-1104","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","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":"85ffa314d77812277deab31fb2264e02366c4034561614d82315c198cb6bb99e"},"properties":{"dependency":{"package":"time","version":"0.3.37","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","RUSTSEC-2026-0009"],"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":"da9ce41d3dc2da176b4e1aa86f2ae1a68df334c8ac5ad721abff2335197b0ec1"},"properties":{"dependency":{"package":"tracing-subscriber","version":"0.3.11","advisory":"RUSTSEC-2025-0055","aliases":["[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"399b641a1002e75c8bff8b9c396c66ba0c165468034e5af1632a4a0b59ea9a3e"},"properties":{"dependency":{"package":"ansi_term","version":"0.12.1","advisory":"RUSTSEC-2021-0139","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":"e000cd327a1d3623c99367a141b26c088a421b6fc7cbb00369201f20db60df99"},"properties":{"dependency":{"package":"json","version":"0.12.4","advisory":"RUSTSEC-2022-0081","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":"c591a064849548f418685394ed81a08adc90c8ec19ce74fe9a36c9a84843b836"},"properties":{"dependency":{"package":"chrono-english","version":"0.1.8","advisory":"RUSTSEC-2024-0395","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":"1a1e503af806e767f14c170c32073931de1d4295405a897beef69c919a99a60d"},"properties":{"dependency":{"package":"adler","version":"1.0.2","advisory":"RUSTSEC-2025-0056","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":"3c5455984a64716e7c988a7e89905e7ca6f6fd980b22da2714b026b32196f89d"},"properties":{"dependency":{"package":"rand","version":"0.7.3","advisory":"RUSTSEC-2026-0097","aliases":["[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"635473b9b17c99d589282932b52585ba655f8ae85957540e15d66db36a18c529"},"properties":{"dependency":{"package":"rand","version":"0.8.5","advisory":"RUSTSEC-2026-0097","aliases":["[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f1db1b91b26215209ef9e192b267d4d179deffec5cc5cb65585238f76318116e"},"properties":{"dependency":{"package":"rand","version":"0.9.1","advisory":"RUSTSEC-2026-0097","aliases":["[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9985e934bf5258966ba30771d636042c3373acbe5f9699173950198ff207d4c4"},"properties":{"dependency":{"package":"git2","version":"0.20.4","advisory":"RUSTSEC-2026-0183","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":"1eae401a2a8770be38f5a54c3afe36fa4464ebe4004c5fb285ffaa2f1ae4d5b7"},"properties":{"dependency":{"package":"git2","version":"0.20.4","advisory":"RUSTSEC-2026-0184","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":"bf9b3890cba73cd3c5d5270d1976bd1bae94596a1c510482b94fe9367ef871f2"},"properties":{"dependency":{"package":"memmap2","version":"0.5.10","advisory":"RUSTSEC-2026-0186","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":"759d36a63e8483c4a467399ff199fa57fa2e02d89ef311720974588edb9516d4"},"properties":{"dependency":{"package":"anyhow","version":"1.0.102","advisory":"RUSTSEC-2026-0190","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.3","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":"72f56b7e746083909d6f9de0695fe32ef8c30feff19ef4ecea27256040e4ceef"},"properties":{"dependency":{"package":"owning_ref","version":"0.3.3","advisory":"[GHSA redacted]","aliases":["RUSTSEC-2022-0040"],"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":"ae67541156b52ae37bf646afd48a87a457242627984f5c65233b61a9adcfbc74"},"properties":{"dependency":{"package":"owning_ref","version":"0.4.1","advisory":"[GHSA redacted]","aliases":["RUSTSEC-2022-0040"],"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":"c4a0c58aca13bc848c37d4c3d5bcb90f8e046f8df5b386f5a3743d0625ad8dae"},"properties":{"dependency":{"package":"crossbeam-epoch","version":"0.9.18","advisory":"RUSTSEC-2026-0204","reachability":{"kind":"unknown"}}}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"0df08cc87fded1e68c6ae0b3a1bf5c4e4617852154b7058fb4e229f386523b75"}},{"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":"3adeb5ca433f8377e0513466abe226661632e2c7a65ab03d48b79033987746ab"}},{"ruleId":"D31","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3b1568673c97a5ce9b1ec5a08dba083d705b7ca92047378b6f33333438b27491"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c790f76cf70ef3b7e11b2b2e046aa998549442297137ee1873617b41f8d8e165"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: restack.rs \u2194 sync.rs: \u0060git-branchless/src/commands/restack.rs\u0060 and \u0060git-branchless/src/commands/sync.rs\u0060 change together 55% of the time (18 of the 33 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 between them. They sit in the same directory, but in this ecosystem each file is its own module \u2014 a sibling reference still needs an import \u2014 so the missing import edge is real: the coupling runs through shared behaviour, not a declared dependency. If they duplicate structure, extract the common part into one unit; otherwise the coupling is hidden and worth breaking. You can check this without leaving the row: of the 18 shared commits counted here, the most recent 3 are \u006086064828\u0060 refactor: add force_detach checkout option; \u00604c97eb6a\u0060 feat(sync): don\u0027t try to resolve merge commit rebases on-disk; \u00603aa574fb\u0060 refactor(rewrite): have \u0060RebasePlanPermissions\u0060 consume \u0060BuildRebaseP\u2026 \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless/src/commands/restack.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6b0a58a12a43f6d74ed0fc141170f4f9b22bd543009e30a1029900ddf18c728"}},{"ruleId":"D36","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"1b213f6eedd4b140d0bc37bdf1496f72811a643f34064f12518b32e9e83bcfc7"}},{"ruleId":"D36","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"0e17f71490e4d120a48b2b2881ab866c93b272bef2febb673a3e8e42b2c288ab"}},{"ruleId":"D36","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"759dca709f1a032fb6f624ce672e6afb5558fce53ecf01fb73618c4d33923164"}},{"ruleId":"D36","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"eb00976a698a5d68999b7ee6d27206fd374e916853e7ff1ead5eed42386f043f"}},{"ruleId":"D36","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"90f83b4fa27db32740afe9540c905f3c0499caed87f61049a8a903ecc95b41c3"}},{"ruleId":"D36","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"0752d0df7434000fcabf1048e2de30a7a1a8b982b3db9a19898c4dec199856b4"}},{"ruleId":"D36","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d068c977b62d9a977df1bb6f53e8b00b586c3abee955f91d715f92b8e019d624"}},{"ruleId":"D44","level":"warning","message":{"text":"End-of-life runtime: Rust 1.86: rust-toolchain.toml declares Rust 1.86 as this project\u0027s toolchain file, and Rust 1.86, superseded by 1.87 on 2025-05-15 (the Rust project patches only the current stable). An unsupported runtime receives no security patches, so every vulnerability disclosed in it since 2025-05-15 is present and unfixable without moving off it. This is a migration rather than an upgrade: there is no newer release of a runtime that has ended."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"b872efecd4bd3a4f8c7905ab84c102795d9bcc31934281d3ac21c8c79e6d4b36"}},{"ruleId":"M1","level":"warning","message":{"text":"README may be stale: 28 code files changed in the last 6 months but the README was not touched \u2014 it may no longer reflect the system."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"e973e7a8d5d866995cbf78b120250fe7f132bf928812d48ca62e69aba11b9910"}},{"ruleId":"M2","level":"note","message":{"text":"No ADRs: No Architecture Decision Records found \u2014 no conventional ADR directory, no numbered \u0060NNNN-title\u0060 documents in any markup this check reads, and nothing ADR-shaped by content. Design rationale recorded elsewhere (a design-notes tree, a mailing list, pull-request discussion) is not visible to this check and is not re-findable per decision, so a future maintainer cannot ask why one choice was made and get an answer."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"670b3d6e36a756d63097d0dfbf90afd5fc761308800b9354894a07c3f4e4aa14"}},{"ruleId":"P10","level":"note","message":{"text":"Large public API surface: 170/234 types (73%) declared in the published library are public. For a library, every public type is a stability contract \u2014 keep implementation types off the surface and expose only the intended API."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"ed2ba843444ae377c17142f58f714e281e4bd3f183ab100ee1fbef389875d3e6"}},{"ruleId":"X7","level":"note","message":{"text":"Silent fallback default on Err: \u0060execute_main_branch_sync_plan\u0060 turns every \u0060Err\u0060 into \u0060Ok(Ok(()))\u0060 \u2014 a failure becomes a plausible value and a silent behavior change with no trail. Log the error or propagate it with \u0060?\u0060. If that constant is the correct answer rather than a stand-in for a value that could not be read, say so in a comment on the arm or in the doc comment, and the row stops firing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"git-branchless/src/commands/sync.rs"},"region":{"startLine":278}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a6086ed60042bc253af88f21590147914167cb10bffea1729ddbb82439cadf3"}}],"taxonomies":[{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d","organization":"MITRE","informationUri":"https://cwe.mitre.org/","isComprehensive":false,"shortDescription":{"text":"The MITRE Common Weakness Enumeration (CWE)."},"taxa":[{"id":"CWE-1032","guid":"5f21e517-68aa-a650-9a25-5771ef024637","name":"OWASP Top Ten \u2014 Security Misconfiguration category","shortDescription":{"text":"OWASP Top Ten \u2014 Security Misconfiguration category"},"helpUri":"https://cwe.mitre.org/data/definitions/1032.html"},{"id":"CWE-1104","guid":"4c918cb5-b2a6-6c55-9963-a44ee464305e","name":"CWE-1104","shortDescription":{"text":"CWE-1104"},"helpUri":"https://cwe.mitre.org/data/definitions/1104.html"},{"id":"CWE-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-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":67,"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."]}]}