{"$schema":"https://json.schemastore.org/sarif-2.1.0.json","version":"2.1.0","runs":[{"tool":{"driver":{"name":"codehealth","informationUri":"https://codehealth.canine.dev","rules":[{"id":"D1","name":"Cyclomatic Complexity","shortDescription":{"text":"Cyclomatic Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D1"},{"id":"D2","name":"Cognitive Complexity","shortDescription":{"text":"Cognitive Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D2"},{"id":"D3","name":"God Classes","shortDescription":{"text":"God Classes"},"helpUri":"https://codehealth.canine.dev/dimensions/D3"},{"id":"D4","name":"Code Duplication","shortDescription":{"text":"Code Duplication"},"helpUri":"https://codehealth.canine.dev/dimensions/D4"},{"id":"D5","name":"Coupling","shortDescription":{"text":"Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D5"},{"id":"D6","name":"Cohesion (LCOM4)","shortDescription":{"text":"Cohesion (LCOM4)"},"helpUri":"https://codehealth.canine.dev/dimensions/D6"},{"id":"D9","name":"Test Distribution","shortDescription":{"text":"Test Distribution"},"helpUri":"https://codehealth.canine.dev/dimensions/D9"},{"id":"D10","name":"Test Quality","shortDescription":{"text":"Test Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D10"},{"id":"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"]},{"target":{"id":"A07:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"],"owasp":"A07:2025"}},{"id":"D14","name":"License Compliance","shortDescription":{"text":"License Compliance"},"helpUri":"https://codehealth.canine.dev/dimensions/D14"},{"id":"D15","name":"Churn \u00D7 Complexity Hotspots","shortDescription":{"text":"Churn \u00D7 Complexity Hotspots"},"helpUri":"https://codehealth.canine.dev/dimensions/D15"},{"id":"D16","name":"Bus Factor","shortDescription":{"text":"Bus Factor"},"helpUri":"https://codehealth.canine.dev/dimensions/D16"},{"id":"D17","name":"Explicit Debt","shortDescription":{"text":"Explicit Debt"},"helpUri":"https://codehealth.canine.dev/dimensions/D17"},{"id":"D19","name":"Documentation Quality","shortDescription":{"text":"Documentation Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D19"},{"id":"D20","name":"ADR Quality","shortDescription":{"text":"ADR Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D20"},{"id":"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"]},{"target":{"id":"A07:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"],"owasp":"A07:2025"}},{"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"]},{"target":{"id":"A05:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-79","CWE-89","CWE-78","CWE-94","CWE-77"],"owasp":"A05:2025"}},{"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"]},{"target":{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1395","CWE-937"],"owasp":"A03:2025"}},{"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"]},{"target":{"id":"A02:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1032","CWE-732","CWE-16"],"owasp":"A02:2025"}},{"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"]},{"target":{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1357","CWE-494"],"owasp":"A03:2025"}},{"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"]},{"target":{"id":"A08:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-506"],"owasp":"A08:2025"}},{"id":"D44","name":"Platform End-of-Life","shortDescription":{"text":"Platform End-of-Life"},"helpUri":"https://codehealth.canine.dev/dimensions/D44"},{"id":"AC1","name":"Text alternatives","shortDescription":{"text":"Text alternatives"},"helpUri":"https://codehealth.canine.dev/dimensions/AC1"},{"id":"AC2","name":"Forms \u0026 labels","shortDescription":{"text":"Forms \u0026 labels"},"helpUri":"https://codehealth.canine.dev/dimensions/AC2"},{"id":"AC3","name":"Page structure","shortDescription":{"text":"Page structure"},"helpUri":"https://codehealth.canine.dev/dimensions/AC3"},{"id":"AC4","name":"Keyboard semantics","shortDescription":{"text":"Keyboard semantics"},"helpUri":"https://codehealth.canine.dev/dimensions/AC4"},{"id":"AC5","name":"ARIA correctness","shortDescription":{"text":"ARIA correctness"},"helpUri":"https://codehealth.canine.dev/dimensions/AC5"},{"id":"AC6","name":"Visual \u0026 motion safety","shortDescription":{"text":"Visual \u0026 motion safety"},"helpUri":"https://codehealth.canine.dev/dimensions/AC6"},{"id":"AC7","name":"A11y enforcement","shortDescription":{"text":"A11y enforcement"},"helpUri":"https://codehealth.canine.dev/dimensions/AC7"},{"id":"AX10","name":"Code composition","shortDescription":{"text":"Code composition"},"helpUri":"https://codehealth.canine.dev/dimensions/AX10"},{"id":"AX3","name":"Project dependency cycles","shortDescription":{"text":"Project dependency cycles"},"helpUri":"https://codehealth.canine.dev/dimensions/AX3"},{"id":"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":"C2","name":"Access Controls","shortDescription":{"text":"Access Controls"},"helpUri":"https://codehealth.canine.dev/dimensions/C2"},{"id":"DM1","name":"Aggregate boundaries","shortDescription":{"text":"Aggregate boundaries"},"helpUri":"https://codehealth.canine.dev/dimensions/DM1"},{"id":"DM2","name":"Strongly-typed ids","shortDescription":{"text":"Strongly-typed ids"},"helpUri":"https://codehealth.canine.dev/dimensions/DM2"},{"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":"ED5","name":"Idempotency","shortDescription":{"text":"Idempotency"},"helpUri":"https://codehealth.canine.dev/dimensions/ED5"},{"id":"ES1","name":"Fold determinism","shortDescription":{"text":"Fold determinism"},"helpUri":"https://codehealth.canine.dev/dimensions/ES1"},{"id":"ES2","name":"Immutable events","shortDescription":{"text":"Immutable events"},"helpUri":"https://codehealth.canine.dev/dimensions/ES2"},{"id":"M1","name":"Documentation (README)","shortDescription":{"text":"Documentation (README)"},"helpUri":"https://codehealth.canine.dev/dimensions/M1"},{"id":"M2","name":"Architecture documentation","shortDescription":{"text":"Architecture documentation"},"helpUri":"https://codehealth.canine.dev/dimensions/M2"},{"id":"M3","name":"Folder \u0026 project structure","shortDescription":{"text":"Folder \u0026 project structure"},"helpUri":"https://codehealth.canine.dev/dimensions/M3"},{"id":"M4","name":"Documentation accuracy","shortDescription":{"text":"Documentation accuracy"},"helpUri":"https://codehealth.canine.dev/dimensions/M4"},{"id":"P1","name":"CI/CD gates","shortDescription":{"text":"CI/CD gates"},"helpUri":"https://codehealth.canine.dev/dimensions/P1"},{"id":"P10","name":"Library API \u0026 versioning","shortDescription":{"text":"Library API \u0026 versioning"},"helpUri":"https://codehealth.canine.dev/dimensions/P10"},{"id":"P12","name":"CI test-gate honesty","shortDescription":{"text":"CI test-gate honesty"},"helpUri":"https://codehealth.canine.dev/dimensions/P12"},{"id":"P2","name":"Observability","shortDescription":{"text":"Observability"},"helpUri":"https://codehealth.canine.dev/dimensions/P2"},{"id":"P3","name":"Security \u0026 performance tooling","shortDescription":{"text":"Security \u0026 performance tooling"},"helpUri":"https://codehealth.canine.dev/dimensions/P3"},{"id":"P4","name":"Deployment \u0026 Rollback","shortDescription":{"text":"Deployment \u0026 Rollback"},"helpUri":"https://codehealth.canine.dev/dimensions/P4"},{"id":"P6","name":"Release Hygiene","shortDescription":{"text":"Release Hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/P6"},{"id":"P7","name":"Outbound HTTP resilience","shortDescription":{"text":"Outbound HTTP resilience"},"helpUri":"https://codehealth.canine.dev/dimensions/P7"},{"id":"PF1","name":"Benchmark discipline","shortDescription":{"text":"Benchmark discipline"},"helpUri":"https://codehealth.canine.dev/dimensions/PF1"},{"id":"PF3","name":"Async \u0026 latency hygiene","shortDescription":{"text":"Async \u0026 latency hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/PF3"},{"id":"S1","name":"Web-Security Posture","shortDescription":{"text":"Web-Security Posture"},"helpUri":"https://codehealth.canine.dev/dimensions/S1"},{"id":"X1","name":"Async correctness","shortDescription":{"text":"Async correctness"},"helpUri":"https://codehealth.canine.dev/dimensions/X1"},{"id":"X10","name":"Duplicated predicate","shortDescription":{"text":"Duplicated predicate"},"helpUri":"https://codehealth.canine.dev/dimensions/X10"},{"id":"X12","name":"Unreachable branch","shortDescription":{"text":"Unreachable branch"},"helpUri":"https://codehealth.canine.dev/dimensions/X12"},{"id":"X13","name":"Undrained process stream","shortDescription":{"text":"Undrained process stream"},"helpUri":"https://codehealth.canine.dev/dimensions/X13"},{"id":"X14","name":"Bypassable address classification","shortDescription":{"text":"Bypassable address classification"},"helpUri":"https://codehealth.canine.dev/dimensions/X14"},{"id":"X15","name":"Unvalidated length from an untrusted reader","shortDescription":{"text":"Unvalidated length from an untrusted reader"},"helpUri":"https://codehealth.canine.dev/dimensions/X15"},{"id":"X16","name":"Unfloored truncation loop","shortDescription":{"text":"Unfloored truncation loop"},"helpUri":"https://codehealth.canine.dev/dimensions/X16"},{"id":"X17","name":"Uncapped recursion over a caller-supplied document","shortDescription":{"text":"Uncapped recursion over a caller-supplied document"},"helpUri":"https://codehealth.canine.dev/dimensions/X17"},{"id":"X18","name":"Disposal-pattern correctness","shortDescription":{"text":"Disposal-pattern correctness"},"helpUri":"https://codehealth.canine.dev/dimensions/X18"},{"id":"X19","name":"Unrestored process-global state","shortDescription":{"text":"Unrestored process-global state"},"helpUri":"https://codehealth.canine.dev/dimensions/X19"},{"id":"X20","name":"Mistyped argument guard","shortDescription":{"text":"Mistyped argument guard"},"helpUri":"https://codehealth.canine.dev/dimensions/X20"},{"id":"X21","name":"Side-effecting pattern guard","shortDescription":{"text":"Side-effecting pattern guard"},"helpUri":"https://codehealth.canine.dev/dimensions/X21"},{"id":"X22","name":"Contradicted release guard","shortDescription":{"text":"Contradicted release guard"},"helpUri":"https://codehealth.canine.dev/dimensions/X22"},{"id":"X23","name":"Unguarded diagnostic materialisation","shortDescription":{"text":"Unguarded diagnostic materialisation"},"helpUri":"https://codehealth.canine.dev/dimensions/X23"},{"id":"X24","name":"Document value interpolated into markup unescaped","shortDescription":{"text":"Document value interpolated into markup unescaped"},"helpUri":"https://codehealth.canine.dev/dimensions/X24"},{"id":"X25","name":"Inert configuration knob","shortDescription":{"text":"Inert configuration knob"},"helpUri":"https://codehealth.canine.dev/dimensions/X25"},{"id":"X26","name":"Unsynchronised callback handoff","shortDescription":{"text":"Unsynchronised callback handoff"},"helpUri":"https://codehealth.canine.dev/dimensions/X26"},{"id":"X27","name":"Collection changed while being enumerated","shortDescription":{"text":"Collection changed while being enumerated"},"helpUri":"https://codehealth.canine.dev/dimensions/X27"},{"id":"X28","name":"Index access outside its own emptiness guard","shortDescription":{"text":"Index access outside its own emptiness guard"},"helpUri":"https://codehealth.canine.dev/dimensions/X28"},{"id":"X29","name":"Per-element action decided by a fixed element","shortDescription":{"text":"Per-element action decided by a fixed element"},"helpUri":"https://codehealth.canine.dev/dimensions/X29"},{"id":"X3","name":"Exception handling","shortDescription":{"text":"Exception handling"},"helpUri":"https://codehealth.canine.dev/dimensions/X3"},{"id":"X30","name":"Support guard that admits what it rejects","shortDescription":{"text":"Support guard that admits what it rejects"},"helpUri":"https://codehealth.canine.dev/dimensions/X30"},{"id":"X32","name":"Type resolved by simple name across every loaded assembly","shortDescription":{"text":"Type resolved by simple name across every loaded assembly"},"helpUri":"https://codehealth.canine.dev/dimensions/X32"},{"id":"X4","name":"Structured logging","shortDescription":{"text":"Structured logging"},"helpUri":"https://codehealth.canine.dev/dimensions/X4"},{"id":"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":"PhysKeyCode::for_each_code (cyclomatic 321): PhysKeyCode::for_each_code has cyclomatic complexity 321 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-input-types/src/lib.rs"},"region":{"startLine":1018}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef0fd03fe124622a07cb27e2b96a9ea17f869a15504a041b70843656fa9b3581"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::perform_key_assignment (cyclomatic 174): TermWindow::perform_key_assignment has cyclomatic complexity 174 (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":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":4752}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c23a02d923fb850d0c3b84deafb8b3c2b2119b236ce4fcf3d6204e870bd2e92"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_gui::commands::derive_command_from_key_assignment (cyclomatic 166): kaku_gui::commands::derive_command_from_key_assignment has cyclomatic complexity 166 (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":"kaku-gui/src/commands.rs"},"region":{"startLine":1106}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c2f30a2a460daa09cef351eb7d336707d48986a0ceeae3200d8f1e42b8a0c63"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_remote::web::run_session (cyclomatic 116): kaku_remote::web::run_session has cyclomatic complexity 116 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/src/web.rs"},"region":{"startLine":2785}}}],"partialFingerprints":{"codehealthFindingId/v1":"b13e166fba6c48d31cb712df8c06c1081d7f67d848ebba41328885d4f5ca884f"}},{"ruleId":"D1","level":"warning","message":{"text":"TerminalState::perform_csi_mode (cyclomatic 113): TerminalState::perform_csi_mode has cyclomatic complexity 113 (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":"term/src/terminalstate/mod.rs"},"region":{"startLine":1675}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ead739d78188ba16d9a5b87b47da20721d0bcb634e6e70ed4d7528eeb6c8be5"}},{"ruleId":"D1","level":"warning","message":{"text":"KeyEvent::encode_kitty (cyclomatic 111): KeyEvent::encode_kitty has cyclomatic complexity 111 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This is NOT this file\u0027s highest cyclomatic complexity: PhysKeyCode::to_key_code (cyclomatic 117) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-input-types/src/lib.rs"},"region":{"startLine":1660}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ee043151be7998bfbf67bf8a684153e93ad3589c7d68854110247f96a9f7fcc"}},{"ruleId":"D1","level":"warning","message":{"text":"KeyCode::encode (cyclomatic 111): KeyCode::encode has cyclomatic complexity 111 (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":"termwiz/src/input.rs"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"deefcfd53a910f4d8716551da871e5d8c39c979019f0858f587a17a9c205ccab"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::mouse_event_terminal (cyclomatic 98): TermWindow::mouse_event_terminal has cyclomatic complexity 98 (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":"kaku-gui/src/termwindow/mouseevent.rs"},"region":{"startLine":1867}}}],"partialFingerprints":{"codehealthFindingId/v1":"7eab10a1599867d7b31f640f5768f26b870472d4959e612cb14a2968269de146"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::win_key_code_to_termwiz_key_code (cyclomatic 94): TermWindow::win_key_code_to_termwiz_key_code has cyclomatic complexity 94 (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":"kaku-gui/src/termwindow/keyevent.rs"},"region":{"startLine":1264}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc252e4f87631660cb768e93051d6cb28968d57008c65c2d20e1a68a71d91d2f"}},{"ruleId":"D1","level":"warning","message":{"text":"Performer::osc_dispatch (cyclomatic 89): Performer::osc_dispatch has cyclomatic complexity 89 (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":"term/src/terminalstate/performer.rs"},"region":{"startLine":852}}}],"partialFingerprints":{"codehealthFindingId/v1":"87e183c8a7194bfa514048d3c3f42871220792af118d8fbb29757cc264ffb9f9"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::mouse_event_impl (cyclomatic 80): TermWindow::mouse_event_impl has cyclomatic complexity 80 (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":"kaku-gui/src/termwindow/mouseevent.rs"},"region":{"startLine":863}}}],"partialFingerprints":{"codehealthFindingId/v1":"470861a8c5775ffa2e025342bfa056dc2e9360a5e1e0c4b0df2e24e70a2dccf5"}},{"ruleId":"D1","level":"warning","message":{"text":"TerminfoRenderer::render_to (cyclomatic 79): TerminfoRenderer::render_to has cyclomatic complexity 79 (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":"termwiz/src/render/terminfo.rs"},"region":{"startLine":337}}}],"partialFingerprints":{"codehealthFindingId/v1":"70d6d599dd1ea73f6102e787f7d794a7ce528eb16cfe4ce49ebf14530ada27c9"}},{"ruleId":"D1","level":"warning","message":{"text":"CSIParser::sgr (cyclomatic 77): CSIParser::sgr has cyclomatic complexity 77 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/csi.rs"},"region":{"startLine":2686}}}],"partialFingerprints":{"codehealthFindingId/v1":"29efaa74a607fb43349dda8027b621d87cc99ab2ec77efccfcba4434dc0a0b4a"}},{"ruleId":"D1","level":"warning","message":{"text":"KeyCode::try_from (cyclomatic 77): KeyCode::try_from has cyclomatic complexity 77 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This is NOT this file\u0027s highest cyclomatic complexity: PhysKeyCode::to_key_code (cyclomatic 117) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-input-types/src/lib.rs"},"region":{"startLine":341}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc76498e5f0294b7080474fbc7a3e858c0c3850ee58b73329daf3f85ef6caeb3"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::render_screen_line (cyclomatic 76): TermWindow::render_screen_line has cyclomatic complexity 76 (threshold 15). Of this number, 70 points are the body\u0027s own statements and 6 belong to 3 function items inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/screen_line.rs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"5cca0d21758cacaaef61895bb33406c35e77d66aba34ed4478ad06d5a5216355"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_gui::overlay::ai_chat::input::handle_key (cyclomatic 76): kaku_gui::overlay::ai_chat::input::handle_key has cyclomatic complexity 76 (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":"kaku-gui/src/overlay/ai_chat/input.rs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"f528b1c8c9523720ad8e34f26d0ac0920f5abcb1bb867793fce1e808c30bf20b"}},{"ruleId":"D1","level":"warning","message":{"text":"GlyphCache::block_sprite (cyclomatic 73): GlyphCache::block_sprite has cyclomatic complexity 73 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This is NOT this file\u0027s highest cyclomatic complexity: BlockKey::from_char (cyclomatic 371) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/customglyph.rs"},"region":{"startLine":5175}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5e9844f1ba5196bf13fce544bf2fbc31561e58870afb054cd1994ca3874f35f"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku::ai_config::tui::run_loop (cyclomatic 68): kaku::ai_config::tui::run_loop has cyclomatic complexity 68 (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":"kaku/src/ai_config/tui.rs"},"region":{"startLine":3115}}}],"partialFingerprints":{"codehealthFindingId/v1":"e14c7e30786ea7c95cbc0900d22d44a956f9ed06c2c6a5702092dadeea24fb42"}},{"ruleId":"D1","level":"warning","message":{"text":"WindowView::key_common (cyclomatic 67): WindowView::key_common has cyclomatic complexity 67 (threshold 15). Of this number, 65 points are the body\u0027s own statements and 2 belong to one function item inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/window.rs"},"region":{"startLine":8708}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fb76c1ebef30da939f1daa21a90ce310357729c9ca8ecc346d17f07280a72be"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::dispatch_notif (cyclomatic 64): TermWindow::dispatch_notif has cyclomatic complexity 64 (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":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":2404}}}],"partialFingerprints":{"codehealthFindingId/v1":"54625a5d769d32e23b841daac75a8c41820f26753cec50900a4f2ccc143fcba3"}},{"ruleId":"D1","level":"warning","message":{"text":"SessionHandler::process_one (cyclomatic 58): SessionHandler::process_one has cyclomatic complexity 58 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-mux-server-impl/src/sessionhandler.rs"},"region":{"startLine":246}}}],"partialFingerprints":{"codehealthFindingId/v1":"c648c544a8a16b3dc50be0c8a6fa422e3091132b7fd70bd3ba7fa340b109a8a4"}},{"ruleId":"D1","level":"warning","message":{"text":"CommandDef::recreate_menubar::command_rank_for_menu (cyclomatic 57): CommandDef::recreate_menubar::command_rank_for_menu has cyclomatic complexity 57 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This shape REPEATS in the file: 2 other methods here (CommandDef::recreate_menubar, CommandDef::recreate_menubar::separator_group_for_menu) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 3 times rather than 3 independent problems. Splitting this body alone leaves the other 2 exactly as they are. Where these are variations on one operation, the change that clears all 3 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/commands.rs"},"region":{"startLine":721}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ed0a945c8e2da47c011f71dea2c2871057772325037d08385e4a1f8e50dd1be"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_remote::share::serve (cyclomatic 56): kaku_remote::share::serve has cyclomatic complexity 56 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/src/share.rs"},"region":{"startLine":819}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bb8e84c3ccc84b7283602e4ef1dfed4d3ace34763ccd92c1b66f03f005f9afc"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::paint_pane (cyclomatic 54): TermWindow::paint_pane has cyclomatic complexity 54 (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":"kaku-gui/src/termwindow/render/pane.rs"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"823e1057f6d7ab6ed50be45458e532c524d37577ec9a123b416d49b7ee2ebf54"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_gui::cli_chat::run_repl (cyclomatic 52): kaku_gui::cli_chat::run_repl has cyclomatic complexity 52 (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":"kaku-gui/src/cli_chat/mod.rs"},"region":{"startLine":545}}}],"partialFingerprints":{"codehealthFindingId/v1":"d95d4624e781b66504d6d10c22deafddf04e9f2cb556d4acd385fb6f7a5d132f"}},{"ruleId":"D1","level":"warning","message":{"text":"ITermProprietary::parse (cyclomatic 51): ITermProprietary::parse has cyclomatic complexity 51 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/osc.rs"},"region":{"startLine":1467}}}],"partialFingerprints":{"codehealthFindingId/v1":"63032b79f1ab6021d100359cbc8f1fc87b2cfa08615e848e519538251f78105b"}},{"ruleId":"D1","level":"warning","message":{"text":"WindowView::did_resize (cyclomatic 51): WindowView::did_resize has cyclomatic complexity 51 (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":"window/src/os/macos/window.rs"},"region":{"startLine":9419}}}],"partialFingerprints":{"codehealthFindingId/v1":"454d48176189912afaab89dd14357bfe4465b7707b7870c5f695aca9927b7903"}},{"ruleId":"D1","level":"warning","message":{"text":"Sgr::fmt (cyclomatic 50): Sgr::fmt has cyclomatic complexity 50 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This is NOT this file\u0027s highest cyclomatic complexity: CSIParser::parse_next (cyclomatic 74) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/csi.rs"},"region":{"startLine":1507}}}],"partialFingerprints":{"codehealthFindingId/v1":"9de52c667bdce49947f96362873927c5e46a3289cc37edf7fe87da42dc9b058e"}},{"ruleId":"D1","level":"warning","message":{"text":"App::drain_tokens (cyclomatic 48): App::drain_tokens has cyclomatic complexity 48 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/state.rs"},"region":{"startLine":1823}}}],"partialFingerprints":{"codehealthFindingId/v1":"a061bcfc13f3e9502a379f99d61b3ad60a2bc9dc788b1699c6379748b208c97a"}},{"ruleId":"D1","level":"warning","message":{"text":"BidiContext::explicit_embedding_levels (cyclomatic 47): BidiContext::explicit_embedding_levels has cyclomatic complexity 47 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/bidi/src/lib.rs"},"region":{"startLine":1337}}}],"partialFingerprints":{"codehealthFindingId/v1":"e447343f4e4d3de8f67be439fe45c6930c447ef374992e9a0e55a53fb89c9f68"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku::ai_config::tui::save_field (cyclomatic 47): kaku::ai_config::tui::save_field has cyclomatic complexity 47 (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":"kaku/src/ai_config/tui.rs"},"region":{"startLine":2757}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f76832fa46ab5f3a44ace4eb8be367e1c52f0758aef1e2a076e8569bf417695"}},{"ruleId":"D1","level":"warning","message":{"text":"TerminalState::perform_csi_cursor (cyclomatic 46): TerminalState::perform_csi_cursor has cyclomatic complexity 46 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/mod.rs"},"region":{"startLine":2562}}}],"partialFingerprints":{"codehealthFindingId/v1":"fca0ab4731030700fe3a603772da5366ddfe24b6b19bb276b13237ace49acb74"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::paint_pass (cyclomatic 45): TermWindow::paint_pass has cyclomatic complexity 45 (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":"kaku-gui/src/termwindow/render/paint.rs"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"b72fd89ab72245d9fa372673adaee37a9c4239d582be4e584b00a8854ac6d87d"}},{"ruleId":"D1","level":"warning","message":{"text":"TabBarState::new (cyclomatic 42): TabBarState::new has cyclomatic complexity 42 (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":"kaku-gui/src/tabbar.rs"},"region":{"startLine":1004}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8f0c2e9925c13f66356ee4fb4631e0c1ef024795d937ba0d29ccbdbfeeb329c"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::dispatch_window_event (cyclomatic 42): TermWindow::dispatch_window_event has cyclomatic complexity 42 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":2046}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5fff5026cd7d524a716bde7439c9b237920d66061ae290573ec94b8a892b6c6"}},{"ruleId":"D1","level":"warning","message":{"text":"Value::add_methods (cyclomatic 41): Value::add_methods has cyclomatic complexity 41 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lua-api-crates/share-data/src/lib.rs"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"65b90a3144bb67296c5db306812adc751f24b646ecd11f6abcee0bfee60fbd16"}},{"ruleId":"D1","level":"warning","message":{"text":"Performer::remap_grapheme (cyclomatic 41): Performer::remap_grapheme has cyclomatic complexity 41 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/performer.rs"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"74035a1eab63c8db56068757e788a8055d72a5b88616e88e1b4a39991d62bec2"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_remote::web::handle_input (cyclomatic 40): kaku_remote::web::handle_input has cyclomatic complexity 40 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/src/web.rs"},"region":{"startLine":2484}}}],"partialFingerprints":{"codehealthFindingId/v1":"0014cde370666f00597fe7ad06d749cca0681a350407f98122170deb0dca03f2"}},{"ruleId":"D1","level":"warning","message":{"text":"CSIParser::window (cyclomatic 40): CSIParser::window has cyclomatic complexity 40 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This is NOT this file\u0027s highest cyclomatic complexity: CSIParser::parse_next (cyclomatic 74) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/csi.rs"},"region":{"startLine":2583}}}],"partialFingerprints":{"codehealthFindingId/v1":"8366728d1c7e985759222e5d2fe0b16b16fb17b18d616fcf2d099da2a1733177"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::key_event_impl (cyclomatic 39): TermWindow::key_event_impl has cyclomatic complexity 39 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/keyevent.rs"},"region":{"startLine":1061}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4a129646ff123d604d5b5c15b8870f487f721021fa8984f1393019f22b42a38"}},{"ruleId":"D1","level":"warning","message":{"text":"TerminfoRenderer::flush_pending_attr (cyclomatic 38): TerminfoRenderer::flush_pending_attr has cyclomatic complexity 38 (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":"termwiz/src/render/terminfo.rs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"f31b3e1f7fedcc9302370a118854198566902d35285fabcf34f56dd8edf256f1"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::mouse_event_tab_bar (cyclomatic 37): TermWindow::mouse_event_tab_bar has cyclomatic complexity 37 (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":"kaku-gui/src/termwindow/mouseevent.rs"},"region":{"startLine":1625}}}],"partialFingerprints":{"codehealthFindingId/v1":"440d9868366b96c1a7a38944b1168863ff3c49c8138e4d3e81621dfa68a3f026"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku::ai_config::tui::ui::render_tools (cyclomatic 36): kaku::ai_config::tui::ui::render_tools has cyclomatic complexity 36 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui/ui.rs"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"33a863585d498d3c2c8061722ac50410d2c06693eb2689d4ab70459d4ffed732"}},{"ruleId":"D1","level":"warning","message":{"text":"wezterm_config_derive::attr::field_info (cyclomatic 35): wezterm_config_derive::attr::field_info has cyclomatic complexity 35 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/derive/src/attr.rs"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"2aa678da1ea76cb05a95eccc401fcd0ee44942523c23c42c3927eb340b167230"}},{"ruleId":"D1","level":"warning","message":{"text":"OperatingSystemCommand::internal_parse (cyclomatic 35): OperatingSystemCommand::internal_parse has cyclomatic complexity 35 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/osc.rs"},"region":{"startLine":257}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9f0a653823a06929ecf79dccc2795a370124143119b3f1df2af995f6b560e71"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_gui::ai_client::responses::parse_responses_sse (cyclomatic 35): kaku_gui::ai_client::responses::parse_responses_sse has cyclomatic complexity 35 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_client/responses.rs"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"d000494afafb2f54f01216e4096dcb863cb6d47a5fda38e8dc5752bf8d16264f"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku::ai_config::tui::providers::assistant::save_kaku_assistant_field_to_path (cyclomatic 34): kaku::ai_config::tui::providers::assistant::save_kaku_assistant_field_to_path has cyclomatic complexity 34 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui/providers/assistant.rs"},"region":{"startLine":438}}}],"partialFingerprints":{"codehealthFindingId/v1":"62becaf258667dd819da91326a0a18deac49fcd8ffc2bee674e37e2602660b1a"}},{"ruleId":"D1","level":"warning","message":{"text":"CommandDef::actions_for_palette_only (cyclomatic 34): CommandDef::actions_for_palette_only has cyclomatic complexity 34 (threshold 15). Of this number, 18 points are the body\u0027s own statements and 16 belong to 6 function items inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/commands.rs"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef865e10bf98f12d314e4a5533c06cdcfb19c82d5db3f514b583d059fd821229"}},{"ruleId":"D1","level":"warning","message":{"text":"LauncherState::run_loop (cyclomatic 34): LauncherState::run_loop has cyclomatic complexity 34 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/launcher.rs"},"region":{"startLine":624}}}],"partialFingerprints":{"codehealthFindingId/v1":"399bdbbcdc7d10cefe0a668b8709ed5a0b32875359bf40dc9b403bf4f36136f5"}},{"ruleId":"D1","level":"warning","message":{"text":"AiClient::chat_step (cyclomatic 33): AiClient::chat_step has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_client/mod.rs"},"region":{"startLine":461}}}],"partialFingerprints":{"codehealthFindingId/v1":"f65fee0029bdddf8828526f090ac8cc66dbe4b882ca0f67cf1c3176e3efe37b1"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_gui::remote_tabs::perform (cyclomatic 33): kaku_gui::remote_tabs::perform has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/remote_tabs.rs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa0b0cb841754112145b4fbf078833a99636ded8913b1a7175d0df1abd04d956"}},{"ruleId":"D1","level":"warning","message":{"text":"OperatingSystemCommand::fmt (cyclomatic 32): OperatingSystemCommand::fmt has cyclomatic complexity 32 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/osc.rs"},"region":{"startLine":558}}}],"partialFingerprints":{"codehealthFindingId/v1":"6be02975f650d5b6f384e7c81d9bb8574643ac4ebab171071c3737541bf28552"}},{"ruleId":"D1","level":"warning","message":{"text":"SessionInner::dispatch_one_request (cyclomatic 32): SessionInner::dispatch_one_request has cyclomatic complexity 32 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/sessioninner.rs"},"region":{"startLine":623}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5def3e4f2ea50e79a2194c2b381ea27ad21894857dcd060271411c99b395cce"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_gui::ai_chat_engine::run_agent (cyclomatic 32): kaku_gui::ai_chat_engine::run_agent has cyclomatic complexity 32 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_chat_engine/mod.rs"},"region":{"startLine":387}}}],"partialFingerprints":{"codehealthFindingId/v1":"76929dd3aa203664a7863ec1d1fbec15fdf715dad259e04b078193c2e23039cb"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_gui::overlay::ai_chat::input::handle_mouse (cyclomatic 32): kaku_gui::overlay::ai_chat::input::handle_mouse has cyclomatic complexity 32 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/input.rs"},"region":{"startLine":424}}}],"partialFingerprints":{"codehealthFindingId/v1":"be0d73feefdc3fadf4ced55c2f147a0136079388e25fdf42ee1cada844110ec3"}},{"ruleId":"D1","level":"warning","message":{"text":"TerminalState::perform_csi_edit (cyclomatic 32): TerminalState::perform_csi_edit has cyclomatic complexity 32 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/mod.rs"},"region":{"startLine":2364}}}],"partialFingerprints":{"codehealthFindingId/v1":"75699e8ff9a855eab31b9fb62631393a6ccbf61cdf06288b62bb2b3e5aa7ceca"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_remote::p2p::wrap (cyclomatic 31): kaku_remote::p2p::wrap has cyclomatic complexity 31 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/src/p2p.rs"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"741e392bf9d8e9fb13bfc7807de4b028a70bbf6e5fb5c3e554efe2aa9942776e"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_remote::p2p::carry (cyclomatic 31): kaku_remote::p2p::carry has cyclomatic complexity 31 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/src/p2p.rs"},"region":{"startLine":705}}}],"partialFingerprints":{"codehealthFindingId/v1":"19036adb42ac635a88e3c314ec85fe20e51a4d21ec4a2bfcd7d433e074e12de6"}},{"ruleId":"D1","level":"warning","message":{"text":"Cursor::fmt (cyclomatic 31): Cursor::fmt 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. This is NOT this file\u0027s highest cyclomatic complexity: CSIParser::parse_next (cyclomatic 74) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/csi.rs"},"region":{"startLine":1296}}}],"partialFingerprints":{"codehealthFindingId/v1":"44b32c2ba6fb830f315c8da431f6a022a7b2894ca81ee13d6de38211e5c87b60"}},{"ruleId":"D1","level":"warning","message":{"text":"wezterm_mux_server_impl::dispatch::process_async (cyclomatic 31): wezterm_mux_server_impl::dispatch::process_async has cyclomatic complexity 31 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-mux-server-impl/src/dispatch.rs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d66b9740acdfad78f6203bbe8b27f102e34051ac6fadadd6ea487e9ef697d7b"}},{"ruleId":"D1","level":"warning","message":{"text":"SelectorState::run_loop (cyclomatic 31): SelectorState::run_loop has cyclomatic complexity 31 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/selector.rs"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"23c44b4e7aab60fb7ac7f35f24b30c0e99a095cd81effee59218731db590bf2c"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_gui::ai_tools::search::fallback_regex_search (cyclomatic 31): kaku_gui::ai_tools::search::fallback_regex_search has cyclomatic complexity 31 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_tools/search.rs"},"region":{"startLine":269}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bb354fb5a54f9f7ab513d004fd676a7870e9d66f18fc1663d53171ce927606a"}},{"ruleId":"D1","level":"warning","message":{"text":"TmuxDomainState::advance (cyclomatic 31): TmuxDomainState::advance has cyclomatic complexity 31 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tmux.rs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5fa05c89df9719a47167001287402f0cec8abab44136192b10e00b9a4e3706a"}},{"ruleId":"D1","level":"warning","message":{"text":"Performer::csi_dispatch (cyclomatic 31): Performer::csi_dispatch 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":"term/src/terminalstate/performer.rs"},"region":{"startLine":596}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1a5b0f3c9a9e982782cb38b9c7a85777bb56aa85f0fd20d0b59be7572651c18"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_relay::device (cyclomatic 30): kaku_relay::device has cyclomatic complexity 30 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-relay/src/main.rs"},"region":{"startLine":508}}}],"partialFingerprints":{"codehealthFindingId/v1":"9bf2aef139d831e25aa61191eefb3b165dd01847c9b86e988c61e5fd96f9104d"}},{"ruleId":"D1","level":"warning","message":{"text":"MouseReport::fmt (cyclomatic 30): MouseReport::fmt has cyclomatic complexity 30 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This is NOT this file\u0027s highest cyclomatic complexity: CSIParser::parse_next (cyclomatic 74) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/csi.rs"},"region":{"startLine":686}}}],"partialFingerprints":{"codehealthFindingId/v1":"0293d4aed2041ea4e1262b961f04b7d289a0fbe9efa47445d84960739deb0803"}},{"ruleId":"D1","level":"warning","message":{"text":"HarfbuzzShaper::do_shape (cyclomatic 30): HarfbuzzShaper::do_shape has cyclomatic complexity 30 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/shaper/harfbuzz.rs"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"ccbcbdc13e36c548f757381e3eaf521cabe8321d97b11451e9ab1a955680058c"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::build_fancy_tab_bar (cyclomatic 30): TermWindow::build_fancy_tab_bar has cyclomatic complexity 30 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/fancy_tab_bar.rs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"a44517df39ef3320f8b274c3952a37a1a2af12f1df9af0d0ef98a62858dfec53"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_gui::ai_tools::execute (cyclomatic 30): kaku_gui::ai_tools::execute has cyclomatic complexity 30 (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":"kaku-gui/src/ai_tools/mod.rs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"8513be0e2522dc18ce6d39ed8c7cf3f6ae6db61cd60fc643b8000a9a5a7d6806"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_relay::serve_browser (cyclomatic 29): kaku_relay::serve_browser has cyclomatic complexity 29 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-relay/src/main.rs"},"region":{"startLine":1093}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3a6cbe376bc61c31f2cc92e08243029bfb0ae8feb67a45878149a267cd8b56d"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::process_key (cyclomatic 29): TermWindow::process_key has cyclomatic complexity 29 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/keyevent.rs"},"region":{"startLine":371}}}],"partialFingerprints":{"codehealthFindingId/v1":"b00c5f008fb03c9e744e260921ce4192c30caee782f4326b90fb43060c2dbee4"}},{"ruleId":"D1","level":"warning","message":{"text":"LineEditor::apply_action (cyclomatic 29): LineEditor::apply_action has cyclomatic complexity 29 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/lineedit/mod.rs"},"region":{"startLine":677}}}],"partialFingerprints":{"codehealthFindingId/v1":"33a004e9f084b7c78b97d45d55826e75ca23bd3f2e7103012d09cd3531a56cc0"}},{"ruleId":"D1","level":"warning","message":{"text":"wezterm_escape_parser::tmux_cc::unvis_bytes::unvis_byte (cyclomatic 28): wezterm_escape_parser::tmux_cc::unvis_bytes::unvis_byte 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. This is NOT this file\u0027s highest cyclomatic complexity: wezterm_escape_parser::tmux_cc::parse_line (cyclomatic 29) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/tmux_cc/mod.rs"},"region":{"startLine":538}}}],"partialFingerprints":{"codehealthFindingId/v1":"30767a8f39bd1feda64082cf4a014444b2f77b253bef23dc34ea598db71ec37c"}},{"ruleId":"D1","level":"warning","message":{"text":"wezterm_font::rasterizer::colr::apply_sweep_gradient_patches (cyclomatic 28): wezterm_font::rasterizer::colr::apply_sweep_gradient_patches has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/rasterizer/colr.rs"},"region":{"startLine":298}}}],"partialFingerprints":{"codehealthFindingId/v1":"068405e67cf6bc9c6e0d5ebb655c85872866825650acb62f8271362aa02dff6f"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku::config_tui::run_app (cyclomatic 28): kaku::config_tui::run_app 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":"kaku/src/config_tui/mod.rs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"b216504bc6a090333f639572de63f492901f78ddf92c50b57202d8b1bd6e34a1"}},{"ruleId":"D1","level":"warning","message":{"text":"GuiFrontEnd::try_new (cyclomatic 28): GuiFrontEnd::try_new 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":"kaku-gui/src/frontend.rs"},"region":{"startLine":647}}}],"partialFingerprints":{"codehealthFindingId/v1":"750f3f5b5dcefad48cd8d9881072c467ceef06bec8bd55debd034de0b15ddc0d"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_gui::ai_tools::project::exec_project_summary (cyclomatic 28): kaku_gui::ai_tools::project::exec_project_summary has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_tools/project.rs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"dea7d0f6d2c4267a9d7fffb4834b0df71b54f8f14799da3aa46738d5fe1b9398"}},{"ruleId":"D1","level":"warning","message":{"text":"Performer::control (cyclomatic 28): Performer::control has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/performer.rs"},"region":{"startLine":480}}}],"partialFingerprints":{"codehealthFindingId/v1":"a03dd35abce151b88c1f4ddceef44d6e7c155f73596f7f46d0445037d597316c"}},{"ruleId":"D1","level":"warning","message":{"text":"ProgramStatus::parse (cyclomatic 27): ProgramStatus::parse has cyclomatic complexity 27 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/osc.rs"},"region":{"startLine":985}}}],"partialFingerprints":{"codehealthFindingId/v1":"5036af9483733624cc4b7783b25ec3eb6761efa2dda75d6055ba0d9a6cab0f84"}},{"ruleId":"D1","level":"warning","message":{"text":"Face::compute_cap_height (cyclomatic 27): Face::compute_cap_height has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This is NOT this file\u0027s highest cyclomatic complexity: wezterm_font::ftwrap::composite_mode_to_operator (cyclomatic 29) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/ftwrap.rs"},"region":{"startLine":973}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1c4cf6ad65101afd1566964328fb86d979fffba62dc129b558c063bbbfa4563"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku::doctor::build_shell_integration_group (cyclomatic 27): kaku::doctor::build_shell_integration_group has cyclomatic complexity 27 (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":"kaku/src/doctor.rs"},"region":{"startLine":448}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5e1b6da408d6369f7b7cfaa23e8469442d225b2fa3d5161b4524327ccad3c41"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::apply_dimensions (cyclomatic 27): TermWindow::apply_dimensions has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/resize.rs"},"region":{"startLine":481}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c8c85e07baf16d20762f4cf1426875904fe89796b40bf1aac391005894f19e9"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_gui::ai_tools::search::exec_grep_search (cyclomatic 27): kaku_gui::ai_tools::search::exec_grep_search has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_tools/search.rs"},"region":{"startLine":734}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e2b355b316a56de53baa81ef64ce10f886e34f8f2523b1f25896e9c4bdb9d44"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_gui::overlay::ai_chat::markdown::wrap_segments (cyclomatic 27): kaku_gui::overlay::ai_chat::markdown::wrap_segments has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/markdown.rs"},"region":{"startLine":451}}}],"partialFingerprints":{"codehealthFindingId/v1":"46b368932db00afda3b28581b2d35ba823725061385baf2c11e268a1a247f4bd"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_gui::overlay::ai_chat::render::render_chat (cyclomatic 27): kaku_gui::overlay::ai_chat::render::render_chat has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/render.rs"},"region":{"startLine":463}}}],"partialFingerprints":{"codehealthFindingId/v1":"443f32b0f65521b28f169403ddf0202c0e952f0dafd8dc23cda6084835b1a63f"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_relay::serve_host (cyclomatic 26): kaku_relay::serve_host has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-relay/src/main.rs"},"region":{"startLine":741}}}],"partialFingerprints":{"codehealthFindingId/v1":"b87ef4ccc08e2a6a081fdd35b918239a22292bf6c574a0742acf340c727da24a"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_remote::web::handle_upload (cyclomatic 26): kaku_remote::web::handle_upload has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/src/web.rs"},"region":{"startLine":1241}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf73fb8f200691487e33b84aaf714f0f5a73d71d7a3c4f7bd65a3141ef9d1b80"}},{"ruleId":"D1","level":"warning","message":{"text":"VTParser::action (cyclomatic 26): VTParser::action has cyclomatic complexity 26 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/vtparse/src/lib.rs"},"region":{"startLine":526}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ca5ce24609f6378b38b194de9824cacb63bdd31a9a775221e331e05147699f6"}},{"ruleId":"D1","level":"warning","message":{"text":"ParsedConfigFile::parse_impl (cyclomatic 26): ParsedConfigFile::parse_impl has cyclomatic complexity 26 (threshold 15). Of this number, 21 points are the body\u0027s own statements and 5 belong to 3 function items inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/config.rs"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee6d8140fae63353e4c805627bf1f6549c9a9f3dbc9b744363e7725526d70403"}},{"ruleId":"D1","level":"warning","message":{"text":"GlyphCache::load_glyph (cyclomatic 26): GlyphCache::load_glyph has cyclomatic complexity 26 (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":"kaku-gui/src/glyphcache.rs"},"region":{"startLine":702}}}],"partialFingerprints":{"codehealthFindingId/v1":"75cc4c38c700ad1859edff724a574bc1a12423df22ab5e6c9218727718cbb2b4"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_gui::ai_chat_engine::approval::split_shell_segments (cyclomatic 26): kaku_gui::ai_chat_engine::approval::split_shell_segments has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_chat_engine/approval.rs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"779f181ec7ff7f0ea22b539c2df2b1ded5d984a319ca6eeeb3c567260eb551e5"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_gui::overlay::ai_chat::ai_chat_overlay (cyclomatic 26): kaku_gui::overlay::ai_chat::ai_chat_overlay has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/mod.rs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"da47932ae01a891bce612af50b9123f47f5cb1fb12ac3c545481d451eb020e43"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_gui::termwindow::wrapped_link::rejoined_links (cyclomatic 26): kaku_gui::termwindow::wrapped_link::rejoined_links has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/wrapped_link.rs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"71591914011ce3d45ae07c653a94ecf06cf4db3f516dc4c4997024b257beb91d"}},{"ruleId":"D1","level":"warning","message":{"text":"SrgbaTuple::from_str (cyclomatic 25): SrgbaTuple::from_str has cyclomatic complexity 25 (threshold 15). Of this number, 21 points are the body\u0027s own statements and 4 belong to 2 function items inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/color-types/src/lib.rs"},"region":{"startLine":778}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7c1c8baab6db05534f1d2ef585786193138f1a110fdb549b9dea0aeb437251c"}},{"ruleId":"D1","level":"warning","message":{"text":"luahelper::lua_value_to_dynamic_impl (cyclomatic 25): luahelper::lua_value_to_dynamic_impl has cyclomatic complexity 25 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/luahelper/src/lib.rs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"04b274ee0e0e9891b91c79d177fb9bdc6b992ca467588c76304962516a20e98e"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku::run_remote (cyclomatic 25): kaku::run_remote has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/main.rs"},"region":{"startLine":323}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4bf01f340a36ca72e5fcf5d835fcbcf90854a4bb471f15d766a6fc7b31396d7"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_gui::tabbar::parse_status_text (cyclomatic 25): kaku_gui::tabbar::parse_status_text has cyclomatic complexity 25 (threshold 15). Of this number, 23 points are the body\u0027s own statements and 2 belong to one function item inside it that branches. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/tabbar.rs"},"region":{"startLine":1427}}}],"partialFingerprints":{"codehealthFindingId/v1":"2732bb967abf66be839c07a705b40b5de07c73803e0be97df775c00fdcc4e132"}},{"ruleId":"D1","level":"warning","message":{"text":"share_data::lua_value_to_gvalue_impl (cyclomatic 25): share_data::lua_value_to_gvalue_impl has cyclomatic complexity 25 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lua-api-crates/share-data/src/lib.rs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"c752cc6becfa95fbd6644c77938588f0812b156ecf12838d158a9c8da00bba4d"}},{"ruleId":"D1","level":"warning","message":{"text":"mux::parse_buffered_data (cyclomatic 25): mux::parse_buffered_data has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/lib.rs"},"region":{"startLine":336}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f12c48bc00db29c80f8cbf71b199bd669d0e7971c5b46346f44b134eaf208f8"}},{"ruleId":"D1","level":"warning","message":{"text":"serde_funcs::lua_value_to_json_value (cyclomatic 25): serde_funcs::lua_value_to_json_value has cyclomatic complexity 25 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lua-api-crates/serde-funcs/src/lib.rs"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c2047c2d71c890cee7bc01089b25b92babe98960451199010e85331b670dfac"}},{"ruleId":"D1","level":"warning","message":{"text":"ParsedFont::lua_fallback (cyclomatic 24): ParsedFont::lua_fallback has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/parser.rs"},"region":{"startLine":292}}}],"partialFingerprints":{"codehealthFindingId/v1":"295282a654b2412218a3bf8deaf03758d439d74a9df78e53d32c5b5a208d3480"}},{"ruleId":"D1","level":"warning","message":{"text":"CommandDef::recreate_menubar (cyclomatic 24): CommandDef::recreate_menubar has cyclomatic complexity 24 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This shape REPEATS in the file: 2 other methods here (CommandDef::recreate_menubar::command_rank_for_menu, CommandDef::recreate_menubar::separator_group_for_menu) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 3 times rather than 3 independent problems. Splitting this body alone leaves the other 2 exactly as they are. Where these are variations on one operation, the change that clears all 3 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/commands.rs"},"region":{"startLine":665}}}],"partialFingerprints":{"codehealthFindingId/v1":"727fb59f5c9d84a1354af4367bfa163fdfd7014e0953b70ebc6d88152f949be5"}},{"ruleId":"D1","level":"warning","message":{"text":"GlyphCache::line_sprite (cyclomatic 24): GlyphCache::line_sprite has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/glyphcache.rs"},"region":{"startLine":1184}}}],"partialFingerprints":{"codehealthFindingId/v1":"944c44258470912b7290c5e6cd9b297903374c7b813c4d17f1ea1285760e5fc2"}},{"ruleId":"D1","level":"warning","message":{"text":"LauncherState::build_entries (cyclomatic 24): LauncherState::build_entries has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/launcher.rs"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"3119c4851f757354cb3afe3b5e1393970eec9fbd1beffd9d0201f16f54f76871"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::show_launcher_impl (cyclomatic 24): TermWindow::show_launcher_impl has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":4440}}}],"partialFingerprints":{"codehealthFindingId/v1":"798d3ac348993a6ab33496bf9dd96d65f570948bec498edd58aff3e34fb45454"}},{"ruleId":"D1","level":"warning","message":{"text":"ToolState::load_with_usage (cyclomatic 23): ToolState::load_with_usage 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":"kaku/src/ai_config/tui.rs"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5ef9b796c1ca950d2f35eaedb7aa58e6dbc1904d602a7829bf8cb73f376a386"}},{"ruleId":"D1","level":"warning","message":{"text":"App::normalize_value (cyclomatic 23): App::normalize_value 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":"kaku/src/config_tui/mod.rs"},"region":{"startLine":987}}}],"partialFingerprints":{"codehealthFindingId/v1":"86cf8811792e95a87739341e415894459b34d5efb141cfd2d86ac7e3e4b1c8ff"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku::ai_config::tui::providers::codex::codex_connection_is_configured_at (cyclomatic 23): kaku::ai_config::tui::providers::codex::codex_connection_is_configured_at has cyclomatic complexity 23 (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":"kaku/src/ai_config/tui/providers/codex.rs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ba1ffeb8caca7fd3eec1354daab80bf540b7baba9f2b23d0e6a50732dfc0746"}},{"ruleId":"D1","level":"warning","message":{"text":"CommandDef::actions_for_palette_and_menubar (cyclomatic 23): CommandDef::actions_for_palette_and_menubar 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":"kaku-gui/src/commands.rs"},"region":{"startLine":482}}}],"partialFingerprints":{"codehealthFindingId/v1":"db14721826a3cfb1225ac9c18e0573f2513e7fc5eb8b6605c417ca4c5789224e"}},{"ruleId":"D1","level":"warning","message":{"text":"GuiFrontEnd::app_event_handler (cyclomatic 23): GuiFrontEnd::app_event_handler has cyclomatic complexity 23 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/frontend.rs"},"region":{"startLine":1116}}}],"partialFingerprints":{"codehealthFindingId/v1":"a497d16a87a091facc0b5d2a0fb999b9aed46d138fe73890651585dadbb1ec71"}},{"ruleId":"D1","level":"warning","message":{"text":"App::submit (cyclomatic 23): App::submit has cyclomatic complexity 23 (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":"kaku-gui/src/overlay/ai_chat/state.rs"},"region":{"startLine":1594}}}],"partialFingerprints":{"codehealthFindingId/v1":"618865dd0ad62d10db134727799b6e775121c4c2073cf7fd92a8f25b455f86a4"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::render_background (cyclomatic 23): TermWindow::render_background has cyclomatic complexity 23 (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":"kaku-gui/src/termwindow/background.rs"},"region":{"startLine":428}}}],"partialFingerprints":{"codehealthFindingId/v1":"22238129640cbe98dfa244607157b07c2576a1dd3d35d5d4514f9435761fd577"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::compute_element (cyclomatic 23): TermWindow::compute_element 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":"kaku-gui/src/termwindow/box_model.rs"},"region":{"startLine":542}}}],"partialFingerprints":{"codehealthFindingId/v1":"023ae78ab7ca2715a241c159ed642358037e46d1270a0c2d2ba3dab7a3fff24b"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::new_window (cyclomatic 23): TermWindow::new_window has cyclomatic complexity 23 (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":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":1591}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6bab882934ebfefa0ec60b8fee49ee006a780e0b3cd1306181fff9c5c2306e1"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::rejoin_wrapped_link (cyclomatic 23): TermWindow::rejoin_wrapped_link 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":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":5598}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6fa1d8b4d821fbaba93c8cc5300cebd5565b3ff38a8821b1b69f53de2914c51"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::compute_cell_fg_bg (cyclomatic 23): TermWindow::compute_cell_fg_bg 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":"kaku-gui/src/termwindow/render/mod.rs"},"region":{"startLine":700}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ee31e8cc8ff70253b5661fa2cfe36c1a3e6d4781d357d3499e7b8281fd4c88c"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_gui::overlay::confirm::run_confirmation_impl (cyclomatic 23): kaku_gui::overlay::confirm::run_confirmation_impl 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":"kaku-gui/src/overlay/confirm.rs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1eb9eca1efe2045ed75870b41d868a50de4a3ce1a697f66c62f06dcbe2acf22"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_gui::update::update_checker (cyclomatic 23): kaku_gui::update::update_checker 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":"kaku-gui/src/update.rs"},"region":{"startLine":555}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0f9285d662a0e78cf98c84409aefdffcb183790f8f27587c686beda3dbd3c33"}},{"ruleId":"D1","level":"warning","message":{"text":"LocalPane::is_dead (cyclomatic 23): LocalPane::is_dead 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":"mux/src/localpane.rs"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"872fc12885bf7acaac54d6708055c0415cac1d6b05531f2cde9dcbe16dcda6d1"}},{"ruleId":"D1","level":"warning","message":{"text":"InputParser::build_basic_key_map (cyclomatic 23): InputParser::build_basic_key_map has cyclomatic complexity 23 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/input.rs"},"region":{"startLine":640}}}],"partialFingerprints":{"codehealthFindingId/v1":"1264ae053777c3f835ea389973c2013201d746fb10fe3ef6812f988be4818693"}},{"ruleId":"D1","level":"warning","message":{"text":"LineEditBuffer::eval_movement (cyclomatic 23): LineEditBuffer::eval_movement 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":"termwiz/src/lineedit/buffer.rs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"45d24ca31e937ac2e02e042c7b10ffed67fbe9d09b909b1f466cfb1dc6131978"}},{"ruleId":"D1","level":"warning","message":{"text":"ValuePrinterHelper::fmt (cyclomatic 22): ValuePrinterHelper::fmt 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":"crates/luahelper/src/lib.rs"},"region":{"startLine":344}}}],"partialFingerprints":{"codehealthFindingId/v1":"611c10b3643a52d20e5a5619b85ff59eb102a8107f1dc42ee0249ce072e66413"}},{"ruleId":"D1","level":"warning","message":{"text":"wezterm_dynamic_derive::attr::field_info (cyclomatic 22): wezterm_dynamic_derive::attr::field_info has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-dynamic/derive/src/attr.rs"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"63b0b04290bf65f0e870ef6e54ca714945dddb0220b9d75f07adfddfe3a766fe"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku::select_main_menu_command (cyclomatic 22): kaku::select_main_menu_command has cyclomatic complexity 22 (threshold 15). Of this number, 14 points are the body\u0027s own statements and 8 belong to 2 function items inside it that branch. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/main.rs"},"region":{"startLine":786}}}],"partialFingerprints":{"codehealthFindingId/v1":"66de182992934edc216ea85b8c4e0e48893610dd7b30d127b9ad10a7c7538f0b"}},{"ruleId":"D1","level":"warning","message":{"text":"App::rebuild_display_cache (cyclomatic 22): App::rebuild_display_cache has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/state.rs"},"region":{"startLine":1228}}}],"partialFingerprints":{"codehealthFindingId/v1":"100c76cfcf7598142d2db4e5baf737092b09b657267b265d5c8f0a0ef276fbcc"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::paint_impl (cyclomatic 22): TermWindow::paint_impl has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/paint.rs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"95f45295747c5520a805c1b0ee46e4cdec3392b2538582ed171a5c83d00ca517"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_gui::ai_tools::shell::exec_shell_exec (cyclomatic 22): kaku_gui::ai_tools::shell::exec_shell_exec has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_tools/shell.rs"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f1a93f82270c157ce967bb5bbf8d3d91d2889cac028193ed330d1e54d7d2aee"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_gui::overlay::ai_chat::markdown::parse_markdown_blocks (cyclomatic 22): kaku_gui::overlay::ai_chat::markdown::parse_markdown_blocks has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/markdown.rs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"49aa79850b606266d632ef4e9ce3a6bc98b7ca32ef9d80dd6d49d8e8376e7832"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_gui::overlay::ai_chat::state::emit_assistant_markdown (cyclomatic 22): kaku_gui::overlay::ai_chat::state::emit_assistant_markdown has cyclomatic complexity 22 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/state.rs"},"region":{"startLine":476}}}],"partialFingerprints":{"codehealthFindingId/v1":"8977bb146c23cd111c77b8bb403fbc6cba5b9653c08faa1ffc6de38f88074d8b"}},{"ruleId":"D1","level":"warning","message":{"text":"LocalPane::search (cyclomatic 22): LocalPane::search has cyclomatic complexity 22 (threshold 15). Of this number, 18 points are the body\u0027s own statements and 4 belong to 2 function items inside it that branch. 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":"mux/src/localpane.rs"},"region":{"startLine":768}}}],"partialFingerprints":{"codehealthFindingId/v1":"a60d2e4cebb9d898bf0b6e008f3f359ceb6b3c74d1033f74345ca9fcdc6f8b46"}},{"ruleId":"D1","level":"warning","message":{"text":"mux::read_from_pane_pty (cyclomatic 22): mux::read_from_pane_pty has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/lib.rs"},"region":{"startLine":613}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ea7d36eaf5f3fc9206a7d1d3802b2e9f5d134de2bb94174927aba3a7a25a73a"}},{"ruleId":"D1","level":"warning","message":{"text":"mux::ssh::connect_ssh_session (cyclomatic 22): mux::ssh::connect_ssh_session has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/ssh.rs"},"region":{"startLine":430}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2868536ad3e81b75b8b07cd226658f26695d4a83197953ab143e88f6dcc858e"}},{"ruleId":"D1","level":"warning","message":{"text":"Screen::scroll_up (cyclomatic 22): Screen::scroll_up has cyclomatic complexity 22 (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":"term/src/screen.rs"},"region":{"startLine":710}}}],"partialFingerprints":{"codehealthFindingId/v1":"877cc9401e83ed94cb457d2c6e84b6ce12e6384a88a40a3dddf5f61bf349c811"}},{"ruleId":"D1","level":"warning","message":{"text":"ConfigInner::watch_path (cyclomatic 21): ConfigInner::watch_path has cyclomatic complexity 21 (threshold 15). Of this number, 19 points are the body\u0027s own statements and 2 belong to one function item inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/lib.rs"},"region":{"startLine":1864}}}],"partialFingerprints":{"codehealthFindingId/v1":"77b240823a508cc87b0896dd3aefcabf5071eb327794dd2c1e0348f81c683c80"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_remote::share::advance (cyclomatic 21): kaku_remote::share::advance has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/src/share.rs"},"region":{"startLine":361}}}],"partialFingerprints":{"codehealthFindingId/v1":"10065449e9490188bf5e9614015a2dc1270556567854eb7de76999e9f545c20c"}},{"ruleId":"D1","level":"warning","message":{"text":"FinalTermSemanticPrompt::parse (cyclomatic 21): FinalTermSemanticPrompt::parse 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":"crates/wezterm-escape-parser/src/osc.rs"},"region":{"startLine":767}}}],"partialFingerprints":{"codehealthFindingId/v1":"424f191177addcec68e9f5ef153d9127649f87d5808ca2da8855c171b7bff43b"}},{"ruleId":"D1","level":"warning","message":{"text":"Surface::repaint_all (cyclomatic 21): Surface::repaint_all has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-surface/src/lib.rs"},"region":{"startLine":580}}}],"partialFingerprints":{"codehealthFindingId/v1":"f83a627cd5b5b71cdea6a4c4d1983c87a2a15e4909fc44cf0eb6e9050b092d39"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::update_title_impl (cyclomatic 21): TermWindow::update_title_impl has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":3793}}}],"partialFingerprints":{"codehealthFindingId/v1":"b347baa7beac299656b14c91db0287338a2ba1978382eed856ae312c1eeee8af"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::resize (cyclomatic 21): TermWindow::resize 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":"kaku-gui/src/termwindow/resize.rs"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c472bfd21158b6ab8d5caaf2a4f1e08cd7a77fa82ae63a0d0e7e18bed647275"}},{"ruleId":"D1","level":"warning","message":{"text":"WebGpuState::new_impl (cyclomatic 21): WebGpuState::new_impl has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/webgpu.rs"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"cee325bda5657c3ca76c341c75deab2514f73db9a76400f3a7304f1f54c3d2d3"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_gui::ai_tools::search::exec_symbol_search (cyclomatic 21): kaku_gui::ai_tools::search::exec_symbol_search has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_tools/search.rs"},"region":{"startLine":557}}}],"partialFingerprints":{"codehealthFindingId/v1":"62fe409c68424c778fbedc67dc9f648b614472c5b3e78d57f655fab5e8aaf57b"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_gui::async_run_terminal_gui (cyclomatic 21): kaku_gui::async_run_terminal_gui has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/main.rs"},"region":{"startLine":350}}}],"partialFingerprints":{"codehealthFindingId/v1":"c32caa86c73273f76aaf6a3f33b677845ffb27e389d325e9c952fa86e5882cad"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_gui::overlay::ai_chat::render::format_tool_suffix (cyclomatic 21): kaku_gui::overlay::ai_chat::render::format_tool_suffix has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/render.rs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"15103d912fac8b3cf66322d21735108d967887b0ff678b122d235d8b2372cad7"}},{"ruleId":"D1","level":"warning","message":{"text":"TerminalState::sixel (cyclomatic 21): TerminalState::sixel 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":"term/src/terminalstate/sixel.rs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"fde02d9f8dc98600a9bba4200197f7bbddc3d77440473182756ad13b30231013"}},{"ruleId":"D1","level":"warning","message":{"text":"WindowView::scroll_wheel (cyclomatic 21): WindowView::scroll_wheel has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/window.rs"},"region":{"startLine":8565}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca22112f91df3696e022b8b58427c8844cf9fbceabee733ab20d0553146344a7"}},{"ruleId":"D1","level":"warning","message":{"text":"ClientDomain::process_pane_list (cyclomatic 20): ClientDomain::process_pane_list has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/domain.rs"},"region":{"startLine":504}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6a09776c933b8b53410d0a4cd8d72cdad94eb96f07d6b6bed8b8aacc9f21c8f"}},{"ruleId":"D1","level":"warning","message":{"text":"wezterm_client::domain::mux_notify_client_domain (cyclomatic 20): wezterm_client::domain::mux_notify_client_domain has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/domain.rs"},"region":{"startLine":269}}}],"partialFingerprints":{"codehealthFindingId/v1":"03e3cff769fc9dbc687a36e5c1b1e27b8ba38c8a884ed15ec65ebad04d7c3c22"}},{"ruleId":"D1","level":"warning","message":{"text":"FontConfigInner::match_style (cyclomatic 20): FontConfigInner::match_style has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/lib.rs"},"region":{"startLine":1131}}}],"partialFingerprints":{"codehealthFindingId/v1":"0272763087f6a883240f24f22e5312b401b2ec91615446f8263bad3b6a248815"}},{"ruleId":"D1","level":"warning","message":{"text":"SessionInner::request_loop (cyclomatic 20): SessionInner::request_loop has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/sessioninner.rs"},"region":{"startLine":426}}}],"partialFingerprints":{"codehealthFindingId/v1":"3064bbcf3e365f023fb7028002bc63b159eabcd9abb92e8372073ed4ea5b7698"}},{"ruleId":"D1","level":"warning","message":{"text":"App::start_edit (cyclomatic 20): App::start_edit 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":"kaku/src/ai_config/tui.rs"},"region":{"startLine":2428}}}],"partialFingerprints":{"codehealthFindingId/v1":"31e7c71d6bc12b551691086f7f476b4333591ac3809bb61b71b830ee9aaa5ef6"}},{"ruleId":"D1","level":"warning","message":{"text":"App::to_lua_value (cyclomatic 20): App::to_lua_value has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/config_tui/mod.rs"},"region":{"startLine":1501}}}],"partialFingerprints":{"codehealthFindingId/v1":"27b1b1beaf55378821f4f59f75e4f707bb2a21124ed834b956dd49e9d54f9cbb"}},{"ruleId":"D1","level":"warning","message":{"text":"Tui::drain_stream (cyclomatic 20): Tui::drain_stream has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/cli_chat/mod.rs"},"region":{"startLine":354}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f78a30b3f0a7834eb7a9a07cc7b5294a2b1b6cc21d716c59e82d5ddb11a698b"}},{"ruleId":"D1","level":"warning","message":{"text":"CommandDef::recreate_menubar::separator_group_for_menu (cyclomatic 20): CommandDef::recreate_menubar::separator_group_for_menu has cyclomatic complexity 20 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This shape REPEATS in the file: 2 other methods here (CommandDef::recreate_menubar, CommandDef::recreate_menubar::command_rank_for_menu) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 3 times rather than 3 independent problems. Splitting this body alone leaves the other 2 exactly as they are. Where these are variations on one operation, the change that clears all 3 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/commands.rs"},"region":{"startLine":801}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf3735f0562b7caeb3f4eea5ee6d1cdefbec76e9a966d26d09d06c6a23510240"}},{"ruleId":"D1","level":"warning","message":{"text":"LauncherState::render (cyclomatic 20): LauncherState::render has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/launcher.rs"},"region":{"startLine":406}}}],"partialFingerprints":{"codehealthFindingId/v1":"19a5374997ad7f608d2f0bb370c41ddca594e061d7708658e420f92f5dd99ee4"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::render_element_background (cyclomatic 20): TermWindow::render_element_background 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":"kaku-gui/src/termwindow/box_model.rs"},"region":{"startLine":1036}}}],"partialFingerprints":{"codehealthFindingId/v1":"58f70e4b99dc9f5c55c192b1a55abdf97be413435b1cc74dca3e610fd5405002"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::maybe_handle_native_line_editor_shortcut (cyclomatic 20): TermWindow::maybe_handle_native_line_editor_shortcut has cyclomatic complexity 20 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/keyevent.rs"},"region":{"startLine":738}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c4b3932f9ef719e60187fb2f41507abfa4c519be22a55d729672e0096e9d8f3"}},{"ruleId":"D1","level":"warning","message":{"text":"TabInner::get_pane_direction (cyclomatic 20): TabInner::get_pane_direction has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tab.rs"},"region":{"startLine":1931}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a750e0faaadfbaa241eccf9a00501a883b4ecae461193e4a2fd4949f7e4b962"}},{"ruleId":"D1","level":"warning","message":{"text":"TmuxDomainState::sync_window_state (cyclomatic 20): TmuxDomainState::sync_window_state has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tmux_commands.rs"},"region":{"startLine":373}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6eb21855bff0960dc120f4db6c439067a207f8a121d038c6b15ba550d127742"}},{"ruleId":"D1","level":"warning","message":{"text":"TerminalState::set_image (cyclomatic 20): TerminalState::set_image has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/iterm.rs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"89236f8adb1dff5bd5483f5df0504dd421ed45edf538188646c6730f7e5db4b9"}},{"ruleId":"D1","level":"warning","message":{"text":"BidiContext::reverse_levels (cyclomatic 19): BidiContext::reverse_levels has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/bidi/src/lib.rs"},"region":{"startLine":355}}}],"partialFingerprints":{"codehealthFindingId/v1":"abbb60be57d798ebe428e4153ff34280543b8ac1be61110502fc2faafbec244e"}},{"ruleId":"D1","level":"warning","message":{"text":"WcLookupTable::new (cyclomatic 19): WcLookupTable::new has cyclomatic complexity 19 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-char-props/src/widechar_width.rs"},"region":{"startLine":1603}}}],"partialFingerprints":{"codehealthFindingId/v1":"b487b13cea4df3c7becc8908e870c96190c1353bdce3b389027b544f71b80eae"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku::update::imp::run (cyclomatic 19): kaku::update::imp::run has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/update.rs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"e29c76936a0d896fe513018aa32383e9ccb9076ec628b8ac0aeae6e07c2f08d2"}},{"ruleId":"D1","level":"warning","message":{"text":"App::activate_control (cyclomatic 19): App::activate_control has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/state.rs"},"region":{"startLine":1460}}}],"partialFingerprints":{"codehealthFindingId/v1":"33c97705bd55378dfce5b28f56b7757246568844a80dbf865f4eff3bc6f75ec0"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::raw_key_event_impl (cyclomatic 19): TermWindow::raw_key_event_impl has cyclomatic complexity 19 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/keyevent.rs"},"region":{"startLine":528}}}],"partialFingerprints":{"codehealthFindingId/v1":"8777f2a674ba4e91e200dee1afb3e7473f469a1faba71606b455b3fc80f4d3ff"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_gui::ai_chat_engine::build_environment_message (cyclomatic 19): kaku_gui::ai_chat_engine::build_environment_message has cyclomatic complexity 19 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_chat_engine/mod.rs"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"04d5ab3f33b4ec56609d4d690d665d105592867c6d3eb38acd60f41d2cca43b9"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_gui::ai_chat_engine::approval::git_is_read_only (cyclomatic 19): kaku_gui::ai_chat_engine::approval::git_is_read_only has cyclomatic complexity 19 (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":"kaku-gui/src/ai_chat_engine/approval.rs"},"region":{"startLine":494}}}],"partialFingerprints":{"codehealthFindingId/v1":"16d2af0f2e14970879adda19f3214a21761753ef3fbf15bd71b44556f7438bde"}},{"ruleId":"D1","level":"warning","message":{"text":"svg_to_poly.parse (cyclomatic 19): svg_to_poly.parse has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/svg_to_poly.py"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"48bb1fe1a5845846e4afe34209e3be32b2072cd4d54a14f448e960667d496d3a"}},{"ruleId":"D1","level":"warning","message":{"text":"config::proxy::parse_scutil_proxy (cyclomatic 18): config::proxy::parse_scutil_proxy 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":"config/src/proxy.rs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a50e7c4fda2c530aaebf5cd310d41167d269426cf3b35067b420fb4fde451f3"}},{"ruleId":"D1","level":"warning","message":{"text":"Shown::update (cyclomatic 18): Shown::update has cyclomatic complexity 18 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/src/web.rs"},"region":{"startLine":2026}}}],"partialFingerprints":{"codehealthFindingId/v1":"0528eaf898580f4d62763ac91d1f40c70b4872aed886b492f6434427ae9e71de"}},{"ruleId":"D1","level":"warning","message":{"text":"CoreTextFontLocator::locate_fallback_for_codepoints (cyclomatic 18): CoreTextFontLocator::locate_fallback_for_codepoints has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/locator/core_text.rs"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"b43eed7b9096bd6b3e5f1a785d1d715258173871f72faeacb2f2ad44b5844577"}},{"ruleId":"D1","level":"warning","message":{"text":"ParsedFont::best_matching_index (cyclomatic 18): ParsedFont::best_matching_index has cyclomatic complexity 18 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/parser.rs"},"region":{"startLine":612}}}],"partialFingerprints":{"codehealthFindingId/v1":"b375b5749eff3d117a6ad34c8dd52d708309572d67988b8681e2a635a897ca97"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku::doctor::build_environment_group (cyclomatic 18): kaku::doctor::build_environment_group 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":"kaku/src/doctor.rs"},"region":{"startLine":262}}}],"partialFingerprints":{"codehealthFindingId/v1":"76f11b1088db68f587c9f00860b667bfc6df0142549798f560e148a5a78450cd"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku::utils::strip_jsonc_comments (cyclomatic 18): kaku::utils::strip_jsonc_comments 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":"kaku/src/utils.rs"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"df6d321068930beaefdced2f706fcc79c9126f63c9a902f2cbca6206784e2cf1"}},{"ruleId":"D1","level":"warning","message":{"text":"CharSelector::key_down (cyclomatic 18): CharSelector::key_down 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":"kaku-gui/src/termwindow/charselect.rs"},"region":{"startLine":604}}}],"partialFingerprints":{"codehealthFindingId/v1":"83baaf444f550d11c2f4e02c3acbfde0a952f803fcc81ede8107f5f4ac025e79"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_gui::ai_chat_engine::approval::curl_is_dangerous (cyclomatic 18): kaku_gui::ai_chat_engine::approval::curl_is_dangerous has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This is NOT this file\u0027s highest cyclomatic complexity: kaku_gui::ai_chat_engine::approval::shell_tokens_are_dangerous (cyclomatic 19) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_chat_engine/approval.rs"},"region":{"startLine":372}}}],"partialFingerprints":{"codehealthFindingId/v1":"c84fe77cbf039ecab283b2260b21fbc5c757e3eb148ae40d3efcc340c7e7c005"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_gui::overlay::ai_chat::input::extract_selection_text (cyclomatic 18): kaku_gui::overlay::ai_chat::input::extract_selection_text 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":"kaku-gui/src/overlay/ai_chat/input.rs"},"region":{"startLine":557}}}],"partialFingerprints":{"codehealthFindingId/v1":"6539f1eeaae51c240281d89d83c4f3edfd7ded9692d2506fc88c067c946ebb66"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_gui::overlay::ai_chat::render::build_line_runs (cyclomatic 18): kaku_gui::overlay::ai_chat::render::build_line_runs has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This is NOT this file\u0027s highest cyclomatic complexity: kaku_gui::overlay::ai_chat::render::tool_verb (cyclomatic 19) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/render.rs"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"812d7360f96fea6390b61bc1d621edf58f24ebcda9de0974f3dc1621c7418f49"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_gui::termwindow::charselect::build_aliases (cyclomatic 18): kaku_gui::termwindow::charselect::build_aliases has cyclomatic complexity 18 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/charselect.rs"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"0da630597b581ce2c145748d8bcf06c0ae51eb509037aef3c46ea09887554f26"}},{"ruleId":"D1","level":"warning","message":{"text":"LocalDomain::fixup_command (cyclomatic 18): LocalDomain::fixup_command 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":"mux/src/domain.rs"},"region":{"startLine":313}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca36bab9070d2b43071d60be66e3a071d94ef1924d0ab6645b017fd042bc4b4e"}},{"ruleId":"D1","level":"warning","message":{"text":"ColorPalette::from (cyclomatic 18): ColorPalette::from has cyclomatic complexity 18 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/color.rs"},"region":{"startLine":313}}}],"partialFingerprints":{"codehealthFindingId/v1":"59fc1d903e22b0e85f6bb4ab330f76605712c2f110e60823f5a02fd814369849"}},{"ruleId":"D1","level":"warning","message":{"text":"ParsedFont::from_face (cyclomatic 17): ParsedFont::from_face has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/parser.rs"},"region":{"startLine":385}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4bfdfbd92749b8b2dfc6a4aeb16f62dd09aad0bfad1f725ad0bc19f69912991"}},{"ruleId":"D1","level":"warning","message":{"text":"CellCluster::make_cluster (cyclomatic 17): CellCluster::make_cluster has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-surface/src/cellcluster.rs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"01dffd445f17796efb7dcb533bb4309b1b159bb6ea0e586577cd0e6b3c4449ba"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku::ai_config::tui::extract_openclaw_fields (cyclomatic 17): kaku::ai_config::tui::extract_openclaw_fields 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":"kaku/src/ai_config/tui.rs"},"region":{"startLine":1757}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b82f193cca7f64a03d00db80d3384223633c964e5e04ef9d7542cf5bb0ef5c3"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku::reset::imp::strip_legacy_inline_block (cyclomatic 17): kaku::reset::imp::strip_legacy_inline_block 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":"kaku/src/reset.rs"},"region":{"startLine":712}}}],"partialFingerprints":{"codehealthFindingId/v1":"f745bec0f155958059085eb664fae6f4708d74da59db101bb2d63e541063456d"}},{"ruleId":"D1","level":"warning","message":{"text":"GlyphCache::cached_image_impl (cyclomatic 17): GlyphCache::cached_image_impl 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":"kaku-gui/src/glyphcache.rs"},"region":{"startLine":931}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e9b23b985ac96f241ce40c972bfa9ae473e9d036ae956eb175aca04648b21f6"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::focus_changed (cyclomatic 17): TermWindow::focus_changed has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":1286}}}],"partialFingerprints":{"codehealthFindingId/v1":"39b5da9ecc901956dcee84a721eb2c9cd03d9e1258ad8151cb99c37fae95b80e"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::subscribe_to_pane_updates (cyclomatic 17): TermWindow::subscribe_to_pane_updates 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":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":3015}}}],"partialFingerprints":{"codehealthFindingId/v1":"b13002bc1630db6e90b5adc014f9385fe6f5ded4943746a69a291f32a98d465c"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::open_file_link_target (cyclomatic 17): TermWindow::open_file_link_target has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":5757}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5db13f6e627030139c719a989eeaf980b470f61a1c530a56fe74a4b0f43bf9c"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::selection_text (cyclomatic 17): TermWindow::selection_text 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":"kaku-gui/src/termwindow/selection.rs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e29ddc265010f5dc9af4f55c844057f6f587fcb59b62bcead6d9a5490f60acf"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::extend_selection_at_mouse_cursor (cyclomatic 17): TermWindow::extend_selection_at_mouse_cursor 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":"kaku-gui/src/termwindow/selection.rs"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"1beefcbe6456400d5c957b121971ad15a4043f9fbd3dce374bbe39304e6a2020"}},{"ruleId":"D1","level":"warning","message":{"text":"TabInner::remove_pane_if (cyclomatic 17): TabInner::remove_pane_if 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":"mux/src/tab.rs"},"region":{"startLine":2068}}}],"partialFingerprints":{"codehealthFindingId/v1":"f038c936f6a654abe578dafabd538dba0e17adb7af8fd4815cf6a054edf8edf3"}},{"ruleId":"D1","level":"warning","message":{"text":"TabInner::split_and_insert (cyclomatic 17): TabInner::split_and_insert has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tab.rs"},"region":{"startLine":2427}}}],"partialFingerprints":{"codehealthFindingId/v1":"1057675fbfe21f79c33c4ca0700cd7ce3fc5487b322bdd75877a218720909fa7"}},{"ruleId":"D1","level":"warning","message":{"text":"mux::pane_encoding::advance_escape (cyclomatic 17): mux::pane_encoding::advance_escape has cyclomatic complexity 17 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/pane_encoding.rs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"44dce2599fd0f9ca3e092d30e69c9ebb52e1b735a9af4dad071ea4f58023c7c4"}},{"ruleId":"D1","level":"warning","message":{"text":"LayoutState::update_widget_constraint (cyclomatic 17): LayoutState::update_widget_constraint has cyclomatic complexity 17 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/widgets/layout.rs"},"region":{"startLine":309}}}],"partialFingerprints":{"codehealthFindingId/v1":"656c8bc03c5152876dcb7836cc2d36e321f537c830aba24f8272e80d09718f34"}},{"ruleId":"D1","level":"warning","message":{"text":"WindowInner::refresh_after_display_change (cyclomatic 17): WindowInner::refresh_after_display_change has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This is NOT this file\u0027s highest cyclomatic complexity: window::os::macos::window::function_key_to_keycode (cyclomatic 18) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/window.rs"},"region":{"startLine":2923}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4058e9e9ec1a91f7fe282772c464c7552b76156acc4948b30a908eae4abc043"}},{"ruleId":"D1","level":"warning","message":{"text":"wezterm_font::rasterizer::harfbuzz::record_to_cairo_surface (cyclomatic 16): wezterm_font::rasterizer::harfbuzz::record_to_cairo_surface 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. This is NOT this file\u0027s highest cyclomatic complexity: wezterm_font::rasterizer::harfbuzz::hb_paint_mode_to_operator (cyclomatic 28) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/rasterizer/harfbuzz.rs"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"97925e6e667b86a24558dcc3f8439a5b84525c4e3ff75b0d381a2cb088e19244"}},{"ruleId":"D1","level":"warning","message":{"text":"wezterm_mux_server_impl::update_mux_domains_impl (cyclomatic 16): wezterm_mux_server_impl::update_mux_domains_impl has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-mux-server-impl/src/lib.rs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b952876d87a26c7630c140504008e71cb55289b50971ce57e1b2432432679e1"}},{"ruleId":"D1","level":"warning","message":{"text":"Config::expand_tokens (cyclomatic 16): Config::expand_tokens has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/config.rs"},"region":{"startLine":677}}}],"partialFingerprints":{"codehealthFindingId/v1":"1950572fe4749c92fd3147f879dcc815b9c81492603ca9e0f7df8fe341b28f96"}},{"ruleId":"D1","level":"warning","message":{"text":"SessionInner::authenticate (cyclomatic 16): SessionInner::authenticate has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/auth.rs"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"163f76e12732ac14b69fe6a2874680f15e628aaaccad8cde0b2908b94b576b03"}},{"ruleId":"D1","level":"warning","message":{"text":"GuiFrontEnd::reconcile_workspace (cyclomatic 16): GuiFrontEnd::reconcile_workspace has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/frontend.rs"},"region":{"startLine":1259}}}],"partialFingerprints":{"codehealthFindingId/v1":"d34fa39a64432f9adeaf14a9f54fabec5f641236358c6875d6637d2081270656"}},{"ruleId":"D1","level":"warning","message":{"text":"SelectorState::render (cyclomatic 16): SelectorState::render has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/selector.rs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2fbf7af8f9c97650c02363ce4a5d384b9489f7bcce21d498f2b74a4185ccb51"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::config_was_reloaded_impl (cyclomatic 16): TermWindow::config_was_reloaded_impl has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":3326}}}],"partialFingerprints":{"codehealthFindingId/v1":"198577866c0ccf4c91e8f1b21c94985c0dd776c0febc37d0651ed0366aac0176"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::paint_window_borders (cyclomatic 16): TermWindow::paint_window_borders has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/borders.rs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbba6bd6d200560a056a4b7bb4f44b3733a5cd2cb3b9f28ecd2640d98a993188"}},{"ruleId":"D1","level":"warning","message":{"text":"TermWindow::build_line_element_shape (cyclomatic 16): TermWindow::build_line_element_shape has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/screen_line.rs"},"region":{"startLine":817}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8e0179231c69dbccce9a6abdfcdfca2fe157f117c4d953c40b569a30d854394"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_gui::ai_tools::search::search_tavily (cyclomatic 16): kaku_gui::ai_tools::search::search_tavily has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_tools/search.rs"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"1435b86036918e2736c1a3248eff923454925c6f66fa607bdb47479b27c105de"}},{"ruleId":"D1","level":"warning","message":{"text":"kaku_gui::session_restore::save_session_snapshot_impl (cyclomatic 16): kaku_gui::session_restore::save_session_snapshot_impl has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/session_restore.rs"},"region":{"startLine":986}}}],"partialFingerprints":{"codehealthFindingId/v1":"5867575cd51be2b7a6639e7dea575de2e5845c667950ed35e095290a1178002d"}},{"ruleId":"D1","level":"warning","message":{"text":"mux::ssh::ssh_connect_with_ui (cyclomatic 16): mux::ssh::ssh_connect_with_ui has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/ssh.rs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed860a5992171df63e8b5acb5ec4f283032dc709fdeda2d504822921ba4a5d9a"}},{"ruleId":"D1","level":"warning","message":{"text":"Screen::resize (cyclomatic 16): Screen::resize has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/screen.rs"},"region":{"startLine":202}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2258eca179c949b74a77ba3b37dbdb59570b647e602d6ac51c944c7ce66ebe6"}},{"ruleId":"D1","level":"warning","message":{"text":"TerminalState::kitty_img (cyclomatic 16): TerminalState::kitty_img has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/kitty.rs"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ed93698b177559e0986cc25e14d83ef6ee37e619315f2788a068581bc8e9362"}},{"ruleId":"D1","level":"warning","message":{"text":"TerminalState::perform_device (cyclomatic 16): TerminalState::perform_device 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":"term/src/terminalstate/mod.rs"},"region":{"startLine":1481}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc6f2787cb66f040a4737b640302fd4d71aa98a0261b407018a2fa41e32c7bda"}},{"ruleId":"D1","level":"warning","message":{"text":"TerminalState::mouse_wheel (cyclomatic 16): TerminalState::mouse_wheel has cyclomatic complexity 16 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/mouse.rs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"c86222478366c7d08304f959bdbebab0f5153921b1297dcbd3ea33f44bd887b7"}},{"ruleId":"D1","level":"warning","message":{"text":"Performer::perform (cyclomatic 16): Performer::perform 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. This is NOT this file\u0027s highest cyclomatic complexity: Performer::esc_dispatch (cyclomatic 27) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/performer.rs"},"region":{"startLine":350}}}],"partialFingerprints":{"codehealthFindingId/v1":"074455ba3980c020d8345852e7837c869e1dfc44ed95a1d0e413b0a9ea1c31e1"}},{"ruleId":"D1","level":"warning","message":{"text":"ProbeCapabilities::screen_size (cyclomatic 16): ProbeCapabilities::screen_size has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/caps/probed.rs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"f802301dc94c8a3d68e3edaa2804c1d494d9d061f9a56c02336e0c102fff0c8c"}},{"ruleId":"D1","level":"warning","message":{"text":"Window::new_window (cyclomatic 16): Window::new_window has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages. This is NOT this file\u0027s highest cyclomatic complexity: window::os::macos::window::function_key_to_keycode (cyclomatic 18) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/window.rs"},"region":{"startLine":1763}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a14c2e0922c80691995563ad1edcd435186a3e926512698a18a41206aec69d1"}},{"ruleId":"D2","level":"warning","message":{"text":"PhysKeyCode::for_each_code (cognitive 427): PhysKeyCode::for_each_code has cognitive complexity 427 (threshold 15). Drivers by points: if/else 319 (426 pts), loops 1 (nesting depth added 107). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-input-types/src/lib.rs"},"region":{"startLine":1018}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2e466c97b82f02219209c0733c8686b6a26a4367dea2275a9a1fa3dc387d13c"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_remote::web::run_session (cognitive 374): kaku_remote::web::run_session has cognitive complexity 374 (threshold 15). Drivers by points: if/else 86 (328 pts), match/switch 8 (24 pts), loops 4 (12 pts), boolean chains 10 (nesting depth added 266). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/src/web.rs"},"region":{"startLine":2785}}}],"partialFingerprints":{"codehealthFindingId/v1":"704fa1d021a6a6f3d07c3ea199f2ece8a7f6454b172ce0089adc96d07065281d"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::render_screen_line (cognitive 218): TermWindow::render_screen_line has cognitive complexity 218 (threshold 15). Drivers by points: if/else 75 (175 pts), loops 10 (26 pts), match/switch 5 (11 pts), boolean chains 6 (nesting depth added 122). Of this number, 194 points are the body\u0027s own statements and 24 belong to 3 function items inside it that branch. To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/screen_line.rs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"f13ae9b21b9ba8839a093ec67f2dc7cc19fa76c7abea14ee09ee2f8a9c39137e"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::mouse_event_terminal (cognitive 187): TermWindow::mouse_event_terminal has cognitive complexity 187 (threshold 15). Drivers by points: if/else 60 (130 pts), boolean chains 21, match/switch 10 (19 pts), loops 5 (17 pts) (nesting depth added 91). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mouseevent.rs"},"region":{"startLine":1867}}}],"partialFingerprints":{"codehealthFindingId/v1":"21acaa337ccad4dfd53913235c194f5cbbce87369e3b19967e1e79f91ce87601"}},{"ruleId":"D2","level":"warning","message":{"text":"TerminfoRenderer::render_to (cognitive 163): TerminfoRenderer::render_to has cognitive complexity 163 (threshold 15). Drivers by points: if/else 33 (112 pts), loops 5 (26 pts), match/switch 7 (23 pts), boolean chains 2 (nesting depth added 116). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/render/terminfo.rs"},"region":{"startLine":337}}}],"partialFingerprints":{"codehealthFindingId/v1":"147435908c11be5345659cd8aae6bdffdabb3e4edac21edb28c08a96309979cf"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::mouse_event_impl (cognitive 156): TermWindow::mouse_event_impl has cognitive complexity 156 (threshold 15). Drivers by points: if/else 61 (128 pts), match/switch 9 (17 pts), boolean chains 11 (nesting depth added 75). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mouseevent.rs"},"region":{"startLine":863}}}],"partialFingerprints":{"codehealthFindingId/v1":"029b93062defd10591c869084972c96f171e1ead69835e1bdf278b591c134202"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku::ai_config::tui::run_loop (cognitive 152): kaku::ai_config::tui::run_loop has cognitive complexity 152 (threshold 15). Drivers by points: if/else 29 (116 pts), match/switch 6 (21 pts), boolean chains 9, loops 2 (6 pts) (nesting depth added 106). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui.rs"},"region":{"startLine":3115}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbec702590e352f5a62b436f194d10bedc3e488e6d8631f86a22eca55852afcd"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::perform_key_assignment (cognitive 152): TermWindow::perform_key_assignment has cognitive complexity 152 (threshold 15). Drivers by points: if/else 62 (110 pts), match/switch 21 (38 pts), boolean chains 2, loops 1 (2 pts) (nesting depth added 66). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":4752}}}],"partialFingerprints":{"codehealthFindingId/v1":"27fb863ed8d007ce1e7adf1d61e3297ac8317c56dcaa33555195efcb7b165eec"}},{"ruleId":"D2","level":"warning","message":{"text":"Performer::osc_dispatch (cognitive 127): Performer::osc_dispatch has cognitive complexity 127 (threshold 15). Drivers by points: if/else 36 (84 pts), match/switch 13 (29 pts), loops 5 (14 pts) (nesting depth added 73). 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":"term/src/terminalstate/performer.rs"},"region":{"startLine":852}}}],"partialFingerprints":{"codehealthFindingId/v1":"9052331abf03fe85e9a32e9191dc4c2c3650c4bb172fec69aa5a13aa44f748c6"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_remote::share::serve (cognitive 125): kaku_remote::share::serve has cognitive complexity 125 (threshold 15). Drivers by points: if/else 23 (89 pts), match/switch 7 (23 pts), loops 5 (11 pts), boolean chains 2 (nesting depth added 88). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/src/share.rs"},"region":{"startLine":819}}}],"partialFingerprints":{"codehealthFindingId/v1":"80f5aa9a36bad57a88d0b7676b51b7204133115047fee588d1de269aebae06c4"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::cli_chat::run_repl (cognitive 116): kaku_gui::cli_chat::run_repl has cognitive complexity 116 (threshold 15). Drivers by points: if/else 28 (79 pts), match/switch 6 (25 pts), loops 3 (9 pts), boolean chains 3 (nesting depth added 76). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/cli_chat/mod.rs"},"region":{"startLine":545}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c70782656b15426fb04ddb06eb45d92d83454b509aa067970b7bb548085e064"}},{"ruleId":"D2","level":"warning","message":{"text":"WindowView::key_common (cognitive 116): WindowView::key_common has cognitive complexity 116 (threshold 15). Drivers by points: if/else 54 (78 pts), match/switch 8 (22 pts), boolean chains 16 (nesting depth added 38). Of this number, 111 points are the body\u0027s own statements and 5 belong to one function item inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/window.rs"},"region":{"startLine":8708}}}],"partialFingerprints":{"codehealthFindingId/v1":"c032f1432732773479e52a969cee2623b96ee9f72fa10601f0cbdadb3c909ab9"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku::ai_config::tui::save_field (cognitive 112): kaku::ai_config::tui::save_field has cognitive complexity 112 (threshold 15). Drivers by points: if/else 37 (88 pts), loops 2 (10 pts), match/switch 4 (9 pts), boolean chains 5 (nesting depth added 64). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui.rs"},"region":{"startLine":2757}}}],"partialFingerprints":{"codehealthFindingId/v1":"556eacae777af9ea083814c9fc545ff6a6fee33e77d55db7370b36eeee5b8701"}},{"ruleId":"D2","level":"warning","message":{"text":"WindowView::did_resize (cognitive 112): WindowView::did_resize has cognitive complexity 112 (threshold 15). Drivers by points: if/else 40 (90 pts), boolean chains 11, match/switch 4 (9 pts), loops 1 (2 pts) (nesting depth added 56). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/window.rs"},"region":{"startLine":9419}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8ffb747348b75ac104d52dbbdc3c47db833bec3866e32fa0c10ef84172546fa"}},{"ruleId":"D2","level":"warning","message":{"text":"BidiContext::explicit_embedding_levels (cognitive 103): BidiContext::explicit_embedding_levels has cognitive complexity 103 (threshold 15). Drivers by points: if/else 29 (89 pts), boolean chains 7, loops 2 (5 pts), match/switch 1 (2 pts) (nesting depth added 64). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/bidi/src/lib.rs"},"region":{"startLine":1337}}}],"partialFingerprints":{"codehealthFindingId/v1":"796ded6cddb4d9d0898cafadcf87cf2aed1f0a23b0a379683256c344134a657c"}},{"ruleId":"D2","level":"warning","message":{"text":"CommandDef::recreate_menubar (cognitive 103): CommandDef::recreate_menubar has cognitive complexity 103 (threshold 15). Drivers by points: if/else 17 (61 pts), match/switch 15 (29 pts), loops 6 (13 pts) (nesting depth added 65). Of this number, 75 points are the body\u0027s own statements and 28 belong to 4 function items inside it that branch. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/commands.rs"},"region":{"startLine":665}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4bcc68b2b000d3b8ccef286736568e08e778a73e52ff8ef5fcc8dbe820441c6"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::paint_pane (cognitive 103): TermWindow::paint_pane has cognitive complexity 103 (threshold 15). Drivers by points: if/else 54 (77 pts), boolean chains 15, match/switch 4 (10 pts), loops 1 (nesting depth added 29). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/pane.rs"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"852aa6fd6cc76076bf7ca41753f0e86082f81e4155b6e9a34e134fbcefd69d89"}},{"ruleId":"D2","level":"warning","message":{"text":"wezterm_config_derive::attr::field_info (cognitive 101): wezterm_config_derive::attr::field_info has cognitive complexity 101 (threshold 15). Drivers by points: if/else 18 (75 pts), match/switch 8 (22 pts), loops 2 (3 pts), boolean chains 1 (nesting depth added 72). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/derive/src/attr.rs"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"04bc6d124e9429f75727233769625fc77755fb9904f0a5d80a7ad4b2dfc9281a"}},{"ruleId":"D2","level":"warning","message":{"text":"GlyphCache::block_sprite (cognitive 97): GlyphCache::block_sprite has cognitive complexity 97 (threshold 15). Drivers by points: if/else 47 (76 pts), loops 6 (14 pts), match/switch 4 (7 pts) (nesting depth added 40). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/customglyph.rs"},"region":{"startLine":5175}}}],"partialFingerprints":{"codehealthFindingId/v1":"69ad8d247acf5515eb346aaa976b5b3cdac54dc972ea5c0fb269e010b047c333"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::paint_pass (cognitive 96): TermWindow::paint_pass has cognitive complexity 96 (threshold 15). Drivers by points: if/else 40 (76 pts), boolean chains 10, loops 4 (5 pts), match/switch 2 (5 pts) (nesting depth added 40). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/paint.rs"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"53c2dfed0fa13c06e8501c8913836064136cc9bd087b24e2d33afb18ea1ee248"}},{"ruleId":"D2","level":"warning","message":{"text":"TerminfoRenderer::flush_pending_attr (cognitive 96): TerminfoRenderer::flush_pending_attr has cognitive complexity 96 (threshold 15). Drivers by points: if/else 37 (74 pts), match/switch 6 (20 pts), boolean chains 2 (nesting depth added 51). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/render/terminfo.rs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"618c217c19ef3ecd08151aaf8c6c94c26d4b628e676b549fca20b9cdac3ff668"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku::ai_config::tui::ui::render_tools (cognitive 89): kaku::ai_config::tui::ui::render_tools has cognitive complexity 89 (threshold 15). Drivers by points: if/else 42 (79 pts), boolean chains 7, loops 2 (3 pts) (nesting depth added 38). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui/ui.rs"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"24feb149e712abefd4069a273bd281d6379438f8a725afe15c6962de36724c28"}},{"ruleId":"D2","level":"warning","message":{"text":"KeyCode::encode (cognitive 86): KeyCode::encode has cognitive complexity 86 (threshold 15). Drivers by points: if/else 32 (52 pts), match/switch 10 (19 pts), boolean chains 15 (nesting depth added 29). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/input.rs"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fb1c0de3768edd017bb5612bc786cbe377d2aeb79a0acd61ebd352d72865a18"}},{"ruleId":"D2","level":"warning","message":{"text":"TabBarState::new (cognitive 77): TabBarState::new has cognitive complexity 77 (threshold 15). Drivers by points: if/else 40 (56 pts), loops 6 (11 pts), boolean chains 7, match/switch 1 (3 pts) (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/tabbar.rs"},"region":{"startLine":1004}}}],"partialFingerprints":{"codehealthFindingId/v1":"28dc694a262086d8ccd66c915ac05d1bd11ea6e7920ec1a341d6a0fb97293f1c"}},{"ruleId":"D2","level":"warning","message":{"text":"wezterm_dynamic_derive::attr::field_info (cognitive 76): wezterm_dynamic_derive::attr::field_info has cognitive complexity 76 (threshold 15). Drivers by points: if/else 16 (68 pts), match/switch 2 (5 pts), loops 2 (3 pts) (nesting depth added 56). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-dynamic/derive/src/attr.rs"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b39692a3ec904a8da3b0aa935ea2463f7ce572eeb8be6420f019ceee7df3dfd"}},{"ruleId":"D2","level":"warning","message":{"text":"KeyEvent::encode_kitty (cognitive 76): KeyEvent::encode_kitty has cognitive complexity 76 (threshold 15). Drivers by points: if/else 27 (44 pts), match/switch 11 (19 pts), boolean chains 10, loops 1 (3 pts) (nesting depth added 27). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-input-types/src/lib.rs"},"region":{"startLine":1660}}}],"partialFingerprints":{"codehealthFindingId/v1":"39781fdf6d13c1bef0069868b9e6121e6683e950b3d6f14f682f408236e93484"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::dispatch_notif (cognitive 76): TermWindow::dispatch_notif has cognitive complexity 76 (threshold 15). Drivers by points: if/else 25 (63 pts), match/switch 3 (6 pts), boolean chains 4, loops 1 (3 pts) (nesting depth added 43). 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":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":2404}}}],"partialFingerprints":{"codehealthFindingId/v1":"04d3dfb5ff3ebf71ac805feb1f0389b12e0ba0975e8bb13df657444a92fad1e3"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::overlay::ai_chat::input::handle_key (cognitive 76): kaku_gui::overlay::ai_chat::input::handle_key has cognitive complexity 76 (threshold 15). Drivers by points: if/else 32 (63 pts), match/switch 3 (6 pts), boolean chains 4, loops 1 (3 pts) (nesting depth added 36). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/input.rs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2767930d070588a388eb9479ff8c9300e73e1b2fcb905d16af03e9125a63ef7"}},{"ruleId":"D2","level":"warning","message":{"text":"Face::compute_cap_height (cognitive 75): Face::compute_cap_height has cognitive complexity 75 (threshold 15). Drivers by points: if/else 11 (48 pts), loops 9 (24 pts), match/switch 2, boolean chains 1 (nesting depth added 52). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/ftwrap.rs"},"region":{"startLine":973}}}],"partialFingerprints":{"codehealthFindingId/v1":"de662c7a9296eadbcd4f687250b8474d1c577f6d4f0f68081f453a543df454fc"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::mouse_event_tab_bar (cognitive 75): TermWindow::mouse_event_tab_bar has cognitive complexity 75 (threshold 15). Drivers by points: if/else 19 (55 pts), match/switch 8 (18 pts), boolean chains 2 (nesting depth added 46). 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":"kaku-gui/src/termwindow/mouseevent.rs"},"region":{"startLine":1625}}}],"partialFingerprints":{"codehealthFindingId/v1":"64421620621ec315429e33889f7b428a6cf7d0260034dba501a865b1e154c650"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::ai_tools::search::fallback_regex_search (cognitive 75): kaku_gui::ai_tools::search::fallback_regex_search has cognitive complexity 75 (threshold 15). Drivers by points: if/else 25 (63 pts), loops 5 (10 pts), boolean chains 2 (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":"kaku-gui/src/ai_tools/search.rs"},"region":{"startLine":269}}}],"partialFingerprints":{"codehealthFindingId/v1":"d254e65f1b1cc32f7bc9ec6aa9eab81bcb1fcfc4a729891beafa7404f80cc25e"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::ai_chat_engine::run_agent (cognitive 74): kaku_gui::ai_chat_engine::run_agent has cognitive complexity 74 (threshold 15). Drivers by points: if/else 24 (57 pts), match/switch 4 (12 pts), loops 2 (3 pts), boolean chains 2 (nesting depth added 42). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_chat_engine/mod.rs"},"region":{"startLine":387}}}],"partialFingerprints":{"codehealthFindingId/v1":"9aec137125e7e4e088e9e48eada84d36bf303384312276c6e2f20780479de282"}},{"ruleId":"D2","level":"warning","message":{"text":"wezterm_font::rasterizer::colr::apply_sweep_gradient_patches (cognitive 73): wezterm_font::rasterizer::colr::apply_sweep_gradient_patches has cognitive complexity 73 (threshold 15). Drivers by points: if/else 25 (55 pts), loops 7 (17 pts), boolean chains 1 (nesting depth added 40). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/rasterizer/colr.rs"},"region":{"startLine":298}}}],"partialFingerprints":{"codehealthFindingId/v1":"45b9b06ba39ab57d152eb8325821010ecaecb3ac4dbce2bcc19677f0956684b8"}},{"ruleId":"D2","level":"warning","message":{"text":"HarfbuzzShaper::do_shape (cognitive 72): HarfbuzzShaper::do_shape has cognitive complexity 72 (threshold 15). Drivers by points: if/else 19 (53 pts), loops 5 (8 pts), match/switch 4 (8 pts), boolean chains 3 (nesting depth added 41). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/shaper/harfbuzz.rs"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"48a4e899910f49ddb1e71bf2d4b3005bd4ccec9c7d39d3fc41d9177686629a85"}},{"ruleId":"D2","level":"warning","message":{"text":"App::drain_tokens (cognitive 72): App::drain_tokens has cognitive complexity 72 (threshold 15). Drivers by points: if/else 20 (44 pts), boolean chains 12, loops 4 (10 pts), match/switch 3 (6 pts) (nesting depth added 33). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/state.rs"},"region":{"startLine":1823}}}],"partialFingerprints":{"codehealthFindingId/v1":"d558d0ffb3734299bb8b14bb3eca9c000c03826e57178e2ea23fd637967f634a"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_remote::p2p::carry (cognitive 69): kaku_remote::p2p::carry has cognitive complexity 69 (threshold 15). Drivers by points: if/else 14 (52 pts), match/switch 3 (9 pts), loops 3 (6 pts), boolean chains 2 (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":"crates/kaku-remote/src/p2p.rs"},"region":{"startLine":705}}}],"partialFingerprints":{"codehealthFindingId/v1":"20a477a1aa01de509d8ff2b981aa7547d325a72b4c1c6291cfec0e7fad336ce4"}},{"ruleId":"D2","level":"warning","message":{"text":"SessionHandler::process_one (cognitive 69): SessionHandler::process_one has cognitive complexity 69 (threshold 15). Drivers by points: if/else 13 (37 pts), loops 6 (17 pts), match/switch 8 (15 pts) (nesting depth added 42). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-mux-server-impl/src/sessionhandler.rs"},"region":{"startLine":246}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a3b17669f3f30421fe103509cb9b3808f744e5c1edf8663d8cf3f867e92974c"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_remote::p2p::wrap (cognitive 68): kaku_remote::p2p::wrap has cognitive complexity 68 (threshold 15). Drivers by points: if/else 14 (40 pts), match/switch 7 (18 pts), loops 5 (8 pts), boolean chains 2 (nesting depth added 40). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/src/p2p.rs"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"c683bbf9255013a3eb6b4f9109fda9e44c7fc552efa32481b0ea76273cfea5e4"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::update::update_checker (cognitive 68): kaku_gui::update::update_checker has cognitive complexity 68 (threshold 15). Drivers by points: if/else 17 (52 pts), match/switch 3 (12 pts), boolean chains 3, loops 1 (nesting depth added 44). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/update.rs"},"region":{"startLine":555}}}],"partialFingerprints":{"codehealthFindingId/v1":"1495611b012b16acce13fd0f58178f8d6e11c907e0562363ff5f95a6c72c4e68"}},{"ruleId":"D2","level":"warning","message":{"text":"ITermProprietary::parse (cognitive 66): ITermProprietary::parse has cognitive complexity 66 (threshold 15). Drivers by points: if/else 32 (49 pts), boolean chains 16, match/switch 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/osc.rs"},"region":{"startLine":1467}}}],"partialFingerprints":{"codehealthFindingId/v1":"7443d78bec7ff0383f0954ed2b9d5e0b39ba24d2155502f23b0e99d2b07f7251"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::ai_client::responses::parse_responses_sse (cognitive 66): kaku_gui::ai_client::responses::parse_responses_sse has cognitive complexity 66 (threshold 15). Drivers by points: if/else 26 (61 pts), loops 2 (3 pts), match/switch 1 (2 pts) (nesting depth added 37). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_client/responses.rs"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"dae9622ab54e8ac14942568c248aefcd5a2beae1513c0b89f766372ba1bfb9f5"}},{"ruleId":"D2","level":"warning","message":{"text":"ConfigInner::watch_path (cognitive 65): ConfigInner::watch_path has cognitive complexity 65 (threshold 15). Drivers by points: if/else 14 (38 pts), match/switch 6 (18 pts), loops 2 (9 pts) (nesting depth added 43). Of this number, 58 points are the body\u0027s own statements and 7 belong to one function item inside it that branches. To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/lib.rs"},"region":{"startLine":1864}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea731d48bd53be7971ed1dd34fbba4c47f21324adf45693508c4d93e552ec8f3"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::key_event_impl (cognitive 64): TermWindow::key_event_impl has cognitive complexity 64 (threshold 15). Drivers by points: if/else 27 (48 pts), boolean chains 7, match/switch 3 (5 pts), loops 1 (4 pts) (nesting depth added 26). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/keyevent.rs"},"region":{"startLine":1061}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c2d93d508cbceac2152b55b2617902ceba983287fdc4042746e12fe32eafec8"}},{"ruleId":"D2","level":"warning","message":{"text":"AiClient::chat_step (cognitive 63): AiClient::chat_step has cognitive complexity 63 (threshold 15). Drivers by points: if/else 22 (42 pts), loops 5 (10 pts), match/switch 3 (7 pts), boolean chains 4 (nesting depth added 29). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_client/mod.rs"},"region":{"startLine":461}}}],"partialFingerprints":{"codehealthFindingId/v1":"2cb045db6a5901caba779c851d6e5a1aa95fd198d464f23d9c210483b60478aa"}},{"ruleId":"D2","level":"warning","message":{"text":"Value::add_methods (cognitive 63): Value::add_methods has cognitive complexity 63 (threshold 15). Drivers by points: match/switch 16 (33 pts), if/else 9 (27 pts), loops 1 (3 pts) (nesting depth added 37). 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":"lua-api-crates/share-data/src/lib.rs"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"63512544ba31ff949d87ff6740354d78288571bb410542d0c451d28bd59a4298"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::commands::derive_command_from_key_assignment (cognitive 61): kaku_gui::commands::derive_command_from_key_assignment has cognitive complexity 61 (threshold 15). Drivers by points: if/else 35 (50 pts), match/switch 4 (8 pts), loops 1 (2 pts), boolean chains 1 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/commands.rs"},"region":{"startLine":1106}}}],"partialFingerprints":{"codehealthFindingId/v1":"dee9040649b2a7f7535462a12cec5774964f855eb1d266d20d7ec868f39069f2"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_relay::serve_host (cognitive 58): kaku_relay::serve_host has cognitive complexity 58 (threshold 15). Drivers by points: if/else 13 (47 pts), match/switch 4 (8 pts), loops 2, boolean chains 1 (nesting depth added 38). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-relay/src/main.rs"},"region":{"startLine":741}}}],"partialFingerprints":{"codehealthFindingId/v1":"59e51358d4fc64e5ff1cd365a8e0afbe0de97d3664ab01e4cc323c9cefbebe8a"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::overlay::ai_chat::input::handle_mouse (cognitive 58): kaku_gui::overlay::ai_chat::input::handle_mouse has cognitive complexity 58 (threshold 15). Drivers by points: if/else 24 (50 pts), boolean chains 7, match/switch 1 (nesting depth added 26). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/input.rs"},"region":{"startLine":424}}}],"partialFingerprints":{"codehealthFindingId/v1":"40cceb60f40373373d090338e5c93127b5d0c5961c863654715b01011e8544cc"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::overlay::ai_chat::markdown::wrap_segments (cognitive 58): kaku_gui::overlay::ai_chat::markdown::wrap_segments has cognitive complexity 58 (threshold 15). Drivers by points: if/else 14 (42 pts), loops 4 (7 pts), boolean chains 6, match/switch 1 (3 pts) (nesting depth added 33). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/markdown.rs"},"region":{"startLine":451}}}],"partialFingerprints":{"codehealthFindingId/v1":"440a8f75ee207df978476a44a57ddf0115069c23cedd0850d4c68316ee4b9346"}},{"ruleId":"D2","level":"warning","message":{"text":"CommandDef::actions_for_palette_and_menubar (cognitive 57): CommandDef::actions_for_palette_and_menubar has cognitive complexity 57 (threshold 15). Drivers by points: if/else 16 (41 pts), loops 7 (11 pts), match/switch 2 (5 pts) (nesting depth added 32). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/commands.rs"},"region":{"startLine":482}}}],"partialFingerprints":{"codehealthFindingId/v1":"f57a4a72dec3c466d9d717eae3bc2f98828f41ee23abe2093a540f9a4dbefc11"}},{"ruleId":"D2","level":"warning","message":{"text":"Publish::try_spawn (cognitive 57): Publish::try_spawn has cognitive complexity 57 (threshold 15). Drivers by points: if/else 11 (34 pts), match/switch 3 (12 pts), loops 2 (11 pts) (nesting depth added 41). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/main.rs"},"region":{"startLine":559}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ef93a733cb9d59927b71963803c2c1e40fccf356eb0908cdbbf7d1671fc65bf"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::selection_text (cognitive 57): TermWindow::selection_text has cognitive complexity 57 (threshold 15). Drivers by points: if/else 12 (47 pts), boolean chains 5, loops 2 (5 pts) (nesting depth added 38). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/selection.rs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"31dcf912100db2fed05c15e0f2ab4a5e038a6d1c50806c5b57d8533fe92276ca"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku::utils::strip_jsonc_comments (cognitive 56): kaku::utils::strip_jsonc_comments has cognitive complexity 56 (threshold 15). Drivers by points: if/else 11 (38 pts), loops 3 (11 pts), match/switch 1 (6 pts), boolean chains 1 (nesting depth added 40). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/utils.rs"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"0838e1cdc648605d45d47249982c45e1e3dda1f9a79a8e6ecdc6bab8059d3e8b"}},{"ruleId":"D2","level":"warning","message":{"text":"TmuxDomainState::advance (cognitive 55): TmuxDomainState::advance has cognitive complexity 55 (threshold 15). Drivers by points: if/else 15 (45 pts), match/switch 2 (5 pts), loops 2 (4 pts), boolean chains 1 (nesting depth added 35). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tmux.rs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae7850aafcb156db399b682936db24c276d43a378111216edd5046259ae9a3c4"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_relay::serve_browser (cognitive 54): kaku_relay::serve_browser has cognitive complexity 54 (threshold 15). Drivers by points: if/else 12 (32 pts), match/switch 6 (16 pts), boolean chains 4, loops 2 (nesting depth added 30). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-relay/src/main.rs"},"region":{"startLine":1093}}}],"partialFingerprints":{"codehealthFindingId/v1":"2caff67addec35ce01e6d7f53d513aa15d9430ff3bd2842c1f3f967cc110fd34"}},{"ruleId":"D2","level":"warning","message":{"text":"mux::parse_buffered_data (cognitive 54): mux::parse_buffered_data has cognitive complexity 54 (threshold 15). Drivers by points: if/else 11 (38 pts), match/switch 4 (12 pts), boolean chains 3, loops 1 (nesting depth added 35). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/lib.rs"},"region":{"startLine":336}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3992b00300ef1a917ff2481ead1429373c99002f8f4715f17cd7074c2cef3f5"}},{"ruleId":"D2","level":"warning","message":{"text":"TerminalState::perform_csi_edit (cognitive 54): TerminalState::perform_csi_edit has cognitive complexity 54 (threshold 15). Drivers by points: if/else 14 (34 pts), loops 4 (10 pts), boolean chains 5, match/switch 3 (5 pts) (nesting depth added 28). 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":"term/src/terminalstate/mod.rs"},"region":{"startLine":2364}}}],"partialFingerprints":{"codehealthFindingId/v1":"37536968cd50fdba52c3ae512a0dbe4b1f3d51909b37684ceb4e1acc832be4bc"}},{"ruleId":"D2","level":"warning","message":{"text":"ParsedConfigFile::parse_impl (cognitive 53): ParsedConfigFile::parse_impl has cognitive complexity 53 (threshold 15). Drivers by points: if/else 14 (34 pts), loops 4 (11 pts), match/switch 1 (5 pts), boolean chains 3 (nesting depth added 31). Of this number, 34 points are the body\u0027s own statements and 19 belong to 3 function items inside it that branch. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/config.rs"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"583f4e76de150f211f2ed009e95960bb20e0f0c592c3cc95dabad70244daef0f"}},{"ruleId":"D2","level":"warning","message":{"text":"LauncherState::run_loop (cognitive 52): LauncherState::run_loop has cognitive complexity 52 (threshold 15). Drivers by points: if/else 15 (44 pts), boolean chains 5, match/switch 1 (2 pts), loops 1 (nesting depth added 30). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/launcher.rs"},"region":{"startLine":624}}}],"partialFingerprints":{"codehealthFindingId/v1":"272eda33d7a7ba07601712c49bde0e79af4abc472beadb21aef5f9f51521589e"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::process_key (cognitive 52): TermWindow::process_key has cognitive complexity 52 (threshold 15). Drivers by points: if/else 16 (40 pts), boolean chains 8, match/switch 2 (4 pts) (nesting depth added 26). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/keyevent.rs"},"region":{"startLine":371}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a83596efa300154848d4e987c89b4c2f45cff4e382c4d00119cfeed54e1add2"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::overlay::ai_chat::markdown::parse_markdown_blocks (cognitive 52): kaku_gui::overlay::ai_chat::markdown::parse_markdown_blocks has cognitive complexity 52 (threshold 15). Drivers by points: if/else 18 (43 pts), loops 2 (5 pts), boolean chains 4 (nesting depth added 28). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/markdown.rs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"b357024ff05eb5f76eecdb839cf582458e66238a878ba6dd594696c7f2dc1d50"}},{"ruleId":"D2","level":"warning","message":{"text":"WindowInner::refresh_after_display_change (cognitive 52): WindowInner::refresh_after_display_change has cognitive complexity 52 (threshold 15). Drivers by points: if/else 15 (49 pts), boolean chains 3 (nesting depth added 34). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/window.rs"},"region":{"startLine":2923}}}],"partialFingerprints":{"codehealthFindingId/v1":"1dd9e5b96bb2448d11fdbc28044206269d23497e8d95ec8c1e55776945366b9b"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::show_launcher_impl (cognitive 51): TermWindow::show_launcher_impl has cognitive complexity 51 (threshold 15). Drivers by points: if/else 16 (37 pts), match/switch 4 (7 pts), loops 2 (5 pts), boolean chains 2 (nesting depth added 27). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":4440}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c9fac088dc9732b16d0b8d54fd6653c86d9f2f67160044df15a1fdb604f2f03"}},{"ruleId":"D2","level":"warning","message":{"text":"ParsedFont::lua_fallback (cognitive 50): ParsedFont::lua_fallback has cognitive complexity 50 (threshold 15). Drivers by points: if/else 19 (39 pts), loops 4 (10 pts), boolean chains 1 (nesting depth added 26). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/parser.rs"},"region":{"startLine":292}}}],"partialFingerprints":{"codehealthFindingId/v1":"e99c3a5430df15a4f851661aff46b618e1d06677bbb3aafca7b9a5b6c59ec1d0"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::apply_dimensions (cognitive 50): TermWindow::apply_dimensions has cognitive complexity 50 (threshold 15). Drivers by points: if/else 22 (33 pts), loops 4 (11 pts), boolean chains 6 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/resize.rs"},"region":{"startLine":481}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1fe3f8c6f2ee8cf3995eb6be77ce3dc252e90618dc9eb747cac2b400de9b5f3"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::ai_tools::project::exec_project_summary (cognitive 50): kaku_gui::ai_tools::project::exec_project_summary has cognitive complexity 50 (threshold 15). Drivers by points: if/else 18 (38 pts), loops 4 (7 pts), boolean chains 5 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_tools/project.rs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"311bd7cbef355228fda006e0acd550ae31c6c0921e087e51727d11405aeaab60"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::ai_tools::search::exec_grep_search (cognitive 50): kaku_gui::ai_tools::search::exec_grep_search has cognitive complexity 50 (threshold 15). Drivers by points: if/else 21 (43 pts), match/switch 2 (4 pts), loops 3 (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_tools/search.rs"},"region":{"startLine":734}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b34f6f45cf4ba66043c02af7668f9b90444689b932f0e943965975322fd59cf"}},{"ruleId":"D2","level":"warning","message":{"text":"TmuxDomainState::sync_window_state (cognitive 50): TmuxDomainState::sync_window_state has cognitive complexity 50 (threshold 15). Drivers by points: if/else 10 (24 pts), match/switch 6 (17 pts), loops 4 (9 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":"mux/src/tmux_commands.rs"},"region":{"startLine":373}}}],"partialFingerprints":{"codehealthFindingId/v1":"70216dc44df9ff2e8e2bc6cc996a516deb8ab438c33f69ec522fd2cf9f42e0fd"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::compute_element (cognitive 49): TermWindow::compute_element has cognitive complexity 49 (threshold 15). Drivers by points: if/else 9 (23 pts), match/switch 9 (18 pts), loops 4 (8 pts) (nesting depth added 27). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/box_model.rs"},"region":{"startLine":542}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e0efb3824bb8bd1477bc236f350dc78f875f92ee8078a82b1f174b7bae3574a"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::overlay::ai_chat::render::render_chat (cognitive 49): kaku_gui::overlay::ai_chat::render::render_chat has cognitive complexity 49 (threshold 15). Drivers by points: if/else 27 (38 pts), boolean chains 5, loops 3, match/switch 2 (3 pts) (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/render.rs"},"region":{"startLine":463}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd006d1ec2dbfbbccf11ae2a3e6fb2942ca3c641d7931e5870eb7ea1352e57da"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_remote::web::handle_input (cognitive 48): kaku_remote::web::handle_input has cognitive complexity 48 (threshold 15). Drivers by points: if/else 23 (41 pts), loops 2 (4 pts), boolean chains 2, match/switch 1 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/src/web.rs"},"region":{"startLine":2484}}}],"partialFingerprints":{"codehealthFindingId/v1":"36faecae02c69e368f0bbfbc62ed874f68fbc4fbebad220d97c7df9233036d2d"}},{"ruleId":"D2","level":"warning","message":{"text":"SessionInner::request_loop (cognitive 48): SessionInner::request_loop has cognitive complexity 48 (threshold 15). Drivers by points: if/else 11 (26 pts), match/switch 2 (10 pts), loops 4 (8 pts), boolean chains 4 (nesting depth added 27). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/sessioninner.rs"},"region":{"startLine":426}}}],"partialFingerprints":{"codehealthFindingId/v1":"21105e0eb9844c33272e0b487bd152e1a0536370a1a6100ee25a49ac3a71fc5a"}},{"ruleId":"D2","level":"warning","message":{"text":"App::rebuild_display_cache (cognitive 48): App::rebuild_display_cache has cognitive complexity 48 (threshold 15). Drivers by points: if/else 16 (34 pts), loops 2 (6 pts), boolean chains 5, match/switch 1 (3 pts) (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/state.rs"},"region":{"startLine":1228}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b350bb75837c74a5a1ad071b851198942a57291e4564b070614f19f691c0882"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::remote_tabs::perform (cognitive 48): kaku_gui::remote_tabs::perform has cognitive complexity 48 (threshold 15). Drivers by points: if/else 22 (44 pts), match/switch 3 (4 pts) (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/remote_tabs.rs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f2adaf23cdd2468cf078c32863fdaa606f18a350e50cca2af4b607965a7769a"}},{"ruleId":"D2","level":"warning","message":{"text":"mux::ssh::connect_ssh_session (cognitive 48): mux::ssh::connect_ssh_session has cognitive complexity 48 (threshold 15). Drivers by points: if/else 13 (30 pts), loops 4 (9 pts), match/switch 3 (9 pts) (nesting depth added 28). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/ssh.rs"},"region":{"startLine":430}}}],"partialFingerprints":{"codehealthFindingId/v1":"86a35f38f17c9245f7e85b7192c6e95991717b41d1f266c6d8a0fa4f5368247f"}},{"ruleId":"D2","level":"warning","message":{"text":"ClientDomain::process_pane_list (cognitive 47): ClientDomain::process_pane_list has cognitive complexity 47 (threshold 15). Drivers by points: if/else 13 (29 pts), match/switch 3 (10 pts), loops 5 (8 pts) (nesting depth added 26). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/domain.rs"},"region":{"startLine":504}}}],"partialFingerprints":{"codehealthFindingId/v1":"b44202206b4b008a4b44bea0686f5feb2a0b561f81e14743afb3baf0ad4fd390"}},{"ruleId":"D2","level":"warning","message":{"text":"LauncherState::render (cognitive 47): LauncherState::render has cognitive complexity 47 (threshold 15). Drivers by points: if/else 20 (44 pts), boolean chains 2, loops 1 (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/launcher.rs"},"region":{"startLine":406}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d27ef5d549a83a8d04aa5ff7cb2c3166582451c23a63bc11a4f066ea3877932"}},{"ruleId":"D2","level":"warning","message":{"text":"SelectorState::run_loop (cognitive 47): SelectorState::run_loop has cognitive complexity 47 (threshold 15). Drivers by points: if/else 13 (40 pts), boolean chains 4, match/switch 1 (2 pts), loops 1 (nesting depth added 28). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/selector.rs"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"c82d6f487d067b84f71f5be6526530be35cb040f6a3a093532b4de0a40b08c76"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku::ai_config::tui::extract_openclaw_fields (cognitive 46): kaku::ai_config::tui::extract_openclaw_fields has cognitive complexity 46 (threshold 15). Drivers by points: if/else 15 (33 pts), loops 4 (12 pts), boolean chains 1 (nesting depth added 26). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui.rs"},"region":{"startLine":1757}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe148aa6d29705a8643df6f9033d6eb0823f397ae797d1100be59971baaa2700"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku::ai_config::tui::providers::assistant::save_kaku_assistant_field_to_path (cognitive 46): kaku::ai_config::tui::providers::assistant::save_kaku_assistant_field_to_path has cognitive complexity 46 (threshold 15). Drivers by points: if/else 30 (41 pts), boolean chains 3, match/switch 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui/providers/assistant.rs"},"region":{"startLine":438}}}],"partialFingerprints":{"codehealthFindingId/v1":"0949ae8d15e7b2c920b6ed40665f3ac3351caff25738ca56312a0d79e58f582b"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku::reset::imp::strip_legacy_inline_block (cognitive 46): kaku::reset::imp::strip_legacy_inline_block has cognitive complexity 46 (threshold 15). Drivers by points: if/else 12 (34 pts), loops 3 (10 pts), boolean chains 2 (nesting depth added 29). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/reset.rs"},"region":{"startLine":712}}}],"partialFingerprints":{"codehealthFindingId/v1":"cde83ff90be568952cf81188d8027cd1f19a7a0276231feb5b42d46fbfe614ee"}},{"ruleId":"D2","level":"warning","message":{"text":"WebGpuState::new_impl (cognitive 46): WebGpuState::new_impl has cognitive complexity 46 (threshold 15). Drivers by points: if/else 22 (42 pts), loops 1 (2 pts), match/switch 1 (2 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":"kaku-gui/src/termwindow/webgpu.rs"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e7f00f5200d999436dec625fe6ec45a786b91d76ba1e5594b761acfecdecc27"}},{"ruleId":"D2","level":"warning","message":{"text":"SrgbaTuple::from_str (cognitive 45): SrgbaTuple::from_str has cognitive complexity 45 (threshold 15). Drivers by points: if/else 21 (35 pts), match/switch 2 (5 pts), boolean chains 3, loops 1 (2 pts) (nesting depth added 18). Of this number, 31 points are the body\u0027s own statements and 14 belong to 2 function items inside it that branch. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/color-types/src/lib.rs"},"region":{"startLine":778}}}],"partialFingerprints":{"codehealthFindingId/v1":"91bfafa21844a177c4c51974dcdcff13b7198321e6c7371a6284c33d072ab369"}},{"ruleId":"D2","level":"warning","message":{"text":"ValuePrinterHelper::fmt (cognitive 45): ValuePrinterHelper::fmt has cognitive complexity 45 (threshold 15). Drivers by points: match/switch 7 (18 pts), if/else 6 (17 pts), loops 3 (9 pts), boolean chains 1 (nesting depth added 28). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/luahelper/src/lib.rs"},"region":{"startLine":344}}}],"partialFingerprints":{"codehealthFindingId/v1":"f18d02c2a3570b585a1cba17af1ab295f08a01a7ea65485744c3201cabb0bbc0"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku::doctor::build_shell_integration_group (cognitive 45): kaku::doctor::build_shell_integration_group has cognitive complexity 45 (threshold 15). Drivers by points: if/else 35 (42 pts), boolean chains 3 (nesting depth added 7). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/doctor.rs"},"region":{"startLine":448}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9d8078bb9355ddc2b48a0e7248b23e6a8f94a7b634c81c5cbabba12d9007f0b"}},{"ruleId":"D2","level":"warning","message":{"text":"LauncherState::build_entries (cognitive 44): LauncherState::build_entries has cognitive complexity 44 (threshold 15). Drivers by points: if/else 14 (22 pts), loops 7 (12 pts), match/switch 3 (10 pts) (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/launcher.rs"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"87ab204aa2170470d225d2d41cd7bcfc0626eedceff6ffb8aa8ecdadb9a322c5"}},{"ruleId":"D2","level":"warning","message":{"text":"TerminalState::perform_csi_cursor (cognitive 44): TerminalState::perform_csi_cursor has cognitive complexity 44 (threshold 15). Drivers by points: if/else 23 (37 pts), loops 2 (4 pts), match/switch 2 (3 pts) (nesting depth added 17). 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":"term/src/terminalstate/mod.rs"},"region":{"startLine":2562}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6a5f2a3ef76eba6dcfe7c9255600b9f2e7c28b812b33eee76a4a8b86ec043d5"}},{"ruleId":"D2","level":"warning","message":{"text":"FontConfigInner::match_style (cognitive 43): FontConfigInner::match_style has cognitive complexity 43 (threshold 15). Drivers by points: if/else 16 (38 pts), match/switch 2 (4 pts), loops 1 (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/lib.rs"},"region":{"startLine":1131}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2fe2bb862265d8afb83645fa65fe46ec5c74af7bb3d8b3ad2858612e8671ffc"}},{"ruleId":"D2","level":"warning","message":{"text":"CellCluster::make_cluster (cognitive 43): CellCluster::make_cluster has cognitive complexity 43 (threshold 15). Drivers by points: if/else 16 (34 pts), boolean chains 4, loops 2 (3 pts), match/switch 1 (2 pts) (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-surface/src/cellcluster.rs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"32db5ae917038949117ffed293d283c2634b61a22d0e0bdfc87674dba8c24df1"}},{"ruleId":"D2","level":"warning","message":{"text":"CommandDef::actions_for_palette_only (cognitive 43): CommandDef::actions_for_palette_only has cognitive complexity 43 (threshold 15). Drivers by points: if/else 16 (28 pts), loops 6 (8 pts), match/switch 3 (4 pts), boolean chains 3 (nesting depth added 15). Of this number, 31 points are the body\u0027s own statements and 12 belong to 6 function items inside it that branch. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/commands.rs"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"e62227aa8cfe5548d159e1ee3033e88a5199166835e8d9159639c9713e6cf242"}},{"ruleId":"D2","level":"warning","message":{"text":"TmuxDomainState::sync_pane_state (cognitive 43): TmuxDomainState::sync_pane_state has cognitive complexity 43 (threshold 15). Drivers by points: if/else 11 (35 pts), match/switch 2 (6 pts), boolean chains 1, loops 1 (nesting depth added 28). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tmux_commands.rs"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc41d9b06f3d47919a88026762d52544939287a73fb69411ba76d9b8b2fda40a"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_remote::web::handle_upload (cognitive 42): kaku_remote::web::handle_upload has cognitive complexity 42 (threshold 15). Drivers by points: if/else 14 (32 pts), boolean chains 5, match/switch 3 (5 pts) (nesting depth added 20). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/src/web.rs"},"region":{"startLine":1241}}}],"partialFingerprints":{"codehealthFindingId/v1":"d34ee5fb7f3c50233fcdb2e97140ede0a83b1cee1a59abafbad51304880b2c39"}},{"ruleId":"D2","level":"warning","message":{"text":"ActivateTab::run (cognitive 42): ActivateTab::run has cognitive complexity 42 (threshold 15). Drivers by points: if/else 17 (36 pts), loops 2 (3 pts), match/switch 1 (3 pts) (nesting depth added 22). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/cli/activate_tab.rs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"411d1ab24a3e654277833b113d764a76d899d5419ef4b1dcdd7432c5323ce102"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::paint_impl (cognitive 42): TermWindow::paint_impl has cognitive complexity 42 (threshold 15). Drivers by points: if/else 15 (28 pts), match/switch 4 (13 pts), loops 1 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/paint.rs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"5073bfbd5a5650b9038993a8f1b7213be62aaf27e5464720d221d309e88fa457"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::overlay::ai_chat::state::emit_assistant_markdown (cognitive 42): kaku_gui::overlay::ai_chat::state::emit_assistant_markdown has cognitive complexity 42 (threshold 15). Drivers by points: loops 8 (23 pts), match/switch 4 (13 pts), if/else 2 (5 pts), boolean chains 1 (nesting depth added 27). 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":"kaku-gui/src/overlay/ai_chat/state.rs"},"region":{"startLine":476}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a7c4bed624a5eed867d0a36295847520225669edc64ea8a387ef8dd87d6faad"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::termwindow::wrapped_link::rejoined_links (cognitive 42): kaku_gui::termwindow::wrapped_link::rejoined_links has cognitive complexity 42 (threshold 15). Drivers by points: if/else 8 (22 pts), boolean chains 10, loops 7 (10 pts) (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/wrapped_link.rs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6a709caa0ec8890d1b0868eff38ebcd4d54ca977c8993439460b5047aac3af8"}},{"ruleId":"D2","level":"warning","message":{"text":"LineEditBuffer::eval_movement (cognitive 42): LineEditBuffer::eval_movement has cognitive complexity 42 (threshold 15). Drivers by points: if/else 10 (22 pts), loops 7 (17 pts), boolean chains 2, match/switch 1 (nesting depth added 22). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/lineedit/buffer.rs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0d84134ce09f42d104b66e929aafb0dc1897ccde7e6891d80252ffd2a3d263d"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::overlay::ai_chat::ai_chat_overlay (cognitive 41): kaku_gui::overlay::ai_chat::ai_chat_overlay has cognitive complexity 41 (threshold 15). Drivers by points: if/else 12 (26 pts), match/switch 4 (9 pts), boolean chains 5, loops 1 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/mod.rs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a8d07d6c9b5121cdb5a324860dc0b737c77dbd3de9b4fa668881c92b8f340ad"}},{"ruleId":"D2","level":"warning","message":{"text":"TabInner::remove_pane_if (cognitive 41): TabInner::remove_pane_if has cognitive complexity 41 (threshold 15). Drivers by points: if/else 14 (30 pts), match/switch 2 (6 pts), loops 2 (3 pts), boolean chains 2 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tab.rs"},"region":{"startLine":2068}}}],"partialFingerprints":{"codehealthFindingId/v1":"cef43fe161ddcffbd1a1e7ebc39b0ddc0843c8f1f9ced204e2cbe786fbfcdfa7"}},{"ruleId":"D2","level":"warning","message":{"text":"CoreTextFontLocator::locate_fallback_for_codepoints (cognitive 40): CoreTextFontLocator::locate_fallback_for_codepoints has cognitive complexity 40 (threshold 15). Drivers by points: if/else 11 (30 pts), loops 5 (8 pts), boolean chains 2 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/locator/core_text.rs"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"6277187a16bdb4211dd4a3d62ef24746e232e981723016e7579cb3c251707c2d"}},{"ruleId":"D2","level":"warning","message":{"text":"GlyphCache::load_glyph (cognitive 40): GlyphCache::load_glyph has cognitive complexity 40 (threshold 15). Drivers by points: if/else 23 (29 pts), boolean chains 9, match/switch 1 (2 pts) (nesting depth added 7). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/glyphcache.rs"},"region":{"startLine":702}}}],"partialFingerprints":{"codehealthFindingId/v1":"d748705635104f837f182b3b5ccd1eb42e131418a133bf0ecde8445179260b55"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::dispatch_window_event (cognitive 40): TermWindow::dispatch_window_event has cognitive complexity 40 (threshold 15). Drivers by points: if/else 17 (31 pts), match/switch 6 (9 pts) (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":2046}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e0b906154c1a525ec4da542f9b5aceeee95e48182f209ede9b3e8ba0c48ccaf"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::ai_client::responses::emit_response_output (cognitive 40): kaku_gui::ai_client::responses::emit_response_output has cognitive complexity 40 (threshold 15). Drivers by points: if/else 7 (24 pts), loops 3 (12 pts), match/switch 1 (3 pts), boolean chains 1 (nesting depth added 28). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_client/responses.rs"},"region":{"startLine":442}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a9751bc44a669748b5c7ac9f10448f1f425c38fd0a79d068c8e46bbb5882541"}},{"ruleId":"D2","level":"warning","message":{"text":"BidiContext::reverse_levels (cognitive 39): BidiContext::reverse_levels has cognitive complexity 39 (threshold 15). Drivers by points: if/else 13 (25 pts), match/switch 2 (7 pts), loops 4 (5 pts), boolean chains 2 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/bidi/src/lib.rs"},"region":{"startLine":355}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b1a45312ab80357ec85a44df1ff876fd00d838034c3ea2c30e0e53951133715"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::build_fancy_tab_bar (cognitive 39): TermWindow::build_fancy_tab_bar has cognitive complexity 39 (threshold 15). Drivers by points: if/else 20 (26 pts), match/switch 6 (9 pts), boolean chains 3, loops 1 (nesting depth added 9). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/fancy_tab_bar.rs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c94b2bccdf422a1aae1ebcdd45f2676d5d35ee7f7e451b3dd12ef4c63bad589"}},{"ruleId":"D2","level":"warning","message":{"text":"mux::read_from_pane_pty (cognitive 39): mux::read_from_pane_pty has cognitive complexity 39 (threshold 15). Drivers by points: if/else 13 (29 pts), match/switch 5 (9 pts), loops 1 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/lib.rs"},"region":{"startLine":613}}}],"partialFingerprints":{"codehealthFindingId/v1":"08bf2d13e4a39703af9e15c831a66a0bb4c0749a8f77d432dd7a9ce491e7de9d"}},{"ruleId":"D2","level":"warning","message":{"text":"serde_funcs::lua_value_to_json_value (cognitive 38): serde_funcs::lua_value_to_json_value has cognitive complexity 38 (threshold 15). Drivers by points: match/switch 5 (15 pts), if/else 8 (13 pts), loops 3 (9 pts), boolean chains 1 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lua-api-crates/serde-funcs/src/lib.rs"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a2397ffe173047efc93278a34e6c16d3012c7d49cfca5677db0157e8633af93"}},{"ruleId":"D2","level":"warning","message":{"text":"Config::load_color_schemes (cognitive 37): Config::load_color_schemes has cognitive complexity 37 (threshold 15). Drivers by points: if/else 7 (26 pts), match/switch 1 (7 pts), loops 2 (4 pts) (nesting depth added 27). Of this number, 35 points are the body\u0027s own statements and 2 belong to one function item inside it that branches. To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/config.rs"},"region":{"startLine":1965}}}],"partialFingerprints":{"codehealthFindingId/v1":"455b1067766ebabec37bab617286136610c3bb2247c51bf756d40355fdb9b1f2"}},{"ruleId":"D2","level":"warning","message":{"text":"luahelper::lua_value_to_dynamic_impl (cognitive 37): luahelper::lua_value_to_dynamic_impl has cognitive complexity 37 (threshold 15). Drivers by points: match/switch 6 (18 pts), if/else 5 (9 pts), loops 3 (9 pts), boolean chains 1 (nesting depth added 22). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/luahelper/src/lib.rs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"707413d376c70bd2a3b14f0bd416a696630ae3f3539e5715ea712f1c29a51ca2"}},{"ruleId":"D2","level":"warning","message":{"text":"wezterm_mux_server_impl::dispatch::process_async (cognitive 37): wezterm_mux_server_impl::dispatch::process_async has cognitive complexity 37 (threshold 15). Drivers by points: if/else 6 (25 pts), match/switch 4 (11 pts), loops 1 (nesting depth added 26). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-mux-server-impl/src/dispatch.rs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"e52623457e317829da8ddd078dec5ba6dcff95615678e919751263be00ae62c6"}},{"ruleId":"D2","level":"warning","message":{"text":"share_data::lua_value_to_gvalue_impl (cognitive 37): share_data::lua_value_to_gvalue_impl has cognitive complexity 37 (threshold 15). Drivers by points: match/switch 6 (18 pts), if/else 5 (9 pts), loops 3 (9 pts), boolean chains 1 (nesting depth added 22). 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":"lua-api-crates/share-data/src/lib.rs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff8243f152555d53a9d162f5c0b8835c2652781afe4b645ea4db6f74918c42a9"}},{"ruleId":"D2","level":"warning","message":{"text":"mux::ssh::ssh_connect_with_ui (cognitive 37): mux::ssh::ssh_connect_with_ui has cognitive complexity 37 (threshold 15). Drivers by points: if/else 9 (23 pts), loops 3 (8 pts), match/switch 2 (6 pts) (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/ssh.rs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c15a0c548f466b299b89fa29e656524e8a2fc0f11aeca9a71e028707ccb7123"}},{"ruleId":"D2","level":"warning","message":{"text":"wezterm_client::domain::mux_notify_client_domain (cognitive 36): wezterm_client::domain::mux_notify_client_domain has cognitive complexity 36 (threshold 15). Drivers by points: if/else 11 (30 pts), match/switch 5 (6 pts) (nesting depth added 20). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/domain.rs"},"region":{"startLine":269}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c57eeb69b673edcb3f2ea41795ebd9367789c7596a8c4120e2f292ede4dade1"}},{"ruleId":"D2","level":"warning","message":{"text":"Surface::repaint_all (cognitive 36): Surface::repaint_all has cognitive complexity 36 (threshold 15). Drivers by points: if/else 11 (19 pts), match/switch 5 (13 pts), loops 3, boolean chains 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-surface/src/lib.rs"},"region":{"startLine":580}}}],"partialFingerprints":{"codehealthFindingId/v1":"248f92d062249a564f4376a89b707169ba489c6fa1d9e496405e006096e12417"}},{"ruleId":"D2","level":"warning","message":{"text":"GlyphCache::cached_image_impl (cognitive 36): GlyphCache::cached_image_impl has cognitive complexity 36 (threshold 15). Drivers by points: if/else 12 (31 pts), match/switch 3 (4 pts), boolean chains 1 (nesting depth added 20). 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":"kaku-gui/src/glyphcache.rs"},"region":{"startLine":931}}}],"partialFingerprints":{"codehealthFindingId/v1":"9af1bf7887b4096935fc566656003fadc353e898203462c2bdf104cd6f64a60b"}},{"ruleId":"D2","level":"warning","message":{"text":"GlyphCache::line_sprite (cognitive 36): GlyphCache::line_sprite has cognitive complexity 36 (threshold 15). Drivers by points: if/else 10 (22 pts), loops 10 (13 pts), match/switch 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/glyphcache.rs"},"region":{"startLine":1184}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d4a6062aaf83498f5d1e304e477b1b1c233830208c6ea369a286b05a36541bf"}},{"ruleId":"D2","level":"warning","message":{"text":"SelectorState::render (cognitive 36): SelectorState::render has cognitive complexity 36 (threshold 15). Drivers by points: if/else 15 (34 pts), boolean chains 1, loops 1 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/selector.rs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"33654887f50ca3dbd19055792cd1f01155838fae19076343b4ea2e226aa9579d"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::compute_cell_fg_bg (cognitive 36): TermWindow::compute_cell_fg_bg has cognitive complexity 36 (threshold 15). Drivers by points: if/else 18 (28 pts), boolean chains 4, match/switch 3 (4 pts) (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/mod.rs"},"region":{"startLine":700}}}],"partialFingerprints":{"codehealthFindingId/v1":"80bd9542944bacd1c9e2d374e7c7d84ee17aa8d5d1c1ddfc0e5526c0bb27e093"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalPane::search (cognitive 36): LocalPane::search has cognitive complexity 36 (threshold 15). Drivers by points: if/else 10 (16 pts), loops 6 (13 pts), match/switch 5 (7 pts) (nesting depth added 15). Of this number, 31 points are the body\u0027s own statements and 5 belong to 2 function items inside it that branch. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/localpane.rs"},"region":{"startLine":768}}}],"partialFingerprints":{"codehealthFindingId/v1":"8773268bd5843c70e0733b6f5a417d47393307688d5fbec845d7183dcc5ef4a8"}},{"ruleId":"D2","level":"warning","message":{"text":"Screen::scroll_up (cognitive 36): Screen::scroll_up has cognitive complexity 36 (threshold 15). Drivers by points: if/else 18 (23 pts), loops 6 (9 pts), boolean chains 4 (nesting depth added 8). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/screen.rs"},"region":{"startLine":710}}}],"partialFingerprints":{"codehealthFindingId/v1":"066e8c4dc8c335bfa731f57053d3a357e8d8e27eccedfc43b7e26b760a061d63"}},{"ruleId":"D2","level":"warning","message":{"text":"wezterm_client::discovery::discover_gui_socks (cognitive 35): wezterm_client::discovery::discover_gui_socks has cognitive complexity 35 (threshold 15). Drivers by points: if/else 12 (32 pts), loops 1 (2 pts), boolean chains 1 (nesting depth added 21). Of this number, 30 points are the body\u0027s own statements and 5 belong to one function item inside it that branches. To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/discovery.rs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"05d4cd9464fb1025738a14ab4496f66a9dcad04c393381084660548bcfe7d79f"}},{"ruleId":"D2","level":"warning","message":{"text":"SessionInner::authenticate (cognitive 35): SessionInner::authenticate has cognitive complexity 35 (threshold 15). Drivers by points: if/else 11 (27 pts), match/switch 1 (4 pts), boolean chains 3, loops 1 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/auth.rs"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"87af4f86de135480cfe804400f4e4c86e97769c21fd2893c9b9e1e209eec61bf"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::update_title_impl (cognitive 35): TermWindow::update_title_impl has cognitive complexity 35 (threshold 15). Drivers by points: if/else 19 (28 pts), match/switch 5 (6 pts), boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":3793}}}],"partialFingerprints":{"codehealthFindingId/v1":"b17d5bd60cd9f9387babde52f387e41d32ac3533b2cc37bc45e9b4bd56b7a5b4"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::build_line_element_shape (cognitive 35): TermWindow::build_line_element_shape has cognitive complexity 35 (threshold 15). Drivers by points: if/else 14 (27 pts), match/switch 2 (6 pts), boolean chains 1, loops 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/screen_line.rs"},"region":{"startLine":817}}}],"partialFingerprints":{"codehealthFindingId/v1":"ccaeb38d0fac58cd0e8f0bef515eba60fe81659982fa80ce8e66602da121c0d1"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku::run_remote (cognitive 34): kaku::run_remote has cognitive complexity 34 (threshold 15). Drivers by points: if/else 16 (25 pts), loops 4 (6 pts), boolean chains 2, match/switch 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/main.rs"},"region":{"startLine":323}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5615d29c39b1f6dbd8ae488e4e4134fc591c3ec2bc70c861994b4449b459493"}},{"ruleId":"D2","level":"warning","message":{"text":"CopyRenderable::move_to_end_of_word (cognitive 34): CopyRenderable::move_to_end_of_word has cognitive complexity 34 (threshold 15). Drivers by points: if/else 9 (26 pts), loops 2 (8 pts) (nesting depth added 23). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/copy.rs"},"region":{"startLine":1003}}}],"partialFingerprints":{"codehealthFindingId/v1":"c89e3dbe6db7659dae4eb2695e91d6c96bfc2498df7bb68aaf649869fab3e48b"}},{"ruleId":"D2","level":"warning","message":{"text":"InputParser::process_bytes (cognitive 34): InputParser::process_bytes has cognitive complexity 34 (threshold 15). Drivers by points: if/else 7 (20 pts), match/switch 3 (10 pts), boolean chains 3, loops 1 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/input.rs"},"region":{"startLine":1064}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc174cdba3fb8bfbc48fe18ac5012c9d22d9bcd237b93d62cb1b7a4bff389019"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku::doctor::build_environment_group (cognitive 33): kaku::doctor::build_environment_group has cognitive complexity 33 (threshold 15). Drivers by points: if/else 20 (27 pts), match/switch 3 (6 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":"kaku/src/doctor.rs"},"region":{"startLine":262}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee14458830c652bd2f09bfb64705ce0c35a8620209f20e654c4bc89807e555c4"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::render_element (cognitive 33): TermWindow::render_element has cognitive complexity 33 (threshold 15). Drivers by points: if/else 7 (21 pts), match/switch 4 (7 pts), loops 2 (4 pts), boolean chains 1 (nesting depth added 19). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/box_model.rs"},"region":{"startLine":850}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ed4e2e66af13fc6e57bdaf785ed65c1042d3213e18ef8ca714abbb385b6f2c1"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::new_window (cognitive 33): TermWindow::new_window has cognitive complexity 33 (threshold 15). Drivers by points: if/else 18 (19 pts), loops 3 (8 pts), boolean chains 3, match/switch 2 (3 pts) (nesting depth added 7). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":1591}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2cb0a1eb591bd9a7625d782d6ebfaf8e365eadebceb30ab75432c8ef9cecfc1"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::ai_chat_engine::approval::curl_is_dangerous (cognitive 33): kaku_gui::ai_chat_engine::approval::curl_is_dangerous has cognitive complexity 33 (threshold 15). Drivers by points: if/else 8 (19 pts), match/switch 2 (7 pts), boolean chains 6, loops 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_chat_engine/approval.rs"},"region":{"startLine":372}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f787e3f096c470d870ea7a9edb891416d21780e7583d6a9902ff8c8ac5199b6"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::overlay::confirm::run_confirmation_impl (cognitive 33): kaku_gui::overlay::confirm::run_confirmation_impl has cognitive complexity 33 (threshold 15). Drivers by points: if/else 12 (23 pts), loops 5 (6 pts), boolean chains 2, match/switch 1 (2 pts) (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/confirm.rs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcb0f0cb2783b18a9cb0f866dc09a7b7f63a16e313b6e1d8f0d1020ec9d2f053"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalDomain::fixup_command (cognitive 33): LocalDomain::fixup_command has cognitive complexity 33 (threshold 15). Drivers by points: if/else 10 (16 pts), loops 7 (15 pts), match/switch 1 (2 pts) (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/domain.rs"},"region":{"startLine":313}}}],"partialFingerprints":{"codehealthFindingId/v1":"016274bffddbbfdace3b921a77efb7eaa2f364bc31888efd04f25eeb454ab07f"}},{"ruleId":"D2","level":"warning","message":{"text":"InputParser::build_basic_key_map (cognitive 33): InputParser::build_basic_key_map has cognitive complexity 33 (threshold 15). Drivers by points: loops 17 (26 pts), match/switch 1 (4 pts), if/else 1 (3 pts) (nesting depth added 14). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/input.rs"},"region":{"startLine":640}}}],"partialFingerprints":{"codehealthFindingId/v1":"48217cd7ad3cdf0e8c31e3a75a54d40fac6e9f64b201c5270f25395648aefef7"}},{"ruleId":"D2","level":"warning","message":{"text":"WindowView::scroll_wheel (cognitive 33): WindowView::scroll_wheel has cognitive complexity 33 (threshold 15). Drivers by points: if/else 16 (26 pts), boolean chains 5, 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":"window/src/os/macos/window.rs"},"region":{"startLine":8565}}}],"partialFingerprints":{"codehealthFindingId/v1":"551f6cc6d4431ca63dae4687b7e16195a735a48cfa3dd064e6b9ff35fb1ba180"}},{"ruleId":"D2","level":"warning","message":{"text":"ConfigInner::unwatch_stale_paths (cognitive 32): ConfigInner::unwatch_stale_paths has cognitive complexity 32 (threshold 15). Drivers by points: if/else 9 (31 pts), loops 1 (nesting depth added 22). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/lib.rs"},"region":{"startLine":1998}}}],"partialFingerprints":{"codehealthFindingId/v1":"3492c364e74ec034e311f2583e8eb79456c07241e575078bf78befa61c85556c"}},{"ruleId":"D2","level":"warning","message":{"text":"FontConfigInner::resolve_font_helper_impl (cognitive 32): FontConfigInner::resolve_font_helper_impl has cognitive complexity 32 (threshold 15). Drivers by points: if/else 7 (19 pts), loops 6 (12 pts), boolean chains 1 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/lib.rs"},"region":{"startLine":780}}}],"partialFingerprints":{"codehealthFindingId/v1":"80c16fb121a5a510bfc6bce92dff858e4e925c58c90245a52d962e175069dd55"}},{"ruleId":"D2","level":"warning","message":{"text":"CopyOverlay::with_lines_mut (cognitive 32): CopyOverlay::with_lines_mut has cognitive complexity 32 (threshold 15). Drivers by points: if/else 6 (16 pts), loops 3 (8 pts), match/switch 2 (6 pts), boolean chains 2 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/copy.rs"},"region":{"startLine":1522}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a878fd815641bd2856f1b3d2ad28265885d3b759067ea45900b17916c837dea"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::selection_lines (cognitive 32): TermWindow::selection_lines has cognitive complexity 32 (threshold 15). Drivers by points: if/else 6 (24 pts), loops 2 (5 pts), boolean chains 3 (nesting depth added 21). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/selection.rs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6fd2789c6d5d8444c8e48a831467bdbc19ddf221a75f12a0ac8ad03d357d887"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::ai_chat_engine::approval::split_shell_segments (cognitive 32): kaku_gui::ai_chat_engine::approval::split_shell_segments has cognitive complexity 32 (threshold 15). Drivers by points: if/else 10 (21 pts), boolean chains 8, match/switch 1 (2 pts), loops 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_chat_engine/approval.rs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"a101fc66ba919350cd077786e00cdf0f6f0f909e52b73605d28c923742af58f6"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalPane::is_dead (cognitive 32): LocalPane::is_dead has cognitive complexity 32 (threshold 15). Drivers by points: if/else 11 (20 pts), match/switch 6 (12 pts) (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/localpane.rs"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"5671432675e2362771545861dfa1f9725c8c4a035577b17f3595f3cc89b0fa7a"}},{"ruleId":"D2","level":"warning","message":{"text":"TabInner::iter_panes_impl (cognitive 32): TabInner::iter_panes_impl has cognitive complexity 32 (threshold 15). Drivers by points: if/else 8 (26 pts), loops 2 (4 pts), match/switch 1 (2 pts) (nesting depth added 21). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tab.rs"},"region":{"startLine":1353}}}],"partialFingerprints":{"codehealthFindingId/v1":"9961b2d29c7f040a0a43135c4ff36608059fcc4db3b904b32b0a080eb15b99f9"}},{"ruleId":"D2","level":"warning","message":{"text":"Screen::rewrap_lines (cognitive 32): Screen::rewrap_lines has cognitive complexity 32 (threshold 15). Drivers by points: if/else 10 (23 pts), loops 3 (5 pts), boolean chains 2, match/switch 1 (2 pts) (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/screen.rs"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"55f56856df22c79962d8b9b55edb592d9ae53c16e280a7f0c85ccf8f30f955b5"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_remote::share::advance (cognitive 31): kaku_remote::share::advance has cognitive complexity 31 (threshold 15). Drivers by points: if/else 11 (23 pts), match/switch 4 (8 pts) (nesting depth added 16). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/src/share.rs"},"region":{"startLine":361}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fb3f9cc51041c9c5638502fe42531c425d62819c517951ee75670a660b12288"}},{"ruleId":"D2","level":"warning","message":{"text":"SessionInner::tick_io (cognitive 31): SessionInner::tick_io has cognitive complexity 31 (threshold 15). Drivers by points: if/else 9 (23 pts), loops 3 (4 pts), match/switch 1 (3 pts), boolean chains 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/sessioninner.rs"},"region":{"startLine":533}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3184f297230f2db85292615b225c74fa8cc2b44bd8c9993fb5165caa4fba295"}},{"ruleId":"D2","level":"warning","message":{"text":"GuiFrontEnd::reconcile_workspace (cognitive 31): GuiFrontEnd::reconcile_workspace has cognitive complexity 31 (threshold 15). Drivers by points: if/else 13 (25 pts), loops 4 (5 pts), boolean chains 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/frontend.rs"},"region":{"startLine":1259}}}],"partialFingerprints":{"codehealthFindingId/v1":"006511d87ccf1ad26e8582f15df2485ca1fdfee5c57aa440d14e647c675aeb83"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::subscribe_to_pane_updates (cognitive 31): TermWindow::subscribe_to_pane_updates has cognitive complexity 31 (threshold 15). Drivers by points: if/else 11 (30 pts), match/switch 1 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":3015}}}],"partialFingerprints":{"codehealthFindingId/v1":"be1b4c1b4291e8c711c85fe2b635c79011bdf7fae9d951cc388a7ae56af89aac"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::ai_tools::search::exec_symbol_search (cognitive 31): kaku_gui::ai_tools::search::exec_symbol_search has cognitive complexity 31 (threshold 15). Drivers by points: if/else 13 (26 pts), match/switch 2 (3 pts), loops 2 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_tools/search.rs"},"region":{"startLine":557}}}],"partialFingerprints":{"codehealthFindingId/v1":"16b89f1d76212b7c66fb90bd2ec888d87c1b780800b43fe814051e97a02185ee"}},{"ruleId":"D2","level":"warning","message":{"text":"TabInner::get_pane_direction (cognitive 31): TabInner::get_pane_direction has cognitive complexity 31 (threshold 15). Drivers by points: if/else 13 (20 pts), match/switch 3 (6 pts), boolean chains 4, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tab.rs"},"region":{"startLine":1931}}}],"partialFingerprints":{"codehealthFindingId/v1":"6115f96410cbff280a57f43df7c489931fab8cad567338b4fc4962495a37cc29"}},{"ruleId":"D2","level":"warning","message":{"text":"TabInner::split_and_insert (cognitive 31): TabInner::split_and_insert has cognitive complexity 31 (threshold 15). Drivers by points: if/else 17 (21 pts), match/switch 5 (8 pts), boolean chains 2 (nesting depth added 7). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tab.rs"},"region":{"startLine":2427}}}],"partialFingerprints":{"codehealthFindingId/v1":"15f98f94d63ba5eff005fe7586c8b83fe812cb0b9c265644a6a0a5c15de46544"}},{"ruleId":"D2","level":"warning","message":{"text":"svg_to_poly.parse (cognitive 31): svg_to_poly.parse has cognitive complexity 31 (threshold 15). Drivers by points: ternaries 6 (18 pts), if/else 6 (12 pts), loops 1 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/svg_to_poly.py"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"90e69ee3db063a2be44e15d9b42461de853c6b70985b191f8543c0fd2cd19cda"}},{"ruleId":"D2","level":"warning","message":{"text":"wezterm_mux_server_impl::update_mux_domains_impl (cognitive 30): wezterm_mux_server_impl::update_mux_domains_impl has cognitive complexity 30 (threshold 15). Drivers by points: if/else 12 (26 pts), loops 4 (nesting depth added 14). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-mux-server-impl/src/lib.rs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f01853e1147d743a01d363e29f2ffcd921b0b1ee36ce4783e1bac880a2b10bb"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku::update::imp::run (cognitive 30): kaku::update::imp::run has cognitive complexity 30 (threshold 15). Drivers by points: if/else 11 (21 pts), match/switch 4 (5 pts), loops 1 (3 pts), boolean chains 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/update.rs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6b86836b46975b6cffd61e2becb71d3672dd3f31dffb6d5efdbdc1e7de06ee7"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::rejoin_wrapped_link (cognitive 30): TermWindow::rejoin_wrapped_link has cognitive complexity 30 (threshold 15). Drivers by points: if/else 12 (19 pts), boolean chains 5, loops 2 (3 pts), match/switch 2 (3 pts) (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":5598}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e75b2df163f79c18863d97af3e5b5bda3e0b01b3fb2f9caff0b36dac7e1a550"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::ai_client::responses::translate_responses_messages (cognitive 30): kaku_gui::ai_client::responses::translate_responses_messages has cognitive complexity 30 (threshold 15). Drivers by points: if/else 11 (23 pts), loops 2 (5 pts), boolean chains 2 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_client/responses.rs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3d5b5ed7d873a9839f9fd9882058e679ccc6433f103180cfa03d5a6ef581245"}},{"ruleId":"D2","level":"warning","message":{"text":"TabInner::iter_splits (cognitive 30): TabInner::iter_splits has cognitive complexity 30 (threshold 15). Drivers by points: if/else 7 (20 pts), match/switch 2 (6 pts), loops 2 (4 pts) (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tab.rs"},"region":{"startLine":1431}}}],"partialFingerprints":{"codehealthFindingId/v1":"32e1d9905c68df9fb4d97a80ad1f69f29e361573a9a2bc7c990ff94cc7de4be4"}},{"ruleId":"D2","level":"warning","message":{"text":"window::os::macos::app::application_open_untitled_file (cognitive 30): window::os::macos::app::application_open_untitled_file has cognitive complexity 30 (threshold 15). Drivers by points: if/else 10 (26 pts), loops 1 (4 pts) (nesting depth added 19). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/app.rs"},"region":{"startLine":1278}}}],"partialFingerprints":{"codehealthFindingId/v1":"d991ec129c979fbcc0121f61d197b126314c20b241525c9343d4a83455b11d58"}},{"ruleId":"D2","level":"warning","message":{"text":"Line::changes (cognitive 29): Line::changes has cognitive complexity 29 (threshold 15). Drivers by points: if/else 12 (28 pts), loops 1 (nesting depth added 16). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-surface/src/line/line.rs"},"region":{"startLine":1187}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f9766767b303fc8d30830821bd912b3c134845a5419e9c0835fa604641d7e6f"}},{"ruleId":"D2","level":"warning","message":{"text":"SpawnCommand::run (cognitive 29): SpawnCommand::run has cognitive complexity 29 (threshold 15). Drivers by points: if/else 6 (15 pts), loops 2 (7 pts), match/switch 2 (7 pts) (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/cli/spawn_command.rs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"8baceaa64199aa9d7deed5dacea3243b02f281f458fe310dcce1c7ede81bc185"}},{"ruleId":"D2","level":"warning","message":{"text":"App::load_window_decorations (cognitive 29): App::load_window_decorations has cognitive complexity 29 (threshold 15). Drivers by points: if/else 10 (23 pts), loops 2 (4 pts), boolean chains 1, match/switch 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/config_tui/mod.rs"},"region":{"startLine":700}}}],"partialFingerprints":{"codehealthFindingId/v1":"491ee9ddfb114e261f54cbf92c8830cdb49596c9f6400296fd369401b619e0fa"}},{"ruleId":"D2","level":"warning","message":{"text":"CopyOverlay::get_lines (cognitive 29): CopyOverlay::get_lines has cognitive complexity 29 (threshold 15). Drivers by points: if/else 6 (16 pts), loops 3 (8 pts), match/switch 1 (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":"kaku-gui/src/overlay/copy.rs"},"region":{"startLine":1645}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e1cf36c4f0452d208a6749faa3e038e9f78455e7a9031dd38195b6dacafc316"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::ai_tools::shell::exec_shell_exec (cognitive 29): kaku_gui::ai_tools::shell::exec_shell_exec has cognitive complexity 29 (threshold 15). Drivers by points: if/else 18 (25 pts), boolean chains 3, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_tools/shell.rs"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"5141680177b2386ef50f4b5787518570948ad848493ee6caad262dca03fec939"}},{"ruleId":"D2","level":"warning","message":{"text":"Performer::flush_print (cognitive 29): Performer::flush_print has cognitive complexity 29 (threshold 15). Drivers by points: if/else 11 (19 pts), loops 2 (4 pts), boolean chains 3, match/switch 1 (3 pts) (nesting depth added 12). Of this number, 25 points are the body\u0027s own statements and 4 belong to one function item inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/performer.rs"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"772f44fc8fd5fc6ac86b5109bebb279ad9eb4ff0e62b8120c94a0d89888bbdf9"}},{"ruleId":"D2","level":"warning","message":{"text":"Performer::control (cognitive 29): Performer::control has cognitive complexity 29 (threshold 15). Drivers by points: if/else 16 (25 pts), boolean chains 3, match/switch 1 (nesting depth added 9). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/performer.rs"},"region":{"startLine":480}}}],"partialFingerprints":{"codehealthFindingId/v1":"007cdc6bf5c8f4ebd16f8ad838cf154ab69fd3f532ee3db8096cc5ce67366c31"}},{"ruleId":"D2","level":"warning","message":{"text":"LineEditor::apply_action (cognitive 29): LineEditor::apply_action has cognitive complexity 29 (threshold 15). Drivers by points: if/else 11 (23 pts), loops 2 (4 pts), match/switch 2 (nesting depth added 14). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/lineedit/mod.rs"},"region":{"startLine":677}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc63bc07c25e2062fe9da3b9d47be967cd99523a1089ac39d94a8eedb933b546"}},{"ruleId":"D2","level":"warning","message":{"text":"wezterm_config_derive::attr::container_info (cognitive 28): wezterm_config_derive::attr::container_info has cognitive complexity 28 (threshold 15). Drivers by points: if/else 5 (20 pts), match/switch 2 (5 pts), loops 2 (3 pts) (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/derive/src/attr.rs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b7760ec1da7e2274fca8495799288df3a05a579f810b5ab651ea13bdd194425"}},{"ruleId":"D2","level":"warning","message":{"text":"env_bootstrap::ringlog::prune_old_logs (cognitive 28): env_bootstrap::ringlog::prune_old_logs has cognitive complexity 28 (threshold 15). Drivers by points: if/else 8 (23 pts), boolean chains 3, loops 1 (2 pts) (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/env-bootstrap/src/ringlog.rs"},"region":{"startLine":241}}}],"partialFingerprints":{"codehealthFindingId/v1":"f743216db6915dbc5d32854bca551d232ff07862be2686327f2311632c6a9af9"}},{"ruleId":"D2","level":"warning","message":{"text":"CommandBuilder::search_path (cognitive 28): CommandBuilder::search_path has cognitive complexity 28 (threshold 15). Drivers by points: if/else 15 (25 pts), loops 1 (3 pts) (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/pty/src/cmdbuilder.rs"},"region":{"startLine":331}}}],"partialFingerprints":{"codehealthFindingId/v1":"4eb7f502b86ffe14299af810ae207a630b9bc64c5558ed8288b5d12730bcc679"}},{"ruleId":"D2","level":"warning","message":{"text":"Reconnectable::tls_connect (cognitive 28): Reconnectable::tls_connect has cognitive complexity 28 (threshold 15). Drivers by points: if/else 8 (19 pts), match/switch 3 (9 pts) (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/client.rs"},"region":{"startLine":791}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac99dc1af059c46b330e5c0f769d359cc93a3708def94c649ea20b637658bf92"}},{"ruleId":"D2","level":"warning","message":{"text":"wezterm_dynamic_derive::attr::container_info (cognitive 28): wezterm_dynamic_derive::attr::container_info has cognitive complexity 28 (threshold 15). Drivers by points: if/else 5 (20 pts), match/switch 2 (5 pts), loops 2 (3 pts) (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-dynamic/derive/src/attr.rs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"25bc5c983c331fd973524516bc8e2fa13fd9d2e5223193b707c38e0e5f56d4fb"}},{"ruleId":"D2","level":"warning","message":{"text":"FinalTermSemanticPrompt::parse (cognitive 28): FinalTermSemanticPrompt::parse has cognitive complexity 28 (threshold 15). Drivers by points: if/else 12 (14 pts), match/switch 5 (10 pts), boolean chains 3, loops 1 (nesting depth added 7). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/osc.rs"},"region":{"startLine":767}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c85eba16e8d70f9788ad21845528ffb013c9368e67213687d69fb449cf83202"}},{"ruleId":"D2","level":"warning","message":{"text":"wezterm_font::rasterizer::crop_to_non_transparent (cognitive 28): wezterm_font::rasterizer::crop_to_non_transparent has cognitive complexity 28 (threshold 15). Drivers by points: if/else 4 (14 pts), match/switch 2 (8 pts), loops 4 (6 pts) (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/rasterizer/mod.rs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1d26954188e5a114470361cd47893af8ebbb1b743fd6049dbbd794fd08ac7a8"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku::config_tui::run_app (cognitive 28): kaku::config_tui::run_app has cognitive complexity 28 (threshold 15). Drivers by points: match/switch 5 (13 pts), if/else 5 (12 pts), boolean chains 2, loops 1 (nesting depth added 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/config_tui/mod.rs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea46f88a2b1c0ef81286ba9cbf77a81e135af3d5ec6a20ea9fa0a6eea359ca8d"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku::config_tui::ui::render_fields (cognitive 28): kaku::config_tui::ui::render_fields has cognitive complexity 28 (threshold 15). Drivers by points: if/else 15 (25 pts), boolean chains 2, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/config_tui/ui.rs"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"5cbc82d6dcfe412a6a0b55fbe37a00525b5fe7102512ee03034667fcec2d4941"}},{"ruleId":"D2","level":"warning","message":{"text":"App::submit (cognitive 28): App::submit has cognitive complexity 28 (threshold 15). Drivers by points: if/else 19 (22 pts), match/switch 3 (4 pts), boolean chains 2 (nesting depth added 4). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/state.rs"},"region":{"startLine":1594}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbc8975d075ce607dbe2f837a1c9f7ebe7ba5e6427c45a1db574a5baf5fc75fa"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::async_run_terminal_gui (cognitive 28): kaku_gui::async_run_terminal_gui has cognitive complexity 28 (threshold 15). Drivers by points: if/else 14 (21 pts), match/switch 3 (5 pts), boolean chains 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/main.rs"},"region":{"startLine":350}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e9d2b2c780c9ded5b60ee939f2e6e82837269764b68d15d4ce0e9c336f5474d"}},{"ruleId":"D2","level":"warning","message":{"text":"Screen::resize (cognitive 28): Screen::resize has cognitive complexity 28 (threshold 15). Drivers by points: if/else 12 (17 pts), loops 4 (8 pts), boolean chains 3 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/screen.rs"},"region":{"startLine":202}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4311ab37b79370d99cb2f46f43a501eee7623313752d73c13cf87073912cca1"}},{"ruleId":"D2","level":"warning","message":{"text":"Screen::for_each_logical_line_in_stable_range_mut (cognitive 28): Screen::for_each_logical_line_in_stable_range_mut has cognitive complexity 28 (threshold 15). Drivers by points: if/else 10 (23 pts), loops 3 (4 pts), boolean chains 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: one other method here (Screen::for_each_logical_line_in_stable_range) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/screen.rs"},"region":{"startLine":1063}}}],"partialFingerprints":{"codehealthFindingId/v1":"85e6e5705fdbb6d4ff5afd957ebaf324690d746337fef6e10864ed9b9e6e7870"}},{"ruleId":"D2","level":"warning","message":{"text":"Screen::for_each_logical_line_in_stable_range (cognitive 28): Screen::for_each_logical_line_in_stable_range has cognitive complexity 28 (threshold 15). Drivers by points: if/else 10 (23 pts), loops 3 (4 pts), boolean chains 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: one other method here (Screen::for_each_logical_line_in_stable_range_mut) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/screen.rs"},"region":{"startLine":1142}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b50a9981f939f3c15f5c304bea9e1b04c22ed1e670eb24eafd36dd8baa42ddc"}},{"ruleId":"D2","level":"warning","message":{"text":"WindowInner::update_window_shadow (cognitive 28): WindowInner::update_window_shadow has cognitive complexity 28 (threshold 15). Drivers by points: if/else 15 (22 pts), loops 1 (4 pts), boolean chains 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/window.rs"},"region":{"startLine":2714}}}],"partialFingerprints":{"codehealthFindingId/v1":"0725510466e5d66d4276a52375d0c67e574379290fc2af2dfc1a8fad34381a64"}},{"ruleId":"D2","level":"warning","message":{"text":"BidiContext::resolve_paired_brackets (cognitive 27): BidiContext::resolve_paired_brackets has cognitive complexity 27 (threshold 15). Drivers by points: if/else 7 (22 pts), loops 3 (5 pts) (nesting depth added 17). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/bidi/src/lib.rs"},"region":{"startLine":819}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab6dc7c801a411b9e929609bc0378746608858b7e9342b028297111aa71e90d2"}},{"ruleId":"D2","level":"warning","message":{"text":"WcLookupTable::new (cognitive 27): WcLookupTable::new has cognitive complexity 27 (threshold 15). Drivers by points: loops 18 (27 pts) (nesting depth added 9). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-char-props/src/widechar_width.rs"},"region":{"startLine":1603}}}],"partialFingerprints":{"codehealthFindingId/v1":"60ba92174bb2eb95f41646fdaed134e3ec8d1ee311ec7677b89cdcc0004000be"}},{"ruleId":"D2","level":"warning","message":{"text":"Client::new (cognitive 27): Client::new has cognitive complexity 27 (threshold 15). Drivers by points: if/else 8 (18 pts), loops 2 (4 pts), match/switch 1 (4 pts), boolean chains 1 (nesting depth added 15). Of this number, 26 points are the body\u0027s own statements and 1 belongs to one function item inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/client.rs"},"region":{"startLine":1022}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bb0c3bd0cf1bf674e0d29e813b12ac88777f6d48f20b420aabe48aae549ab37"}},{"ruleId":"D2","level":"warning","message":{"text":"FontConfigInner::resolve_font (cognitive 27): FontConfigInner::resolve_font has cognitive complexity 27 (threshold 15). Drivers by points: if/else 11 (21 pts), boolean chains 3, match/switch 2 (3 pts) (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/lib.rs"},"region":{"startLine":931}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ac17abdbbd6d0732803d14fe6bc37d481f7b290f13bc8c9ef49c9e402bd7b23"}},{"ruleId":"D2","level":"warning","message":{"text":"ParsedFont::from_face (cognitive 27): ParsedFont::from_face has cognitive complexity 27 (threshold 15). Drivers by points: if/else 11 (18 pts), loops 2 (4 pts), match/switch 4, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/parser.rs"},"region":{"startLine":385}}}],"partialFingerprints":{"codehealthFindingId/v1":"08ee5edad9618ebcd372da434f66ef44528ce6c09fade601a3f869c23d9dd7a1"}},{"ruleId":"D2","level":"warning","message":{"text":"MovePaneToNewTab::run (cognitive 27): MovePaneToNewTab::run has cognitive complexity 27 (threshold 15). Drivers by points: if/else 4 (13 pts), loops 2 (7 pts), match/switch 2 (7 pts) (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/cli/move_pane_to_new_tab.rs"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd19574b34b5b2c169e128a315764edf21ba037cbd7e73a8cf7809b7c3118ba8"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::scrollbar_thumb_alpha (cognitive 27): TermWindow::scrollbar_thumb_alpha has cognitive complexity 27 (threshold 15). Drivers by points: if/else 18 (23 pts), match/switch 1 (3 pts), boolean chains 1 (nesting depth added 7). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":3612}}}],"partialFingerprints":{"codehealthFindingId/v1":"9359fd9d78aee979cdb9794c3b1e3664be781e8d230bc4187ace7912769ebe3b"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::overlay::ai_chat::render::format_tool_suffix (cognitive 27): kaku_gui::overlay::ai_chat::render::format_tool_suffix has cognitive complexity 27 (threshold 15). Drivers by points: if/else 11 (20 pts), match/switch 1 (3 pts), boolean chains 2, loops 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/render.rs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"758354b2e7c46093ec1c603c75365cc870f3c8a437443b2c856821dfdb4b4cf2"}},{"ruleId":"D2","level":"warning","message":{"text":"Node::lookup (cognitive 27): Node::lookup has cognitive complexity 27 (threshold 15). Drivers by points: if/else 8 (15 pts), match/switch 6 (12 pts) (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/keymap.rs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac0e3a225bbc6526d33279967d963ae4efb2ac0de5a266fa2db3df4ade446467"}},{"ruleId":"D2","level":"warning","message":{"text":"Clipboard::cleanup_runtime_image_dir_static (cognitive 27): Clipboard::cleanup_runtime_image_dir_static has cognitive complexity 27 (threshold 15). Drivers by points: if/else 9 (21 pts), match/switch 2 (4 pts), loops 2 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/clipboard.rs"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d1b9c60fdd646646dc85bcdf0dac29b5c8744d5e7c3c69b7d63c5ed61cc8920"}},{"ruleId":"D2","level":"warning","message":{"text":"WindowView::did_exit_fullscreen (cognitive 27): WindowView::did_exit_fullscreen has cognitive complexity 27 (threshold 15). Drivers by points: if/else 11 (27 pts) (nesting depth added 16). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/window.rs"},"region":{"startLine":9336}}}],"partialFingerprints":{"codehealthFindingId/v1":"35828c42ff4f715e1cec139cac0e5daf5c1fd33701515551e348096fc7595a63"}},{"ruleId":"D2","level":"warning","message":{"text":"BidiContext::resolve_terminators (cognitive 26): BidiContext::resolve_terminators has cognitive complexity 26 (threshold 15). Drivers by points: if/else 5 (15 pts), loops 4 (11 pts) (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/bidi/src/lib.rs"},"region":{"startLine":718}}}],"partialFingerprints":{"codehealthFindingId/v1":"db0bc01a7ae7cfa3e308fc6eb4d04a22480767e83599d1ec9130a75013552fe1"}},{"ruleId":"D2","level":"warning","message":{"text":"Shown::update (cognitive 26): Shown::update has cognitive complexity 26 (threshold 15). Drivers by points: if/else 16 (20 pts), boolean chains 5, 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":"crates/kaku-remote/src/web.rs"},"region":{"startLine":2026}}}],"partialFingerprints":{"codehealthFindingId/v1":"57f7e86368e5e155f0ca8fd797c58cf8c96dea0dfb3dd75b526b133cee746f6f"}},{"ruleId":"D2","level":"warning","message":{"text":"ImageDataType::decode (cognitive 26): ImageDataType::decode has cognitive complexity 26 (threshold 15). Drivers by points: match/switch 7 (18 pts), if/else 4 (8 pts) (nesting depth added 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-cell/src/image.rs"},"region":{"startLine":374}}}],"partialFingerprints":{"codehealthFindingId/v1":"d09f764b3e9bf1c62c31230ba21ac28b46552805ba459053a47c07d67891d456"}},{"ruleId":"D2","level":"warning","message":{"text":"RenderableInner::apply_changes_to_surface (cognitive 26): RenderableInner::apply_changes_to_surface has cognitive complexity 26 (threshold 15). Drivers by points: loops 6 (12 pts), if/else 7 (10 pts), match/switch 1 (3 pts), boolean chains 1 (nesting depth added 11). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/pane/renderable.rs"},"region":{"startLine":303}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa021f7978586688d8d7f55cbb2b0ba951de2bfea197f52c1baa4eb19620e063"}},{"ruleId":"D2","level":"warning","message":{"text":"Config::expand_tokens (cognitive 26): Config::expand_tokens has cognitive complexity 26 (threshold 15). Drivers by points: if/else 13 (20 pts), loops 2 (5 pts), boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/config.rs"},"region":{"startLine":677}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a0cd04e8b05faef74f3f60f38316baf1e2cce2d155ee08dcdce505d178a3380"}},{"ruleId":"D2","level":"warning","message":{"text":"App::to_lua_value (cognitive 26): App::to_lua_value has cognitive complexity 26 (threshold 15). Drivers by points: if/else 14 (21 pts), match/switch 3 (5 pts) (nesting depth added 9). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/config_tui/mod.rs"},"region":{"startLine":1501}}}],"partialFingerprints":{"codehealthFindingId/v1":"1bc2166c11868c865c49903f2c6c0e6d86326c4b8f13496982f783dc7399d9f7"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::render_background (cognitive 26): TermWindow::render_background has cognitive complexity 26 (threshold 15). Drivers by points: if/else 6 (13 pts), boolean chains 6, match/switch 4, 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":"kaku-gui/src/termwindow/background.rs"},"region":{"startLine":428}}}],"partialFingerprints":{"codehealthFindingId/v1":"fea0019cb34d121a26a5e7c510cb3ab7c0e634816cb76d947a8dd586c7d41c2f"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::overlay::ai_chat::render::render_picker (cognitive 26): kaku_gui::overlay::ai_chat::render::render_picker has cognitive complexity 26 (threshold 15). Drivers by points: if/else 12 (23 pts), boolean chains 2, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/render.rs"},"region":{"startLine":745}}}],"partialFingerprints":{"codehealthFindingId/v1":"298789baceae59e8c7c0e453f7ea9e65c42b97cc99f8413f94719350edfc1dca"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::session_restore::restore_window (cognitive 26): kaku_gui::session_restore::restore_window has cognitive complexity 26 (threshold 15). Drivers by points: if/else 8 (19 pts), match/switch 2 (4 pts), loops 1 (3 pts) (nesting depth added 15). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/session_restore.rs"},"region":{"startLine":1291}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4920bdd55fc7b28a4a676bbe152290834a7092e0957e110e0c7a3c726456d65"}},{"ruleId":"D2","level":"warning","message":{"text":"Capabilities::new_with_hints (cognitive 26): Capabilities::new_with_hints has cognitive complexity 26 (threshold 15). Drivers by points: if/else 13 (21 pts), match/switch 4 (5 pts) (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/caps/mod.rs"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a526310f2f6d12d9a11747f1d9a155365d8accef05019e5c7b4966775620f96"}},{"ruleId":"D2","level":"warning","message":{"text":"ProbeCapabilities::screen_size (cognitive 26): ProbeCapabilities::screen_size has cognitive complexity 26 (threshold 15). Drivers by points: if/else 7 (17 pts), match/switch 2 (5 pts), boolean chains 3, loops 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/caps/probed.rs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"406934ef8bd85c813fa3cef9fc14e6a91d8238dc32320659e2fcbcf9db6cd1f5"}},{"ruleId":"D2","level":"warning","message":{"text":"UnixTerminal::poll_input (cognitive 26): UnixTerminal::poll_input has cognitive complexity 26 (threshold 15). Drivers by points: if/else 12 (21 pts), match/switch 2 (4 pts), boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/terminal/unix.rs"},"region":{"startLine":409}}}],"partialFingerprints":{"codehealthFindingId/v1":"a516b9f5517144630e71b13eb1331e52580a58693ae94b1496927b4686ed999e"}},{"ruleId":"D2","level":"warning","message":{"text":"window::os::macos::window::on_app_terminating (cognitive 26): window::os::macos::window::on_app_terminating has cognitive complexity 26 (threshold 15). Drivers by points: if/else 8 (20 pts), loops 3 (6 pts) (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/window.rs"},"region":{"startLine":1684}}}],"partialFingerprints":{"codehealthFindingId/v1":"0cbdf0f60a246274ac12d58ed1d1a672e53f3f1cfa7aa1ac543be839b4ebcbbf"}},{"ruleId":"D2","level":"warning","message":{"text":"BidiContext::resolve_european_numbers (cognitive 25): BidiContext::resolve_european_numbers has cognitive complexity 25 (threshold 15). Drivers by points: if/else 3 (11 pts), loops 3 (8 pts), match/switch 1 (6 pts) (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: one other method here (BidiContext::resolve_en) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/bidi/src/lib.rs"},"region":{"startLine":565}}}],"partialFingerprints":{"codehealthFindingId/v1":"59e700c8d559603f8eab00910f584f4e3cba785ca283d723cfec33b22772c633"}},{"ruleId":"D2","level":"warning","message":{"text":"BidiContext::resolve_en (cognitive 25): BidiContext::resolve_en has cognitive complexity 25 (threshold 15). Drivers by points: if/else 3 (11 pts), loops 3 (8 pts), match/switch 1 (6 pts) (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: one other method here (BidiContext::resolve_european_numbers) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/bidi/src/lib.rs"},"region":{"startLine":773}}}],"partialFingerprints":{"codehealthFindingId/v1":"980379b5aa39d8d65dd97afeb3a2c0e0c6e61a0cf30a29f91668cd0fa7a51b91"}},{"ruleId":"D2","level":"warning","message":{"text":"App::set_lua_config_line (cognitive 25): App::set_lua_config_line has cognitive complexity 25 (threshold 15). Drivers by points: if/else 9 (17 pts), loops 2 (6 pts), boolean chains 2 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/config_tui/mod.rs"},"region":{"startLine":1436}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a83ee33ef9fc9e817721efecf03bc6c5bc3fd0ecd80d19a90021aadecb4e868"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::config_was_reloaded_impl (cognitive 25): TermWindow::config_was_reloaded_impl has cognitive complexity 25 (threshold 15). Drivers by points: if/else 9 (14 pts), loops 4 (9 pts), boolean chains 1, match/switch 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":3326}}}],"partialFingerprints":{"codehealthFindingId/v1":"57e313db4eed821e71169c732fb6b7ae16000d926bd7cda2a83b65171f302056"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::paint_window_borders (cognitive 25): TermWindow::paint_window_borders has cognitive complexity 25 (threshold 15). Drivers by points: if/else 11 (19 pts), boolean chains 6 (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":"kaku-gui/src/termwindow/render/borders.rs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fa86492a6dc1b1036175447c1587699d8e9960563c1510900c8f87e3f917c02"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::resize (cognitive 25): TermWindow::resize has cognitive complexity 25 (threshold 15). Drivers by points: if/else 16 (20 pts), boolean chains 5 (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":"kaku-gui/src/termwindow/resize.rs"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7bbd40d23a272663c76c260dfb59110fbc90e8014d552d0f969db3a69090889"}},{"ruleId":"D2","level":"warning","message":{"text":"MuxPane::get_text_from_semantic_zone (cognitive 25): MuxPane::get_text_from_semantic_zone has cognitive complexity 25 (threshold 15). Drivers by points: if/else 11 (18 pts), boolean chains 4, loops 2 (3 pts) (nesting depth added 8). Of this number, 16 points are the body\u0027s own statements and 9 belong to one function item inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lua-api-crates/mux/src/pane.rs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b2452d595e5f82b3630174fc47f750e03c9800820cf1b879dbc959a2e7517ea"}},{"ruleId":"D2","level":"warning","message":{"text":"TerminalState::set_image (cognitive 25): TerminalState::set_image has cognitive complexity 25 (threshold 15). Drivers by points: if/else 10 (16 pts), match/switch 5 (6 pts), boolean chains 3 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/iterm.rs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"47747d968b0ae4512caeec2285dfb04e5530d3573b7c80a3004ee5d93050c785"}},{"ruleId":"D2","level":"warning","message":{"text":"TerminalState::sixel (cognitive 25): TerminalState::sixel has cognitive complexity 25 (threshold 15). Drivers by points: if/else 13 (17 pts), loops 3 (5 pts), match/switch 2 (3 pts) (nesting depth added 7). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/sixel.rs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"594e65976311ceb3d12ca523d01958f032d84f83d5afca29440aada65ffc9211"}},{"ruleId":"D2","level":"warning","message":{"text":"Performer::csi_dispatch (cognitive 25): Performer::csi_dispatch has cognitive complexity 25 (threshold 15). Drivers by points: if/else 5 (11 pts), match/switch 6 (10 pts), loops 2 (4 pts) (nesting depth added 12). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/performer.rs"},"region":{"startLine":596}}}],"partialFingerprints":{"codehealthFindingId/v1":"7efba4a3418c5d6cc8bcef1c7c272863e1c2417931ade5762b8f9ad5b3fc351a"}},{"ruleId":"D2","level":"warning","message":{"text":"wezterm_char_props_codegen::emit_variation_map (cognitive 25): wezterm_char_props_codegen::emit_variation_map has cognitive complexity 25 (threshold 15). Drivers by points: if/else 5 (15 pts), loops 2 (5 pts), match/switch 1 (5 pts) (nesting depth added 17). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-char-props/codegen/src/main.rs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"6917d5718650292a02cd6910f8ef45675f233eefc6761423520a42f1b5f3efd7"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_remote::web::find_in_rows (cognitive 24): kaku_remote::web::find_in_rows has cognitive complexity 24 (threshold 15). Drivers by points: if/else 6 (14 pts), match/switch 2 (6 pts), loops 2 (4 pts) (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/src/web.rs"},"region":{"startLine":1437}}}],"partialFingerprints":{"codehealthFindingId/v1":"c610d70f807b81a3264f6b25096e7a9191e55892d5fb2e6bdf96d89b876509f3"}},{"ruleId":"D2","level":"warning","message":{"text":"Reconnectable::unix_connect (cognitive 24): Reconnectable::unix_connect has cognitive complexity 24 (threshold 15). Drivers by points: if/else 8 (20 pts), match/switch 2 (3 pts), boolean chains 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/client.rs"},"region":{"startLine":712}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d33aba1e1015dca36fe74d16f3e5c600ad31cf738d02809b32ea1d605e8d353"}},{"ruleId":"D2","level":"warning","message":{"text":"App::normalize_value (cognitive 24): App::normalize_value has cognitive complexity 24 (threshold 15). Drivers by points: if/else 13 (18 pts), match/switch 3 (5 pts), boolean chains 1 (nesting depth added 7). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/config_tui/mod.rs"},"region":{"startLine":987}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc862977707854496a0ae381a793ea6966caf8808d5b331bc1c97718a606f937"}},{"ruleId":"D2","level":"warning","message":{"text":"CopyRenderable::move_by_zone (cognitive 24): CopyRenderable::move_by_zone has cognitive complexity 24 (threshold 15). Drivers by points: if/else 10 (14 pts), match/switch 4 (9 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/copy.rs"},"region":{"startLine":1047}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3832f44382334e62b8dadeffe47c03fd2fd3771c248f7f999b15ad0f9c738ed"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::do_open_link_at_mouse_cursor (cognitive 24): TermWindow::do_open_link_at_mouse_cursor has cognitive complexity 24 (threshold 15). Drivers by points: if/else 9 (20 pts), boolean chains 2, match/switch 1 (2 pts) (nesting depth added 12). Most of this is not in the body itself: 5 of the 24 points are its own statements and the rest belongs to one function item inside it that branches (open_uri). Those helpers are already separate functions, so extracting the branching again is not available. To reduce it, move them out of the body to the enclosing scope, where each is measured, reviewed and tested on its own, and reduce whichever one then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":5495}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5971f9b5401a2032b5c147c34e5c3cc72d24b6211a264bcefce2392388cfa6d"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::extend_selection_at_mouse_cursor (cognitive 24): TermWindow::extend_selection_at_mouse_cursor has cognitive complexity 24 (threshold 15). Drivers by points: if/else 11 (17 pts), boolean chains 5, match/switch 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/selection.rs"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c4baa19f30d19c56bded1cd52d1525515d17b8c99d6d8c59cc14ee35197d326"}},{"ruleId":"D2","level":"warning","message":{"text":"CommandPalette::compute (cognitive 24): CommandPalette::compute has cognitive complexity 24 (threshold 15). Drivers by points: if/else 15 (23 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":"kaku-gui/src/termwindow/palette.rs"},"region":{"startLine":543}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb9d3acbbf422ca8ee5cb598d8b631fcf14ac4cfe23b4a808c21bc2c71f6e2bd"}},{"ruleId":"D2","level":"warning","message":{"text":"TerminalState::assign_image_to_cells (cognitive 24): TerminalState::assign_image_to_cells has cognitive complexity 24 (threshold 15). Drivers by points: if/else 10 (14 pts), match/switch 2 (5 pts), loops 2 (3 pts), boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/image.rs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"695aa4e619eb06a1861578c64aa9e840a916e9b61f039d1980aebcc2f1a0c89f"}},{"ruleId":"D2","level":"warning","message":{"text":"GlState::with_egl_lib (cognitive 24): GlState::with_egl_lib has cognitive complexity 24 (threshold 15). Drivers by points: match/switch 3 (12 pts), if/else 5 (9 pts), loops 2 (3 pts) (nesting depth added 14). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/egl.rs"},"region":{"startLine":392}}}],"partialFingerprints":{"codehealthFindingId/v1":"2786c09256f13241a7a24351040c9497ca5621b915b8f010527f686d74f48277"}},{"ruleId":"D2","level":"warning","message":{"text":"Helper::spawn (cognitive 23): Helper::spawn has cognitive complexity 23 (threshold 15). Drivers by points: if/else 10 (20 pts), loops 2 (3 pts) (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/src/desktop.rs"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"9318cf5722fe87fbca5423f45e2b37139e137517a0fb9e4cb43c252d8ba557a3"}},{"ruleId":"D2","level":"warning","message":{"text":"Face::compute_coverage (cognitive 23): Face::compute_coverage has cognitive complexity 23 (threshold 15). Drivers by points: if/else 7 (17 pts), loops 3 (6 pts) (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/ftwrap.rs"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fb204a27349e6dc68cf50c55896b581750decc9b059712fbcd23d5a902a1169"}},{"ruleId":"D2","level":"warning","message":{"text":"ParsedFont::best_matching_index (cognitive 23): ParsedFont::best_matching_index has cognitive complexity 23 (threshold 15). Drivers by points: if/else 11 (12 pts), match/switch 5 (9 pts), boolean chains 2 (nesting depth added 5). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/parser.rs"},"region":{"startLine":612}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6cdb799b51c582e9735cacaa87d4f830ecee5ab9a5ccece1df05d9592e3339d"}},{"ruleId":"D2","level":"warning","message":{"text":"App::start_edit (cognitive 23): App::start_edit has cognitive complexity 23 (threshold 15). Drivers by points: if/else 14 (17 pts), boolean chains 6 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui.rs"},"region":{"startLine":2428}}}],"partialFingerprints":{"codehealthFindingId/v1":"635a5d61872fd33ad5bfc9ae2b943e226cc38b54ca912674645494c4efe8b482"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku::select_main_menu_command (cognitive 23): kaku::select_main_menu_command has cognitive complexity 23 (threshold 15). Drivers by points: if/else 5 (15 pts), match/switch 3 (6 pts), loops 2 (nesting depth added 13). Of this number, 18 points are the body\u0027s own statements and 5 belong to 2 function items inside it that branch. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/main.rs"},"region":{"startLine":786}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd1debc26c32e07ce7addd12f2028e39e10dcf1b88304e5c40b3fc9c38110e11"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku::ai_config::tui::providers::codex::codex_connection_is_configured_at (cognitive 23): kaku::ai_config::tui::providers::codex::codex_connection_is_configured_at has cognitive complexity 23 (threshold 15). Drivers by points: if/else 11 (13 pts), match/switch 5 (6 pts), boolean chains 3, loops 1 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui/providers/codex.rs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5a2a09314ffde70555b87cf05f2a6315d0c203d48bcba2445a87adeaa383c8f"}},{"ruleId":"D2","level":"warning","message":{"text":"InlineThinkFilter::feed (cognitive 23): InlineThinkFilter::feed has cognitive complexity 23 (threshold 15). Drivers by points: if/else 9 (22 pts), loops 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_client/think_filter.rs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"f72a9552e5052a3e5fe0926961ee9f5672a5bdf90333a1de034f603e61bbbe78"}},{"ruleId":"D2","level":"warning","message":{"text":"GuiFrontEnd::try_new (cognitive 23): GuiFrontEnd::try_new has cognitive complexity 23 (threshold 15). Drivers by points: if/else 11 (18 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":"kaku-gui/src/frontend.rs"},"region":{"startLine":647}}}],"partialFingerprints":{"codehealthFindingId/v1":"970bd1c347685dbb5b7a3db68dfb68cb9f8c6cbf0af6cee033468faafcb834b6"}},{"ruleId":"D2","level":"warning","message":{"text":"TabRenameModal::compute (cognitive 23): TabRenameModal::compute has cognitive complexity 23 (threshold 15). Drivers by points: if/else 14 (20 pts), match/switch 3 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/tab_rename.rs"},"region":{"startLine":799}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc2fba9eb2978e855053957c3dea453191e726f03fceddccd523243af59987d6"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::have_panes_in_domain_and_ws (cognitive 23): kaku_gui::have_panes_in_domain_and_ws has cognitive complexity 23 (threshold 15). Drivers by points: if/else 5 (12 pts), loops 3 (11 pts) (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/main.rs"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"d699891452dc4e69c2fc33ac7e46bd2a3631e7bb8cf07740d1bc6f1468be1714"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::overlay::ai_chat::render::build_line_runs (cognitive 23): kaku_gui::overlay::ai_chat::render::build_line_runs has cognitive complexity 23 (threshold 15). Drivers by points: if/else 8 (16 pts), loops 2 (4 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":"kaku-gui/src/overlay/ai_chat/render.rs"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"be75c8cf97b6f8a09256541a1cf6e3d6c6cda0a25685fe1ffaced69b7a1d7cac"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::overlay::ai_chat::render::emit_styled_line (cognitive 23): kaku_gui::overlay::ai_chat::render::emit_styled_line has cognitive complexity 23 (threshold 15). Drivers by points: if/else 8 (18 pts), loops 2, match/switch 1 (2 pts), boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/render.rs"},"region":{"startLine":272}}}],"partialFingerprints":{"codehealthFindingId/v1":"5735ad98c5f47f5c25f2c096c5fc9d5d4b727b6a5ed4548b8aff3b844570b23e"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::spawn::spawn_command_internal (cognitive 23): kaku_gui::spawn::spawn_command_internal has cognitive complexity 23 (threshold 15). Drivers by points: if/else 7 (13 pts), match/switch 6 (8 pts), loops 1 (2 pts) (nesting depth added 9). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/spawn.rs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"27b46f9118f24843e73b85861e2a8d4dab2bdf06ec507026540d78710baafbba"}},{"ruleId":"D2","level":"warning","message":{"text":"mux::tab::adjust_x_size (cognitive 23): mux::tab::adjust_x_size has cognitive complexity 23 (threshold 15). Drivers by points: if/else 4 (16 pts), match/switch 2 (5 pts), boolean chains 1, loops 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: one other method here (mux::tab::adjust_y_size) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tab.rs"},"region":{"startLine":439}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a302c7cfbaaad51d2f92d40f95eff7f4f8260e2a31f99d12d79bc19b3065c22"}},{"ruleId":"D2","level":"warning","message":{"text":"mux::tab::adjust_y_size (cognitive 23): mux::tab::adjust_y_size has cognitive complexity 23 (threshold 15). Drivers by points: if/else 4 (16 pts), match/switch 2 (5 pts), boolean chains 1, loops 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: one other method here (mux::tab::adjust_x_size) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tab.rs"},"region":{"startLine":509}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fb460cdf1a92732d6b80f0270e8c3de7cb6d1891ce47c30cd6828a6d29f7365"}},{"ruleId":"D2","level":"warning","message":{"text":"check_incidents.problems (cognitive 23): check_incidents.problems has cognitive complexity 23 (threshold 15). Drivers by points: if/else 8 (18 pts), loops 2 (3 pts), boolean chains 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/check_incidents.py"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"0020233cce6919ecb15f18cd2ccef7e5b9047a793ac5e4ae2c58922befe12a31"}},{"ruleId":"D2","level":"warning","message":{"text":"Config::compute_extra_defaults (cognitive 22): Config::compute_extra_defaults has cognitive complexity 22 (threshold 15). Drivers by points: if/else 10 (18 pts), loops 1 (2 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":"config/src/config.rs"},"region":{"startLine":1815}}}],"partialFingerprints":{"codehealthFindingId/v1":"17fae427f85cde73fb55aa820cc74a29eca2e77d450b032cba79a37c4c06d114"}},{"ruleId":"D2","level":"warning","message":{"text":"SerializedLines::extract_data (cognitive 22): SerializedLines::extract_data has cognitive complexity 22 (threshold 15). Drivers by points: if/else 4 (11 pts), loops 3 (11 pts) (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/codec/src/lib.rs"},"region":{"startLine":989}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e5175178a4aefda31c43193f9bf1d73b0f2fe51dedd49e6da013a3d9cf19bc3"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_remote::web::handle_download (cognitive 22): kaku_remote::web::handle_download has cognitive complexity 22 (threshold 15). Drivers by points: if/else 7 (19 pts), match/switch 2 (3 pts) (nesting depth added 13). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/src/web.rs"},"region":{"startLine":1136}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9d929918c13dc3393891b41a91d5dc6ad1a96c71fc23ce26fcf291bcf3fc508"}},{"ruleId":"D2","level":"warning","message":{"text":"Error::possible_matches (cognitive 22): Error::possible_matches has cognitive complexity 22 (threshold 15). Drivers by points: if/else 8 (16 pts), loops 2 (5 pts), match/switch 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-dynamic/src/error.rs"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffb7178c1bf744bddd6dcef6759dc0615db49425dcc4296f8b9b4cc72d08708b"}},{"ruleId":"D2","level":"warning","message":{"text":"FreeTypeRasterizer::rasterize_mono (cognitive 22): FreeTypeRasterizer::rasterize_mono has cognitive complexity 22 (threshold 15). Drivers by points: if/else 3 (11 pts), loops 4 (11 pts) (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/rasterizer/freetype.rs"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"18f0fd63452d4e25eddce3e95220dfea40bd84f682e62cf6690772f52364f36d"}},{"ruleId":"D2","level":"warning","message":{"text":"Config::enumerate_hosts (cognitive 22): Config::enumerate_hosts has cognitive complexity 22 (threshold 15). Drivers by points: loops 4 (11 pts), if/else 2 (10 pts), boolean chains 1 (nesting depth added 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/config.rs"},"region":{"startLine":778}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee502bece0a6690297396fddf67f3307e92488ff4c6510b95af6f72a58e7133d"}},{"ruleId":"D2","level":"warning","message":{"text":"GuiFrontEnd::app_event_handler (cognitive 22): GuiFrontEnd::app_event_handler has cognitive complexity 22 (threshold 15). Drivers by points: if/else 4 (18 pts), match/switch 2 (3 pts), boolean chains 1 (nesting depth added 15). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/frontend.rs"},"region":{"startLine":1116}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec2f9e2716700b9ee7bfd2eb68b1495a7c10b10143df623f75eaa8a2fc0ae2be"}},{"ruleId":"D2","level":"warning","message":{"text":"PaneSelector::perform_selection (cognitive 22): PaneSelector::perform_selection has cognitive complexity 22 (threshold 15). Drivers by points: if/else 7 (19 pts), match/switch 2 (3 pts) (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/paneselect.rs"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"5974b647ce458ee087b2222c185acebb9507b116755516d2f69cce3d19957153"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::ai_tools::shell::exec_shell_poll (cognitive 22): kaku_gui::ai_tools::shell::exec_shell_poll has cognitive complexity 22 (threshold 15). Drivers by points: if/else 10 (17 pts), boolean chains 2, loops 1 (2 pts), match/switch 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_tools/shell.rs"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d68beaf7b50f954976b2317c80d1ca65d5d51ded335f2d315101b0f4e623cf5"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::tabbar::parse_status_text (cognitive 22): kaku_gui::tabbar::parse_status_text has cognitive complexity 22 (threshold 15). Drivers by points: if/else 5 (11 pts), match/switch 4 (8 pts), loops 2 (3 pts) (nesting depth added 11). Of this number, 19 points are the body\u0027s own statements and 3 belong to one function item inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/tabbar.rs"},"region":{"startLine":1427}}}],"partialFingerprints":{"codehealthFindingId/v1":"e56f79d0291fe48481a70fef37375e5d552d64daf9237f53c69675e276b26f49"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::termwindow::summarize_bell_tokens (cognitive 22): kaku_gui::termwindow::summarize_bell_tokens has cognitive complexity 22 (threshold 15). Drivers by points: if/else 9 (18 pts), boolean chains 3, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":278}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7a12989a802f9c7bb5d317e9f9223145690fd23164def9b5cf8e18347cd8e60"}},{"ruleId":"D2","level":"warning","message":{"text":"Mux::remove_window_internal (cognitive 22): Mux::remove_window_internal has cognitive complexity 22 (threshold 15). Drivers by points: if/else 4 (13 pts), loops 4 (9 pts) (nesting depth added 14). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/lib.rs"},"region":{"startLine":1323}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f0f2f73537c1de9a5f7720228c038ac5d1ad2693e25f7673c8a40bb69cb6087"}},{"ruleId":"D2","level":"warning","message":{"text":"TabInner::toggle_pane_split_direction (cognitive 22): TabInner::toggle_pane_split_direction has cognitive complexity 22 (threshold 15). Drivers by points: if/else 8 (15 pts), match/switch 4 (6 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tab.rs"},"region":{"startLine":1256}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0d6315009423bb51909bf240da431d46c47c522761a5c7abeaf9f2e59eeac8c"}},{"ruleId":"D2","level":"warning","message":{"text":"termwiz::caps::version_ge (cognitive 22): termwiz::caps::version_ge has cognitive complexity 22 (threshold 15). Drivers by points: if/else 4 (16 pts), match/switch 2 (5 pts), loops 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/caps/mod.rs"},"region":{"startLine":364}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4dca221e01be0b0cc3a2e0d2b6989de4dfe8f11d4c1e77564b501eb301a26bc"}},{"ruleId":"D2","level":"warning","message":{"text":"VTParser::action (cognitive 21): VTParser::action has cognitive complexity 21 (threshold 15). Drivers by points: if/else 7 (12 pts), match/switch 3 (6 pts), loops 1 (3 pts) (nesting depth added 10). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/vtparse/src/lib.rs"},"region":{"startLine":526}}}],"partialFingerprints":{"codehealthFindingId/v1":"67ee5d372ab30a433466af8a3482763fc4d5b2cad6d1ac6a827853706c697563"}},{"ruleId":"D2","level":"warning","message":{"text":"OperatingSystemCommand::internal_parse (cognitive 21): OperatingSystemCommand::internal_parse has cognitive complexity 21 (threshold 15). Drivers by points: if/else 8 (11 pts), match/switch 2 (4 pts), boolean chains 3, loops 2 (3 pts) (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/osc.rs"},"region":{"startLine":257}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f2871aed78675e906e3920370e7424a8a5bd7eb6ceaa73f66e496fcaf672b92"}},{"ruleId":"D2","level":"warning","message":{"text":"SessionInner::pubkey_auth (cognitive 21): SessionInner::pubkey_auth has cognitive complexity 21 (threshold 15). Drivers by points: if/else 5 (12 pts), match/switch 2 (7 pts), loops 1 (2 pts) (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/auth.rs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"815e5ace15474f3efb64b96247df3086e42932fc76d5fa287b007b473dd6f4d3"}},{"ruleId":"D2","level":"warning","message":{"text":"SessionInner::authenticate_libssh (cognitive 21): SessionInner::authenticate_libssh has cognitive complexity 21 (threshold 15). Drivers by points: match/switch 3 (10 pts), if/else 4 (7 pts), loops 2 (4 pts) (nesting depth added 12). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/auth.rs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"273c45d4f8bde7d26db30a868c384b4954de06170984001e89295c0589499008"}},{"ruleId":"D2","level":"warning","message":{"text":"CellCluster::resolve_bidi (cognitive 21): CellCluster::resolve_bidi has cognitive complexity 21 (threshold 15). Drivers by points: loops 5 (12 pts), if/else 3 (9 pts) (nesting depth added 13). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-surface/src/cellcluster.rs"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"9481f602b46ec1a2e7420afc705ffde4b34bab9fb0787c9e93e2717b2fa01654"}},{"ruleId":"D2","level":"warning","message":{"text":"Surface::print_text (cognitive 21): Surface::print_text has cognitive complexity 21 (threshold 15). Drivers by points: if/else 10 (20 pts), loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-surface/src/lib.rs"},"region":{"startLine":430}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0581284a3b9eb7f0472b8904cd8ab8496668d5394627b5896337af2b23c99d1"}},{"ruleId":"D2","level":"warning","message":{"text":"SelectionRange::cols_for_row (cognitive 21): SelectionRange::cols_for_row has cognitive complexity 21 (threshold 15). Drivers by points: if/else 13 (19 pts), boolean chains 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/selection.rs"},"region":{"startLine":363}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb24ed0b6837863b6f2de42f907f2a1aeb14b36df6ad231a38b98165b308394a"}},{"ruleId":"D2","level":"warning","message":{"text":"Inner::run (cognitive 21): Inner::run has cognitive complexity 21 (threshold 15). Drivers by points: if/else 5 (11 pts), loops 4 (10 pts) (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/stats.rs"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"87b6597c1ea2bce2a5c41feb4f63192844f62af8185fec8ff39695b1906d7138"}},{"ruleId":"D2","level":"warning","message":{"text":"CachedGradient::compute (cognitive 21): CachedGradient::compute has cognitive complexity 21 (threshold 15). Drivers by points: if/else 8 (12 pts), loops 4 (8 pts), match/switch 1 (nesting depth added 8). Of this number, 19 points are the body\u0027s own statements and 2 belong to one function item inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/background.rs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"baeef16a0f2dcd9febc0e33ac57ee27a2eaeff89a11471649ece55a5acaf52dc"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::raw_key_event_impl (cognitive 21): TermWindow::raw_key_event_impl has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14 (15 pts), boolean chains 3, match/switch 3 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/keyevent.rs"},"region":{"startLine":528}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb6600c0699deb2a481238f3da7ed82d60d8d08f13f0d0db9a627bc225612017"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::focus_changed (cognitive 21): TermWindow::focus_changed has cognitive complexity 21 (threshold 15). Drivers by points: if/else 12 (15 pts), boolean chains 4, loops 1 (2 pts) (nesting depth added 4). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, 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":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":1286}}}],"partialFingerprints":{"codehealthFindingId/v1":"a670b79e160f8a0a2e104920bd05c68695842c28400e73310b67915f9d3008e4"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::run_terminal_gui (cognitive 21): kaku_gui::run_terminal_gui has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14 (18 pts), boolean chains 2, match/switch 1 (nesting depth added 4). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/main.rs"},"region":{"startLine":767}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c52721b116a5496cdbd80dc5fdac01bd53ed2f77f67095bafc0a63fd9dd2cc4"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::overlay::ai_chat::layout::layout_input (cognitive 21): kaku_gui::overlay::ai_chat::layout::layout_input has cognitive complexity 21 (threshold 15). Drivers by points: if/else 11 (18 pts), boolean chains 2, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/layout.rs"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae836e908ddfdddeb3c6c28cba82ef334ba8fdabe103e9b6b75d3a7d580d535b"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::overlay::ai_chat::markdown::tokenize_inline (cognitive 21): kaku_gui::overlay::ai_chat::markdown::tokenize_inline has cognitive complexity 21 (threshold 15). Drivers by points: if/else 8 (18 pts), boolean chains 2, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/markdown.rs"},"region":{"startLine":231}}}],"partialFingerprints":{"codehealthFindingId/v1":"aaf5ed8bf8b6638135a02c5ba114a4264367849ed15e2beb8e2b09f371ceb796"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::termwindow::charselect::compute_matches (cognitive 21): kaku_gui::termwindow::charselect::compute_matches has cognitive complexity 21 (threshold 15). Drivers by points: if/else 8 (13 pts), match/switch 2 (6 pts), loops 1 (2 pts) (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/charselect.rs"},"region":{"startLine":265}}}],"partialFingerprints":{"codehealthFindingId/v1":"763bf2f00640b0d4adcf7b153e8f3d4a6194029d9eb2c273416a48267f647ae5"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::termwindow::render::agent_title::agent_topic (cognitive 21): kaku_gui::termwindow::render::agent_title::agent_topic has cognitive complexity 21 (threshold 15). Drivers by points: if/else 9 (17 pts), boolean chains 3, 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":"kaku-gui/src/termwindow/render/agent_title.rs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"d81799468a442e6dce4c92870c7b56a7461c941c17e2d8ed6650ece3faaee829"}},{"ruleId":"D2","level":"warning","message":{"text":"termwiz_funcs::permute_mods (cognitive 21): termwiz_funcs::permute_mods has cognitive complexity 21 (threshold 15). Drivers by points: loops 5 (15 pts), if/else 1 (5 pts), boolean chains 1 (nesting depth added 14). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lua-api-crates/termwiz-funcs/src/lib.rs"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"58b2debd71a9d037c9ae570d97d5356efe5a1910ebb3e2bb0b27186c4756245f"}},{"ruleId":"D2","level":"warning","message":{"text":"TabInner::adjust_pane_size (cognitive 21): TabInner::adjust_pane_size has cognitive complexity 21 (threshold 15). Drivers by points: if/else 5 (13 pts), match/switch 4 (6 pts), loops 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tab.rs"},"region":{"startLine":1851}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d57a27cb5d91432cfb1859fee31319ec9cdb8624ef4eb8c0c1f0c199362c1c0"}},{"ruleId":"D2","level":"warning","message":{"text":"TerminalState::kitty_frame_transmit (cognitive 21): TerminalState::kitty_frame_transmit has cognitive complexity 21 (threshold 15). Drivers by points: match/switch 8 (13 pts), if/else 5 (8 pts) (nesting depth added 8). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/kitty.rs"},"region":{"startLine":556}}}],"partialFingerprints":{"codehealthFindingId/v1":"3980c0cc2fead73e8d01f53a347665581f34c40d349cbcb5d90237775a9b4b9a"}},{"ruleId":"D2","level":"warning","message":{"text":"TerminalState::coalesce_kitty_accumulation (cognitive 21): TerminalState::coalesce_kitty_accumulation has cognitive complexity 21 (threshold 15). Drivers by points: if/else 5 (9 pts), match/switch 3 (8 pts), loops 2 (4 pts) (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/kitty.rs"},"region":{"startLine":870}}}],"partialFingerprints":{"codehealthFindingId/v1":"627ec24bf5988d31eebf5edde8b2302528bcbd3bd726065a5557fdf8e39588ab"}},{"ruleId":"D2","level":"warning","message":{"text":"LayoutState::update_widget_constraint (cognitive 21): LayoutState::update_widget_constraint has cognitive complexity 21 (threshold 15). Drivers by points: match/switch 7 (15 pts), if/else 4, loops 1 (2 pts) (nesting depth added 9). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/widgets/layout.rs"},"region":{"startLine":309}}}],"partialFingerprints":{"codehealthFindingId/v1":"098ffdb3d533b6dbca43b62b764fc3c92c8e281fd41e2ced53c9042f8648b190"}},{"ruleId":"D2","level":"warning","message":{"text":"Window::new_window (cognitive 21): Window::new_window has cognitive complexity 21 (threshold 15). Drivers by points: if/else 12 (15 pts), boolean chains 4, match/switch 2 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/window.rs"},"region":{"startLine":1763}}}],"partialFingerprints":{"codehealthFindingId/v1":"9bbc22a1a760953836072f02f4180f1cded68fc979d740675a774e5c9ee01fe9"}},{"ruleId":"D2","level":"warning","message":{"text":"Config::apply_cmd_defaults (cognitive 20): Config::apply_cmd_defaults has cognitive complexity 20 (threshold 15). Drivers by points: if/else 12 (17 pts), match/switch 1 (2 pts), loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/config.rs"},"region":{"startLine":2085}}}],"partialFingerprints":{"codehealthFindingId/v1":"5feb722be8b3d9f099b1334a14a65e6d5f2cd272efa3de33f9b81c8abd07b523"}},{"ruleId":"D2","level":"warning","message":{"text":"ConfigInner::apply_loaded (cognitive 20): ConfigInner::apply_loaded has cognitive complexity 20 (threshold 15). Drivers by points: if/else 10 (16 pts), loops 1 (3 pts), match/switch 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/lib.rs"},"region":{"startLine":2052}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1c2e0fd65e8f170c1a3f6e50d0388ca34d9280a17413cae2474d21b497b66be"}},{"ruleId":"D2","level":"warning","message":{"text":"config::collect_user_color_schemes (cognitive 20): config::collect_user_color_schemes has cognitive complexity 20 (threshold 15). Drivers by points: if/else 5 (13 pts), loops 3 (4 pts), match/switch 1 (3 pts) (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/lib.rs"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca77c68bf53909dad3a3cccb5be28333842cb4435941c5a34fd13a34ba068ad8"}},{"ruleId":"D2","level":"warning","message":{"text":"SerializedLines::from (cognitive 20): SerializedLines::from has cognitive complexity 20 (threshold 15). Drivers by points: if/else 4 (9 pts), loops 3 (7 pts), match/switch 1 (4 pts) (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/codec/src/lib.rs"},"region":{"startLine":1018}}}],"partialFingerprints":{"codehealthFindingId/v1":"cba5250200271d72d83a209648ce4833a2ed03f837c340986ec438d64b94d764"}},{"ruleId":"D2","level":"warning","message":{"text":"Logger::log (cognitive 20): Logger::log has cognitive complexity 20 (threshold 15). Drivers by points: if/else 10 (17 pts), match/switch 1 (3 pts) (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/env-bootstrap/src/ringlog.rs"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"9885bf12284842765f796c8a55eb0713f5675a422cf531ca8e6020be44831cc7"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_remote::desktop::tap_with (cognitive 20): kaku_remote::desktop::tap_with has cognitive complexity 20 (threshold 15). Drivers by points: if/else 7 (15 pts), match/switch 1 (3 pts), boolean chains 1, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/src/desktop.rs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e51f658628a04d05256fe4cbd119b4f34724e3c88a2b281d73c8098cad190a1"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_remote::web::search_pane (cognitive 20): kaku_remote::web::search_pane has cognitive complexity 20 (threshold 15). Drivers by points: if/else 11 (19 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":"crates/kaku-remote/src/web.rs"},"region":{"startLine":1489}}}],"partialFingerprints":{"codehealthFindingId/v1":"8504b8a4839040d72b822a26c5fc12e9222adf2a6bb80bab59b998d0003aab41"}},{"ruleId":"D2","level":"warning","message":{"text":"ITermFileData::parse (cognitive 20): ITermFileData::parse has cognitive complexity 20 (threshold 15). Drivers by points: if/else 11 (19 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":"crates/wezterm-escape-parser/src/osc.rs"},"region":{"startLine":1262}}}],"partialFingerprints":{"codehealthFindingId/v1":"25318915873e002c4c5824b5cd8564e04eb64d1b3eef19392f50bdd64ddeaf15"}},{"ruleId":"D2","level":"warning","message":{"text":"Face::cell_metrics (cognitive 20): Face::cell_metrics has cognitive complexity 20 (threshold 15). Drivers by points: if/else 7 (17 pts), loops 2 (3 pts) (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/ftwrap.rs"},"region":{"startLine":1107}}}],"partialFingerprints":{"codehealthFindingId/v1":"86cdbe5f7421eb36dfc152708c7fca4bfca37587ff5d61829652f20c53f60118"}},{"ruleId":"D2","level":"warning","message":{"text":"CoreTextFontLocator::load_fonts (cognitive 20): CoreTextFontLocator::load_fonts has cognitive complexity 20 (threshold 15). Drivers by points: if/else 5 (14 pts), loops 2 (4 pts), match/switch 1 (2 pts) (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/locator/core_text.rs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5609edd59c3e7b4cad8ec057de1cfef1b092a85f1ef132b866013cacb55d455"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku::ai_config::tui::providers::assistant::render_kaku_assistant_config (cognitive 20): kaku::ai_config::tui::providers::assistant::render_kaku_assistant_config has cognitive complexity 20 (threshold 15). Drivers by points: if/else 18 (19 pts), boolean chains 1 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui/providers/assistant.rs"},"region":{"startLine":246}}}],"partialFingerprints":{"codehealthFindingId/v1":"a67dd2ca429a60c6bb34b75e0403ff3fa9f9bac27f1b13303f55a25c16c34f81"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku::utils::strip_jsonc_trailing_commas (cognitive 20): kaku::utils::strip_jsonc_trailing_commas has cognitive complexity 20 (threshold 15). Drivers by points: if/else 6 (13 pts), loops 2 (4 pts), boolean chains 3 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/utils.rs"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"a823253f5a6cae91e2be148e1ac6269167d70053b15a0a9bb101672a125ac396"}},{"ruleId":"D2","level":"warning","message":{"text":"Tui::drain_stream (cognitive 20): Tui::drain_stream has cognitive complexity 20 (threshold 15). Drivers by points: if/else 5 (15 pts), match/switch 2 (3 pts), boolean chains 1, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/cli_chat/mod.rs"},"region":{"startLine":354}}}],"partialFingerprints":{"codehealthFindingId/v1":"2abfa914f76c8951963810d24b98fa7fc86020ab1003422d11db34f70844f270"}},{"ruleId":"D2","level":"warning","message":{"text":"CopyRenderable::move_forward_one_word (cognitive 20): CopyRenderable::move_forward_one_word has cognitive complexity 20 (threshold 15). Drivers by points: if/else 7 (20 pts) (nesting depth added 13). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/copy.rs"},"region":{"startLine":971}}}],"partialFingerprints":{"codehealthFindingId/v1":"f91ae160c7bef5e167ee4bbd378dd87c48ccae5929b881ea21151bbe055fff24"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::render_element_background (cognitive 20): TermWindow::render_element_background has cognitive complexity 20 (threshold 15). Drivers by points: if/else 11 (12 pts), boolean chains 8 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/box_model.rs"},"region":{"startLine":1036}}}],"partialFingerprints":{"codehealthFindingId/v1":"c21d17b86c537b46f0ec67f2487140326ef16e6389740825d20ddf832ad517f6"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::paint_tab_bar (cognitive 20): TermWindow::paint_tab_bar has cognitive complexity 20 (threshold 15). Drivers by points: if/else 11 (16 pts), boolean chains 4 (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":"kaku-gui/src/termwindow/render/tab_bar.rs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba41743de2ff2f8405c3cb1ba8d753a153894c708c055e0477389b49344a0567"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::track_long_press (cognitive 20): TermWindow::track_long_press has cognitive complexity 20 (threshold 15). Drivers by points: if/else 8 (19 pts), match/switch 1 (nesting depth added 11). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/touch.rs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c424877dda69838c08aa523568f3d1ac8c3c3d78f601f715ff4d376ff47cd1e"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::ai_chat_engine::build_environment_message (cognitive 20): kaku_gui::ai_chat_engine::build_environment_message has cognitive complexity 20 (threshold 15). Drivers by points: if/else 16 (18 pts), boolean chains 2 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_chat_engine/mod.rs"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"53609de704218473b168f0534ffac2f5ab3fb64ca544161543999e9bd2d5289a"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::session_restore::save_session_snapshot_impl (cognitive 20): kaku_gui::session_restore::save_session_snapshot_impl has cognitive complexity 20 (threshold 15). Drivers by points: if/else 9 (13 pts), boolean chains 3, match/switch 2 (3 pts), loops 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/session_restore.rs"},"region":{"startLine":986}}}],"partialFingerprints":{"codehealthFindingId/v1":"a96b6d7b5cb17eb60a7f77b1e42fb7877f6b673d44b0b116194770d00cc850c0"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalPaneDCSHandler::handle_device_control (cognitive 20): LocalPaneDCSHandler::handle_device_control has cognitive complexity 20 (threshold 15). Drivers by points: if/else 9 (18 pts), boolean chains 1, match/switch 1 (nesting depth added 9). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/localpane.rs"},"region":{"startLine":989}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e06a1bffc8c2b75d91821b80eeede527b10fb04f76b94cd3f8362739333eb41"}},{"ruleId":"D2","level":"warning","message":{"text":"ColorPalette::from (cognitive 20): ColorPalette::from has cognitive complexity 20 (threshold 15). Drivers by points: if/else 12 (13 pts), loops 5 (7 pts) (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/color.rs"},"region":{"startLine":313}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d6c091bf9dbcdade34bee2c96834138146faba758a7db24c1761ddbde43637d"}},{"ruleId":"D2","level":"warning","message":{"text":"TerminalState::set_cursor_pos (cognitive 20): TerminalState::set_cursor_pos has cognitive complexity 20 (threshold 15). Drivers by points: if/else 12 (18 pts), match/switch 2 (nesting depth added 6). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/mod.rs"},"region":{"startLine":1220}}}],"partialFingerprints":{"codehealthFindingId/v1":"d146647fc42c8a52c938c32cc26768bc2b5d90aae1b0f355449e2c0b4f2edcde"}},{"ruleId":"D2","level":"warning","message":{"text":"config::lua::config_builder_new_index (cognitive 19): config::lua::config_builder_new_index has cognitive complexity 19 (threshold 15). Drivers by points: match/switch 4 (9 pts), if/else 4 (7 pts), loops 1 (3 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":"config/src/lua.rs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"2aab1f14ddc5c1edec2ba2cbf8457343933200b511c773c5a5230df8bd193a82"}},{"ruleId":"D2","level":"warning","message":{"text":"wezterm_client::client::unix_connect_with_retry (cognitive 19): wezterm_client::client::unix_connect_with_retry has cognitive complexity 19 (threshold 15). Drivers by points: match/switch 3 (9 pts), if/else 3 (6 pts), loops 2 (4 pts) (nesting depth added 11). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/client.rs"},"region":{"startLine":435}}}],"partialFingerprints":{"codehealthFindingId/v1":"984944e2eb9eb9ef8fbd710133497b4dc49a212a0231ed80f9ab7b907f1e5be7"}},{"ruleId":"D2","level":"warning","message":{"text":"wezterm_client::pane::renderable::hydrate_lines (cognitive 19): wezterm_client::pane::renderable::hydrate_lines has cognitive complexity 19 (threshold 15). Drivers by points: if/else 6 (13 pts), loops 4, match/switch 1 (2 pts) (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/pane/renderable.rs"},"region":{"startLine":641}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0268342d2efcf8ddee0b63e872b7fa0414e0a2ce0278dd3b58d5ee3419efff7"}},{"ruleId":"D2","level":"warning","message":{"text":"wezterm_escape_parser::tmux_cc::unvis_bytes::unvis_byte (cognitive 19): wezterm_escape_parser::tmux_cc::unvis_bytes::unvis_byte has cognitive complexity 19 (threshold 15). Drivers by points: if/else 11 (16 pts), match/switch 2 (3 pts) (nesting depth added 6). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/tmux_cc/mod.rs"},"region":{"startLine":538}}}],"partialFingerprints":{"codehealthFindingId/v1":"84fb831bd1bdd4a28b15572270097695bd4993b786b6bef904851ae54ac943f9"}},{"ruleId":"D2","level":"warning","message":{"text":"Face::set_font_size (cognitive 19): Face::set_font_size has cognitive complexity 19 (threshold 15). Drivers by points: if/else 7 (12 pts), match/switch 2 (4 pts), loops 1 (2 pts), boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/ftwrap.rs"},"region":{"startLine":451}}}],"partialFingerprints":{"codehealthFindingId/v1":"9dd9e612b948fd785fc7b318c7dad5930c9b497576e802743918d98d4b9bf3c2"}},{"ruleId":"D2","level":"warning","message":{"text":"Config::for_host (cognitive 19): Config::for_host has cognitive complexity 19 (threshold 15). Drivers by points: if/else 11 (17 pts), loops 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/config.rs"},"region":{"startLine":514}}}],"partialFingerprints":{"codehealthFindingId/v1":"857a721f3500b5a46feaf017ae1e9459686914543151649ea56739ebbbcdf1ee"}},{"ruleId":"D2","level":"warning","message":{"text":"SessionInner::new_pty (cognitive 19): SessionInner::new_pty has cognitive complexity 19 (threshold 15). Drivers by points: if/else 9 (17 pts), loops 1 (2 pts) (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/pty.rs"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f65c2d4ea60333385171cb0e57fdc547e39f8c7ce4c699392f4a1fe7667fa59"}},{"ruleId":"D2","level":"warning","message":{"text":"App::extract_lua_value (cognitive 19): App::extract_lua_value has cognitive complexity 19 (threshold 15). Drivers by points: if/else 9 (15 pts), boolean chains 3, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/config_tui/mod.rs"},"region":{"startLine":795}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a60e80064478ff97ef5cf5f72f3dac49761d626b335a9a4fcfbe5ce87cbbed8"}},{"ruleId":"D2","level":"warning","message":{"text":"App::activate_control (cognitive 19): App::activate_control has cognitive complexity 19 (threshold 15). Drivers by points: if/else 8 (15 pts), boolean chains 3, match/switch 1 (nesting depth added 7). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/state.rs"},"region":{"startLine":1460}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d7809d373ef18c848a0632875cc93fe5d1278458a8faad7f69e6533c780995e"}},{"ruleId":"D2","level":"warning","message":{"text":"TabBarState::integrated_title_buttons (cognitive 19): TabBarState::integrated_title_buttons has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10 (16 pts), match/switch 1 (2 pts), loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/tabbar.rs"},"region":{"startLine":912}}}],"partialFingerprints":{"codehealthFindingId/v1":"831dd0bbe1a95548a57493e6368c034095f3ecebd22f4db6834e2221005c49c9"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::drag_tab (cognitive 19): TermWindow::drag_tab has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10 (18 pts), boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mouseevent.rs"},"region":{"startLine":658}}}],"partialFingerprints":{"codehealthFindingId/v1":"f89491f72a000686dae377b41be9608c486e10c64eda3bce3f473a8bc10377ae"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::ai_conversations::split_visible_reasoning_blocks (cognitive 19): kaku_gui::ai_conversations::split_visible_reasoning_blocks has cognitive complexity 19 (threshold 15). Drivers by points: if/else 6 (16 pts), loops 2 (3 pts) (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_conversations.rs"},"region":{"startLine":416}}}],"partialFingerprints":{"codehealthFindingId/v1":"af9e49538771e27811dd9b5966633f0bdc8bfb47f1c4a26c858dc26c2af3e6c4"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::termwindow::charselect::build_aliases (cognitive 19): kaku_gui::termwindow::charselect::build_aliases has cognitive complexity 19 (threshold 15). Drivers by points: loops 6 (10 pts), if/else 3 (5 pts), match/switch 2 (4 pts) (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":"kaku-gui/src/termwindow/charselect.rs"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6f4c7ab00c777f9c1928ddd5542d8e7a4fd2b7df882cadbbcda5db52e5d0b89"}},{"ruleId":"D2","level":"warning","message":{"text":"TmuxDomainState::subscribe_notification (cognitive 19): TmuxDomainState::subscribe_notification has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (11 pts), match/switch 5 (8 pts) (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tmux_commands.rs"},"region":{"startLine":569}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf9a042f3fa28c673e65379872df25e0ba7e79b42a0b932cd0920a02aa700179"}},{"ruleId":"D2","level":"warning","message":{"text":"TerminalState::perform_csi_mode (cognitive 19): TerminalState::perform_csi_mode has cognitive complexity 19 (threshold 15). Drivers by points: if/else 8 (16 pts), match/switch 2 (3 pts) (nesting depth added 9). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/mod.rs"},"region":{"startLine":1675}}}],"partialFingerprints":{"codehealthFindingId/v1":"212ca2b0f94225d1cadaaa16561f6a1f52a0a896ee67f5af5436edac4c42fff6"}},{"ruleId":"D2","level":"warning","message":{"text":"WindowInner::toggle_simple_fullscreen (cognitive 19): WindowInner::toggle_simple_fullscreen has cognitive complexity 19 (threshold 15). Drivers by points: if/else 9 (17 pts), match/switch 1 (2 pts) (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/window.rs"},"region":{"startLine":2596}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc6e794c4c00e9634c971382bdcc7965fe87a90904383b09e13f99a263c55d12"}},{"ruleId":"D2","level":"warning","message":{"text":"BidiContext::reorder_non_spacing_marks (cognitive 18): BidiContext::reorder_non_spacing_marks has cognitive complexity 18 (threshold 15). Drivers by points: if/else 4 (10 pts), boolean chains 4, loops 2 (4 pts) (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/bidi/src/lib.rs"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9c91ba387f76610f2a14a75448d8236f55ce402ae7d2d90b511d27b88689cfd"}},{"ruleId":"D2","level":"warning","message":{"text":"BidiContext::resolve_one_pair (cognitive 18): BidiContext::resolve_one_pair has cognitive complexity 18 (threshold 15). Drivers by points: if/else 7 (10 pts), boolean chains 3, match/switch 1 (3 pts), loops 1 (2 pts) (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/bidi/src/lib.rs"},"region":{"startLine":967}}}],"partialFingerprints":{"codehealthFindingId/v1":"b949521515de32577a580a00f8bebd4fcb247e6f6dcd952fcda64529a406d03d"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_remote::web::image_placements (cognitive 18): kaku_remote::web::image_placements has cognitive complexity 18 (threshold 15). Drivers by points: if/else 3 (11 pts), loops 3 (6 pts), boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/src/web.rs"},"region":{"startLine":1669}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b7a6c603761e05e6e1caa224d86e5b557f6533af52ecb45e0d61106738d9f47"}},{"ruleId":"D2","level":"warning","message":{"text":"RenderableInner::apply_lines (cognitive 18): RenderableInner::apply_lines has cognitive complexity 18 (threshold 15). Drivers by points: loops 3 (10 pts), match/switch 2 (7 pts), if/else 1 (nesting depth added 12). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/pane/renderable.rs"},"region":{"startLine":531}}}],"partialFingerprints":{"codehealthFindingId/v1":"0eed0100c2409a0344f5d34818f3a52b39e7c070caff4ba989a07432aacbc755"}},{"ruleId":"D2","level":"warning","message":{"text":"wezterm_client::client::client_thread_async (cognitive 18): wezterm_client::client::client_thread_async has cognitive complexity 18 (threshold 15). Drivers by points: if/else 4 (11 pts), match/switch 2 (5 pts), loops 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/client.rs"},"region":{"startLine":346}}}],"partialFingerprints":{"codehealthFindingId/v1":"9aef5dc00a5bdf3c1f2891d1da4824bd15a9270f466cb3d89eb8c4cc0b2ebe86"}},{"ruleId":"D2","level":"warning","message":{"text":"KittyImageData::load_data (cognitive 18): KittyImageData::load_data has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9 (16 pts), boolean chains 1, match/switch 1 (nesting depth added 7). Most of this is not in the body itself: 7 of the 18 points are its own statements and the rest belongs to 2 function items inside it that branch (looks_like_temp_path, read_from_file). Those helpers are already separate functions, so extracting the branching again is not available. To reduce it, move them out of the body to the enclosing scope, where each is measured, reviewed and tested on its own, and reduce whichever one then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/apc.rs"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"09dfdb359892ca05f19c2dbec2db640d5e93f13ef694a03561b429fe17861dae"}},{"ruleId":"D2","level":"warning","message":{"text":"SessionInner::run_impl_libssh (cognitive 18): SessionInner::run_impl_libssh has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12 (14 pts), loops 1 (2 pts), match/switch 1 (2 pts) (nesting depth added 4). Of this number, 16 points are the body\u0027s own statements and 2 belong to one function item inside it that branches. To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/sessioninner.rs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"754470875a7f04c6e930e68f03326bf237cdec3a630403eea92c0862304d116d"}},{"ruleId":"D2","level":"warning","message":{"text":"ToolState::load_with_usage (cognitive 18): ToolState::load_with_usage has cognitive complexity 18 (threshold 15). Drivers by points: if/else 8 (9 pts), match/switch 4 (5 pts), boolean chains 4 (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui.rs"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c5ea2c4c888b2b7e1aa578956ee2b1d6db387dee3e12e7cb0ffb8f8cdd1b0ef"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku::doctor::check_fish_conf_d_source_line (cognitive 18): kaku::doctor::check_fish_conf_d_source_line has cognitive complexity 18 (threshold 15). Drivers by points: if/else 7 (12 pts), boolean chains 4, loops 1, match/switch 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/doctor.rs"},"region":{"startLine":1126}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f0840c10acf0021b6fea00f37bd6a2ee719260af7e42646fc697ea8bdf533f7"}},{"ruleId":"D2","level":"warning","message":{"text":"Tui::all_display_lines (cognitive 18): Tui::all_display_lines has cognitive complexity 18 (threshold 15). Drivers by points: loops 4 (10 pts), if/else 3 (4 pts), boolean chains 2, match/switch 1 (2 pts) (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":"kaku-gui/src/cli_chat/mod.rs"},"region":{"startLine":311}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c73bd2b153a3d9e5380495cbf2d660fd8f2d0b90667c68526a16e815b2860d5"}},{"ruleId":"D2","level":"warning","message":{"text":"CopyRenderable::move_backward_one_word (cognitive 18): CopyRenderable::move_backward_one_word has cognitive complexity 18 (threshold 15). Drivers by points: if/else 7 (13 pts), boolean chains 3, loops 1 (2 pts) (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/copy.rs"},"region":{"startLine":916}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c0db3c22b937af6df9fe1c2d234869f5410185b58c5fa62a0543eec33d8e7e9"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::paint_split (cognitive 18): TermWindow::paint_split has cognitive complexity 18 (threshold 15). Drivers by points: match/switch 4 (8 pts), if/else 6, boolean chains 4 (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":"kaku-gui/src/termwindow/render/split.rs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"9874d44abc51a09748fdb9fc689ce2e5624a6a6c2fb65bbadf8b3f7a37e5c15c"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::ai_conversations::update_summary (cognitive 18): kaku_gui::ai_conversations::update_summary has cognitive complexity 18 (threshold 15). Drivers by points: if/else 6 (17 pts), loops 1 (nesting depth added 11). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_conversations.rs"},"region":{"startLine":319}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d0d12b4dac53386224c5b247dc9cc20cf8d175f6ffa81a097c2eff783349e27"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::ai_tools::execute (cognitive 18): kaku_gui::ai_tools::execute has cognitive complexity 18 (threshold 15). Drivers by points: if/else 6 (12 pts), boolean chains 3, match/switch 2 (3 pts) (nesting depth added 7). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_tools/mod.rs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"b619a77eebf0876d57a174a0e0a99e2f85d52da649de3cb4e20399644790cd5b"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::overlay::ai_chat::input::extract_selection_text (cognitive 18): kaku_gui::overlay::ai_chat::input::extract_selection_text has cognitive complexity 18 (threshold 15). Drivers by points: if/else 7 (10 pts), match/switch 2 (5 pts), boolean chains 2, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/input.rs"},"region":{"startLine":557}}}],"partialFingerprints":{"codehealthFindingId/v1":"3067617d15c5590e1716c6040ace900c37bc1cd3f44d1178e71c194d51865f1a"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::overlay::ai_chat::markdown::try_parse_pipe_table (cognitive 18): kaku_gui::overlay::ai_chat::markdown::try_parse_pipe_table has cognitive complexity 18 (threshold 15). Drivers by points: if/else 8 (12 pts), loops 3 (4 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":"kaku-gui/src/overlay/ai_chat/markdown.rs"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"31c8fd023c47345da2b5f76f7434c122a1652137f31bde07e5ce8e76e2c3b417"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::session_restore::restore_session (cognitive 18): kaku_gui::session_restore::restore_session has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9 (15 pts), match/switch 1 (2 pts), loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/session_restore.rs"},"region":{"startLine":1379}}}],"partialFingerprints":{"codehealthFindingId/v1":"29e94d0b5d49405200c74504ca234f97b7fb5c55f492dda03f3401f280641ef8"}},{"ruleId":"D2","level":"warning","message":{"text":"mux::pane::impl_get_logical_lines_via_get_lines (cognitive 18): mux::pane::impl_get_logical_lines_via_get_lines has cognitive complexity 18 (threshold 15). Drivers by points: if/else 6 (10 pts), loops 4 (5 pts), match/switch 1 (2 pts), boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/pane.rs"},"region":{"startLine":562}}}],"partialFingerprints":{"codehealthFindingId/v1":"28d34d565e61e9f2eb417b819c215986f38145f47b5b1be03071668618072b65"}},{"ruleId":"D2","level":"warning","message":{"text":"Performer::device_control (cognitive 18): Performer::device_control has cognitive complexity 18 (threshold 15). Drivers by points: if/else 3 (10 pts), match/switch 4 (8 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":"term/src/terminalstate/performer.rs"},"region":{"startLine":387}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc2f74372fafddc407756523ecf4d8093c14d041a4e8ec0ef5f1c24132549883"}},{"ruleId":"D2","level":"warning","message":{"text":"Config::try_load (cognitive 17): Config::try_load has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11, match/switch 3 (5 pts), boolean chains 1 (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/config.rs"},"region":{"startLine":1426}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1c4d24aab79cef1aa929cf5fb476002fdff118d5d9642d4a75c6aae7e89810f"}},{"ruleId":"D2","level":"warning","message":{"text":"ColorSchemeRegistry::load_scheme (cognitive 17): ColorSchemeRegistry::load_scheme has cognitive complexity 17 (threshold 15). Drivers by points: if/else 4 (10 pts), loops 3 (7 pts) (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/lib.rs"},"region":{"startLine":306}}}],"partialFingerprints":{"codehealthFindingId/v1":"febcd3bba0b69193b76d5cefb9930b8934479126e93e49778d735e3bd98f26c7"}},{"ruleId":"D2","level":"warning","message":{"text":"Base91Decoder::write (cognitive 17): Base91Decoder::write has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (13 pts), loops 2 (4 pts) (nesting depth added 9). This file\u0027s own header attributes it to another copyright holder, so it is code this repository carries rather than code it wrote: restructuring the body in place forks it from upstream and turns every future re-sync into a manual merge. The performable moves are to leave the body as close to its upstream form as possible and keep it behind a narrow interface of your own, and to re-sync it when upstream changes \u2014 or, if it has already diverged far enough that you maintain it here, adopt it deliberately and then split the body into named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/base91/src/lib.rs"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"b85b70056f3e4c9f82fe917c71d62e7ea9f3ce6f5fb33b7e995bbc7ea1bccf93"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_remote::web::row_text (cognitive 17): kaku_remote::web::row_text has cognitive complexity 17 (threshold 15). Drivers by points: if/else 4 (12 pts), loops 2 (5 pts) (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/src/web.rs"},"region":{"startLine":2177}}}],"partialFingerprints":{"codehealthFindingId/v1":"d54c5d14e4df10a00b8a528c949bffa8ececa3010de9dea8062989f1e4e6f792"}},{"ruleId":"D2","level":"warning","message":{"text":"Reconnectable::try_connect (cognitive 17): Reconnectable::try_connect has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (11 pts), loops 2 (4 pts), match/switch 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/client.rs"},"region":{"startLine":924}}}],"partialFingerprints":{"codehealthFindingId/v1":"b398c936106226d006ce4b613d487e0b5f64bc62402cf282b784a38f2866989b"}},{"ruleId":"D2","level":"warning","message":{"text":"ProgramStatus::parse (cognitive 17): ProgramStatus::parse has cognitive complexity 17 (threshold 15). Drivers by points: match/switch 6 (7 pts), if/else 3 (5 pts), loops 2 (3 pts), boolean chains 2 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/osc.rs"},"region":{"startLine":985}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd0be3eb2530a461c7a85e07a84ef82274e0b8a630d86028881d7bb59f799c5e"}},{"ruleId":"D2","level":"warning","message":{"text":"Parser::process_guarded_line (cognitive 17): Parser::process_guarded_line has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8 (14 pts), boolean chains 2, match/switch 1 (nesting depth added 6). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/tmux_cc/mod.rs"},"region":{"startLine":883}}}],"partialFingerprints":{"codehealthFindingId/v1":"58ad33e5c99e46ac42bfa3038ee9777fba367d49ecb4101b274c1aa0fbf3aa73"}},{"ruleId":"D2","level":"warning","message":{"text":"Line::compute_zones (cognitive 17): Line::compute_zones has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (12 pts), loops 2, match/switch 1 (2 pts), boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-surface/src/line/line.rs"},"region":{"startLine":426}}}],"partialFingerprints":{"codehealthFindingId/v1":"e48e1ec8e85e6e5376176fc709c80087de8d81f33304a9e293064196431c6f40"}},{"ruleId":"D2","level":"warning","message":{"text":"Line::apply_hyperlink_rules (cognitive 17): Line::apply_hyperlink_rules has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (8 pts), loops 5 (7 pts), boolean chains 2 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-surface/src/line/line.rs"},"region":{"startLine":571}}}],"partialFingerprints":{"codehealthFindingId/v1":"4524f8283ab45d8faaf8d36b8b32c0a8ec55f5c4769225fe1ef0e1eef556e70a"}},{"ruleId":"D2","level":"warning","message":{"text":"ZoomPane::run (cognitive 17): ZoomPane::run has cognitive complexity 17 (threshold 15). Drivers by points: if/else 4 (9 pts), loops 2 (3 pts), match/switch 1 (3 pts), boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/cli/zoom_pane.rs"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3ddc3aea1c000c05f288e5f75febe5c1243edfd42b52f479f02327fc9c86041"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku::ensure_relay_access (cognitive 17): kaku::ensure_relay_access has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (9 pts), loops 3 (4 pts), match/switch 1 (3 pts), boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/main.rs"},"region":{"startLine":612}}}],"partialFingerprints":{"codehealthFindingId/v1":"23d3940137efd856486953be77da78450bee73357e7f5076ad87808080b68789"}},{"ruleId":"D2","level":"warning","message":{"text":"ColorEase::intensity_one_shot (cognitive 17): ColorEase::intensity_one_shot has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8 (12 pts), match/switch 2 (3 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":"kaku-gui/src/colorease.rs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ef5796d0ae70e7c2893e1e28fa3cb091b96ec40bba86ec5fd10fcafb9b928ba"}},{"ruleId":"D2","level":"warning","message":{"text":"CopyRenderable::perform_jump (cognitive 17): CopyRenderable::perform_jump has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (11 pts), match/switch 2 (5 pts), boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/copy.rs"},"region":{"startLine":1099}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e81af59b5b6960beb9cdc1ee34ed6824a96c19f81a4fb874ed1ba9a1d173b73"}},{"ruleId":"D2","level":"warning","message":{"text":"LauncherArgs::new (cognitive 17): LauncherArgs::new has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9 (14 pts), loops 1 (2 pts), boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/launcher.rs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"2947ddf3ba9182a171065b78bf96ad31cec5b5fec2e81987a1f94ddc5e9431c9"}},{"ruleId":"D2","level":"warning","message":{"text":"Element::with_line (cognitive 17): Element::with_line has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (15 pts), boolean chains 1, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/box_model.rs"},"region":{"startLine":268}}}],"partialFingerprints":{"codehealthFindingId/v1":"52ed11a9ad2f1c128c6374e41e4e47d31d00f9ea49431c4f6a723bbd52944bc1"}},{"ruleId":"D2","level":"warning","message":{"text":"KeyTableState::lookup_key (cognitive 17): KeyTableState::lookup_key has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (13 pts), loops 3 (4 pts) (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/keyevent.rs"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"0aa6ade323c7691067a22033436794ace13017fc60179782b83e4b6b503c275f"}},{"ruleId":"D2","level":"warning","message":{"text":"TermWindow::open_file_link_target (cognitive 17): TermWindow::open_file_link_target has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, boolean chains 5, match/switch 1 (2 pts) (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":5757}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bc9160226d217cb6d34d5a3ec6e40ddcea732c94e69d10eae6ff4a459090ed9"}},{"ruleId":"D2","level":"warning","message":{"text":"CommandPalette::mouse_event (cognitive 17): CommandPalette::mouse_event has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8 (15 pts), boolean chains 1, match/switch 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/palette.rs"},"region":{"startLine":1008}}}],"partialFingerprints":{"codehealthFindingId/v1":"8689f8f859525bd6578a394a6684c8165a3ab4961f36cb78230b67c05bf78223"}},{"ruleId":"D2","level":"warning","message":{"text":"CommandPalette::computed_element (cognitive 17): CommandPalette::computed_element has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (13 pts), boolean chains 4 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/palette.rs"},"region":{"startLine":1138}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6c6e7bfb68605a475177b37c5d5d379c5029b8b62ec70890ee6acd7a6c78ce0"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::ai_tools::fs::exec_fs_read (cognitive 17): kaku_gui::ai_tools::fs::exec_fs_read has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (14 pts), loops 1 (2 pts), boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_tools/fs.rs"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ef4807599cb60d4f4d154cec4347cca12c358c93f56d3ec39924ac1f036a08a"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::ai_tools::paths::reject_relative_cwd_escape (cognitive 17): kaku_gui::ai_tools::paths::reject_relative_cwd_escape has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (12 pts), loops 2, match/switch 1 (2 pts), boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_tools/paths.rs"},"region":{"startLine":298}}}],"partialFingerprints":{"codehealthFindingId/v1":"f49457efb05ed52d2658088db690fec4b6b08f21cce1886f4cda79949d348a44"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::ai_tools::search::search_brave (cognitive 17): kaku_gui::ai_tools::search::search_brave has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9 (13 pts), loops 2 (4 pts) (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_tools/search.rs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a593c4e6763e1b49140c5574c9d2e09711d8d252f1a9050929cc6402d7823c4"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::tabbar::tab_multi_pane_title (cognitive 17): kaku_gui::tabbar::tab_multi_pane_title has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9 (16 pts), loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/tabbar.rs"},"region":{"startLine":316}}}],"partialFingerprints":{"codehealthFindingId/v1":"f38d89ae61aaa779f77c612f59ff1285e2afd1c23dd6173721aa1a15147553db"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::termwindow::render::screen_line::composition_line (cognitive 17): kaku_gui::termwindow::render::screen_line::composition_line has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (12 pts), boolean chains 3, loops 1 (2 pts) (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/screen_line.rs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"49b87aa6a98959e46eb37774117cbb2f6341b1bf20c91afe090bd8efb885c109"}},{"ruleId":"D2","level":"warning","message":{"text":"PaneInputEncoder::encode (cognitive 17): PaneInputEncoder::encode has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (13 pts), boolean chains 3, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: one other method here (PaneOutputDecoder::decode) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/pane_encoding.rs"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"adec1793245c798b9034a77939a64f59ae532fd24a1bd792bb9e58d8d7ca3760"}},{"ruleId":"D2","level":"warning","message":{"text":"PaneOutputDecoder::decode (cognitive 17): PaneOutputDecoder::decode has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (13 pts), boolean chains 3, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: one other method here (PaneInputEncoder::encode) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/pane_encoding.rs"},"region":{"startLine":231}}}],"partialFingerprints":{"codehealthFindingId/v1":"763a2fd5bea650b30b152aa086ed51f6fe9c64aaaf3bafe45d9e5e486f7b6d9e"}},{"ruleId":"D2","level":"warning","message":{"text":"mux::pane_encoding::advance_escape (cognitive 17): mux::pane_encoding::advance_escape has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8 (12 pts), match/switch 3 (5 pts) (nesting depth added 6). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/pane_encoding.rs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"3093c88f688aeb61c937d2acd3d652d047ed35b2cbe05338f5459ee1925bda29"}},{"ruleId":"D2","level":"warning","message":{"text":"Config::load_with_window_overrides (cognitive 16): Config::load_with_window_overrides has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (11 pts), match/switch 2 (3 pts), loops 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/config.rs"},"region":{"startLine":1215}}}],"partialFingerprints":{"codehealthFindingId/v1":"10b93d319628ebcadfa592bd02e168ed0b697c0df669133d1a98c521c6a56de5"}},{"ruleId":"D2","level":"warning","message":{"text":"BidiContext::resolve_separators (cognitive 16): BidiContext::resolve_separators has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (13 pts), loops 2 (3 pts) (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/bidi/src/lib.rs"},"region":{"startLine":676}}}],"partialFingerprints":{"codehealthFindingId/v1":"331502fa91f7c60c4e54b5cdb4791a3d9b941ade0388a9ba1105591038507a4b"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_relay::device (cognitive 16): kaku_relay::device has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, boolean chains 3, match/switch 1. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-relay/src/main.rs"},"region":{"startLine":508}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bf711f202b6cc90453e0c479d607cd6a2cbc29b6cfe5d8a699d02614d7d96fe"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalProcessInfo::with_root_pid (cognitive 16): LocalProcessInfo::with_root_pid has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10 (13 pts), loops 2, boolean chains 1 (nesting depth added 3). Most of this is not in the body itself: 2 of the 16 points are its own statements and the rest belongs to 4 function items inside it that branch (all_pids, build_proc, info_for_pid, \u2026). Those helpers are already separate functions, so extracting the branching again is not available. To reduce it, move them out of the body to the enclosing scope, where each is measured, reviewed and tested on its own, and reduce whichever one then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/procinfo/src/macos.rs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"db275c0e7ae82bac69c5cb4747e60c56798a3b216cc4df5909af08975d408d3e"}},{"ruleId":"D2","level":"warning","message":{"text":"tabout::tabulate_output (cognitive 16): tabout::tabulate_output has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (9 pts), loops 5 (7 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. This shape REPEATS in the file: one other method here (tabout::tabulate_for_terminal) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/tabout/src/lib.rs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"29fd6273a55161b83d156fdd441607d70fa2cf377e1c1274f5c8c0d5d5874ec0"}},{"ruleId":"D2","level":"warning","message":{"text":"tabout::tabulate_for_terminal (cognitive 16): tabout::tabulate_for_terminal has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (9 pts), loops 5 (7 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. This shape REPEATS in the file: one other method here (tabout::tabulate_output) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/tabout/src/lib.rs"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4f963b5cc79763a3ff6ca848482190be96212519e70ecd74a2d82a5d425c25a"}},{"ruleId":"D2","level":"warning","message":{"text":"ClientInner::expire_stale_mappings (cognitive 16): ClientInner::expire_stale_mappings has cognitive complexity 16 (threshold 15). Drivers by points: if/else 2 (7 pts), loops 3 (7 pts), match/switch 2 (nesting depth added 9). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/domain.rs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"20fb317da75120502b6dc7a6acc7fdad4d18cacfb26264229d80290eb0ed12dd"}},{"ruleId":"D2","level":"warning","message":{"text":"CSIParser::sgr (cognitive 16): CSIParser::sgr has cognitive complexity 16 (threshold 15). Drivers by points: match/switch 4 (12 pts), if/else 2, loops 1 (2 pts) (nesting depth added 9). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/csi.rs"},"region":{"startLine":2686}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3bb2aab79218cf9ce38d6023cfa0bec68a104ef90d92d3de20fa41483e7d298"}},{"ruleId":"D2","level":"warning","message":{"text":"SixelBuilder::finish_command (cognitive 16): SixelBuilder::finish_command has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8 (14 pts), boolean chains 1, match/switch 1 (nesting depth added 6). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/parser/sixel.rs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"461e54d217b63ca7ecde1be15d806e1862050de7e8b7d01abeab3bf08087d534"}},{"ruleId":"D2","level":"warning","message":{"text":"Blob::from_source (cognitive 16): Blob::from_source has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6 (13 pts), match/switch 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":"crates/wezterm-font/src/hbwrap.rs"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"39d1b49ef321111fb0b5c021abd1a056bc15ad59195131ff0501997074729905"}},{"ruleId":"D2","level":"warning","message":{"text":"FallbackResolveInfo::process (cognitive 16): FallbackResolveInfo::process has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6 (7 pts), match/switch 4 (5 pts), boolean chains 3, loops 1 (nesting depth added 2). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/lib.rs"},"region":{"startLine":337}}}],"partialFingerprints":{"codehealthFindingId/v1":"435d5732c013a97d134fe19e501b27785f779082256ebf80577e76db00de8d6d"}},{"ruleId":"D2","level":"warning","message":{"text":"ChannelWrap::exit_status (cognitive 16): ChannelWrap::exit_status has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8 (14 pts), boolean chains 1, match/switch 1 (nesting depth added 6). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/channelwrap.rs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c12fb66b688dd579651d4025a376801cff85a88ae8c95b8bb88002e55325abf"}},{"ruleId":"D2","level":"warning","message":{"text":"MatchGroup::is_match (cognitive 16): MatchGroup::is_match has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (13 pts), match/switch 1 (2 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/config.rs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9939a3b410191d304c0d239fb27c5dc48552e601b08dfe92fddb82469c319a7"}},{"ruleId":"D2","level":"warning","message":{"text":"CellCluster::add (cognitive 16): CellCluster::add has cognitive complexity 16 (threshold 15). Drivers by points: loops 6 (12 pts), if/else 4 (nesting depth added 6). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-surface/src/cellcluster.rs"},"region":{"startLine":275}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e58e6ce44dc6bcb7122fa132654b346caaf5ae1cbb1aac21c536bc7d220907e"}},{"ruleId":"D2","level":"warning","message":{"text":"ChangeSequence::add (cognitive 16): ChangeSequence::add has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (9 pts), match/switch 3 (5 pts), loops 1 (2 pts) (nesting depth added 7). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-surface/src/change.rs"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"37d8b74445693075db377393f278de59ff934de31c4fadab1647993978d9b21f"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku::ai_config::tui::summarize_tool_fields (cognitive 16): kaku::ai_config::tui::summarize_tool_fields has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13 (16 pts) (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui.rs"},"region":{"startLine":367}}}],"partialFingerprints":{"codehealthFindingId/v1":"89e46ec4b1b01fd253056cf804c70dfcfd4ce97d0e87827c3abff4de9a2f4861"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku::ai_config::tui::save_kimi_field_at (cognitive 16): kaku::ai_config::tui::save_kimi_field_at has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (11 pts), boolean chains 3, 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":"kaku/src/ai_config/tui.rs"},"region":{"startLine":2991}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ed1d93d862acc20f267d0d42388c4481717ff0a4709e3db705fc7e6d7068d8b"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku::ai_config::tui::providers::codex::extract_codex_fields (cognitive 16): kaku::ai_config::tui::providers::codex::extract_codex_fields has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (8 pts), match/switch 2 (6 pts), boolean chains 1, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui/providers/codex.rs"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"672aab144cdab849e60b3162067c93d2a2b464a52190291be5f348000fd21641"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku::ai_config::tui::providers::codex::save_codex_field_at (cognitive 16): kaku::ai_config::tui::providers::codex::save_codex_field_at has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (11 pts), boolean chains 3, 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":"kaku/src/ai_config/tui/providers/codex.rs"},"region":{"startLine":315}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d749bf293e5092ace04170a416e431e0f8510c15e4d639b06eec06df2d889cd"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku::doctor::check_zshrc_source_line (cognitive 16): kaku::doctor::check_zshrc_source_line has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (13 pts), boolean chains 1, loops 1, match/switch 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/doctor.rs"},"region":{"startLine":1077}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fa9261dc53754eaedf33279bffde9fbf93f828c14ee31de4429badaea020196"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::ai_chat_engine::approval::git_is_read_only (cognitive 16): kaku_gui::ai_chat_engine::approval::git_is_read_only has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (9 pts), boolean chains 6, 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":"kaku-gui/src/ai_chat_engine/approval.rs"},"region":{"startLine":494}}}],"partialFingerprints":{"codehealthFindingId/v1":"6302c748dc33ff5ad184f07612e1db855b77dd632ed32422eace83c3d5522b07"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::ai_tools::web::exec_read_url (cognitive 16): kaku_gui::ai_tools::web::exec_read_url has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (10 pts), match/switch 2 (4 pts), loops 1 (2 pts) (nesting depth added 9). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_tools/web.rs"},"region":{"startLine":301}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d5be70b230bee29f689a2fdcac602f4b35c7c20c12de4c588878e4e0c61b51b"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::stall_watchdog::run (cognitive 16): kaku_gui::stall_watchdog::run has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (12 pts), loops 2 (3 pts), boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/stall_watchdog.rs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"42e1df0cb769c7e12150e3b4c1e4dd112c70d17cca98190daecb223dc654ba11"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::termwindow::mouseevent::option_click_cursor_bytes (cognitive 16): kaku_gui::termwindow::mouseevent::option_click_cursor_bytes has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (7 pts), boolean chains 5, loops 2 (3 pts), match/switch 1 (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":"kaku-gui/src/termwindow/mouseevent.rs"},"region":{"startLine":333}}}],"partialFingerprints":{"codehealthFindingId/v1":"9770aaa4606c7916b3be104c013e66bc94ba0c11ec46495cd3c96d7bd958e101"}},{"ruleId":"D2","level":"warning","message":{"text":"kaku_gui::termwindow::palette::build_commands (cognitive 16): kaku_gui::termwindow::palette::build_commands has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6 (7 pts), match/switch 4 (5 pts), loops 2 (4 pts) (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/palette.rs"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"afde39b106094482262f2dcd68c0e01a6dce6198c11d2589e751091cd497bbf5"}},{"ruleId":"D2","level":"warning","message":{"text":"MuxPane::add_methods (cognitive 16): MuxPane::add_methods has cognitive complexity 16 (threshold 15). Drivers by points: match/switch 6 (8 pts), loops 4 (6 pts), if/else 2 (nesting depth added 4). Of this number, 10 points are the body\u0027s own statements and 6 belong to one function item inside it that branches. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lua-api-crates/mux/src/pane.rs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c1eca40dc45d9177bfbb25238099fefe898d359ede93398680b9235b66603ce"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalPane::can_close_without_prompting (cognitive 16): LocalPane::can_close_without_prompting has cognitive complexity 16 (threshold 15). Drivers by points: match/switch 5 (10 pts), if/else 4 (6 pts) (nesting depth added 7). Of this number, 10 points are the body\u0027s own statements and 6 belong to one function item inside it that branches. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/localpane.rs"},"region":{"startLine":654}}}],"partialFingerprints":{"codehealthFindingId/v1":"52af98c7fb26b0792d3500336a9e68b49699bf0e9d6f7eb8a64a4db7e1489b28"}},{"ruleId":"D2","level":"warning","message":{"text":"ListAllWindows::process_result (cognitive 16): ListAllWindows::process_result has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8 (15 pts), loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tmux_commands.rs"},"region":{"startLine":805}}}],"partialFingerprints":{"codehealthFindingId/v1":"315ffb97d5ecb007812fca94db2b20e58c73851307320fda7a3961253e98ff6c"}},{"ruleId":"D2","level":"warning","message":{"text":"Resize::get_command (cognitive 16): Resize::get_command has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8 (9 pts), match/switch 6, boolean chains 1 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tmux_commands.rs"},"region":{"startLine":901}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3b6a8d0dcfaa56324ee657f898e2d4a18fca16a9d8c6826b35c2e57a8e09d81"}},{"ruleId":"D2","level":"warning","message":{"text":"TerminalState::kitty_img (cognitive 16): TerminalState::kitty_img has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8 (13 pts), match/switch 2 (3 pts) (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/kitty.rs"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcec205ee8d56fd79b99ebc5f4187ec4d744e2aa827214156a7ed02ef022f8b3"}},{"ruleId":"D2","level":"warning","message":{"text":"WindowView::window_will_close (cognitive 16): WindowView::window_will_close has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8 (16 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":"window/src/os/macos/window.rs"},"region":{"startLine":8344}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea620eefaed73add9d2f6c7e4f3bfa3d920ddf9318e86a59316d0eda48470233"}},{"ruleId":"D2","level":"warning","message":{"text":"window::os::macos::app::flush_pending_service_opens (cognitive 16): window::os::macos::app::flush_pending_service_opens has cognitive complexity 16 (threshold 15). Drivers by points: loops 4 (8 pts), if/else 5 (7 pts), boolean chains 1 (nesting depth added 6). 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":"window/src/os/macos/app.rs"},"region":{"startLine":1548}}}],"partialFingerprints":{"codehealthFindingId/v1":"d973ca7287644565e9989adc65e88b9665a3333b5641adc729dc20168ffc1297"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: BlockKey.from_char: MethodTooLong \u2014 from_char runs 2925 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 2825 over it, 29.25\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/customglyph.rs"},"region":{"startLine":722}}}],"partialFingerprints":{"codehealthFindingId/v1":"da9dd64974e3ced048574c95c6cbc85107f7dd66fe1ef91b27c3c1a414e357de"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kaku_gui::commands::derive_command_from_key_assignment: FunctionTooLong \u2014 kaku_gui::commands::derive_command_from_key_assignment runs 1274 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 1174 over it, 12.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":"kaku-gui/src/commands.rs"},"region":{"startLine":1106}}}],"partialFingerprints":{"codehealthFindingId/v1":"35e87c595270edcb9df40d89062f31be75ede0da140e597259a3740ac0998055"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TermWindow: TooManyMethods \u2014 306 methods, declared across 20 files: termwindow/mod.rs (150), termwindow/mouseevent.rs (30), termwindow/keyevent.rs (26), render/mod.rs (19), \u002B16 more file(s). The bar is 30 methods; this is 276 over it, 10.20\u00D7 the bar. That list is where to read them, not a suggestion to split the file: the members belong to the type wherever they are declared, so moving them between files leaves the count unchanged. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":1043}}}],"partialFingerprints":{"codehealthFindingId/v1":"52e68ea6b65535f07591a5c3b082a1dadb34fb9c64de609e6cde8a64dff2a67d"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: TermWindow: ClassTooLong \u2014 3853 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 306 methods, 5 blocks, lines 1043-6872. The bar is 400 significant lines; this is 3453 over it, 9.63\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":1043}}}],"partialFingerprints":{"codehealthFindingId/v1":"4edad7cf8ed1ab914d1dcbef4a5890a2a36427e9a5c87b35b58d980dd8b12c76"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: macos/window.rs: FileTooLong \u2014 4770 significant 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 116 free functions. The bar is 500 significant lines; this is 4270 over it, 9.54\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/window.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b6c721534db43936fad3b0788ebf34287c584323b26ef83f8105e197af32cf1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: termwindow/mod.rs: FileTooLong \u2014 4573 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 84% of them inside a single declaration: TermWindow (5 blocks, 1043-6872). The bar is 500 significant lines; this is 4073 over it, 9.15\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":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"23138ac06ba1ea6ff1081b42663860fe30b33249cfe760e3c28836e5a6f88580"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: Config: TooManyFields \u2014 252 stored fields beside 32 methods. The bar is 30 stored fields; this is 222 over it, 8.40\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/config.rs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"4975796aa62489029b967511400524b08f34e887686d74469bc96b8c8aeab453"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/customglyph.rs: FileTooLong \u2014 3914 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 76% of them inside a single declaration: BlockKey (2 blocks, 218-5033). The bar is 500 significant lines; this is 3414 over it, 7.83\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/customglyph.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b6df9d1341e6dc74580f3969131bd7a0a915a75043305144266c2a3941c2210"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: BlockKey: ClassTooLong \u2014 2966 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 5 methods, 2 blocks, lines 218-5033. The bar is 400 significant lines; this is 2566 over it, 7.42\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":"kaku-gui/src/customglyph.rs"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3688de8115bfc9da532a5db70e586eac82c850a1459e6c3ca0672d0efb50866"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: GlyphCache.block_sprite: MethodTooLong \u2014 block_sprite runs 612 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 512 over it, 6.12\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/customglyph.rs"},"region":{"startLine":5175}}}],"partialFingerprints":{"codehealthFindingId/v1":"e26da184d71612390a1aa17d0c04c120095bf3ed62aa35a82aa1686271399c34"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: SessionHandler.process_one: MethodTooLong \u2014 process_one runs 551 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 451 over it, 5.51\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-mux-server-impl/src/sessionhandler.rs"},"region":{"startLine":246}}}],"partialFingerprints":{"codehealthFindingId/v1":"216fc035b730013513441139e85557d72872744a6bac501839f967f9e96fd4e3"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TermWindow.perform_key_assignment: MethodTooLong \u2014 perform_key_assignment runs 539 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 439 over it, 5.39\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":4752}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c40c67355c3169a76314d73f1d53ce96cce2a5a58b32db5c964429a5c0a447f"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TermWindow.render_screen_line: MethodTooLong \u2014 render_screen_line runs 459 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 359 over it, 4.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":"kaku-gui/src/termwindow/render/screen_line.rs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"a92e5a3d4c5d6a774809247e05122d3e378fa367074670fcc072042adc17a417"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: ai_config/tui.rs: FileTooLong \u2014 2267 significant 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 70 free functions. The bar is 500 significant lines; this is 1767 over it, 4.53\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"da8cbd643282d72509d900b9063f97358809805fb40c794b0e3bbc1ad835843f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/bidi_class.rs: FileTooLong \u2014 2224 significant 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 1724 over it, 4.45\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/bidi/src/bidi_class.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6748aadf97ce2fb2c406f02022eda9571aa0c0b1dbd61ed1d6d9826399edfb75"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/web.rs: FileTooLong \u2014 2204 significant 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 75 free functions. The bar is 500 significant lines; this is 1704 over it, 4.41\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/src/web.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"80a4a398d18e1388d6041879297bb28903c90d1f8d26c44d0964e58d704568f1"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TermWindow.mouse_event_terminal: MethodTooLong \u2014 mouse_event_terminal runs 437 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 337 over it, 4.37\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mouseevent.rs"},"region":{"startLine":1867}}}],"partialFingerprints":{"codehealthFindingId/v1":"df71c7092f5440435cf4a2cbd4af0e24c272c43c973829fb0208b1f5e9ab796d"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TermWindow.paint_pane: MethodTooLong \u2014 paint_pane runs 427 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 327 over it, 4.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":"kaku-gui/src/termwindow/render/pane.rs"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b024233fa6d676554b114b4da6b364571730ba125dd55c7b5083f90c2419ae5"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: WindowView: ClassTooLong \u2014 1698 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 89 methods, 2 blocks, lines 4548-10342. The bar is 400 significant lines; this is 1298 over it, 4.25\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/window.rs"},"region":{"startLine":4548}}}],"partialFingerprints":{"codehealthFindingId/v1":"28de0a84f33ee8a562158f40088a895a81040b827b7f5835c49a38db6dd02f1c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/commands.rs: FileTooLong \u2014 2080 significant 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 1580 over it, 4.16\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/commands.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1857fbb31dba84dfe654bb770ca4c1fb27adc9aaea6db943eab7aa0131c2279"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: TerminalState: ClassTooLong \u2014 1599 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 110 methods, 2 blocks, lines 302-2987. The bar is 400 significant lines; this is 1199 over it, 4.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":"term/src/terminalstate/mod.rs"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbe90d4b40272fcd670c5aac603e66304c5b0dbffbdaf3ac4faace239316745e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/csi.rs: FileTooLong \u2014 1932 significant 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 1432 over it, 3.86\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/csi.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"02087d84f2054b1349019605fe44d324a693bf8deed28675e8a5984ddbcf8c14"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TerminalState.perform_csi_mode: MethodTooLong \u2014 perform_csi_mode runs 372 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 272 over it, 3.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":"term/src/terminalstate/mod.rs"},"region":{"startLine":1675}}}],"partialFingerprints":{"codehealthFindingId/v1":"51d18531c5d309d45a9d5c1b8d4de25c1cdf2d275e38046c14d32c9532454197"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: terminalstate/mod.rs: FileTooLong \u2014 1845 significant 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 87% of them inside a single declaration: TerminalState (2 blocks, 302-2987). The bar is 500 significant lines; this is 1345 over it, 3.69\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":"term/src/terminalstate/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0322dd55bdbd8c77cc231c6f3077e6785a43ba6ab003cf609676b66cc1aaf616"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TerminalState: TooManyMethods \u2014 110 methods, declared across 7 files: terminalstate/mod.rs (82), terminalstate/kitty.rs (12), terminalstate/mouse.rs (8), terminalstate/keyboard.rs (4), \u002B3 more file(s). The bar is 30 methods; this is 80 over it, 3.67\u00D7 the bar. That list is where to read them, not a suggestion to split the file: the members belong to the type wherever they are declared, so moving them between files leaves the count unchanged. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/mod.rs"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a9410f8a946221b1f83f13d6dc5aeb802853e3c42e8e4821ffff6802e88628c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/config.rs: FileTooLong \u2014 1753 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 65% of them inside a single declaration: Config (3 blocks, 52-2169), declaring 87 free functions. The bar is 500 significant lines; this is 1253 over it, 3.51\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":"config/src/config.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e1e248e58f43bfa4a51f76a062eeb0e1cb9a293dd34f179ed02780e306cfe9a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: ai_chat/state.rs: FileTooLong \u2014 1741 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 72% of them inside a single declaration: App (2 blocks, 704-2528). The bar is 500 significant lines; this is 1241 over it, 3.48\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":"kaku-gui/src/overlay/ai_chat/state.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"642de6d9aec99c643db3a3d178766a55d3567c469c2120ae20f427ab9ac7a730"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kaku_remote::web::run_session: FunctionTooLong \u2014 kaku_remote::web::run_session runs 343 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 243 over it, 3.43\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/src/web.rs"},"region":{"startLine":2785}}}],"partialFingerprints":{"codehealthFindingId/v1":"1fcea71b6750b0eea9eb627dad9d7c0eb89f92418d0ccb8661440538753a70f3"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TermWindow.new_window: MethodTooLong \u2014 new_window runs 341 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 241 over it, 3.41\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":1591}}}],"partialFingerprints":{"codehealthFindingId/v1":"592e3c48accbeab5e1fcb948ecc936843f2395a78d3ebc94a6dfee3446867bee"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 1702 significant 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 1202 over it, 3.40\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-input-types/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"917b185fff96ec99bef93de0585bd6a8aaa0f06dfb6fca604b51600f6dabab56"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/tab.rs: FileTooLong \u2014 1667 significant 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 62% of them inside a single declaration: TabInner (2 blocks, 93-2565). The bar is 500 significant lines; this is 1167 over it, 3.33\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tab.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bef7a7bdb4f35f1993949129b2f64700795ed2e88bc799f07b684eecdc15c83"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: termwindow/mouseevent.rs: FileTooLong \u2014 1639 significant 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 82% of them inside a single declaration: TermWindow (477-2534). The bar is 500 significant lines; this is 1139 over it, 3.28\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":"kaku-gui/src/termwindow/mouseevent.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca123070ebf617ddd57930197a36e49237517bee94aee0653018032a2644a3cb"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TermWindow.build_fancy_tab_bar: MethodTooLong \u2014 build_fancy_tab_bar runs 320 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 220 over it, 3.20\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/fancy_tab_bar.rs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"edf781bc948c3b66393d97293922b207d2a1a38420f090ae9293554929a5ed53"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: providers/mod.rs: FileTooLong \u2014 1576 significant 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 101 free functions. The bar is 500 significant lines; this is 1076 over it, 3.15\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui/providers/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4179813e9dde4cb37f68a692bffaa3635a5a26669c848c93ddcd088ef8c4f9c0"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: App: ClassTooLong \u2014 1249 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 62 methods, 2 blocks, lines 704-2528. The bar is 400 significant lines; this is 849 over it, 3.12\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/state.rs"},"region":{"startLine":704}}}],"partialFingerprints":{"codehealthFindingId/v1":"84ac9a696269cb22ee96c7980ce4bae590c02fee7f60ffc2fa6e39e97eaa821e"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kaku_gui::ai_tools::registry::all_tools: FunctionTooLong \u2014 kaku_gui::ai_tools::registry::all_tools runs 308 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 208 over it, 3.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":"kaku-gui/src/ai_tools/registry.rs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef403fea0f1dbef90158b507bcbf0ceb7866900defac4e31535d1407df8ffe4d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: WindowView: TooManyMethods \u2014 89 methods. The bar is 30 methods; this is 59 over it, 2.97\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/window.rs"},"region":{"startLine":4548}}}],"partialFingerprints":{"codehealthFindingId/v1":"47993cfb6c59a93dd06599abf8408c3163b243a371bfff9689f371a358c80d77"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: TermWindow: TooManyFields \u2014 88 stored fields beside 306 methods. The bar is 30 stored fields; this is 58 over it, 2.93\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":1043}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a701da296622f6bc40227c6ab8dc077fe434faa812d3f339f966cc9a3de944e"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Config: ClassTooLong \u2014 1148 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 32 methods, 3 blocks, lines 52-2169. The bar is 400 significant lines; this is 748 over it, 2.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":"config/src/config.rs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd7d64c4aa9ca731644e26ac313e4319eb5425192518040ef9ed3241529035b3"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: overlay/copy.rs: FileTooLong \u2014 1424 significant 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 924 over it, 2.85\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":"kaku-gui/src/overlay/copy.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c73e8cd08bfd5a5c2f2a0f423c79cbe93ffeee34e811a79710476ee3244c9768"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TermWindow.mouse_event_impl: MethodTooLong \u2014 mouse_event_impl runs 281 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 181 over it, 2.81\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mouseevent.rs"},"region":{"startLine":863}}}],"partialFingerprints":{"codehealthFindingId/v1":"584c04c8c798de5b281427dad1a8a61eb5c4ddf4fa1d281bf84d5dc80f4f7a08"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Performer.osc_dispatch: MethodTooLong \u2014 osc_dispatch runs 278 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 178 over it, 2.78\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/performer.rs"},"region":{"startLine":852}}}],"partialFingerprints":{"codehealthFindingId/v1":"927f22c1403df9a71af2cad7c0903a65154f7986415790201a70e6bb806bebff"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: CommandDef.recreate_menubar: MethodTooLong \u2014 recreate_menubar runs 272 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 172 over it, 2.72\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/commands.rs"},"region":{"startLine":665}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2bb283d5884c4f6dcf8e476eade1b7e064fc498c51fbabb49fc95926eced00f"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TermWindow.dispatch_notif: MethodTooLong \u2014 dispatch_notif runs 272 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 172 over it, 2.72\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":2404}}}],"partialFingerprints":{"codehealthFindingId/v1":"576200288daa02c90c062f56d233be55765bd3e795010dd89ef1e58b4358671f"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TabBarState.new: MethodTooLong \u2014 new runs 267 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 167 over it, 2.67\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/tabbar.rs"},"region":{"startLine":1004}}}],"partialFingerprints":{"codehealthFindingId/v1":"6edab443f680b794f9bd10fc6530ebf4a73129d87b862b5b6dc5e6fc95dc67ec"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: TabInner: ClassTooLong \u2014 1037 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 46 methods, 2 blocks, lines 93-2565. The bar is 400 significant lines; this is 637 over it, 2.59\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tab.rs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"be71bfea44941f7224981be2a6cfabc2575fc6f8da5e10df0e57a0073676a7c3"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: wezterm_escape_parser::tmux_cc::parse_line: FunctionTooLong \u2014 wezterm_escape_parser::tmux_cc::parse_line runs 259 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 159 over it, 2.59\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/tmux_cc/mod.rs"},"region":{"startLine":219}}}],"partialFingerprints":{"codehealthFindingId/v1":"3cfcb72e81ef62dc40aaa393b858721ea651f221d96eedecc96a6a3ff3e958a8"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TerminfoRenderer.render_to: MethodTooLong \u2014 render_to runs 256 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 156 over it, 2.56\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/render/terminfo.rs"},"region":{"startLine":337}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d16175f2eb9d7ce4e14d3e15d91aaf7c38df8b3e122454b015cb53f8b741bdf"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: WindowView.key_common: MethodTooLong \u2014 key_common runs 256 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 156 over it, 2.56\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/window.rs"},"region":{"startLine":8708}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbd46b6fa0728718e3ff08a263970d77bdd985d6e58890b791f2e98feac32c71"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 1271 significant 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 771 over it, 2.54\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"738a95dcbc80e04c57fa39fcf68c30c463895ddb0d2137fbde7a4f2b4961dfa8"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kaku_gui::overlay::ai_chat::input::handle_key: FunctionTooLong \u2014 kaku_gui::overlay::ai_chat::input::handle_key runs 249 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 149 over it, 2.49\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/input.rs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"5830bf003d4b51d50360b56872e39ec02053ad9d245e31879d7f091029a434ea"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: TerminalState: TooManyFields \u2014 74 stored fields beside 110 methods. The bar is 30 stored fields; this is 44 over it, 2.47\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/mod.rs"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae7bf3c91e32e63284ad1f4e7104fc2af03ee0049215355cd42b74c3b28fbcdb"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TermWindow.paint_pass: MethodTooLong \u2014 paint_pass runs 245 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 145 over it, 2.45\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/paint.rs"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6123b1f51ef5fcf18cbe2aa1998955505b0b43899e9c8a935ab75c67bdb1a57"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: MuxPane.add_methods: MethodTooLong \u2014 add_methods runs 241 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 141 over it, 2.41\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lua-api-crates/mux/src/pane.rs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"8875c8e2821e7538d6f8ca8ef8a567294f4141b11edfd33e010871dc353bd141"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: WindowView.define_class: MethodTooLong \u2014 define_class runs 239 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 139 over it, 2.39\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/window.rs"},"region":{"startLine":9990}}}],"partialFingerprints":{"codehealthFindingId/v1":"769bd0bb4abf67c11566cb1f4872077df0832d47101c4cd7c61ef0130b5d9bc5"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: GuiWin.add_methods: MethodTooLong \u2014 add_methods runs 237 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 137 over it, 2.37\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/scripting/guiwin.rs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"15e36547ab3f8c0657b5c47a64be500e453e0bc40907a39fa24cccad7005c1bf"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TermWindow.compute_element: MethodTooLong \u2014 compute_element runs 236 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 136 over it, 2.36\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/box_model.rs"},"region":{"startLine":542}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae95c84a229028a50563a0595bceeae67d93d4eca181793892470d55ce5641c8"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Line: TooManyMethods \u2014 70 methods. The bar is 30 methods; this is 40 over it, 2.33\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-surface/src/line/line.rs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"3df4b9a4096a554749adfe29a8e28507eba4eae29d927ea56ec7d88581a42106"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: InputMap.new: MethodTooLong \u2014 new runs 229 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 129 over it, 2.29\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/inputmap.rs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"a20f1d43120cdc6f29adcfb56af4245d5211a4573db73417d218bcbdff6f55a9"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Mux: TooManyMethods \u2014 68 methods. The bar is 30 methods; this is 38 over it, 2.27\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/lib.rs"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"8391ada78207192837109c874051d473793fde5c1403e00374a1d6ae4f8a221b"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kaku_gui::cli_chat::run_repl: FunctionTooLong \u2014 kaku_gui::cli_chat::run_repl runs 224 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 124 over it, 2.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":"kaku-gui/src/cli_chat/mod.rs"},"region":{"startLine":545}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a3a49429b058a4aa82f9c46c9fa3e7ca26892b22842240ec9d2a23545625f02"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/osc.rs: FileTooLong \u2014 1116 significant 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 616 over it, 2.23\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/osc.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"77002634c5a088a2cf3e5d3b686f00b460b526d24cee306c4460dc6ed82ea8ab"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kaku_gui::ai_chat_engine::run_agent: FunctionTooLong \u2014 kaku_gui::ai_chat_engine::run_agent 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":"kaku-gui/src/ai_chat_engine/mod.rs"},"region":{"startLine":387}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f3b36887dded8fbc1c4a9a0b4e0b212cf35bbd6bc18ab6393c1db737ed624c4"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: config_tui/mod.rs: FileTooLong \u2014 1092 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 78% of them inside a single declaration: App (2 blocks, 361-1611). The bar is 500 significant lines; this is 592 over it, 2.18\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/config_tui/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"db2872a13f34b06646973bc20be4c436b45b02cf0d3a2012ab330a62d62ee337"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: KeyEvent.encode_kitty: MethodTooLong \u2014 encode_kitty runs 217 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 117 over it, 2.17\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-input-types/src/lib.rs"},"region":{"startLine":1660}}}],"partialFingerprints":{"codehealthFindingId/v1":"83fe72410e3d396ad1e2620da59d4868dfd436e1961f0858f7e5388888eadb57"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: WindowInner: ClassTooLong \u2014 862 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 54 methods, 3 blocks, lines 524-3794. The bar is 400 significant lines; this is 462 over it, 2.16\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/window.rs"},"region":{"startLine":524}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c418446a91123931277865734554b91856964f35bfbe0c66ce236ceb0dfd2d4"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: macos/app.rs: FileTooLong \u2014 1072 significant 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 59 free functions. The bar is 500 significant lines; this is 572 over it, 2.14\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/app.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc070cb39962aaecb1bb14a809d94e0cafd896af68c820aa3586199f0703ee5c"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: App: ClassTooLong \u2014 848 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 47 methods, 2 blocks, lines 361-1611. The bar is 400 significant lines; this is 448 over it, 2.12\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/config_tui/mod.rs"},"region":{"startLine":361}}}],"partialFingerprints":{"codehealthFindingId/v1":"96651f494da017391ba40e9bd9d7eda92ebd653278336238b53ad32eb0bed06c"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: WebGpuState.new_impl: MethodTooLong \u2014 new_impl runs 212 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 112 over it, 2.12\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/webgpu.rs"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed9830667acad90fdb02a2450bc658dd5a7b3e8b25b24a9b5ea993c2c91377d6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 1049 significant 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 73% of them inside a single declaration: BidiContext (2 blocks, 75-1729). The bar is 500 significant lines; this is 549 over it, 2.10\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/bidi/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"951cc0ac069bcf55a8cc85dd55d7be7890c2eba231bf74308c4ab6c6ef94013c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: App: TooManyMethods \u2014 62 methods. The bar is 30 methods; this is 32 over it, 2.07\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/state.rs"},"region":{"startLine":704}}}],"partialFingerprints":{"codehealthFindingId/v1":"c90320258bd74ef9695a21f70891bff8374a0aaa0eb4eef6518c1e2c630199dc"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: App.with_theme_choices: MethodTooLong \u2014 with_theme_choices runs 206 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 106 over it, 2.06\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/config_tui/mod.rs"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"110f004a5a03c2581217fdaa77fd1eeddc531db25ec85bc85f7aa1872889c2e9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/ftwrap.rs: FileTooLong \u2014 1026 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 66% of them inside a single declaration: Face (3 blocks, 98-1155). The bar is 500 significant lines; this is 526 over it, 2.05\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/ftwrap.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fdf8ebb667da8bab491014724e71b734ed6ae58f50c5ceddc865f6167f4ffc24"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/doctor.rs: FileTooLong \u2014 1024 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 39 free functions. The bar is 500 significant lines; this is 524 over it, 2.05\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/doctor.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ceccd47e5e24fdf3135b107a5d8aa5775c8186f222807bada768e799b0b680e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/tabbar.rs: FileTooLong \u2014 1015 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 43 free functions. The bar is 500 significant lines; this is 515 over it, 2.03\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/tabbar.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"279fa1c97a424cf164dd46438db7e90302e4951575eedecd67b65fef64ec0458"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TermWindow.apply_dimensions: MethodTooLong \u2014 apply_dimensions runs 203 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 103 over it, 2.03\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/resize.rs"},"region":{"startLine":481}}}],"partialFingerprints":{"codehealthFindingId/v1":"9452578a3c0e9ebb743f7fd5376547ff3f45046775a2de5e1eb4b87d6c36ab5a"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Performer: ClassTooLong \u2014 796 significant 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, 5 blocks, lines 36-1310. The bar is 400 significant lines; this is 396 over it, 1.99\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":"term/src/terminalstate/performer.rs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"8603b9eba4dff2b84de9f4d924872341bd579433a6555e47e7db558001fb5120"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/frontend.rs: FileTooLong \u2014 994 significant 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 494 over it, 1.99\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/frontend.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"759834ba8cd3eed3984ba8f8860a9024bcaa711ba91d4f423feb6d7e3def9049"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kaku_gui::overlay::copy::copy_key_table: FunctionTooLong \u2014 kaku_gui::overlay::copy::copy_key_table 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":"kaku-gui/src/overlay/copy.rs"},"region":{"startLine":1832}}}],"partialFingerprints":{"codehealthFindingId/v1":"2039d12432286400278f5d9f46d6e5e0ab7719f8be8f49fc9ed5e489f621d8ab"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: TabRenameModal: ClassTooLong \u2014 791 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 38 methods, 3 blocks, lines 30-1136. The bar is 400 significant lines; this is 391 over it, 1.98\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":"kaku-gui/src/termwindow/tab_rename.rs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5497164c5306cab5d43cae0182119d01efe2f82d841d9a4e1581f29ab1f2e9d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 982 significant 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 48 free functions. The bar is 500 significant lines; this is 482 over it, 1.96\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"09e963a59c10ed47d91f64f5eb9aec805203a05ae1530d8a2e17c6abcc31d57f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/client.rs: FileTooLong \u2014 971 significant 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 471 over it, 1.94\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/client.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1070abca9d84480f893982dee5c9831a198810f711876e5fd26bee75a20170a7"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: WindowView.did_resize: MethodTooLong \u2014 did_resize 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":"window/src/os/macos/window.rs"},"region":{"startLine":9419}}}],"partialFingerprints":{"codehealthFindingId/v1":"7957dc53d353a4fc00a8b2375fd1b3f6908a19500205e4f1cf30f9aac2edc891"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kaku_gui::overlay::ai_chat::render::render_chat: FunctionTooLong \u2014 kaku_gui::overlay::ai_chat::render::render_chat runs 193 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 93 over it, 1.93\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/render.rs"},"region":{"startLine":463}}}],"partialFingerprints":{"codehealthFindingId/v1":"336a309e1f0622e08203506aa0f24b408e0fc286f3ffea9276e6ca269f632b7f"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: BidiContext: ClassTooLong \u2014 761 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 43 methods, 2 blocks, lines 75-1729. The bar is 400 significant lines; this is 361 over it, 1.90\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/bidi/src/lib.rs"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"e504a3ccdc92a074acf885efb663a835930e5e2a4a2f84a33f3d7b0046e4285f"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: CommandDef.actions_for_palette_only: MethodTooLong \u2014 actions_for_palette_only runs 189 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 89 over it, 1.89\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/commands.rs"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d1ff528f78b7bbe7beea91be4460b7a82b375095e1a63a1530ed6feb62d627e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/glyphcache.rs: FileTooLong \u2014 940 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 440 over it, 1.88\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":"kaku-gui/src/glyphcache.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a652b7faf307dfe894ab815cf3f70cb04c8b3ee1f5c5e42e89b439471d09bd9d"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: CSIParser: ClassTooLong \u2014 750 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 24 methods, 3 blocks, lines 1702-2989. The bar is 400 significant lines; this is 350 over it, 1.88\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/csi.rs"},"region":{"startLine":1702}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6841c22ec7f26edfc8f0b2d3de081b3ba9744d911354c670bb40d54dbf537b8"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CopyRenderable: 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":"kaku-gui/src/overlay/copy.rs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f46dee25b1fda97f8fa087efe5418dc8c56f83c16d9d464665c0335b4782ae4"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: termwindow/box_model.rs: FileTooLong \u2014 929 significant 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 60% of them inside a single declaration: TermWindow (541-1271). The bar is 500 significant lines; this is 429 over it, 1.86\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":"kaku-gui/src/termwindow/box_model.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a3660d3b9614251d37756b4d6e4b5d1cc832aa2333cfec16efca51fc77f848f"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TermWindow.render_element_background: MethodTooLong \u2014 render_element_background runs 182 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 82 over it, 1.82\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/box_model.rs"},"region":{"startLine":1036}}}],"partialFingerprints":{"codehealthFindingId/v1":"4122e15c17807064978232aca8aa7488d3c72463b6d231fff669786787806d53"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/session_restore.rs: FileTooLong \u2014 909 significant 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 54 free functions. The bar is 500 significant lines; this is 409 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":"kaku-gui/src/session_restore.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b64a452621f5148c651b977a3dfe1e5e51cf03c182ce40fd451784fa867a4318"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: CommandPalette.compute: MethodTooLong \u2014 compute runs 181 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 81 over it, 1.81\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/palette.rs"},"region":{"startLine":543}}}],"partialFingerprints":{"codehealthFindingId/v1":"492abd4091e8c70a3f14ded912536e3546c8bba3ccc435a1b405123cb4c92384"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: termwindow/keyevent.rs: FileTooLong \u2014 901 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 84% of them inside a single declaration: TermWindow (231-1387). The bar is 500 significant lines; this is 401 over it, 1.80\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/keyevent.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0e251c281da7258b78380e75332c46a08ef992b807169c10a8ee27b9b7accf3"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: WindowInner: TooManyMethods \u2014 54 methods. The bar is 30 methods; this is 24 over it, 1.80\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":"window/src/os/macos/window.rs"},"region":{"startLine":524}}}],"partialFingerprints":{"codehealthFindingId/v1":"22ed39fc78c4a6b87b5ce411e2a5a9e6d6a543b850530acb87fb962bb97e4619"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: CommandPalette: ClassTooLong \u2014 714 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 29 methods, 3 blocks, lines 71-1257. The bar is 400 significant lines; this is 314 over it, 1.79\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":"kaku-gui/src/termwindow/palette.rs"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"85a27856edf2cab559e6a0534fd9519faf9bad1e612911c3f303b0b34bee66ee"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: termwindow/palette.rs: FileTooLong \u2014 888 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 80% of them inside a single declaration: CommandPalette (3 blocks, 71-1257). The bar is 500 significant lines; this is 388 over it, 1.78\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":"kaku-gui/src/termwindow/palette.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"570481c1534ed8558257093033a2f5dfa68df4a140ddf57dd0fd312d7a00be8a"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: mux::ssh::connect_ssh_session: FunctionTooLong \u2014 mux::ssh::connect_ssh_session runs 177 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 77 over it, 1.77\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/ssh.rs"},"region":{"startLine":430}}}],"partialFingerprints":{"codehealthFindingId/v1":"4cd7c07b6da7a52a740897be8f8cda9e0fdf0ed2cd043a3669cf4bcebbe9e818"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Mux: ClassTooLong \u2014 702 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 68 methods, 2 blocks, lines 151-1908. The bar is 400 significant lines; this is 302 over it, 1.76\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":"mux/src/lib.rs"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"49203ca24e5f2668148587dd08ffe1a8376b01bd1c1f9822f73b232de6d8a7f8"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: terminalstate/performer.rs: FileTooLong \u2014 875 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 91% of them inside a single declaration: Performer (5 blocks, 36-1310). The bar is 500 significant lines; this is 375 over it, 1.75\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/performer.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"beff11b5a49219d49100298925db55c9b7400e8a34e2e6b81ad55e2a34cae104"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TabRenameModal.compute: MethodTooLong \u2014 compute runs 175 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 75 over it, 1.75\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/tab_rename.rs"},"region":{"startLine":799}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bde45cffa5c70a5579abedcddd8b0bc98302bd7556e974c26965138c628dbcd"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: SessionInner: ClassTooLong \u2014 694 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 27 methods, 3 blocks, lines 41-1045. The bar is 400 significant lines; this is 294 over it, 1.74\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/sessioninner.rs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b1d87f331ff9c0dbad673a36b479b80c61622d29ea931409ec004a297b58873"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: HarfbuzzShaper.do_shape: MethodTooLong \u2014 do_shape runs 173 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 73 over it, 1.73\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/shaper/harfbuzz.rs"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"27fa2b9c1e72a163e3130b10b8a17d61bf0086205bb14936da25dee55b21bb71"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: termwindow/resize.rs: FileTooLong \u2014 860 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 64% of them inside a single declaration: TermWindow (190-1046). The bar is 500 significant lines; this is 360 over it, 1.72\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":"kaku-gui/src/termwindow/resize.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"40b45596b34571e36b9ba109089c29e27e20f6084eaabd7c214fda663c783381"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Line: ClassTooLong \u2014 682 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 70 methods, 5 blocks, lines 46-1257. The bar is 400 significant lines; this is 282 over it, 1.71\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-surface/src/line/line.rs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fabc6107d2b803930294410a0f7980cd17dc45cc6eb29b9e5357837d22f521f"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Window.new_window: MethodTooLong \u2014 new_window runs 170 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 70 over it, 1.70\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/window.rs"},"region":{"startLine":1763}}}],"partialFingerprints":{"codehealthFindingId/v1":"990f95469f53387c7aa233f471c6ea3fa2e9c8cea21df008fc094285ff86cbe4"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Face: ClassTooLong \u2014 678 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 30 methods, 3 blocks, lines 98-1155. The bar is 400 significant lines; this is 278 over it, 1.70\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/ftwrap.rs"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"de85ff2d15821533353b602a62f778ef27b5fbf2aa056a331cc4f86c8c21a9ee"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TermWindow.dispatch_window_event: MethodTooLong \u2014 dispatch_window_event runs 169 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 69 over it, 1.69\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":2046}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b41269238ebba9f67aa2173f4da9bb8f6e11e64c46257d728a18f4f94c41637"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TerminalState.assign_image_to_cells: MethodTooLong \u2014 assign_image_to_cells runs 169 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 69 over it, 1.69\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/image.rs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"3db1a727bcac753e03a39b3c9a766ae1522a515deac4526a9eb965778e9b9e6b"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: LayoutState.update_widget_constraint: MethodTooLong \u2014 update_widget_constraint runs 169 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 69 over it, 1.69\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/widgets/layout.rs"},"region":{"startLine":309}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d99219598445af0ed071e431690a550a985d1634fbd65e46720eb17c8ab62f9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 841 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 341 over it, 1.68\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"86b616f7f425844fbd9803c13e623b05fe27196a029c831b07a0b9fcd27d6369"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/tmux_commands.rs: FileTooLong \u2014 840 significant 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 340 over it, 1.68\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tmux_commands.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b91b533e09377fce664ef618f1a4b639aa8ca521fc36be9a64ef3c49d8148a51"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/main.rs: FileTooLong \u2014 834 significant 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 334 over it, 1.67\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-relay/src/main.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"83b8d7b2ea4231ab03d54dcb60173d141f3df68f7118c05b39750be122e0512c"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: wezterm_font::rasterizer::harfbuzz::record_to_cairo_surface: FunctionTooLong \u2014 wezterm_font::rasterizer::harfbuzz::record_to_cairo_surface runs 165 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 65 over it, 1.65\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/rasterizer/harfbuzz.rs"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae21e6728bc1f8b25d7aad915c46896b42cbdffdc7ad2302b959a07e5192b6da"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: SessionInner.dispatch_one_request: MethodTooLong \u2014 dispatch_one_request runs 165 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 65 over it, 1.65\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/sessioninner.rs"},"region":{"startLine":623}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbc6b9d9ca2b9243f16aafef32e21c574bf1f2b4ce90a5787b22ba8a8e7068c9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/localpane.rs: FileTooLong \u2014 824 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 76% of them inside a single declaration: LocalPane (4 blocks, 132-1295). The bar is 500 significant lines; this is 324 over it, 1.65\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":"mux/src/localpane.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e927e02417a769c7e97da12426415491a126548adcbe42ee8b897aeb908488b"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kaku_remote::web::handle_input: FunctionTooLong \u2014 kaku_remote::web::handle_input runs 164 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 64 over it, 1.64\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/src/web.rs"},"region":{"startLine":2484}}}],"partialFingerprints":{"codehealthFindingId/v1":"00441d321878da1a8d2ca51a9d7aed8227f1b8de54f6b9399030f0fd82d4a291"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Screen: ClassTooLong \u2014 655 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 39 methods, 2 blocks, lines 15-1217. The bar is 400 significant lines; this is 255 over it, 1.64\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":"term/src/screen.rs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"79c52bd605f9b7ec64f30420a9e768e5730e896096f089619abc2c62df9642da"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: termwindow/tab_rename.rs: FileTooLong \u2014 816 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 97% of them inside a single declaration: TabRenameModal (3 blocks, 30-1136). The bar is 500 significant lines; this is 316 over it, 1.63\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/tab_rename.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7cd3f3b64fe060dc222dc593422ed9b44a4ac0c45ba2bef9b7b03cd288cec37e"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: CopyRenderable: ClassTooLong \u2014 652 significant 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, 2 blocks, lines 63-1192. The bar is 400 significant lines; this is 252 over it, 1.63\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/copy.rs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7de1cc0a3a9c0f8911aa926d91a411316e28b0ddfa1e8d111f6e6040464380e"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: CommandDef: ClassTooLong \u2014 651 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 8 methods, 3 blocks, lines 58-1063. The bar is 400 significant lines; this is 251 over it, 1.63\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/commands.rs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"68171ed4ee71941fca872fbb6a82fa4e0585154549ba2fcdb3951307ac9a8395"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: render/mod.rs: FileTooLong \u2014 812 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 68% of them inside a single declaration: TermWindow (350-1104). The bar is 500 significant lines; this is 312 over it, 1.62\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":"kaku-gui/src/termwindow/render/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d474ab0bf654601bffdf4352b494c67f5fbef32fecaf98e225be94aa097201c8"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TerminalState.perform_csi_cursor: MethodTooLong \u2014 perform_csi_cursor runs 161 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 61 over it, 1.61\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/mod.rs"},"region":{"startLine":2562}}}],"partialFingerprints":{"codehealthFindingId/v1":"04478b93e21c446e2467f150f1672980d6db66a5d7b5bb27143a39cb5c6457d6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/sessionhandler.rs: FileTooLong \u2014 801 significant 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 73% of them inside a single declaration: SessionHandler (3 blocks, 198-1021). The bar is 500 significant lines; this is 301 over it, 1.60\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-mux-server-impl/src/sessionhandler.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d5fe922a616f26197cf8a7e86c8218e2d23a2490f720e73b98cd93515f58e74"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Walker.walk_paint: MethodTooLong \u2014 walk_paint runs 160 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 60 over it, 1.60\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/rasterizer/freetype.rs"},"region":{"startLine":518}}}],"partialFingerprints":{"codehealthFindingId/v1":"306e7add75072066869dbaf7e165708aa6e54ede8004f7cb81fad41620107e74"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: App.drain_tokens: MethodTooLong \u2014 drain_tokens 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":"kaku-gui/src/overlay/ai_chat/state.rs"},"region":{"startLine":1823}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c3f3b350d07e30a43dc46a7a1a7074ad1cf8e4ed08e6aa82df30a1a26754459"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kaku::ai_config::tui::save_field: FunctionTooLong \u2014 kaku::ai_config::tui::save_field 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":"kaku/src/ai_config/tui.rs"},"region":{"startLine":2757}}}],"partialFingerprints":{"codehealthFindingId/v1":"b578dd12eacf774976d79e3e0e61e8d7be13f88d2d2f96aab706b8cb0bc0a42f"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kaku::ai_config::tui::providers::assistant::save_kaku_assistant_field_to_path: FunctionTooLong \u2014 kaku::ai_config::tui::providers::assistant::save_kaku_assistant_field_to_path runs 159 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 59 over it, 1.59\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui/providers/assistant.rs"},"region":{"startLine":438}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5f5fcc261c1b6763623090e3819add683a724dd5c5e1fa5bd3150f052841aac"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/hbwrap.rs: FileTooLong \u2014 794 significant 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 294 over it, 1.59\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/hbwrap.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"787db8fbf22d34a89a4028f7b1c8783f39d2ca8e5d6cd7ab5d3f8156b9c5a900"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TermWindow.compute_cell_fg_bg: MethodTooLong \u2014 compute_cell_fg_bg runs 158 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 58 over it, 1.58\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/mod.rs"},"region":{"startLine":700}}}],"partialFingerprints":{"codehealthFindingId/v1":"c19ccd27d19b4a309bcf030d6e08cec22c4766eeaf2391c91310f8762ad78033"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/input.rs: FileTooLong \u2014 788 significant 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 288 over it, 1.58\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/input.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbc3414d35fc25cc7c5ff0b0810a8de51e53a740a20582b1b7da54c5522011ae"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: KeyCode.to_phys: MethodTooLong \u2014 to_phys runs 157 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 57 over it, 1.57\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-input-types/src/lib.rs"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"a417ddf210a066406628d2d95037235c327f1ec02925c316938a2f888929b5ee"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: App: TooManyFields \u2014 47 stored fields beside 62 methods. The bar is 30 stored fields; this is 17 over it, 1.57\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/state.rs"},"region":{"startLine":704}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b0e7e7eaa5970e0bb509b3b9b0e8ae4ff7cd42f1d9479b120e6fa0a76abec77"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: App: TooManyMethods \u2014 47 methods. The bar is 30 methods; this is 17 over it, 1.57\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/config_tui/mod.rs"},"region":{"startLine":361}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7dac5360909969c48888d8fb914e22ed79abc9afa38b6dc9fe3a7d239055e32"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Sgr.fmt: MethodTooLong \u2014 fmt runs 156 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 56 over it, 1.56\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/csi.rs"},"region":{"startLine":1507}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c0ac1c16ff54e1eb07c5e545b7973b1fda7880b1d1efbd3a718c8a7f6bebf20"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: LocalPane: ClassTooLong \u2014 623 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 5 methods, 4 blocks, lines 132-1295. The bar is 400 significant lines; this is 223 over it, 1.56\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":"mux/src/localpane.rs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"da7d54f9bad7142320be14a0210e4bd51bfd700a2e8e97b8a2588d0a25cef4bb"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 775 significant 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 275 over it, 1.55\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/codec/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ffcc602b18cd9b8105d29b44c30dbe7b932baf443fc876fff3eb50bde916b45"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kaku_gui::ai_tools::search::exec_grep_search: FunctionTooLong \u2014 kaku_gui::ai_tools::search::exec_grep_search 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":"kaku-gui/src/ai_tools/search.rs"},"region":{"startLine":734}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fde0ab5eb8935e0cc29b0205249f298202b98413de1a09e415feab021cc0206"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/sessioninner.rs: FileTooLong \u2014 768 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 90% of them inside a single declaration: SessionInner (3 blocks, 41-1045). The bar is 500 significant lines; this is 268 over it, 1.54\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/sessioninner.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7231110392a696e2e323c88c01eff7287dc5889dcaa9dbd18983b554aaaf9445"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TabInner: TooManyMethods \u2014 46 methods. The bar is 30 methods; this is 16 over it, 1.53\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tab.rs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a5b4707e2061bf171046da1f9688536794b02ecf4d2c59e23881361a9df158b"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kaku_gui::ai_client::responses::parse_responses_sse: FunctionTooLong \u2014 kaku_gui::ai_client::responses::parse_responses_sse 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":"kaku-gui/src/ai_client/responses.rs"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5a44799d388514b450af65d9866552517efdd0f982726f9b408848c5268e07a"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: config::lua::make_lua_context: FunctionTooLong \u2014 config::lua::make_lua_context runs 151 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 51 over it, 1.51\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/lua.rs"},"region":{"startLine":247}}}],"partialFingerprints":{"codehealthFindingId/v1":"d842e701898ccb67dd0012f46f2e651d4b209357855838eab1e511e2fb69c74e"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kaku_gui::overlay::confirm::run_confirmation_impl: FunctionTooLong \u2014 kaku_gui::overlay::confirm::run_confirmation_impl runs 150 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 50 over it, 1.50\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/confirm.rs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"6abb238daf4c9dbcc642357530779cacd8ae3b4ac7c72322dba2a9d0ab7ed2f7"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: LineEditor.resolve_action: MethodTooLong \u2014 resolve_action runs 150 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 50 over it, 1.50\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/lineedit/mod.rs"},"region":{"startLine":335}}}],"partialFingerprints":{"codehealthFindingId/v1":"2deec417d6c60b3dfad5ae68e109b5d417fb47231d27bc4dbebd9c2e1234a7d5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: tmux_cc/mod.rs: FileTooLong \u2014 742 significant 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 242 over it, 1.48\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/tmux_cc/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"452ad25f3822c9733eb6e97a25f7e9b460ace7d3f731277f213e6509f32aebc6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/ssh.rs: FileTooLong \u2014 736 significant 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 236 over it, 1.47\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":"mux/src/ssh.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e88d512192d152437c888cefdc3ec56aae4fe73f14dcd28f03ee6939e76f380"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Tab: TooManyMethods \u2014 44 methods. The bar is 30 methods; this is 14 over it, 1.47\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tab.rs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"f871d998063d19fb8f3cdb8bfef6eeb9a6742384884e1f89c08a9e0dbd63c688"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/main.rs: FileTooLong \u2014 731 significant 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 231 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":"kaku-gui/src/main.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f634ef54a2723a3bbe60f7c656528115cdc2d94bd47996498d56c0a541c63665"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: SessionHandler: ClassTooLong \u2014 584 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 4 methods, 3 blocks, lines 198-1021. The bar is 400 significant lines; this is 184 over it, 1.46\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-mux-server-impl/src/sessionhandler.rs"},"region":{"startLine":198}}}],"partialFingerprints":{"codehealthFindingId/v1":"f42670ee1b564e042f6bb0d24b35aa5a511a92ee21dcbdcb8ccd002040d4c0fc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/share.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), declaring 31 free functions. 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":"crates/kaku-remote/src/share.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9a797238408d8a83d98475b5d46f7b9a129cb39270d6abb21b2a932058d3cd4"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ClientDomain.process_pane_list: MethodTooLong \u2014 process_pane_list 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":"crates/wezterm-client/src/domain.rs"},"region":{"startLine":504}}}],"partialFingerprints":{"codehealthFindingId/v1":"00be56b8950a421176adcf4ea913574290a55f984e9db1a43ddf9d11e750548f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: ai_chat_engine/mod.rs: FileTooLong \u2014 728 significant 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 228 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":"kaku-gui/src/ai_chat_engine/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"70cac092c724248253a5aaac49dde0748f15798b147b5bf9c7f55331aa1f3bf5"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TerminalState.kitty_frame_transmit: MethodTooLong \u2014 kitty_frame_transmit runs 145 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 45 over it, 1.45\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/kitty.rs"},"region":{"startLine":556}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6d835109dc097e34990d1f619b08b625123899973eb9ab6856d598905ef12be"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: GuiFrontEnd: ClassTooLong \u2014 579 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 27 methods, 3 blocks, lines 94-1506. The bar is 400 significant lines; this is 179 over it, 1.45\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/frontend.rs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"496003e30be6fdbba05b5d1574eab1eaf5e17f5ba575b2bcdcc70c70dbb88f58"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: terminalstate/kitty.rs: FileTooLong \u2014 723 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 88% of them inside a single declaration: TerminalState (72-944). The bar is 500 significant lines; this is 223 over it, 1.45\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/kitty.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"94d1e558864180a11929e17103d72008f8a8a65fc1bb0905c83bd95a637f825c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: line/line.rs: FileTooLong \u2014 721 significant 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 95% of them inside a single declaration: Line (5 blocks, 46-1257). The bar is 500 significant lines; this is 221 over it, 1.44\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-surface/src/line/line.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9156fdee3ea29decdc3cfe4e20ba2f448f141496eab3c1533abcc38a110b54a1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: BidiContext: TooManyMethods \u2014 43 methods. The bar is 30 methods; this is 13 over it, 1.43\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/bidi/src/lib.rs"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"63e2c17aee9e32d0a358357a3ecf829720f89c691e362599be716457eefc0500"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: FieldInfo.field_from_dynamic: MethodTooLong \u2014 field_from_dynamic runs 141 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 41 over it, 1.41\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-dynamic/derive/src/attr.rs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"e927f6d1c44ef135d5cbbef10e3aa86dbe84f9a97a9e85db37543d9b1988a566"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: ai_chat/render.rs: FileTooLong \u2014 702 significant 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 202 over it, 1.40\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":"kaku-gui/src/overlay/ai_chat/render.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"344c472ffbb3c0fb14542df0713a6e9362acae49dac7a212e1d22f6a2068e2f1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: App: 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":"kaku/src/ai_config/tui.rs"},"region":{"startLine":1954}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f70a2b28d9a7a5b6b9478aebb43cfa4ea675af745eb637e1afb1eba89576b8b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/domain.rs: FileTooLong \u2014 700 significant 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 62% of them inside a single declaration: ClientDomain (3 blocks, 253-1010). The bar is 500 significant lines; this is 200 over it, 1.40\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/domain.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7717a7eed4ea9fcca9b7a0815fad5ca914816c4fb9d18cc3c44109105560751"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: GuiFrontEnd.try_new: MethodTooLong \u2014 try_new runs 140 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 40 over it, 1.40\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/frontend.rs"},"region":{"startLine":647}}}],"partialFingerprints":{"codehealthFindingId/v1":"1942d368815eb8e6c9e0349446c8fc4953a28ee912306bf8e30a43ab2626ac91"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: ai_tools/search.rs: FileTooLong \u2014 698 significant 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 198 over it, 1.40\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":"kaku-gui/src/ai_tools/search.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f772e3e3861fd2db2a72066afe7cdac6d5e69cba89ed5db105dab2438c554ee9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/main.rs: FileTooLong \u2014 691 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 191 over it, 1.38\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/main.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"50b3f1301a4bd2f6099ab0215c919dfdb8713cd4791113c7bfb67793e6dc679b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/apc.rs: FileTooLong \u2014 690 significant 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 190 over it, 1.38\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/apc.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0be76a2fb6f15db1c3a8da0642aadcaa29e72603ce75866df23fc147bc97888b"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: GlyphCache.load_glyph: MethodTooLong \u2014 load_glyph runs 138 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 38 over it, 1.38\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/glyphcache.rs"},"region":{"startLine":702}}}],"partialFingerprints":{"codehealthFindingId/v1":"acd34b74e18c3bd98d045d1d11e36a9a1e4aceb5e16ed9d065a70c1d39e73bcd"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kaku::doctor::build_shell_integration_group: FunctionTooLong \u2014 kaku::doctor::build_shell_integration_group runs 138 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 38 over it, 1.38\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/doctor.rs"},"region":{"startLine":448}}}],"partialFingerprints":{"codehealthFindingId/v1":"d370c48fabb344bb5a391cd30c094849bdb3fda6a41153055d3ad3d7fee0cc0e"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: GlyphCache: ClassTooLong \u2014 549 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 14 methods, 4 blocks, lines 560-1403. The bar is 400 significant lines; this is 149 over it, 1.37\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/glyphcache.rs"},"region":{"startLine":560}}}],"partialFingerprints":{"codehealthFindingId/v1":"fac0efd9a4c63d528c3f242564b12bb40ec22d5a4cdd1f46fa4963e57c44417a"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TermWindow.paint_window_borders: MethodTooLong \u2014 paint_window_borders runs 136 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 36 over it, 1.36\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/borders.rs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"cfb348569e8c6e68bd40cf6f5592099a75433bfaa890d6bebca69456c4735414"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TermWindow.build_line_element_shape: MethodTooLong \u2014 build_line_element_shape runs 136 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 36 over it, 1.36\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/screen_line.rs"},"region":{"startLine":817}}}],"partialFingerprints":{"codehealthFindingId/v1":"50d62c326fcb139da5723f34c752bfdee71ed14f50bdd7eae1fa9409b5380018"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TmuxDomainState.sync_window_state: MethodTooLong \u2014 sync_window_state runs 136 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 36 over it, 1.36\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tmux_commands.rs"},"region":{"startLine":373}}}],"partialFingerprints":{"codehealthFindingId/v1":"1dfe3a64f6d55c7f92376184c5d292e01f1b9968a623562bc1d3afe6816b849d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 677 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 177 over it, 1.35\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/color-types/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"38899295291d1cf8467544fc829ff390500d3f8c001f281bfc3c64fc629640ae"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/screen.rs: FileTooLong \u2014 677 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 97% of them inside a single declaration: Screen (2 blocks, 15-1217). The bar is 500 significant lines; this is 177 over it, 1.35\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/screen.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"04230493d36e8a2fc4dceab07f2c98ca4689c44a3925ee7284c70a3dd725ad7b"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: CSIParser.parse_next: MethodTooLong \u2014 parse_next runs 134 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 34 over it, 1.34\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/csi.rs"},"region":{"startLine":1838}}}],"partialFingerprints":{"codehealthFindingId/v1":"23949f17da410913d5fd842b5d652e9fee5cfd6c491c1c1c8d8766d5d0c18a08"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: wezterm_font::rasterizer::colr::apply_sweep_gradient_patches: FunctionTooLong \u2014 wezterm_font::rasterizer::colr::apply_sweep_gradient_patches runs 134 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 34 over it, 1.34\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/rasterizer/colr.rs"},"region":{"startLine":298}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f8072a7189b197da35de4d712f0916911fa27515ad60304e4eb0d0bfd7a5834"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: render/screen_line.rs: FileTooLong \u2014 667 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 89% of them inside a single declaration: TermWindow (103-1004). The bar is 500 significant lines; this is 167 over it, 1.33\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/screen_line.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"37f04b58fa44ff7b2c387c5959b202b7cc27145d259aa0fb60b9700db57d724b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/update.rs: FileTooLong \u2014 666 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 37 free functions. The bar is 500 significant lines; this is 166 over it, 1.33\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/update.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"78dc3fcc0e8c0f7f0c6770f4a3220a0e40ab17d4140d736ae2ccd635b445310f"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: GlyphCache.line_sprite: MethodTooLong \u2014 line_sprite runs 133 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 33 over it, 1.33\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/glyphcache.rs"},"region":{"startLine":1184}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb4db43b1d14bb3069099f01d3f84ab4cf5397dcb86bf22c03df111247c6bf55"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kaku_gui::overlay::ai_chat::ai_chat_overlay: FunctionTooLong \u2014 kaku_gui::overlay::ai_chat::ai_chat_overlay runs 133 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 33 over it, 1.33\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/mod.rs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"69c0cb9e618ef30422bce0849dd28f18e52586725f5c4d3ff1fa305ce39c2fd3"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: App.new: MethodTooLong \u2014 new runs 133 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 33 over it, 1.33\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/state.rs"},"region":{"startLine":807}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc5935600819eaaea4146879995fd3404ba7b867fdfaa1e0300e2539c4ebce5c"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: CharSelector.compute: MethodTooLong \u2014 compute 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":"kaku-gui/src/termwindow/charselect.rs"},"region":{"startLine":379}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6392fb036e8a126dde513dd2cf83621061b5619303f6b9d902f625c714ff87d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: rasterizer/freetype.rs: FileTooLong \u2014 657 significant 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 157 over it, 1.31\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/rasterizer/freetype.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2bf1c8ab203a38160edc516f58ace1adee7a3ca0b93cb15e36062d8d78b4741"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: ai_client/mod.rs: FileTooLong \u2014 657 significant 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 74% of them inside a single declaration: AiClient (2 blocks, 171-849). The bar is 500 significant lines; this is 157 over it, 1.31\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_client/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"43c97c3a7cb6bd59d91387410c6173b75aff2cbd7811a161102aa4e41df5133e"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: PhysKeyCode.for_each_code: MethodTooLong \u2014 for_each_code runs 131 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 31 over it, 1.31\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-input-types/src/lib.rs"},"region":{"startLine":1018}}}],"partialFingerprints":{"codehealthFindingId/v1":"39c8d7e6fc7bdaff0009d697e5f65c35aae8386d4ec2bd51b28d95fc8d0006ac"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kaku_gui::ai_tools::search::exec_symbol_search: FunctionTooLong \u2014 kaku_gui::ai_tools::search::exec_symbol_search 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":"kaku-gui/src/ai_tools/search.rs"},"region":{"startLine":557}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9473d17b2cd3e8d34607a58d48435d94f2efd7a7bc235892be338d1ae159ec1"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Value.add_methods: MethodTooLong \u2014 add_methods 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":"lua-api-crates/share-data/src/lib.rs"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd98a9018f7d185cd25a466874649054ad3a804069da522c3db038f779e2e1fd"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Screen: TooManyMethods \u2014 39 methods. The bar is 30 methods; this is 9 over it, 1.30\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/screen.rs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"7723f2b1e6207a76b6c31f44ee9f1e40695a889f6ea56e878b9a33ebf0d463f8"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: App.submit: MethodTooLong \u2014 submit 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":"kaku-gui/src/overlay/ai_chat/state.rs"},"region":{"startLine":1594}}}],"partialFingerprints":{"codehealthFindingId/v1":"9098ceccf997e78601155112f56362870dc972a5563082b51b498733fb91e977"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: wezterm_dynamic_derive::fromdynamic::derive_enum: FunctionTooLong \u2014 wezterm_dynamic_derive::fromdynamic::derive_enum runs 129 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 29 over it, 1.29\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-dynamic/derive/src/fromdynamic.rs"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"f778060615604c6fcf264aa1caf25687f16d284b39670ebd8bad8c091269f50b"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kaku::update::imp::run: FunctionTooLong \u2014 kaku::update::imp::run 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":"kaku/src/update.rs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f81247a594a180e0d94b8b689b28a6762190aabb2b016f33b7616272383bca8"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: LocalPane.search: MethodTooLong \u2014 search 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":"mux/src/localpane.rs"},"region":{"startLine":768}}}],"partialFingerprints":{"codehealthFindingId/v1":"12b5a76112d8ee67f4cc18f6407618a08e71863863f96bb502156bdb362a0399"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: App: ClassTooLong \u2014 513 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 42 methods, 2 blocks, lines 1954-2738. The bar is 400 significant lines; this is 113 over it, 1.28\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":"kaku/src/ai_config/tui.rs"},"region":{"startLine":1954}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f4e3b4194102f81d44b8a753dcceffd4dfe25fb9092d0268c09d4f5da048598"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: wezterm_mux_server_impl::dispatch::process_async: FunctionTooLong \u2014 wezterm_mux_server_impl::dispatch::process_async runs 127 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 27 over it, 1.27\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-mux-server-impl/src/dispatch.rs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1927e4eafaa7f211040c9ba6100bd34e599bc042e4e95427d0e5813927dd0ab"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: mux::parse_buffered_data: FunctionTooLong \u2014 mux::parse_buffered_data 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":"mux/src/lib.rs"},"region":{"startLine":336}}}],"partialFingerprints":{"codehealthFindingId/v1":"1558a1ecb496837d47c582ce09941d87edab5b333db91579eeee26ccd62f8c39"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TabRenameModal: TooManyMethods \u2014 38 methods. The bar is 30 methods; this is 8 over it, 1.27\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/tab_rename.rs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"6960944b98ccc8002756173752acb5bcdcb5ef745eb476bd0a460be98272c83b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: cli_chat/mod.rs: FileTooLong \u2014 630 significant 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 130 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":"kaku-gui/src/cli_chat/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1cac0af92c4a5e38f86ae4f1acd7ff887dd9f339e5e8bd4141354ab1f5e83aaa"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: render/pane.rs: FileTooLong \u2014 625 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 96% of them inside a single declaration: TermWindow (27-891). The bar is 500 significant lines; this is 125 over it, 1.25\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":"kaku-gui/src/termwindow/render/pane.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"18b1a611c5743e3342fdbbde4546c257d4d2cb000ff437a8b62843db63982c73"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TermWindow.key_event_impl: MethodTooLong \u2014 key_event_impl runs 125 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 25 over it, 1.25\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/keyevent.rs"},"region":{"startLine":1061}}}],"partialFingerprints":{"codehealthFindingId/v1":"660932fbcffc34e0ca53493aae246edf0a79a0c18ae7e1f7d2c36bee5a2850d7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: ai_client/responses.rs: FileTooLong \u2014 621 significant 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 121 over it, 1.24\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_client/responses.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6bc98924b332ed0c1422fbcde913c8e39ea604c15074ecef4b9aed657a54cdd"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TermWindow.show_launcher_impl: MethodTooLong \u2014 show_launcher_impl 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":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":4440}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd1b49e3f3f90ea02992664c0c9357f22ce478b9338d6b53552a5070fe1a0e8f"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TermWindow.paint_tab_bar: MethodTooLong \u2014 paint_tab_bar 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":"kaku-gui/src/termwindow/render/tab_bar.rs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"60e39abed8ff1fcbc80a1426fe844ff7627018142c342fe0f8bd8617638a287c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/parser.rs: FileTooLong \u2014 617 significant 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 71% of them inside a single declaration: ParsedFont (7 blocks, 24-814). The bar is 500 significant lines; this is 117 over it, 1.23\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/parser.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e3ba877899358da8fcb6697d133f2757555941071d4076547bead5ee668b1f7"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kaku::ai_config::tui::extract_openclaw_fields: FunctionTooLong \u2014 kaku::ai_config::tui::extract_openclaw_fields 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":"kaku/src/ai_config/tui.rs"},"region":{"startLine":1757}}}],"partialFingerprints":{"codehealthFindingId/v1":"b99755efea14b8e5a4e4c53599b678fe250b7712b4ef99a09905d99a5f4fbe87"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: AiClient: ClassTooLong \u2014 487 significant 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 171-849. The bar is 400 significant lines; this is 87 over it, 1.22\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_client/mod.rs"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"871b7e9d0fb3ab04c37289605db003c10bbb574fabf0e941979f84d7064d095c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/keyassignment.rs: FileTooLong \u2014 606 significant 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 106 over it, 1.21\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/keyassignment.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"121bbc6346cb2f6a22abe1eaf10524fc551cde16d32f162226950edfb9d91faf"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kaku_remote::web::handle_upload: FunctionTooLong \u2014 kaku_remote::web::handle_upload runs 121 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 21 over it, 1.21\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/src/web.rs"},"region":{"startLine":1241}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b520e9624709ff824805ba7360d43ec7496b4187f8a18d0f51e93898b688d17"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kaku_gui::ai_tools::search::fallback_regex_search: FunctionTooLong \u2014 kaku_gui::ai_tools::search::fallback_regex_search runs 121 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 21 over it, 1.21\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_tools/search.rs"},"region":{"startLine":269}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d780244bb9232d04848af6b6d27ffc5de5c9831ba4e6cf69ab166d3631f3304"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TermWindow.render_background: MethodTooLong \u2014 render_background runs 121 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 21 over it, 1.21\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/background.rs"},"region":{"startLine":428}}}],"partialFingerprints":{"codehealthFindingId/v1":"e990edb9cb55b1bad33736ca6f2b4d42eb57fa63dd46db873555e3184d124759"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kaku::ai_config::tui::ui::render_tools: FunctionTooLong \u2014 kaku::ai_config::tui::ui::render_tools runs 121 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 21 over it, 1.21\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui/ui.rs"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"820ce9b5a9121a533a2e75dbc408abf170d5b9ab29ef65792907217cabd6281b"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kaku::select_main_menu_command: FunctionTooLong \u2014 kaku::select_main_menu_command runs 121 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 21 over it, 1.21\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/main.rs"},"region":{"startLine":786}}}],"partialFingerprints":{"codehealthFindingId/v1":"f963f85d789c850164a1c350dbf38aa7b0916fe3826a525e2d40fce24b1e403a"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TerminalState.kitty_frame_compose: MethodTooLong \u2014 kitty_frame_compose runs 121 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 21 over it, 1.21\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/kitty.rs"},"region":{"startLine":403}}}],"partialFingerprints":{"codehealthFindingId/v1":"51ee1fb0728663ab60547283adc57d716a2d43f6884659d50dd5402fe2d79978"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kaku_gui::ai_tools::project::exec_project_summary: FunctionTooLong \u2014 kaku_gui::ai_tools::project::exec_project_summary runs 120 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 20 over it, 1.20\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_tools/project.rs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d8f64236e03f85fa842d46cf0429d121ca09797d3606382bd4e8c389bb844b1"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: mux_lua::register: FunctionTooLong \u2014 mux_lua::register runs 120 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 20 over it, 1.20\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lua-api-crates/mux/src/lib.rs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"d55e83be6e853a0020367475ec6220d7b582d80f39a5f0a1c11ae1ae7bd08b54"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: CSIParser.parse_sgr_color: MethodTooLong \u2014 parse_sgr_color runs 119 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 19 over it, 1.19\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/csi.rs"},"region":{"startLine":2438}}}],"partialFingerprints":{"codehealthFindingId/v1":"47c66ae1f257a4905b6a7502df739fb395798d1a2d017cb5d1a855c9d5069342"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: PhysKeyCode.to_key_code: MethodTooLong \u2014 to_key_code runs 119 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 19 over it, 1.19\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-input-types/src/lib.rs"},"region":{"startLine":896}}}],"partialFingerprints":{"codehealthFindingId/v1":"149aac57f9efd9d3b1d504776af8eca20b8715b5c612ad477e004d9360f63599"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TerminfoRenderer.flush_pending_attr: MethodTooLong \u2014 flush_pending_attr runs 119 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 19 over it, 1.19\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/render/terminfo.rs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"09258bf960087f95d20476350c29c9b451f21418124d42fccbe37323dfd70c13"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lua.rs: FileTooLong \u2014 591 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 91 over it, 1.18\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/lua.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea27f6787f9afb245903806d49dc423a0d129e917a3b4d14b66d7e4e6b44a185"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: CSIParser.sgr: MethodTooLong \u2014 sgr 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":"crates/wezterm-escape-parser/src/csi.rs"},"region":{"startLine":2686}}}],"partialFingerprints":{"codehealthFindingId/v1":"be4ceaad749c557bf9705ab249298046b65129f53b2ccc7b249207a711440666"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: LauncherState.build_entries: MethodTooLong \u2014 build_entries 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":"kaku-gui/src/overlay/launcher.rs"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"234de6b7c478f825ce2d9aba3c43977572be1e2c4ec0d9db419bbc98d8bfea2e"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TermWindow.resize: MethodTooLong \u2014 resize 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":"kaku-gui/src/termwindow/resize.rs"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"82ae848c34af9028eeb4c1374da521ecf59161d63255844866efa21506b7030c"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Performer.esc_dispatch: MethodTooLong \u2014 esc_dispatch 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":"term/src/terminalstate/performer.rs"},"region":{"startLine":693}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b26b27c86d3e79cf90ed3028ab17735c52c16d62817fd81b2ff85a713692f19"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: overlay/launcher.rs: FileTooLong \u2014 587 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 72% of them inside a single declaration: LauncherState (2 blocks, 163-773). The bar is 500 significant lines; this is 87 over it, 1.17\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":"kaku-gui/src/overlay/launcher.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"360eb03b3678198205caf94a52f2355ec3a8305294ee2eca800aabffa9d4533c"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: LineEditor: ClassTooLong \u2014 469 significant 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 72-857. The bar is 400 significant lines; this is 69 over it, 1.17\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/lineedit/mod.rs"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3a60707d5d684a45ffcdbd758e979289c960b9160392f29843921056b986fd1"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: config::minimal_user_config_template: FunctionTooLong \u2014 config::minimal_user_config_template 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":"config/src/lib.rs"},"region":{"startLine":766}}}],"partialFingerprints":{"codehealthFindingId/v1":"d83f4a30bf44ca225d1ba2a83772f7c1b50354bef9879bd249c2a9be96255462"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TermWindow.paint_split: MethodTooLong \u2014 paint_split 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":"kaku-gui/src/termwindow/render/split.rs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c2499b9f099d815ac79e57e2c6c2f3bcff5e51290a102a71e69a9fb1bb45d49"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: window::os::macos::keycodes::build_map: FunctionTooLong \u2014 window::os::macos::keycodes::build_map 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":"window/src/os/macos/keycodes.rs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"77e03b221ccab34bcb9ea8bfc05f3ed8077598d4ef87d430b0ec28971f0a4e04"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Surface: TooManyMethods \u2014 35 methods. The bar is 30 methods; this is 5 over it, 1.17\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-surface/src/lib.rs"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"f63aa6cbe4b4b5624c27e7c05a058ac43a480cde82dead6fbe8713ec066d8b91"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kaku::ai_config::tui::run_loop: FunctionTooLong \u2014 kaku::ai_config::tui::run_loop runs 116 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 16 over it, 1.16\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui.rs"},"region":{"startLine":3115}}}],"partialFingerprints":{"codehealthFindingId/v1":"743ee322200acc223fc90848ff9bd9906790eed45f82608aea1cf40bb39daf40"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kaku_gui::overlay::ai_chat::state::emit_assistant_markdown: FunctionTooLong \u2014 kaku_gui::overlay::ai_chat::state::emit_assistant_markdown runs 115 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 15 over it, 1.15\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/state.rs"},"region":{"startLine":476}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebbcfbff793aef8414cd8051420e2805ec2b73fc3fac27e585d62c294af31127"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kaku_gui::remote_tabs::perform: FunctionTooLong \u2014 kaku_gui::remote_tabs::perform runs 115 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 15 over it, 1.15\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/remote_tabs.rs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"cdee88c9bfe625a91eb457a277740e84e1971295aafbab6f399faed9590813cf"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: CopyOverlay: ClassTooLong \u2014 459 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 4 methods, 3 blocks, lines 44-1735. The bar is 400 significant lines; this is 59 over it, 1.15\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":"kaku-gui/src/overlay/copy.rs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"19f0463282cbcd392a227874a82d03080510773d1d347501ecd1d73ed44e53c4"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/update.rs: FileTooLong \u2014 572 significant 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 72 over it, 1.14\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/update.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"acb1b53205b0ca1a08ce7286815c5e42fbbb0478e2f46fce7c7ad613b8727470"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: TerminfoRenderer: ClassTooLong \u2014 457 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 12 methods, 2 blocks, lines 19-726. The bar is 400 significant lines; this is 57 over it, 1.14\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/render/terminfo.rs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2cff0486ddc9ff0733db91ca8e977b797a7cfbf61c402094ba9fa5f10836ea0"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kaku::doctor::build_environment_group: FunctionTooLong \u2014 kaku::doctor::build_environment_group runs 114 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 14 over it, 1.14\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/doctor.rs"},"region":{"startLine":262}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd4dacb14de52adb10fce565f2afe3944288a99be08cd2ed02a2a5731a8a3505"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 567 significant 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 67 over it, 1.13\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-cell/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"087efd5f8518ec889b58fcf565a7257781aff4c47899b238f7c98b7b0520f97a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/reset.rs: FileTooLong \u2014 567 significant 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 67 over it, 1.13\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/reset.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6edaab14fd79ae29493375b5a218d70042353d474f75ac8b7a6a40072e15f2af"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TermWindow.paint_impl: MethodTooLong \u2014 paint_impl runs 113 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 13 over it, 1.13\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/paint.rs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"2eb6351bf41b91f2d2b3d3fdf2ba65bd79349b2cde79046989ca7f1582572f3c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: pane/renderable.rs: FileTooLong \u2014 555 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 66% of them inside a single declaration: RenderableInner (2 blocks, 56-635). The bar is 500 significant lines; this is 55 over it, 1.11\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/pane/renderable.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"19abcf1bdbdc6495e51d114c80364537e08b87267575f5de2833ad7e710d3da4"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kaku_remote::p2p::wrap: FunctionTooLong \u2014 kaku_remote::p2p::wrap runs 111 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 11 over it, 1.11\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/src/p2p.rs"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e8f33bdcd4f035d0a5c8b3d19b6b7218556843df802bbce06523bd7ad444980"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TermWindow.paint_toast: MethodTooLong \u2014 paint_toast runs 111 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 11 over it, 1.11\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/paint.rs"},"region":{"startLine":657}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9341cc576b1d9d93455dd895e429ec000eff4be09ab9d3bf414ac88fb0502b7"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: kaku_remote::pairing: TooManyFunctions \u2014 33 free functions. The bar is 30 free functions; this is 3 over it, 1.10\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/src/pairing.rs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"76d7866478eb35a514833bc553d889db11c4d13248ca9027bd80e04d537a40fe"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: ParsedFont: ClassTooLong \u2014 440 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 16 methods, 7 blocks, lines 24-814. The bar is 400 significant lines; this is 40 over it, 1.10\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/parser.rs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6180d6da69ab1835db0b1edc8e26661fa69af3c48fabcb74da21263bf45d0e1"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: wezterm_client::client::process_unilateral: FunctionTooLong \u2014 wezterm_client::client::process_unilateral runs 110 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 10 over it, 1.10\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/client.rs"},"region":{"startLine":192}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b10d83107bed92013051435ad52a175be6c1a218dfed07c7a788ab6f9b09e3e"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: AssistantConfig.parse: MethodTooLong \u2014 parse runs 110 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 10 over it, 1.10\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_client/assistant_config.rs"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"e61304ea8c74a2ec5266e277f16bce0eebb1e59f56d687400c4c3b45e2bb730a"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kaku_gui::ai_tools::shell::exec_shell_exec: FunctionTooLong \u2014 kaku_gui::ai_tools::shell::exec_shell_exec runs 110 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 10 over it, 1.10\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_tools/shell.rs"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc0d0356b13d7d3e78b8897d74336111f311d7b57514c6b517f5db8d6723cf88"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: LauncherState.run_loop: MethodTooLong \u2014 run_loop runs 110 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 10 over it, 1.10\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/launcher.rs"},"region":{"startLine":624}}}],"partialFingerprints":{"codehealthFindingId/v1":"416132bf288e24857ef8abff0b64536c0baabfbedb83110cf0d3eae5ea19e4ab"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TerminalState.perform_csi_edit: MethodTooLong \u2014 perform_csi_edit runs 110 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 10 over it, 1.10\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/mod.rs"},"region":{"startLine":2364}}}],"partialFingerprints":{"codehealthFindingId/v1":"063e0704f2c79537ff86a6c7c19345de2865c43ded4875e14d3545ea23ca8fa9"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: ClientDomain: ClassTooLong \u2014 436 significant 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, 3 blocks, lines 253-1010. The bar is 400 significant lines; this is 36 over it, 1.09\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/domain.rs"},"region":{"startLine":253}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac870c0ed66f3e8b2c5597515240bd1475acee006b5f9326634b6990c74813c8"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ParsedFont.from_face: MethodTooLong \u2014 from_face runs 109 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 9 over it, 1.09\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/parser.rs"},"region":{"startLine":385}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1baeb89becdaf396e91ae6d3022251062cb6580e4cb957d749fdf01ce5ca94c"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TermWindow.win_key_code_to_termwiz_key_code: MethodTooLong \u2014 win_key_code_to_termwiz_key_code runs 109 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 9 over it, 1.09\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/keyevent.rs"},"region":{"startLine":1264}}}],"partialFingerprints":{"codehealthFindingId/v1":"a633835a31b6929995d3d9f0a514955d77d120b59acd681b442c4746da980183"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TermWindow.mouse_event_tab_bar: MethodTooLong \u2014 mouse_event_tab_bar runs 109 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 9 over it, 1.09\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mouseevent.rs"},"region":{"startLine":1625}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9dbe262819da2065e4bfdef26550220c4bb377c22bf0530e91920c92f1df2ea"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/color.rs: FileTooLong \u2014 542 significant 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 42 over it, 1.08\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/color.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecaddf3866fd98b31743a9fac1424cd9a39def0e33240dc079d137a0f696923e"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: PhysKeyCode: ClassTooLong \u2014 433 significant 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, 4 blocks, lines 758-1250. The bar is 400 significant lines; this is 33 over it, 1.08\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-input-types/src/lib.rs"},"region":{"startLine":758}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9469466b2721293f552610a2328eb16d50517f1204aec59d91d3b025354ed9f"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: FontConfigInner: ClassTooLong \u2014 432 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 19 methods, 2 blocks, lines 505-1186. The bar is 400 significant lines; this is 32 over it, 1.08\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/lib.rs"},"region":{"startLine":505}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4077d21655c6dccaa9f268280c91882e478bd7bc83142520c66a5f6969dbf3d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: termwindow/charselect.rs: FileTooLong \u2014 540 significant 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 40 over it, 1.08\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/charselect.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"84a34db88fc0f8e2f81cf3a6e6f43839b336aaacea0c1bbe85adac431cdf0588"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Config.try_load: MethodTooLong \u2014 try_load 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":"config/src/config.rs"},"region":{"startLine":1426}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ea7c57fe7ba95bc20a6e7eb588bbb3a8a155251cae96b1eb93cfb2a21dd5db2"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: AiClient.chat_step: MethodTooLong \u2014 chat_step 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":"kaku-gui/src/ai_client/mod.rs"},"region":{"startLine":461}}}],"partialFingerprints":{"codehealthFindingId/v1":"09efc5fa010f32f8269dd52e9a6675e308c4cc571df84eec540a6758730508dd"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: AiClient.chat_step_codex_connection: MethodTooLong \u2014 chat_step_codex_connection 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":"kaku-gui/src/ai_client/mod.rs"},"region":{"startLine":708}}}],"partialFingerprints":{"codehealthFindingId/v1":"6344b124b54c5c7a3476fb3af6d5407fd2d5bd9f3766b61964ab814b35290786"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: SelectorState.run_loop: MethodTooLong \u2014 run_loop runs 107 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 7 over it, 1.07\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/selector.rs"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a31c24e318b2dcc75363b4b72a94de621bf1f79d3ef20c8f75b02bf41cd8665"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kaku::reset::imp::run: FunctionTooLong \u2014 kaku::reset::imp::run runs 107 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 7 over it, 1.07\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/reset.rs"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ae8b79f0fbb9a1fedd87ef998ced9fdd701f5bb8ae83a6b3321d0c9f026a571"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: render/paint.rs: FileTooLong \u2014 534 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 93% of them inside a single declaration: TermWindow (56-813). The bar is 500 significant lines; this is 34 over it, 1.07\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":"kaku-gui/src/termwindow/render/paint.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ec1af31bd13a3e7dc681c7d54c379e75e05346b3b554ec53ee0e183580675c0"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Config: TooManyMethods \u2014 32 methods. The bar is 30 methods; this is 2 over it, 1.07\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/config.rs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"287dc71407c2429a373002219c2e146468095cdd187fe56516533ccd6e2f3060"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: LauncherState: ClassTooLong \u2014 424 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 10 methods, 2 blocks, lines 163-773. The bar is 400 significant lines; this is 24 over it, 1.06\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/launcher.rs"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b25b83cb4d4644bd974b7aee66670b4949a6f0545e8c0f724bbed4811e4cd6e"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Modifiers.to_string_with_separator: MethodTooLong \u2014 to_string_with_separator 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":"crates/wezterm-input-types/src/lib.rs"},"region":{"startLine":583}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f33ab5878226d6707c7f99a4e623008e2f37db6585ac98e577dc5ca72df2f8c"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TermWindow.config_was_reloaded_impl: MethodTooLong \u2014 config_was_reloaded_impl 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":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":3326}}}],"partialFingerprints":{"codehealthFindingId/v1":"3811acdb6ff5338251add155710b19638382599ce76310f3ff862991bf687dfc"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: BidiContext.explicit_embedding_levels: MethodTooLong \u2014 explicit_embedding_levels runs 105 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 5 over it, 1.05\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/bidi/src/lib.rs"},"region":{"startLine":1337}}}],"partialFingerprints":{"codehealthFindingId/v1":"40f92ab912198eaa97f76979e1e497ee7d14fb16a4ecfeb119f44fd796a3699b"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: wezterm_escape_parser::tmux_cc::unvis_bytes: FunctionTooLong \u2014 wezterm_escape_parser::tmux_cc::unvis_bytes runs 105 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 5 over it, 1.05\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/tmux_cc/mod.rs"},"region":{"startLine":519}}}],"partialFingerprints":{"codehealthFindingId/v1":"af13f74cfe50b054b23a50f91d48eb2f9c006a0816301939b17ca6a6a73717b9"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: CommandDef.actions_for_palette_and_menubar: MethodTooLong \u2014 actions_for_palette_and_menubar runs 105 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 5 over it, 1.05\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/commands.rs"},"region":{"startLine":482}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbd3a69f08d597bf0e5117cd1f10ac753379a7d0eeda6df0b04c9bedac06c20b"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: GlyphCache.cached_image_impl: MethodTooLong \u2014 cached_image_impl runs 105 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 5 over it, 1.05\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/glyphcache.rs"},"region":{"startLine":931}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae392b068b00ce334bd2e54307477d4b9170a16e7988033ffb96396a3fa5e355"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: wezterm_config_derive::attr::field_info: FunctionTooLong \u2014 wezterm_config_derive::attr::field_info runs 104 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 4 over it, 1.04\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/derive/src/attr.rs"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a4e4e07013d521575a60a22cc2613265a66c9d14e19ea4fad41fdc07d3e974f"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: FontConfigInner.resolve_font: MethodTooLong \u2014 resolve_font runs 104 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 4 over it, 1.04\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/lib.rs"},"region":{"startLine":931}}}],"partialFingerprints":{"codehealthFindingId/v1":"35d2e0788212956e5f85820edd2a24f91e6e97f4fd2763554e22c7684e23707a"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: color_funcs::image_colors::extract_colors_from_image: FunctionTooLong \u2014 color_funcs::image_colors::extract_colors_from_image runs 104 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 4 over it, 1.04\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lua-api-crates/color-funcs/src/image_colors.rs"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"422ac34fc7f33d913ba2bf86e6128a959419319c35dcfad7387afaf3c2b33e2a"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: mux::read_from_pane_pty: FunctionTooLong \u2014 mux::read_from_pane_pty runs 104 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 4 over it, 1.04\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/lib.rs"},"region":{"startLine":613}}}],"partialFingerprints":{"codehealthFindingId/v1":"f31210fe76f6bdd837063719299df7e4507a342850fe39b9b676e34ec13f84ad"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/p2p.rs: FileTooLong \u2014 518 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 18 over it, 1.04\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/src/p2p.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"571f5b665fcbe80290a18c1e8b31996d6249ae060be4294df66d7e39b427e566"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Window: ClassTooLong \u2014 413 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 6 methods, 5 blocks, lines 757-2428. The bar is 400 significant lines; this is 13 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":"window/src/os/macos/window.rs"},"region":{"startLine":757}}}],"partialFingerprints":{"codehealthFindingId/v1":"22618358255328bc56b04a17cae03f937a4e911d717fe07518c70f7d2f62b582"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: lineedit/mod.rs: FileTooLong \u2014 515 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 91% of them inside a single declaration: LineEditor (2 blocks, 72-857). The bar is 500 significant lines; this is 15 over it, 1.03\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":"termwiz/src/lineedit/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"942e64734a902bdfb4dc47694558c32daa57cd587d3fc5cf2cc1e254585fee55"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: OperatingSystemCommand.internal_parse: MethodTooLong \u2014 internal_parse runs 103 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 3 over it, 1.03\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/osc.rs"},"region":{"startLine":257}}}],"partialFingerprints":{"codehealthFindingId/v1":"df9fb9b04064f1c0b6695bed2478d51b73882c2288c5ff2b7fdb8a43ee280e3e"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: kaku_gui::ai_tools::execute: FunctionTooLong \u2014 kaku_gui::ai_tools::execute runs 103 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 3 over it, 1.03\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_tools/mod.rs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"95b183053b49980b8babdaf2b0183276d129ba6d78274e2cffe23b6dcb35b477"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TermWindow.paint_agent_title: MethodTooLong \u2014 paint_agent_title runs 103 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 3 over it, 1.03\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/agent_title.rs"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"9da5645a3ae8b6607758892156739e6d1dd3e5fc6e4ce1955519a06060acfe21"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: FallbackResolveInfo.process: MethodTooLong \u2014 process runs 102 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 2 over it, 1.02\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/lib.rs"},"region":{"startLine":337}}}],"partialFingerprints":{"codehealthFindingId/v1":"498883341800425f3c0b4a1e457d76c7adb638a17c8ead63fc2204a63e507770"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: CopyOverlay.key_down: MethodTooLong \u2014 key_down 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":"kaku-gui/src/overlay/copy.rs"},"region":{"startLine":1231}}}],"partialFingerprints":{"codehealthFindingId/v1":"747d71d33391cd88dc8ca95dc65f25b480db3baee7e3fc6b83a4b5e8c686a2b6"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TermWindow.rejoin_wrapped_link: MethodTooLong \u2014 rejoin_wrapped_link 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":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":5598}}}],"partialFingerprints":{"codehealthFindingId/v1":"f156bd3098bf7948eb2e4f06eee89e35bb95b78334752dc6cc2e1efc9fd004c2"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: MuxTab.add_methods: MethodTooLong \u2014 add_methods 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":"lua-api-crates/mux/src/tab.rs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"63115d79c8b54694a8c5ae16d57091af955c7c289f9abfc56938d8238677fb43"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: VTParser.action: MethodTooLong \u2014 action runs 101 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 1 over it, 1.01\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/vtparse/src/lib.rs"},"region":{"startLine":526}}}],"partialFingerprints":{"codehealthFindingId/v1":"88c13bd8feeb34ba15f01898dfcef72d72aee41f3188aa41704aaba696cd7df6"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: KeyCode.try_from: MethodTooLong \u2014 try_from runs 101 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 1 over it, 1.01\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-input-types/src/lib.rs"},"region":{"startLine":341}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad968ea4107d928c2ea7fe770dda0a9843719c93b6756239224627aac6bcd246"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ToolState.load_with_usage: MethodTooLong \u2014 load_with_usage runs 101 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 1 over it, 1.01\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui.rs"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd1bd588d59d43be0c6f78cf4968903ffb6f620da2a8ab10bd4875fae64359ff"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/renderstate.rs: FileTooLong \u2014 504 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 4 over it, 1.01\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/renderstate.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b258e8b95cdc715c8425c4436f77435fcd9fff5ceb4b8c59c03be7c3024d003"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: ClientPane: ClassTooLong \u2014 403 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 4 methods, 3 blocks, lines 34-642. The bar is 400 significant lines; this is 3 over it, 1.01\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/pane/clientpane.rs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"396e3362a68b09b6238f46b6b88250b12a0fdb55e1f9af19a55dcea2b3e9cdc4"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (69 shared lines): kaku-gui/src/overlay/launcher.rs:406-542 | kaku-gui/src/overlay/selector.rs:94-205 \u2014 These two members are variants of one another: 69 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/launcher.rs"},"region":{"startLine":406}}}],"partialFingerprints":{"codehealthFindingId/v1":"19038d4055cc902f954c5a4bb7990f71d555016964c4a2c73fb930e9e7a6435d"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (33 shared lines): kaku-gui/src/termwindow/charselect.rs:388-548 | kaku-gui/src/termwindow/paneselect.rs:57-158 \u2014 These two members are variants of one another: 33 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/charselect.rs"},"region":{"startLine":388}}}],"partialFingerprints":{"codehealthFindingId/v1":"493dcafbdb057015d8146ddcfa45c7a7c1f477b9cedb50d9d394dc7498a6d58a"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): config/derive/src/attr.rs:15-61 | config/derive/src/attr.rs:131-279 | crates/wezterm-dynamic/derive/src/attr.rs:11-57 | crates/wezterm-dynamic/derive/src/attr.rs:281-372 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/derive/src/attr.rs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"42352e6ae09002343d93a1742412c2900082d5ead1c851e609c4192c96eb6cd4"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): kaku/src/ai_config/tui/ui.rs:358-430 | kaku/src/ai_config/tui/ui.rs:432-538 | kaku/src/config_tui/ui.rs:367-445 | kaku/src/config_tui/ui.rs:447-517 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui/ui.rs"},"region":{"startLine":358}}}],"partialFingerprints":{"codehealthFindingId/v1":"efa6e212b18959d1cc83f233daaeccb1e197411c1095828524b7a471552b3e60"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): kaku/src/cli/activate_tab.rs:48-158 | kaku/src/cli/rename_workspace.rs:26-63 | kaku/src/cli/set_tab_title.rs:25-67 | kaku/src/cli/set_window_title.rs:26-63 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/cli/activate_tab.rs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"8990bb42c664bfe9033c8c73401b7dea65f87ba262c292b681f9ca25fa12bd92"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (61 lines \u00D7 2): config/derive/src/attr.rs:203-263 | crates/wezterm-dynamic/derive/src/attr.rs:299-359 \u2014 before extracting anything, compare \u0060config/derive/src/attr.rs\u0060 and \u0060crates/wezterm-dynamic/derive/src/attr.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 138 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":"config/derive/src/attr.rs"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a9562cf5a6ce0bea3dda0a40783f3c8471186f6aa1828af81a88482481c3d59"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (61 lines \u00D7 2): crates/wezterm-font/src/rasterizer/freetype.rs:845-905 | crates/wezterm-font/src/rasterizer/harfbuzz.rs:176-236 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/rasterizer/freetype.rs"},"region":{"startLine":845}}}],"partialFingerprints":{"codehealthFindingId/v1":"de307aa5037398a71165ea6db3bc4a3c8e2dcbea47b54f60d41f994790749e40"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (46 lines \u00D7 2): config/derive/src/attr.rs:16-61 | crates/wezterm-dynamic/derive/src/attr.rs:12-57 \u2014 before extracting anything, compare \u0060config/derive/src/attr.rs\u0060 and \u0060crates/wezterm-dynamic/derive/src/attr.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 138 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":"config/derive/src/attr.rs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffefe21d8d847bb0562753f70caf5e69474d4c1265254a8b89c151bd7b35156e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (42 lines \u00D7 2): crates/wezterm-escape-parser/src/csi.rs:689-730 | crates/wezterm-escape-parser/src/csi.rs:732-773 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/csi.rs"},"region":{"startLine":689}}}],"partialFingerprints":{"codehealthFindingId/v1":"4df9737da1851894b6293df1862ef0ac5304d55ca39eb24497323ea39ebe24e3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (41 lines \u00D7 2): crates/wezterm-font/src/rasterizer/freetype.rs:469-509 | crates/wezterm-font/src/rasterizer/harfbuzz.rs:61-101 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/rasterizer/freetype.rs"},"region":{"startLine":469}}}],"partialFingerprints":{"codehealthFindingId/v1":"9029bdfd4bd325a6f71efb2ee40b6b83c6833d92ec3c7ca7876388eadeafca98"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (40\u201341 lines \u00D7 2): kaku-gui/src/overlay/quickselect.rs:587-627 | kaku-gui/src/overlay/quickselect.rs:680-719 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/quickselect.rs"},"region":{"startLine":587}}}],"partialFingerprints":{"codehealthFindingId/v1":"11f42b975275e8ef4f0057020149e186612880592476b0b4868af9c2e05abd8f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (39 lines \u00D7 2): kaku-gui/src/overlay/launcher.rs:701-739 | kaku-gui/src/overlay/selector.rs:314-352 \u2014 before extracting anything, compare \u0060kaku-gui/src/overlay/launcher.rs\u0060 and \u0060kaku-gui/src/overlay/selector.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 178 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/launcher.rs"},"region":{"startLine":701}}}],"partialFingerprints":{"codehealthFindingId/v1":"730c7eb639eac482d329b4ea4e19da09e4a70ae8d7de1bdcffb0fe4354d1f298"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (36\u201337 lines \u00D7 2): term/src/screen.rs:643-679 | term/src/screen.rs:913-948 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/screen.rs"},"region":{"startLine":643}}}],"partialFingerprints":{"codehealthFindingId/v1":"9839d90fc4cf8b23ebf2ff15ce7c75c32233a7e2935f8a98a306609a5097d076"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (34 lines \u00D7 2): kaku-gui/src/overlay/launcher.rs:642-675 | kaku-gui/src/overlay/selector.rs:260-293 \u2014 before extracting anything, compare \u0060kaku-gui/src/overlay/launcher.rs\u0060 and \u0060kaku-gui/src/overlay/selector.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 178 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/launcher.rs"},"region":{"startLine":642}}}],"partialFingerprints":{"codehealthFindingId/v1":"88d322b956383e28e7d66ae32ba9ee7d73b72e1237c1856d45b6c53c11ba4ad3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (33 lines \u00D7 2): crates/wezterm-font/src/rasterizer/freetype.rs:230-262 | crates/wezterm-font/src/rasterizer/freetype.rs:283-315 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/rasterizer/freetype.rs"},"region":{"startLine":230}}}],"partialFingerprints":{"codehealthFindingId/v1":"34f3541e17c5601c729586d3e6cec42bccca97b09e026ff5b72df7220ab12414"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (29\u201331 lines \u00D7 2): kaku/src/ai_config/tui.rs:3007-3035 | kaku/src/ai_config/tui/providers/codex.rs:332-362 \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":"kaku/src/ai_config/tui.rs"},"region":{"startLine":3007}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd09b65e18abe5c2ed30ab686318b863fef885699851bdd8d2684fe3878b839c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (29 lines \u00D7 2): crates/wezterm-font/src/ftwrap.rs:1517-1545 | crates/wezterm-font/src/rasterizer/harfbuzz.rs:378-406 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/ftwrap.rs"},"region":{"startLine":1517}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5e7951885e0c22d62fcd878398b78bbe8858896de68eb1c30094efc16a4b983"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (29 lines \u00D7 2): kaku-gui/src/overlay/copy.rs:1605-1633 | kaku-gui/src/overlay/copy.rs:1697-1725 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/copy.rs"},"region":{"startLine":1605}}}],"partialFingerprints":{"codehealthFindingId/v1":"82e3e5a75b94ae42d4393b7d37112846d57e0eeaec4a298b52398e3770da46a3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (29 lines \u00D7 2): mux/src/tab.rs:971-999 | mux/src/tab.rs:1028-1056 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tab.rs"},"region":{"startLine":971}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2a422d0280cafbf2111f7c747e41d1318a801eb3c0441d93c4345c9eab533ed"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27\u201329 lines \u00D7 2): mux/src/tab.rs:1502-1530 | mux/src/tab.rs:1548-1574 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tab.rs"},"region":{"startLine":1502}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee1698d38204346bf7775c800c47ed377f021699721e64a6061ab4f57fb6c7fc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24\u201328 lines \u00D7 2): mux/src/tab.rs:1666-1693 | mux/src/tab.rs:1699-1722 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tab.rs"},"region":{"startLine":1666}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a8a27db07d0c4b76127aa7779af57adfc7c94e8f2f8012402fd798849d2f735"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): termwiz/src/widgets/layout.rs:381-406 | termwiz/src/widgets/layout.rs:408-433 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/widgets/layout.rs"},"region":{"startLine":381}}}],"partialFingerprints":{"codehealthFindingId/v1":"57bb76231ea68ff6d31ba7cc68118385bfe98cdb98f3efd98a6f70e072fa070f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): crates/wezterm-cell/src/lib.rs:231-255 | crates/wezterm-cell/src/lib.rs:267-291 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-cell/src/lib.rs"},"region":{"startLine":231}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d3c64ba32d1b9eeeac9e0243ba49f8b3506ad4dbb9e2411ac9cd8e83996e2e7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): kaku-gui/src/overlay/launcher.rs:415-439 | kaku-gui/src/overlay/selector.rs:102-126 \u2014 before extracting anything, compare \u0060kaku-gui/src/overlay/launcher.rs\u0060 and \u0060kaku-gui/src/overlay/selector.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 178 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/launcher.rs"},"region":{"startLine":415}}}],"partialFingerprints":{"codehealthFindingId/v1":"03261ab5a42f35c15a2eefe97d92e17c54941024b849e48a81a0c9c68655069c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22\u201324 lines \u00D7 2): kaku-gui/src/overlay/launcher.rs:497-518 | kaku-gui/src/overlay/selector.rs:159-182 \u2014 before extracting anything, compare \u0060kaku-gui/src/overlay/launcher.rs\u0060 and \u0060kaku-gui/src/overlay/selector.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 178 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/launcher.rs"},"region":{"startLine":497}}}],"partialFingerprints":{"codehealthFindingId/v1":"86582f3f374688d6170cbc55776ce4cd2924b641d6f0b94118c1c94a371c0059"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): kaku-gui/src/inputmap.rs:179-201 | kaku-gui/src/inputmap.rs:251-273 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/inputmap.rs"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"925426068aa80391e6d61200b9e1e556059a9d924162bd205a3209e33ee74633"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): kaku/src/ai_config/tui/ui.rs:408-430 | kaku/src/config_tui/ui.rs:495-517 \u2014 before extracting anything, compare \u0060kaku/src/ai_config/tui/ui.rs\u0060 and \u0060kaku/src/config_tui/ui.rs\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 112 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":"kaku/src/ai_config/tui/ui.rs"},"region":{"startLine":408}}}],"partialFingerprints":{"codehealthFindingId/v1":"38640850cbc0a082f76fd64cbcdd224c85edc6f3da06a69d0b096e9b2ccb291b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21\u201323 lines \u00D7 2): mux/src/tab.rs:1773-1795 | mux/src/tab.rs:1815-1835 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tab.rs"},"region":{"startLine":1773}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3ff52c10a06868e9449d2e509cb47babcc7b506146aa4a0f05edb43455d5db4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): kaku-gui/src/overlay/launcher.rs:521-542 | kaku-gui/src/overlay/selector.rs:184-205 \u2014 before extracting anything, compare \u0060kaku-gui/src/overlay/launcher.rs\u0060 and \u0060kaku-gui/src/overlay/selector.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 178 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/launcher.rs"},"region":{"startLine":521}}}],"partialFingerprints":{"codehealthFindingId/v1":"f45f553d973f7ac3f0c3c86d486349642bac3b5914bb8597dc392665bdb536ed"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): kaku-gui/src/termwindow/box_model.rs:982-1003 | kaku-gui/src/termwindow/box_model.rs:1013-1034 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/box_model.rs"},"region":{"startLine":982}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7fd837ac2a70126b491aa258b09f92ec3192d1d30b53544be8a3fe5e0a51c47"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20\u201321 lines \u00D7 2): kaku-gui/src/ai_tools/search.rs:101-120 | kaku-gui/src/ai_tools/web.rs:310-330 \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":"kaku-gui/src/ai_tools/search.rs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bb32007b2d93f402505a44383f7bc7da6c5c2d210da69155183a6691f5ff805"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): kaku/src/ai_config/tui/ui.rs:449-469 | kaku/src/config_tui/ui.rs:377-397 \u2014 before extracting anything, compare \u0060kaku/src/ai_config/tui/ui.rs\u0060 and \u0060kaku/src/config_tui/ui.rs\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 112 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":"kaku/src/ai_config/tui/ui.rs"},"region":{"startLine":449}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4bbf2611bd20ad6eb4035aa753e37d9e01c15b1e2473ce481e8052947765a6b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201321 lines \u00D7 2): kaku/src/doctor.rs:1079-1099 | kaku/src/doctor.rs:1130-1143 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/doctor.rs"},"region":{"startLine":1079}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c0c20c2199bbb29676641eddf12abc3c11338bceb3c56ba5c22cd984d69e110"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): kaku-gui/src/glyphcache.rs:576-595 | kaku-gui/src/glyphcache.rs:605-624 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/glyphcache.rs"},"region":{"startLine":576}}}],"partialFingerprints":{"codehealthFindingId/v1":"65c2e7b505a63c3483b0a38a59e1a4225b6f9f3a0b54291e2e2488518ba8d4e3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): kaku/src/cli/set_tab_title.rs:28-46 | kaku/src/cli/set_window_title.rs:29-47 \u2014 before extracting anything, compare \u0060kaku/src/cli/set_tab_title.rs\u0060 and \u0060kaku/src/cli/set_window_title.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 40 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/cli/set_tab_title.rs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"46cc29d502b4f665e65067d46160c1256a9528a5022b04a7e67b2547a8390c8b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 6): kaku-gui/src/customglyph.rs:5833-5852 | kaku-gui/src/customglyph.rs:5863-5886 | kaku-gui/src/customglyph.rs:5897-5922 | kaku-gui/src/customglyph.rs:5933-5950 | kaku-gui/src/customglyph.rs:5961-5986 | kaku-gui/src/customglyph.rs:5995-6016 \u2014 all 6 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/customglyph.rs"},"region":{"startLine":5833}}}],"partialFingerprints":{"codehealthFindingId/v1":"43d4cff8e1c143e9c11853725ccbc21acc18f8144e106831e1062e591cb5f1e6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): crates/wezterm-surface/src/line/clusterline.rs:207-224 | crates/wezterm-surface/src/line/clusterline.rs:252-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":"crates/wezterm-surface/src/line/clusterline.rs"},"region":{"startLine":207}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f56e71247f7c056d987ba217457c3d9ac339ce9b74a96c34e557b99cff0856b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): kaku-gui/src/customglyph.rs:5630-5647 | kaku-gui/src/customglyph.rs:5799-5816 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/customglyph.rs"},"region":{"startLine":5630}}}],"partialFingerprints":{"codehealthFindingId/v1":"5dbf738385b7f1f2c1d5f15d6d2c934af60c5f698bc559c327c05705f3132d41"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17\u201318 lines \u00D7 2): mux/src/pane_encoding.rs:144-161 | mux/src/pane_encoding.rs:251-267 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/pane_encoding.rs"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"7351a1218201dad401ffcdcaee376f2013e095c50d718e9f5f061b990c7eea79"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): window/src/os/macos/window.rs:9890-9907 | window/src/os/macos/window.rs:9914-9931 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/window.rs"},"region":{"startLine":9890}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e1c620d5b3332f6428e9c45f3fc33d5eaf24257a5ecc6bf78f1116439fb1936"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 3): crates/wezterm-escape-parser/src/csi.rs:2506-2522 | crates/wezterm-escape-parser/src/csi.rs:2523-2539 | crates/wezterm-escape-parser/src/csi.rs:2551-2567 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/csi.rs"},"region":{"startLine":2506}}}],"partialFingerprints":{"codehealthFindingId/v1":"befbd046c727b46dd060db47fd108d2a579406f8aff58a468e951421d0630f73"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): kaku-gui/src/ai_client/mod.rs:272-288 | kaku-gui/src/ai_client/mod.rs:793-809 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_client/mod.rs"},"region":{"startLine":272}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e42d8bd30bf0be6af95b50effe668a7812e312354339347079090fec51104b4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): kaku-gui/src/customglyph.rs:5403-5419 | kaku-gui/src/customglyph.rs:5421-5437 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/customglyph.rs"},"region":{"startLine":5403}}}],"partialFingerprints":{"codehealthFindingId/v1":"52137f54ddc345c531ef62099323622a5e5a4b077c9d8dfa370209cbc8575c87"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): kaku-gui/src/overlay/copy.rs:252-268 | kaku-gui/src/overlay/quickselect.rs:816-832 \u2014 before extracting anything, compare \u0060kaku-gui/src/overlay/copy.rs\u0060 and \u0060kaku-gui/src/overlay/quickselect.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 96 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/copy.rs"},"region":{"startLine":252}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a96d45db32eb76826b10d8b60a3d0f89500ab9d09a0b8a8406314a77f5d3c64"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): term/src/terminalstate/mod.rs:2637-2653 | term/src/terminalstate/mod.rs:2733-2749 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/mod.rs"},"region":{"startLine":2637}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7423f61f977300a8fb9aa7b8400f2ec1e8df9c972d49e88f50fd08d46f07f7e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13\u201316 lines \u00D7 3): crates/wezterm-ssh/src/sftp/file.rs:156-168 | crates/wezterm-ssh/src/sftp/file.rs:200-215 | crates/wezterm-ssh/src/sftp/file.rs:232-244 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/sftp/file.rs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"2644c86ed8b9cd9222396e873961dc6cd73371d9054500474fc71aaf8d8ad49a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): crates/bidi/src/lib.rs:1162-1177 | crates/bidi/src/lib.rs:1186-1201 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/bidi/src/lib.rs"},"region":{"startLine":1162}}}],"partialFingerprints":{"codehealthFindingId/v1":"5469fca523f4443ec8845d17f8a07deb928735a000d96206064a0910705d9440"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): crates/color-types/src/lib.rs:673-688 | crates/color-types/src/lib.rs:693-708 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/color-types/src/lib.rs"},"region":{"startLine":673}}}],"partialFingerprints":{"codehealthFindingId/v1":"30758a84f2da827c626119f9096c298d4cd6cb34f4c692fb2661f925c6ce6d52"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): kaku-gui/src/termwindow/mod.rs:6000-6015 | kaku/src/utils.rs:171-186 \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":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":6000}}}],"partialFingerprints":{"codehealthFindingId/v1":"29b62fe39447ad3a270a1e8dc4eb06368cad8d40ca50b28d33a9ca15f0afa630"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201316 lines \u00D7 2): kaku-gui/src/termwindow/mod.rs:6215-6230 | kaku-gui/src/termwindow/mod.rs:6251-6264 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":6215}}}],"partialFingerprints":{"codehealthFindingId/v1":"745e63e1b86cdf0fd858a2c2b4cdf1102683b9112e87a9e479de140cb15af2cd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15\u201316 lines \u00D7 2): kaku/src/ai_config/tui/providers/mod.rs:1667-1682 | kaku/src/ai_config/tui/providers/mod.rs:1885-1899 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui/providers/mod.rs"},"region":{"startLine":1667}}}],"partialFingerprints":{"codehealthFindingId/v1":"93c71cfec0623261c3899862a8f90155c9b865941d5a8ee30a952f7db8c0fb2e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): mux/src/termwiztermtab.rs:495-510 | mux/src/termwiztermtab.rs:544-559 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/termwiztermtab.rs"},"region":{"startLine":495}}}],"partialFingerprints":{"codehealthFindingId/v1":"022db73c94fd312838d3bf27e43d68e998bf47b2f4c58ec7be50ee93f961c63b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): term/src/terminalstate/mod.rs:64-79 | term/src/terminalstate/performer.rs:55-70 \u2014 before extracting anything, compare \u0060term/src/terminalstate/mod.rs\u0060 and \u0060term/src/terminalstate/performer.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 55 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/mod.rs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c7a4d1d7bd74814905efc85f166cba2e1cd380d38e89abddb778272756e3ae6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): crates/filedescriptor/src/unix.rs:310-324 | crates/filedescriptor/src/unix.rs:336-350 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/filedescriptor/src/unix.rs"},"region":{"startLine":310}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0a12038a01ebd51af41ae6e368ab4964ed1e93feba81a3a690c8e575071c776"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): crates/wezterm-font/src/ftwrap.rs:267-281 | crates/wezterm-font/src/ftwrap.rs:766-780 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/ftwrap.rs"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"43835ba054346a94cdd49c3244b590841eb60d845eebb189fdc33ef41c61a7e1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): crates/wezterm-ssh/src/sessioninner.rs:111-125 | crates/wezterm-ssh/src/sessioninner.rs:262-276 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/sessioninner.rs"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"26ab694aac99818e5001c76e1f8d80d0c6dcdbb5940219c3853f7f9eabd3eb25"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): kaku-gui/src/glyphcache.rs:1219-1233 | kaku-gui/src/glyphcache.rs:1241-1255 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/glyphcache.rs"},"region":{"startLine":1219}}}],"partialFingerprints":{"codehealthFindingId/v1":"11a931ef95d1ebac9e652a39b6d326e536fe18765bd75544fb478ff7c2a6ae88"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): kaku-gui/src/overlay/ai_chat/state.rs:416-430 | kaku-gui/src/overlay/ai_chat/state.rs:439-453 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/state.rs"},"region":{"startLine":416}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a0e2bb8ef0cc4db772a7725d8f51e86261cd1d24b77c4a5a6dae806723ceb29"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13\u201315 lines \u00D7 2): kaku-gui/src/termwindow/mod.rs:4089-4101 | kaku/src/cli/activate_tab.rs:120-134 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":4089}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ee527a287d42a5b997cb2f06bfea586472f39e4023d5de27cb82530b9c1fa07"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): kaku-gui/src/termwindow/mod.rs:4326-4340 | kaku-gui/src/termwindow/mod.rs:4350-4364 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":4326}}}],"partialFingerprints":{"codehealthFindingId/v1":"096acd98459fe8bcc37d7abf811bd8727b8224023f94173060da656f96702b97"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): kaku-gui/src/update.rs:821-835 | kaku/src/update.rs:694-708 \u2014 before extracting anything, compare \u0060kaku-gui/src/update.rs\u0060 and \u0060kaku/src/update.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 67 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. 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":"kaku-gui/src/update.rs"},"region":{"startLine":821}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc8b597422e2a794d1959a5e803c39d24002c4da47a36d87c789fef6018cf82b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): termwiz/src/input.rs:735-751 | termwiz/src/input.rs:784-798 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/input.rs"},"region":{"startLine":735}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d9b0c111ffce55e463e3dd0d6641abaedcf25c5867387ae32c88d8efa9ef847"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): crates/wezterm-dynamic/derive/src/attr.rs:220-233 | crates/wezterm-dynamic/derive/src/attr.rs:240-253 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-dynamic/derive/src/attr.rs"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"56de456194a9c89cb5292e13203d578b8fec3d36654d514ea7529b952b9b48dd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): crates/wezterm-escape-parser/src/csi.rs:1887-1900 | crates/wezterm-escape-parser/src/csi.rs:1916-1929 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/csi.rs"},"region":{"startLine":1887}}}],"partialFingerprints":{"codehealthFindingId/v1":"f09ee306da9cf3886e7c59f3a8fb2da796d72263574d2703b177d382ccb711ef"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): kaku-gui/src/overlay/copy.rs:338-351 | kaku-gui/src/overlay/copy.rs:405-418 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/copy.rs"},"region":{"startLine":338}}}],"partialFingerprints":{"codehealthFindingId/v1":"393a680fa9276fb7ee75c48d70ed041704809361cc4dc9b59e75fc661ed6b045"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): kaku-gui/src/update.rs:290-303 | kaku/src/update.rs:956-969 \u2014 before extracting anything, compare \u0060kaku-gui/src/update.rs\u0060 and \u0060kaku/src/update.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 67 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. 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":"kaku-gui/src/update.rs"},"region":{"startLine":290}}}],"partialFingerprints":{"codehealthFindingId/v1":"f83adabd3cf047c932debcc74f9e9a3b28d0e00911c684b36adbc5cae07f8b19"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): kaku/src/cli/rename_workspace.rs:38-51 | kaku/src/cli/set_window_title.rs:38-51 \u2014 before extracting anything, compare \u0060kaku/src/cli/rename_workspace.rs\u0060 and \u0060kaku/src/cli/set_window_title.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 35 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/cli/rename_workspace.rs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b857292eee087207ca8d6c9726d183c7fdcf68f1dfd22aa712a77eef6b2f339"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): mux/src/tab.rs:1310-1323 | mux/src/tab.rs:1332-1345 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tab.rs"},"region":{"startLine":1310}}}],"partialFingerprints":{"codehealthFindingId/v1":"3208562f44fe663aad6c2a3568169372441a0025cd0bca54378bad4ce247d61c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201314 lines \u00D7 2): window/src/os/macos/window.rs:9276-9289 | window/src/os/macos/window.rs:9349-9360 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/window.rs"},"region":{"startLine":9276}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ef23946ca5e52d77989a1320beb7ece67f0a40a11ba055bcd109b3eaf8a5dde"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 3): crates/wezterm-font/src/rasterizer/freetype.rs:194-205 | crates/wezterm-font/src/rasterizer/freetype.rs:246-258 | crates/wezterm-font/src/rasterizer/freetype.rs:299-311 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/rasterizer/freetype.rs"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c07a3b71d1f6318ceb2cf1422c08636f0b9226bb549b5ba9d2decce850edb73"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 3): kaku-gui/src/ai_chat_engine/mod.rs:566-578 | kaku-gui/src/ai_chat_engine/mod.rs:584-595 | kaku-gui/src/ai_chat_engine/mod.rs:601-612 \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":"kaku-gui/src/ai_chat_engine/mod.rs"},"region":{"startLine":566}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e3e3c2828a5f3bcf9a3e871b01dfd5dabea6b7beeceef0c2237d68a124c1e95"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): config/src/font.rs:401-413 | config/src/font.rs:437-449 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/font.rs"},"region":{"startLine":401}}}],"partialFingerprints":{"codehealthFindingId/v1":"88700c49840a54faf4753c0ee38f02286237eaa2b2ad9354fee46b01afb656cd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): crates/wezterm-dynamic/derive/src/attr.rs:141-153 | crates/wezterm-dynamic/derive/src/attr.rs:168-180 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-dynamic/derive/src/attr.rs"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e9fa01838755c956a5919658eb53b90edd8b3a71e5cb294d69011083dc19066"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 2): crates/wezterm-dynamic/derive/src/attr.rs:173-185 | crates/wezterm-dynamic/derive/src/attr.rs:201-212 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-dynamic/derive/src/attr.rs"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"2568e18d06cba1ea34b46ceff34c447fd18d037923f1295b07fef450e6bcab43"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): kaku-gui/src/ai_chat_engine/suggestion.rs:30-42 | kaku-gui/src/ai_chat_engine/title.rs:20-32 \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":"kaku-gui/src/ai_chat_engine/suggestion.rs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd39602b47809525e80e3799f462c03c32c60aa00af7dbb0c23d662bdfe2e880"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): kaku-gui/src/ai_tools/search.rs:514-526 | kaku-gui/src/ai_tools/search.rs:543-555 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_tools/search.rs"},"region":{"startLine":514}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d0ad0ef40205d450ddea2b000b3501ca7275b4b56f73f8185dddbe911a9e48d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): kaku-gui/src/ai_tools/search.rs:638-650 | kaku-gui/src/ai_tools/search.rs:783-795 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_tools/search.rs"},"region":{"startLine":638}}}],"partialFingerprints":{"codehealthFindingId/v1":"593874b4cbba7f14f87660e6c671ba311f59f4871ed23b50de2588c5fc941577"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): kaku-gui/src/ai_tools/search.rs:869-881 | kaku-gui/src/ai_tools/shell.rs:157-169 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_tools/search.rs"},"region":{"startLine":869}}}],"partialFingerprints":{"codehealthFindingId/v1":"877d63388d8a9277424faa9147edbb178bc7316a962cc20a2bac50505e354fa5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): kaku-gui/src/overlay/ai_chat/render.rs:497-509 | kaku-gui/src/overlay/ai_chat/render.rs:768-780 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/render.rs"},"region":{"startLine":497}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f1d1a0bc2674612bc9f445fe87bcf769e4bab0bbb215f909178b3c8cc8a7527"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): kaku-gui/src/overlay/copy.rs:1541-1553 | kaku-gui/src/overlay/quickselect.rs:534-546 \u2014 before extracting anything, compare \u0060kaku-gui/src/overlay/copy.rs\u0060 and \u0060kaku-gui/src/overlay/quickselect.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 96 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/copy.rs"},"region":{"startLine":1541}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2d1bc5c2b886e65b0e59f7a548601120f9f78cc5ee2031a9fafec9e08952d73"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): kaku-gui/src/overlay/copy.rs:1591-1603 | kaku-gui/src/overlay/quickselect.rs:580-592 \u2014 before extracting anything, compare \u0060kaku-gui/src/overlay/copy.rs\u0060 and \u0060kaku-gui/src/overlay/quickselect.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 96 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/copy.rs"},"region":{"startLine":1591}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ef702eecb84c40107b646da89465054dd497f99a873328069e35cc8797a5973"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201313 lines \u00D7 2): kaku-gui/src/termwindow/box_model.rs:692-704 | kaku-gui/src/termwindow/box_model.rs:827-837 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/box_model.rs"},"region":{"startLine":692}}}],"partialFingerprints":{"codehealthFindingId/v1":"394f15ce7457762206cf1af55d049b1db9e42a8afcfdfb1fa7e4fe57deb3fd57"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): kaku-gui/src/termwindow/box_model.rs:1168-1180 | kaku-gui/src/termwindow/box_model.rs:1182-1194 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/box_model.rs"},"region":{"startLine":1168}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbc1fa646de962374c0a9bf257ed42d3e02f1b907b2f692847b575a66fc19022"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): kaku-gui/src/termwindow/charselect.rs:507-519 | kaku-gui/src/termwindow/paneselect.rs:110-122 \u2014 before extracting anything, compare \u0060kaku-gui/src/termwindow/charselect.rs\u0060 and \u0060kaku-gui/src/termwindow/paneselect.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 33 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/charselect.rs"},"region":{"startLine":507}}}],"partialFingerprints":{"codehealthFindingId/v1":"405d550ddb0970c1436f55ac812a954cbba700f93a673c422cb8b3c252c1f37c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): kaku-gui/src/termwindow/mouseevent.rs:1270-1282 | kaku-gui/src/termwindow/mouseevent.rs:1676-1688 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mouseevent.rs"},"region":{"startLine":1270}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b49c762a3439b865cae457740d48fa276c7412adeeb7f805b933e4694de7fa6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): kaku-gui/src/termwindow/tab_rename.rs:874-886 | kaku-gui/src/termwindow/tab_rename.rs:905-917 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/tab_rename.rs"},"region":{"startLine":874}}}],"partialFingerprints":{"codehealthFindingId/v1":"2209a35419c7a6349982ddddbd82e1406b789f3d4e7ae210a87509933d1f0370"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): kaku-gui/src/update.rs:423-435 | kaku/src/update.rs:651-663 \u2014 before extracting anything, compare \u0060kaku-gui/src/update.rs\u0060 and \u0060kaku/src/update.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 67 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. 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":"kaku-gui/src/update.rs"},"region":{"startLine":423}}}],"partialFingerprints":{"codehealthFindingId/v1":"580235a7058d0c32793bdbd005b8a4f09c5d25ca395343e3af14fa169847eb94"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): kaku/src/ai_config/tui.rs:2512-2524 | kaku/src/ai_config/tui.rs:2572-2584 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui.rs"},"region":{"startLine":2512}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd6de5abb25c3c3fbe8689966e60414a2cd5f4770a996bf347ca3634438c154a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): kaku/src/ai_config/tui/ui.rs:371-383 | kaku/src/config_tui/ui.rs:453-465 \u2014 before extracting anything, compare \u0060kaku/src/ai_config/tui/ui.rs\u0060 and \u0060kaku/src/config_tui/ui.rs\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 112 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":"kaku/src/ai_config/tui/ui.rs"},"region":{"startLine":371}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4b6ae65b518f911122a27af614c910a2f6537e315bcc540a6f41cc09a89b993"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): kaku/src/ai_config/tui/ui.rs:390-402 | kaku/src/config_tui/ui.rs:472-484 \u2014 before extracting anything, compare \u0060kaku/src/ai_config/tui/ui.rs\u0060 and \u0060kaku/src/config_tui/ui.rs\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 112 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":"kaku/src/ai_config/tui/ui.rs"},"region":{"startLine":390}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2ee4942111fe9d359c2c7280a5eeb8baac8a8ae93576b9d760066f06e854822"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): mux/src/tab.rs:1798-1810 | mux/src/tab.rs:1837-1849 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tab.rs"},"region":{"startLine":1798}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a0972de9b9f655accd1e85b34ce3420841b89f07ab8bef90fd6cd827bad6fe7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): mux/src/tmux_commands.rs:414-426 | mux/src/tmux_commands.rs:448-460 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tmux_commands.rs"},"region":{"startLine":414}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac1806c31ab2a84f3a9b9adfb84f4bf0711bf7cb7c53136969b6efd30e496649"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): mux/src/tmux_pty.rs:27-39 | mux/src/tmux_pty.rs:48-60 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tmux_pty.rs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1ad0b1183d1c4961e8003e868f2da68431f7ab7d7a5397ef82b846e9b15643e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): termwiz/src/render/terminfo.rs:657-669 | termwiz/src/render/terminfo.rs:687-699 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/render/terminfo.rs"},"region":{"startLine":657}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffba0bb7b41263faccf7ff002ff9f51b06dbdfde032531b6767a0a45123dffc0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 4): config/derive/src/attr.rs:37-48 | config/derive/src/attr.rs:226-237 | crates/wezterm-dynamic/derive/src/attr.rs:33-44 | crates/wezterm-dynamic/derive/src/attr.rs:322-333 \u2014 before extracting anything, compare \u0060config/derive/src/attr.rs\u0060 and \u0060crates/wezterm-dynamic/derive/src/attr.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 138 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":"config/derive/src/attr.rs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"631417f20e262a8189abf2232d8ba8f298ebc7dbe0b19b6ef4bf6613381f71de"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 4): kaku/src/cli/activate_tab.rs:73-84 | kaku/src/cli/rename_workspace.rs:38-49 | kaku/src/cli/set_tab_title.rs:37-48 | kaku/src/cli/set_window_title.rs:38-49 \u2014 before extracting anything, compare \u0060kaku/src/cli/rename_workspace.rs\u0060 and \u0060kaku/src/cli/set_window_title.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 35 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/cli/activate_tab.rs"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a19f054ce6580dd2c9ba8645aea1f927412c8b588a94af17ab63a0171c44c18"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): mux/src/tab.rs:1782-1795 | mux/src/tab.rs:1824-1835 | mux/src/tab.rs:2082-2095 \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":"mux/src/tab.rs"},"region":{"startLine":1782}}}],"partialFingerprints":{"codehealthFindingId/v1":"8816f1454a4c07db5f4a68f857aba30e71683876d7fca7c620659ab949d1813d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): mux/src/tmux_commands.rs:1003-1014 | mux/src/tmux_commands.rs:1087-1098 | mux/src/tmux_commands.rs:1201-1212 \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":"mux/src/tmux_commands.rs"},"region":{"startLine":1003}}}],"partialFingerprints":{"codehealthFindingId/v1":"01f428535d3a21c5e371296df17403e71300ec42e6ef5bc1ab276741a5574997"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): config/derive/src/bound.rs:5-16 | crates/wezterm-dynamic/derive/src/bound.rs:5-16 \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":"config/derive/src/bound.rs"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2a31fb4501617d80a1a967b221171e3a89d84dfd841a915aa2f9841471fb3c1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): config/src/keyassignment.rs:364-375 | mux/src/domain.rs:315-326 \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":"config/src/keyassignment.rs"},"region":{"startLine":364}}}],"partialFingerprints":{"codehealthFindingId/v1":"5dd93d2fe88161d4bad5a58bd1d455e98f6b2e7022ca8374df666bcfec570fe8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/bintree/src/lib.rs:326-337 | crates/bintree/src/lib.rs:340-351 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/bintree/src/lib.rs"},"region":{"startLine":326}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2195ad67056121955ebe5c1d4e799c0b0fb6a6cc05b65bd39fabd0332b41d84"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/bintree/src/lib.rs:362-373 | crates/bintree/src/lib.rs:384-395 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/bintree/src/lib.rs"},"region":{"startLine":362}}}],"partialFingerprints":{"codehealthFindingId/v1":"903aeeda1208760bdd521a796afe6ecf9e5741c2186e07fc5461f3022a38a7c0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201312 lines \u00D7 2): crates/codec/src/lib.rs:214-223 | crates/codec/src/lib.rs:260-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":"crates/codec/src/lib.rs"},"region":{"startLine":214}}}],"partialFingerprints":{"codehealthFindingId/v1":"203dad22e0426fe80334f6cddde56d5d56e7cdf87001c52d7e716fbf4efdf915"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/tabout/src/lib.rs:32-43 | crates/tabout/src/lib.rs:147-158 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/tabout/src/lib.rs"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"3780303de05831dec73638e442104375f8088bd75a397309512d1b3dcaca6d2a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): crates/wezterm-ssh/src/auth.rs:98-112 | crates/wezterm-ssh/src/auth.rs:292-303 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/auth.rs"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"66473470d24585f5f354e67bf9d87551d34b5c39453f69064f3e2de907ac3eef"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): kaku-gui/src/ai_tools/search.rs:694-705 | kaku-gui/src/ai_tools/search.rs:877-888 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_tools/search.rs"},"region":{"startLine":694}}}],"partialFingerprints":{"codehealthFindingId/v1":"8fde52e99aade0fe575612915576161070732de43a8076670873062b64a195a7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201312 lines \u00D7 2): kaku-gui/src/overlay/ai_chat/render.rs:467-478 | kaku-gui/src/overlay/ai_chat/render.rs:751-760 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/render.rs"},"region":{"startLine":467}}}],"partialFingerprints":{"codehealthFindingId/v1":"06074d7d08ec0e6306a4e546f1bdecd483c396a71084d41bd096cebd77789d7e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): kaku-gui/src/overlay/launcher.rs:199-210 | kaku-gui/src/overlay/selector.rs:75-86 \u2014 before extracting anything, compare \u0060kaku-gui/src/overlay/launcher.rs\u0060 and \u0060kaku-gui/src/overlay/selector.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 178 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/launcher.rs"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ae1d616e86ccf324b5290051ce69d58abf453f959b28a1ff36e2f4e7b9e9dac"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): kaku-gui/src/termwindow/resize.rs:596-607 | kaku-gui/src/termwindow/resize.rs:682-693 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/resize.rs"},"region":{"startLine":596}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b5d41abae7c93b0f3e4bfd52539a6d7c433c147211ed6db04f39510655ea212"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): kaku/src/ai_config/tui.rs:2243-2254 | kaku/src/ai_config/tui.rs:2280-2291 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui.rs"},"region":{"startLine":2243}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc96e2fc10c458142750ecddf829c916a45a01fb6e2d3a2122616a31d5c62ce0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201312 lines \u00D7 2): kaku/src/ai_config/tui/ui.rs:18-29 | kaku/src/config_tui/ui.rs:98-108 \u2014 before extracting anything, compare \u0060kaku/src/ai_config/tui/ui.rs\u0060 and \u0060kaku/src/config_tui/ui.rs\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 112 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":"kaku/src/ai_config/tui/ui.rs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"903a63447015d48d51c76483b9200ef6708564f78dd1620fb18bef4820f72107"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): mux/src/tab.rs:441-452 | mux/src/tab.rs:511-522 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tab.rs"},"region":{"startLine":441}}}],"partialFingerprints":{"codehealthFindingId/v1":"65242167073a6158c0d13e5338c0bb4d84033a1e9a7bd20d779e221537e31655"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): term/src/screen.rs:683-694 | term/src/screen.rs:952-963 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/screen.rs"},"region":{"startLine":683}}}],"partialFingerprints":{"codehealthFindingId/v1":"344af441cb6967a9be089743225c4508d7b0aa180bd4e3c3c80bc9fb614de416"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 7): kaku-gui/src/customglyph.rs:5780-5790 | kaku-gui/src/customglyph.rs:5820-5830 | kaku-gui/src/customglyph.rs:5850-5860 | kaku-gui/src/customglyph.rs:5884-5894 | kaku-gui/src/customglyph.rs:5920-5930 | kaku-gui/src/customglyph.rs:5948-5958 | kaku-gui/src/customglyph.rs:5984-5994 \u2014 all 7 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":"kaku-gui/src/customglyph.rs"},"region":{"startLine":5780}}}],"partialFingerprints":{"codehealthFindingId/v1":"a95d32dc332bb723e2778fec9bf6437cc5c7066dce97197b8b9b95566419333b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 4): kaku/src/ai_config/tui/ui.rs:372-382 | kaku/src/ai_config/tui/ui.rs:458-468 | kaku/src/config_tui/ui.rs:386-396 | kaku/src/config_tui/ui.rs:454-464 \u2014 before extracting anything, compare \u0060kaku/src/ai_config/tui/ui.rs\u0060 and \u0060kaku/src/config_tui/ui.rs\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 112 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":"kaku/src/ai_config/tui/ui.rs"},"region":{"startLine":372}}}],"partialFingerprints":{"codehealthFindingId/v1":"56a12537a2230e3a1fae86baee8cc7836ed246da8d63806d2ca06e8d19d4ca56"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): config/derive/src/attr.rs:21-31 | crates/wezterm-dynamic/derive/src/attr.rs:17-27 | crates/wezterm-dynamic/derive/src/attr.rs:292-302 \u2014 before extracting anything, compare \u0060config/derive/src/attr.rs\u0060 and \u0060crates/wezterm-dynamic/derive/src/attr.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 138 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":"config/derive/src/attr.rs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffd4f8ec936e18e558aab5b1bb3b762441c59bc2675d4bad51232fc450b26673"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): crates/wezterm-escape-parser/src/csi.rs:2447-2457 | crates/wezterm-escape-parser/src/csi.rs:2466-2476 | crates/wezterm-escape-parser/src/csi.rs:2484-2494 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/csi.rs"},"region":{"startLine":2447}}}],"partialFingerprints":{"codehealthFindingId/v1":"627c30b18919385ab0c36aa0942db8337d9b192b972446900dc867cd88b17b83"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): kaku-gui/src/termwindow/tab_rename.rs:876-886 | kaku-gui/src/termwindow/tab_rename.rs:907-917 | kaku-gui/src/termwindow/tab_rename.rs:934-944 \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":"kaku-gui/src/termwindow/tab_rename.rs"},"region":{"startLine":876}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fdbc4393d817d9d778323dbe2b20fffe89f1c8ae0c62fd50b4e09bd1dbcaa67"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201311 lines \u00D7 3): kaku/src/ai_config/tui.rs:2825-2834 | kaku/src/ai_config/tui.rs:2836-2845 | kaku/src/ai_config/tui.rs:2930-2940 \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":"kaku/src/ai_config/tui.rs"},"region":{"startLine":2825}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ff4a6aa021f5a5922a8806bc851c3d1b2b3d033e6a6896bd94dd89f555c6ca3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/wezterm-escape-parser/src/csi.rs:2158-2168 | crates/wezterm-escape-parser/src/csi.rs:2170-2180 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/csi.rs"},"region":{"startLine":2158}}}],"partialFingerprints":{"codehealthFindingId/v1":"26f3d2cdcb0242f711c719ea598838f3afb73ff25b7fe1fe8844400d467106d2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201311 lines \u00D7 2): crates/wezterm-font/src/ftwrap.rs:1355-1363 | crates/wezterm-font/src/hbwrap.rs:90-100 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/ftwrap.rs"},"region":{"startLine":1355}}}],"partialFingerprints":{"codehealthFindingId/v1":"e88aed135a9bf764c4d220d5a5f9e159f42a2ec0612639692148921bbb0b8eeb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/wezterm-ssh/src/pty.rs:106-116 | crates/wezterm-ssh/src/pty.rs:143-153 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/pty.rs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d82048d4c2f0b4d8c5e9646670d6683cf6a2920586a51b5d752233926c9b818"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): kaku-gui/src/commands.rs:595-605 | kaku-gui/src/commands.rs:615-625 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/commands.rs"},"region":{"startLine":595}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef2f709171fc27197378f92c4531d4406cc9cf2d872580a02f40d4b5206f42b0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): kaku-gui/src/customglyph.rs:5563-5573 | kaku-gui/src/customglyph.rs:5599-5609 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/customglyph.rs"},"region":{"startLine":5563}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2f1b2cfbb06516744927ce4910595bddb8ea2c5222dc7c25a28454dce3c69a8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): kaku-gui/src/customglyph.rs:5581-5591 | kaku-gui/src/customglyph.rs:5617-5627 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/customglyph.rs"},"region":{"startLine":5581}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca6abad9fbd176c7badfd1975223711f6fb9bf0a1e292a5403707ccfec11786c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): kaku-gui/src/overlay/ai_chat/state.rs:889-899 | kaku-gui/src/overlay/ai_chat/state.rs:2502-2512 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/state.rs"},"region":{"startLine":889}}}],"partialFingerprints":{"codehealthFindingId/v1":"874f7d4bbfd6825f0deab52d16b8591649d2cb9e04df827475d1d524f95ae659"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): kaku-gui/src/overlay/copy.rs:1685-1695 | kaku-gui/src/overlay/quickselect.rs:674-684 \u2014 before extracting anything, compare \u0060kaku-gui/src/overlay/copy.rs\u0060 and \u0060kaku-gui/src/overlay/quickselect.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 96 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/copy.rs"},"region":{"startLine":1685}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac3dcf1631b9fce23a54f63394db1debdc44bd9b7dc73e03e3a4eeb22207e2f1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): kaku-gui/src/termwindow/render/mod.rs:707-719 | kaku-gui/src/termwindow/render/mod.rs:765-775 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/mod.rs"},"region":{"startLine":707}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6d115c12f69951170611158a36c92b375bb78216153c9bedac7c31a1b53bb43"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): mux/src/connui.rs:27-37 | mux/src/ssh.rs:48-58 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/connui.rs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1c9ae67138462123a498a211a045e60ff68e94c79fbc6b98e39f7ffee788a83"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): mux/src/connui.rs:373-383 | mux/src/connui.rs:393-403 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/connui.rs"},"region":{"startLine":373}}}],"partialFingerprints":{"codehealthFindingId/v1":"67518823006aca7686e2c7acabc1835bbea490eff891060d25e1d87d6edb5600"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): term/src/screen.rs:801-811 | term/src/screen.rs:875-885 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/screen.rs"},"region":{"startLine":801}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6f06aa018787ed628790047650593f5b9c35884d59f2faf91327db80fd5280f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): term/src/terminalstate/mod.rs:2659-2669 | term/src/terminalstate/mod.rs:2716-2726 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/mod.rs"},"region":{"startLine":2659}}}],"partialFingerprints":{"codehealthFindingId/v1":"393527bbb160d80513497f45094cf8e7fc9da193ada6175304359de3bcbf6f30"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201310 lines \u00D7 5): crates/wezterm-mux-server-impl/src/sessionhandler.rs:434-442 | crates/wezterm-mux-server-impl/src/sessionhandler.rs:472-480 | crates/wezterm-mux-server-impl/src/sessionhandler.rs:492-500 | crates/wezterm-mux-server-impl/src/sessionhandler.rs:661-670 | crates/wezterm-mux-server-impl/src/sessionhandler.rs:692-700 \u2014 all 5 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-mux-server-impl/src/sessionhandler.rs"},"region":{"startLine":434}}}],"partialFingerprints":{"codehealthFindingId/v1":"12e5a3d528fea3537216d2ed1f6b84eb8820dab49f8d2cbff302951bfbbe27ec"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201310 lines \u00D7 3): crates/wezterm-dynamic/derive/src/attr.rs:145-154 | crates/wezterm-dynamic/derive/src/attr.rs:172-180 | crates/wezterm-dynamic/derive/src/attr.rs:200-208 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-dynamic/derive/src/attr.rs"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1964cadfbd5453b70c83cd46f8e3aa5699feac01c04b2d60a3cd6b7498236f2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): kaku-gui/src/termwindow/charselect.rs:522-531 | kaku-gui/src/termwindow/palette.rs:771-780 | kaku-gui/src/termwindow/paneselect.rs:125-134 \u2014 before extracting anything, compare \u0060kaku-gui/src/termwindow/charselect.rs\u0060 and \u0060kaku-gui/src/termwindow/paneselect.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 33 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/charselect.rs"},"region":{"startLine":522}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c2246b0ef85f3b02f1c7d7b55bdf4f8c2540e67b0eb31647ec72521172071f6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): crates/wezterm-dynamic/src/error.rs:264-273 | crates/wezterm-font/src/parser.rs:367-376 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-dynamic/src/error.rs"},"region":{"startLine":264}}}],"partialFingerprints":{"codehealthFindingId/v1":"379ba1d061940fa48a306071af4013084a6af456c150dfd74fdfd4ab2ca12cca"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): crates/wezterm-font/src/ftwrap.rs:1117-1126 | crates/wezterm-font/src/ftwrap.rs:1130-1139 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/ftwrap.rs"},"region":{"startLine":1117}}}],"partialFingerprints":{"codehealthFindingId/v1":"93a94a9bee4345d643865480da0d1fa49769f5def38f4040beb7bb9a109011cf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): kaku-gui/src/ai_conversations.rs:229-238 | kaku-gui/src/ai_conversations.rs:293-302 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_conversations.rs"},"region":{"startLine":229}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ac02a169372515e3c56f51f1e8168b95fbe9f75def6977ddf6117b6b564561e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201310 lines \u00D7 2): kaku-gui/src/glyphcache.rs:1208-1217 | kaku-gui/src/glyphcache.rs:1231-1239 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/glyphcache.rs"},"region":{"startLine":1208}}}],"partialFingerprints":{"codehealthFindingId/v1":"1065a9d7d65ccf3e633d7883cf443fb8e23423e3e831528d94a57425d20c6c27"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): kaku-gui/src/overlay/ai_chat/state.rs:878-887 | kaku-gui/src/overlay/ai_chat/state.rs:2491-2500 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/state.rs"},"region":{"startLine":878}}}],"partialFingerprints":{"codehealthFindingId/v1":"da0d5ed6ab3e654a32edebb20b7a0ff12fbba4c717854c44b33f25c30d08d178"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): kaku-gui/src/overlay/copy.rs:213-222 | kaku-gui/src/overlay/quickselect.rs:307-316 \u2014 before extracting anything, compare \u0060kaku-gui/src/overlay/copy.rs\u0060 and \u0060kaku-gui/src/overlay/quickselect.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 96 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/copy.rs"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ed01ee4f041c0d2efe8cf99f89006501efe3b3144769c5587d260fd9f8430d7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): kaku-gui/src/overlay/copy.rs:307-316 | kaku-gui/src/overlay/quickselect.rs:845-854 \u2014 before extracting anything, compare \u0060kaku-gui/src/overlay/copy.rs\u0060 and \u0060kaku-gui/src/overlay/quickselect.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 96 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/copy.rs"},"region":{"startLine":307}}}],"partialFingerprints":{"codehealthFindingId/v1":"22f2e6f003b85f47a8de4d1ef2a0260d009ba5a3ddad61d5361592ca27278106"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201310 lines \u00D7 2): kaku-gui/src/overlay/copy.rs:357-365 | kaku-gui/src/overlay/copy.rs:424-433 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/copy.rs"},"region":{"startLine":357}}}],"partialFingerprints":{"codehealthFindingId/v1":"5847d7a2e30e59beacfaeb0c3d985385a9fc0896a88f7ac9141e865918586d01"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): kaku-gui/src/overlay/launcher.rs:679-688 | kaku-gui/src/overlay/selector.rs:294-303 \u2014 before extracting anything, compare \u0060kaku-gui/src/overlay/launcher.rs\u0060 and \u0060kaku-gui/src/overlay/selector.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 178 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/launcher.rs"},"region":{"startLine":679}}}],"partialFingerprints":{"codehealthFindingId/v1":"c59097c9deca4603e45040e4490c52450f9ce1693d184f944f4cdaba47a38bf4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): kaku-gui/src/termwindow/charselect.rs:393-402 | kaku-gui/src/termwindow/paneselect.rs:62-71 \u2014 before extracting anything, compare \u0060kaku-gui/src/termwindow/charselect.rs\u0060 and \u0060kaku-gui/src/termwindow/paneselect.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 33 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/charselect.rs"},"region":{"startLine":393}}}],"partialFingerprints":{"codehealthFindingId/v1":"4cae150ffc9b3afc2480e7654f9c4efcafe102d0ddc65509b49537dad462a448"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): kaku-gui/src/termwindow/mod.rs:4309-4318 | kaku-gui/src/termwindow/mod.rs:4333-4342 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":4309}}}],"partialFingerprints":{"codehealthFindingId/v1":"e51b268b76a05cf250e57faab61eef119a932bd29dabd84eb4885ce4a5f3e4dc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): kaku-gui/src/termwindow/mouseevent.rs:1785-1794 | kaku-gui/src/termwindow/mouseevent.rs:1811-1820 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mouseevent.rs"},"region":{"startLine":1785}}}],"partialFingerprints":{"codehealthFindingId/v1":"677e3d89c42647af4978e62544ee0e705e15001488c426bbb5e37465883c059c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): kaku-gui/src/termwindow/selection.rs:26-35 | kaku-gui/src/termwindow/selection.rs:92-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":"kaku-gui/src/termwindow/selection.rs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"58c86b63e8535c6f4cce5f12a3011cc66d7010b3fbe016d95f873e31d6896c33"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): kaku-gui/src/update.rs:350-359 | kaku/src/update.rs:570-579 \u2014 before extracting anything, compare \u0060kaku-gui/src/update.rs\u0060 and \u0060kaku/src/update.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 67 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. 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":"kaku-gui/src/update.rs"},"region":{"startLine":350}}}],"partialFingerprints":{"codehealthFindingId/v1":"01b40ad237d86ae7712a03ed554994dd9c2b273008c5f1a968e6093421541784"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): kaku/src/ai_config/tui.rs:2994-3003 | kaku/src/ai_config/tui/providers/codex.rs:319-328 \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":"kaku/src/ai_config/tui.rs"},"region":{"startLine":2994}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6249c3110d417adb0d8cbdd2c5b30ccf8af5d87f4f3006683ea39176c8017e9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): kaku/src/cli/get_text.rs:47-56 | kaku/src/cli/get_text.rs:60-69 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/cli/get_text.rs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"d11607f03e650dd2603974d9a3948682f20cb7293ddccacb5c2788396e738186"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u201310 lines \u00D7 2): mux/src/lib.rs:1763-1770 | mux/src/lib.rs:1820-1829 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/lib.rs"},"region":{"startLine":1763}}}],"partialFingerprints":{"codehealthFindingId/v1":"68ee577e822b91dd7f9d9709ac3c6f41041a395b0d6bc0bdf2f24df34d4ed0e5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): mux/src/pane_encoding.rs:132-141 | mux/src/pane_encoding.rs:239-248 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/pane_encoding.rs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a210210084ef14429107cfe5f1f26b3fa485baf3609728ed4335281a358642f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u201310 lines \u00D7 2): mux/src/tmux_commands.rs:703-712 | mux/src/tmux_commands.rs:813-820 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tmux_commands.rs"},"region":{"startLine":703}}}],"partialFingerprints":{"codehealthFindingId/v1":"478e71f3bc3159fdcc1598bdb0e75c9c0096416f0266f41a1eeb6f0aaff27d3a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): term/src/terminalstate/performer.rs:629-638 | term/src/terminalstate/performer.rs:646-655 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/performer.rs"},"region":{"startLine":629}}}],"partialFingerprints":{"codehealthFindingId/v1":"02d7d9aa7f7d00d79b2b342035d81da6ba3761541eb1d308293c9956f7698357"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): kaku-gui/src/termwindow/mod.rs:5253-5261 | kaku-gui/src/termwindow/mod.rs:5266-5274 | kaku-gui/src/termwindow/mod.rs:5282-5290 \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":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":5253}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd0a70ddebe605cb41ac52c30c5e7d3b8ab3fa4470f7090b3404196a7b38c21c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): kaku/src/cli/rename_workspace.rs:27-35 | kaku/src/cli/set_tab_title.rs:26-34 | kaku/src/cli/set_window_title.rs:27-35 \u2014 before extracting anything, compare \u0060kaku/src/cli/rename_workspace.rs\u0060 and \u0060kaku/src/cli/set_window_title.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 35 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/cli/rename_workspace.rs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"c200bdc3d10f2cc01aaa770bb13cc473c2eb959dd52944bb0631558c1ec3b25d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): config/derive/src/configmeta.rs:26-35 | crates/wezterm-dynamic/derive/src/todynamic.rs:29-37 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/derive/src/configmeta.rs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"d918ae4b174d5f3488e439ca574396334580ee0e90694687dd9e329f4e302f86"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): config/src/lua.rs:43-51 | config/src/lua.rs:65-73 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/lua.rs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"c91b1bf94f8eba8d815c13e4f908049b17ebfb05f9112cf78152e11b352a744d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u20139 lines \u00D7 2): crates/bidi/src/lib.rs:568-576 | crates/bidi/src/lib.rs:776-782 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/bidi/src/lib.rs"},"region":{"startLine":568}}}],"partialFingerprints":{"codehealthFindingId/v1":"dff51009e1511a84618120b59b1396c73e0f350556766ec40cd250ac5f0030a3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): crates/wezterm-client/src/client.rs:242-250 | crates/wezterm-client/src/client.rs:278-286 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/client.rs"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a728664430ddcfe89c7eee43c46c78f5cc4cfb46f85221758f7e49d3e7e49d7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): crates/wezterm-dynamic/derive/src/fromdynamic.rs:93-101 | crates/wezterm-dynamic/derive/src/fromdynamic.rs:157-165 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-dynamic/derive/src/fromdynamic.rs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2b898f4aa8a32c22bbdba5bf1a3b4aa5fb8095a2bed91b030e71f3cea54de91"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): crates/wezterm-font/src/lib.rs:833-841 | crates/wezterm-font/src/lib.rs:853-861 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/lib.rs"},"region":{"startLine":833}}}],"partialFingerprints":{"codehealthFindingId/v1":"88489bc1b9bd811a0a57343caeee4ecb2730e94e33d56897dc896a2a32b1613f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): crates/wezterm-mux-server-impl/src/sessionhandler.rs:587-595 | crates/wezterm-mux-server-impl/src/sessionhandler.rs:613-621 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-mux-server-impl/src/sessionhandler.rs"},"region":{"startLine":587}}}],"partialFingerprints":{"codehealthFindingId/v1":"58f8bb3a1fd51900234ce1fd827ad4d9d38c049ac96b05925592a8095c491f13"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): crates/wezterm-ssh/src/config.rs:255-263 | crates/wezterm-ssh/src/config.rs:267-275 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/config.rs"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a2935499d466c6b7fdb16e48c4eace976d486759d986350bbecb09f0abf96b0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): crates/wezterm-ssh/src/pty.rs:163-171 | crates/wezterm-ssh/src/pty.rs:189-197 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/pty.rs"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7fbcd692ef5dd56226e8e20cd26a40045627236372eb45e6ca100898a15de1f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): kaku-gui/src/ai_chat_engine/approval.rs:523-531 | kaku-gui/src/ai_chat_engine/approval.rs:537-545 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_chat_engine/approval.rs"},"region":{"startLine":523}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbdcd8f442304fd4992cea14d5843ca8d4987101378dc851ab497c2a5d4e5728"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): kaku-gui/src/ai_chat_engine/mod.rs:1100-1108 | kaku-gui/src/overlay/ai_chat/state.rs:1795-1803 \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":"kaku-gui/src/ai_chat_engine/mod.rs"},"region":{"startLine":1100}}}],"partialFingerprints":{"codehealthFindingId/v1":"96ff6479b8a956069539919253c40003c04118d747f3ab21d017b284938171ec"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): kaku-gui/src/customglyph.rs:5523-5531 | kaku-gui/src/customglyph.rs:5598-5606 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/customglyph.rs"},"region":{"startLine":5523}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c5dee2ee704949222a5fe480585355928380fd8ecf12442374caae82d08e0df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): kaku-gui/src/glyphcache.rs:329-337 | kaku-gui/src/glyphcache.rs:345-353 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/glyphcache.rs"},"region":{"startLine":329}}}],"partialFingerprints":{"codehealthFindingId/v1":"146a663d6f9cc86303aaa6a2b0d63fc86a1353c60a38573200f4ce6e54e5154a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u20139 lines \u00D7 2): kaku-gui/src/glyphcache.rs:1185-1192 | kaku-gui/src/utilsprites.rs:187-195 \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":"kaku-gui/src/glyphcache.rs"},"region":{"startLine":1185}}}],"partialFingerprints":{"codehealthFindingId/v1":"606679a67eb0e528b2b421b5e9fcbd060f33947a0b2a0a9457566f21bac53b1e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): kaku-gui/src/overlay/ai_chat/markdown.rs:515-523 | kaku-gui/src/overlay/ai_chat/markdown.rs:534-542 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/markdown.rs"},"region":{"startLine":515}}}],"partialFingerprints":{"codehealthFindingId/v1":"b75df5f08756b2975fb168b207a9219a3705c46a0c249126e07941eab9e5a79f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): kaku-gui/src/session_restore.rs:356-364 | kaku-gui/src/session_restore.rs:894-902 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/session_restore.rs"},"region":{"startLine":356}}}],"partialFingerprints":{"codehealthFindingId/v1":"2525829bb1422e52295f00f4ef18d03bac375310d8dcc69aa99ae39cbb96dac9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): kaku-gui/src/session_restore.rs:1332-1340 | kaku-gui/src/session_restore.rs:1354-1362 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/session_restore.rs"},"region":{"startLine":1332}}}],"partialFingerprints":{"codehealthFindingId/v1":"066ddac96365b3332ff39956d6f4eccedec87accdaa367f8e5105c9c6982489d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): kaku-gui/src/termwindow/tab_rename.rs:106-114 | kaku-gui/src/termwindow/tab_rename.rs:115-123 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/tab_rename.rs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ac56b091856b137683cdd8830d3a901c63cd5e9c73fa47cf99f7652c2ff1ed2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): kaku/src/ai_config/tui.rs:2860-2868 | kaku/src/ai_config/tui.rs:2942-2950 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui.rs"},"region":{"startLine":2860}}}],"partialFingerprints":{"codehealthFindingId/v1":"a468ba515e6bf52dc52cfc54e53ba64ffa2a936424afa7d48d4294b16d5b79fd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): kaku/src/reset.rs:458-466 | kaku/src/reset.rs:547-555 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/reset.rs"},"region":{"startLine":458}}}],"partialFingerprints":{"codehealthFindingId/v1":"564da37029d6871e5a3544d1684d544d41eb100add3cca45632e760181168803"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): mux/src/tab.rs:1201-1209 | mux/src/tab.rs:1232-1240 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tab.rs"},"region":{"startLine":1201}}}],"partialFingerprints":{"codehealthFindingId/v1":"26c34968186e9075ca5df2687b86a21a1e740594ce45ec0388e28865b7088bbb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): mux/src/tab.rs:1212-1220 | mux/src/tab.rs:1243-1251 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tab.rs"},"region":{"startLine":1212}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a3160920783aff2f3b4ff2bcd537a9161d0346f8a8d95bf6e6f8f5799344408"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): mux/src/tmux_commands.rs:663-671 | mux/src/tmux_commands.rs:902-910 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tmux_commands.rs"},"region":{"startLine":663}}}],"partialFingerprints":{"codehealthFindingId/v1":"6114c57f0d94560b4b6657f09fc7558215bcb697a825d5859a6d2fd083454d4a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): termwiz/src/render/terminfo.rs:641-649 | termwiz/src/render/terminfo.rs:671-679 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/render/terminfo.rs"},"region":{"startLine":641}}}],"partialFingerprints":{"codehealthFindingId/v1":"a918963c07616517ec91c3956235be8e9735c282ea0526c90b4b72dde165f70d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): config/derive/src/attr.rs:132-139 | crates/wezterm-dynamic/derive/src/attr.rs:282-289 \u2014 before extracting anything, compare \u0060config/derive/src/attr.rs\u0060 and \u0060crates/wezterm-dynamic/derive/src/attr.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 138 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":"config/derive/src/attr.rs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f59c21243c34d1980de2a2af780d28bfafeb28185ef32f9d2436bf4fcde9938"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): crates/tabout/src/lib.rs:96-103 | crates/tabout/src/lib.rs:202-209 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/tabout/src/lib.rs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b48f94c31cad960aec5a161666d22a5c7d452c78d64de21de0a2831bc8e9581"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6\u20138 lines \u00D7 2): crates/wezterm-client/src/domain.rs:918-925 | mux/src/domain.rs:195-200 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/domain.rs"},"region":{"startLine":918}}}],"partialFingerprints":{"codehealthFindingId/v1":"94ce3fc5fb3a96805ff1bc30b8c414f46c1c00dfdd46408e548e3bc852de63cc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): crates/wezterm-font/src/rasterizer/colr.rs:117-124 | crates/wezterm-font/src/rasterizer/colr.rs:150-157 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/rasterizer/colr.rs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6e5fa2d0a76886cc2cf6ce4b36df62f5df990586f407b65090efab3201436f8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): crates/wezterm-input-types/src/lib.rs:1974-1981 | termwiz/src/input.rs:599-606 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-input-types/src/lib.rs"},"region":{"startLine":1974}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffbab522ff9dcb5747c02b90692bc058d5d70342a9d55a8d3b2c346d3b267bdf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): kaku-gui/src/ai_chat_engine/suggestion.rs:45-52 | kaku-gui/src/ai_chat_engine/title.rs:35-42 \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":"kaku-gui/src/ai_chat_engine/suggestion.rs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"34c0422d40538f998258799bf8c15d1aaf585052e19cd1beb673a7736458f9eb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): kaku-gui/src/ai_client/mod.rs:255-262 | kaku-gui/src/ai_client/mod.rs:774-781 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_client/mod.rs"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"e66c58fad2061a97a48b185b67b51c94015f5d00d995e5685d82d603df71a87a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): kaku-gui/src/ai_client/mod.rs:654-661 | kaku-gui/src/ai_client/mod.rs:751-758 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_client/mod.rs"},"region":{"startLine":654}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f0400883296552acd7d8b68744de87135e86ea521b5718e1b26b9f077b3b4a6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): kaku-gui/src/ai_client/responses.rs:288-295 | kaku-gui/src/ai_client/responses.rs:308-315 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_client/responses.rs"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"92d19dbee08e4f0ae3583eb49c2121085d4062ca440eef46b50961099590b6fc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): kaku-gui/src/ai_tools/search.rs:668-675 | kaku-gui/src/ai_tools/search.rs:820-827 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_tools/search.rs"},"region":{"startLine":668}}}],"partialFingerprints":{"codehealthFindingId/v1":"d01ee7ac50f23d7392b42e4a18a3ff6c3b84918de283ded28a7cf938943b0888"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): kaku-gui/src/customglyph.rs:5676-5683 | kaku-gui/src/customglyph.rs:5706-5713 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/customglyph.rs"},"region":{"startLine":5676}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b072123dbc4af597699e70486d76d2f65ef1c99c3be6ea6b999bc1d3de51fd2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): kaku-gui/src/customglyph.rs:5691-5698 | kaku-gui/src/customglyph.rs:5721-5728 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/customglyph.rs"},"region":{"startLine":5691}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c3d7a6e0ba026cfde88a3eb04c1ddfe3453d79eea9dade96e06d2de691dcaf4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): kaku-gui/src/overlay/copy.rs:436-443 | kaku-gui/src/overlay/quickselect.rs:921-928 \u2014 before extracting anything, compare \u0060kaku-gui/src/overlay/copy.rs\u0060 and \u0060kaku-gui/src/overlay/quickselect.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 96 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/copy.rs"},"region":{"startLine":436}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0f0766e0f88f37430fc741fb5e750181fd032ec4c451e2d0bca80ceae0f3942"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): kaku-gui/src/overlay/copy.rs:856-863 | kaku-gui/src/overlay/copy.rs:871-878 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/copy.rs"},"region":{"startLine":856}}}],"partialFingerprints":{"codehealthFindingId/v1":"75f8d7430f50187f87ce6cf02a1704186ccbb65a1f804f0451857c5052691442"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u20138 lines \u00D7 2): kaku-gui/src/stats.rs:53-59 | kaku-gui/src/stats.rs:68-75 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/stats.rs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"62d053a8a27b203b68e84b053ad9a3e88dac76226cfa1606a4f77f0dd60d5aa8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): kaku-gui/src/termwindow/mod.rs:5844-5851 | kaku-gui/src/termwindow/mod.rs:5967-5974 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":5844}}}],"partialFingerprints":{"codehealthFindingId/v1":"26c0ef5f67532cff2dc796e2da75e1ee0fdfdb4a5395d2981806f328524209f5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): kaku-gui/src/termwindow/palette.rs:587-594 | kaku-gui/src/termwindow/palette.rs:617-624 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/palette.rs"},"region":{"startLine":587}}}],"partialFingerprints":{"codehealthFindingId/v1":"69e625c2bce9de214ff19d4d270e33e519c6c784431794b379cdffd54084da1b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): kaku-gui/src/update.rs:379-386 | kaku/src/update.rs:611-618 \u2014 before extracting anything, compare \u0060kaku-gui/src/update.rs\u0060 and \u0060kaku/src/update.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 67 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. 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":"kaku-gui/src/update.rs"},"region":{"startLine":379}}}],"partialFingerprints":{"codehealthFindingId/v1":"79eac86f9aa786b4f75c904381af20c499cfa71c78af45e2b88b0509fb90952e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): kaku/src/ai_config/tui.rs:2537-2544 | kaku/src/ai_config/tui.rs:2598-2606 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui.rs"},"region":{"startLine":2537}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b8fcef3867241491a84b55c59e0a8b584cb6fc2ac288b85b3850e0b382ce9c3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): kaku/src/ai_config/tui/providers/mod.rs:1032-1039 | kaku/src/ai_config/tui/providers/mod.rs:1051-1058 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui/providers/mod.rs"},"region":{"startLine":1032}}}],"partialFingerprints":{"codehealthFindingId/v1":"eec9a6c7917cb5c62b347d8ef22fb1609e5dba833c11143b81bd60b017e11b8e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): kaku/src/config_tui/mod.rs:876-883 | kaku/src/config_tui/mod.rs:914-921 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/config_tui/mod.rs"},"region":{"startLine":876}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f7e6ef3bdf92ae919bba312429559bfc3b9d60a18aba428daa4bb1e8ee3a516"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): mux/src/tab.rs:1732-1739 | mux/src/tab.rs:1749-1756 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/tab.rs"},"region":{"startLine":1732}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1a182e7c37470e1aaea5f664303a43e91dac0f679c1ab73a87dc64fbb929c0d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): crates/wezterm-client/src/client.rs:216-222 | crates/wezterm-client/src/client.rs:244-250 | crates/wezterm-client/src/client.rs:280-286 | crates/wezterm-client/src/client.rs:300-306 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/client.rs"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cf13b2e97b5263777b6d423e36d702255be37c149814bfb85d629520d96c218"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): kaku-gui/src/overlay/ai_chat/types.rs:30-36 | kaku/src/kaku_theme.rs:49-55 | kaku/src/tui_core/theme.rs:28-34 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/types.rs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9c3f11a5eee9162d9ed486f738bb5fa5ce5d3f0dcd0131c58c0d96874a7fe0e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): kaku/src/ai_config/tui/providers/mod.rs:1401-1407 | kaku/src/ai_config/tui/providers/mod.rs:1808-1814 | kaku/src/ai_config/tui/providers/mod.rs:2070-2076 \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":"kaku/src/ai_config/tui/providers/mod.rs"},"region":{"startLine":1401}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b82f4505089bdc410c1043108dd42455f6faaf4b152f02b60452093c1ed1aed"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): kaku/src/reset.rs:458-464 | kaku/src/reset.rs:547-553 | kaku/src/reset.rs:649-655 \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":"kaku/src/reset.rs"},"region":{"startLine":458}}}],"partialFingerprints":{"codehealthFindingId/v1":"7419027452d76428f5dd04349f979666d610d0180e74e892ad70bedfb9195368"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): config/src/color.rs:302-309 | config/src/color.rs:354-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":"config/src/color.rs"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"88d1cb6e3fb7073979fc6892856f19b8edbd63628c9f97b1f51f54440b748bc9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): config/src/lib.rs:322-328 | config/src/lib.rs:333-339 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/lib.rs"},"region":{"startLine":322}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff1951a11adbc6a06e75508405ce067d6f6d514c39a00f38135b15db99827dce"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): crates/wezterm-client/src/domain.rs:447-453 | crates/wezterm-client/src/domain.rs:716-722 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/domain.rs"},"region":{"startLine":447}}}],"partialFingerprints":{"codehealthFindingId/v1":"d34085a7127457f2d577a0f908654f91cc573b7cf28faa1c57d176ee31e4c3d9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): crates/wezterm-escape-parser/src/csi.rs:1903-1909 | crates/wezterm-escape-parser/src/csi.rs:1932-1938 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/csi.rs"},"region":{"startLine":1903}}}],"partialFingerprints":{"codehealthFindingId/v1":"44ff86b8ebd8ca7fb279965573387411072c33c15a6872f960af122d541c0ac9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): crates/wezterm-escape-parser/src/csi.rs:2146-2152 | crates/wezterm-escape-parser/src/csi.rs:2170-2176 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/csi.rs"},"region":{"startLine":2146}}}],"partialFingerprints":{"codehealthFindingId/v1":"623b2f0830d88c26c1068381b77cd32daa71a747c74f513958aa8b683792260d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): crates/wezterm-escape-parser/src/osc.rs:798-804 | crates/wezterm-escape-parser/src/osc.rs:829-835 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/osc.rs"},"region":{"startLine":798}}}],"partialFingerprints":{"codehealthFindingId/v1":"f886a763ee3c29f978e94ac52e01fb0237391cf67d6572c983b469268676cc52"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): crates/wezterm-font/src/ftwrap.rs:857-863 | crates/wezterm-font/src/ftwrap.rs:874-880 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/ftwrap.rs"},"region":{"startLine":857}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc234cbd1baed56e10d84ed17adafdc6ba89ad0b7ee8c481fab8a99e46481801"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): crates/wezterm-font/src/rasterizer/freetype.rs:133-139 | crates/wezterm-font/src/rasterizer/freetype.rs:178-184 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/rasterizer/freetype.rs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b9b85390d4ae137fb0f4319054160592f94755c0698e0d2d1e1755d75dd8836"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): kaku-gui/src/ai_client/mod.rs:380-386 | kaku-gui/src/ai_client/transport.rs:304-310 \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":"kaku-gui/src/ai_client/mod.rs"},"region":{"startLine":380}}}],"partialFingerprints":{"codehealthFindingId/v1":"817ffbaf02021c36aa7636c3aaec8d7187ef2c6e849fd89f0f3ad98477f8949d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): kaku-gui/src/overlay/copy.rs:972-978 | kaku-gui/src/overlay/copy.rs:1004-1010 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/copy.rs"},"region":{"startLine":972}}}],"partialFingerprints":{"codehealthFindingId/v1":"25c53596c5994afd7bef4e1510e9d31afd7d4658970acf43afc832862a1675e8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): kaku-gui/src/termwindow/mod.rs:4078-4084 | kaku-gui/src/termwindow/mod.rs:4730-4736 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":4078}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ca9d44291c162808cbaf1b6383d4c563d53311681b9cc3968c04bc26f505aa2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): kaku-gui/src/termwindow/palette.rs:485-492 | kaku-gui/src/termwindow/palette.rs:1011-1017 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/palette.rs"},"region":{"startLine":485}}}],"partialFingerprints":{"codehealthFindingId/v1":"2cb8a9100a027cbfb98a961efa30efc06af599447c6af44c24f56677fdc6ab40"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): kaku-gui/src/termwindow/palette.rs:636-642 | kaku-gui/src/termwindow/palette.rs:742-748 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/palette.rs"},"region":{"startLine":636}}}],"partialFingerprints":{"codehealthFindingId/v1":"14c5ed8f472377af8dbca2d5b8a824602841e55c567e49e8e773a08ef1cf477a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): kaku/src/ai_config/tui.rs:905-911 | kaku/src/ai_config/tui/providers/mod.rs:573-579 \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":"kaku/src/ai_config/tui.rs"},"region":{"startLine":905}}}],"partialFingerprints":{"codehealthFindingId/v1":"204059ac24b5ebd423940323b57e88615e3a9b7095f39cb07fae9ccf2e08f60f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): kaku/src/ai_config/tui/ui.rs:478-484 | kaku/src/config_tui/ui.rs:404-410 \u2014 before extracting anything, compare \u0060kaku/src/ai_config/tui/ui.rs\u0060 and \u0060kaku/src/config_tui/ui.rs\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 112 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":"kaku/src/ai_config/tui/ui.rs"},"region":{"startLine":478}}}],"partialFingerprints":{"codehealthFindingId/v1":"e782913b3d5a512829d11dc7fcdec387422ed2cb02604c9f03c1a9d2fcabefb0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): termwiz/src/lineedit/buffer.rs:98-104 | termwiz/src/lineedit/buffer.rs:125-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":"termwiz/src/lineedit/buffer.rs"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e7f758a159874a47c9d72528c8374c11b17e0b3bb5d07e083879edbf0e28924"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 6): kaku-gui/src/overlay/ai_chat/render.rs:420-425 | kaku-gui/src/overlay/ai_chat/render.rs:526-531 | kaku-gui/src/overlay/ai_chat/render.rs:575-580 | kaku-gui/src/overlay/ai_chat/render.rs:657-662 | kaku-gui/src/overlay/ai_chat/render.rs:787-792 | kaku-gui/src/overlay/ai_chat/render.rs:852-857 \u2014 all 6 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/render.rs"},"region":{"startLine":420}}}],"partialFingerprints":{"codehealthFindingId/v1":"41ba4c50ffeab397e98304d8c2806e02131a2b14911e05b552233a128b6dd77e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): crates/wezterm-font/src/rasterizer/freetype.rs:654-659 | crates/wezterm-font/src/rasterizer/freetype.rs:679-684 | crates/wezterm-font/src/rasterizer/freetype.rs:708-713 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/rasterizer/freetype.rs"},"region":{"startLine":654}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e30d1b63db7e50d3bd8d731ed089b4bc715d06bbc4bb04c45799188fffd2b47"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): crates/wezterm-font/src/rasterizer/freetype.rs:660-665 | crates/wezterm-font/src/rasterizer/freetype.rs:685-690 | crates/wezterm-font/src/rasterizer/freetype.rs:714-719 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/rasterizer/freetype.rs"},"region":{"startLine":660}}}],"partialFingerprints":{"codehealthFindingId/v1":"6434fb0b7d3b995be840fcc5de2da282fe4eb060a9d0342b57653b73fdbfdfee"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): kaku-gui/src/overlay/ai_chat/render.rs:842-847 | kaku-gui/src/overlay/ai_chat/render.rs:851-856 | kaku-gui/src/overlay/ai_chat/render.rs:866-871 \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":"kaku-gui/src/overlay/ai_chat/render.rs"},"region":{"startLine":842}}}],"partialFingerprints":{"codehealthFindingId/v1":"b992a2e6e18a4bc234b9f08df342b0d9193bbd546eaf6d0f6f8f77b0e92c8821"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): config/src/lua.rs:894-899 | config/src/lua.rs:915-920 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/lua.rs"},"region":{"startLine":894}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d98c5394e9b480aadeb842b8db852730c7d2d8737dcaa34511da01333d7c4f2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/kaku-remote/src/share.rs:1114-1119 | crates/kaku-remote/src/share.rs:1134-1139 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/src/share.rs"},"region":{"startLine":1114}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6fa0605d9ec2bf2b13f07591f6d67c595bcb3d7b38786cab7a04ac04826d4a3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/wezterm-ssh/src/pty.rs:218-223 | crates/wezterm-ssh/src/sessioninner.rs:905-910 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/pty.rs"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a17588239c126431144b9f967a1ebc4f452006baa67709bcac18df95dc4fc1a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): kaku-gui/src/ai_tools/search.rs:68-73 | kaku-gui/src/ai_tools/search.rs:127-132 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_tools/search.rs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5cc8bfac6d810e8fd49e4704bd952fa17e0e863d3bd6017b0e5b495cc65a8fb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): kaku-gui/src/ai_tools/shell.rs:104-109 | kaku-gui/src/ai_tools/shell.rs:245-250 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_tools/shell.rs"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"960ff68eedb5780f26d638a08b5a046cefc9fceda935081fe48ba79750b3e0c9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): kaku-gui/src/overlay/copy.rs:1569-1574 | kaku-gui/src/overlay/copy.rs:1671-1676 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/copy.rs"},"region":{"startLine":1569}}}],"partialFingerprints":{"codehealthFindingId/v1":"45fbf07c6309b9b32502cb43184a65260e60d7399f788bb3133a162c556e2e7c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): kaku-gui/src/session_restore.rs:367-372 | kaku-gui/src/session_restore.rs:908-913 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/session_restore.rs"},"region":{"startLine":367}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecb32c0d21c39768b0e3d0722a25ab6562141f1ef69960aadece7794b6abdea2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): kaku-gui/src/termwindow/render/fancy_tab_bar.rs:172-177 | kaku-gui/src/termwindow/render/fancy_tab_bar.rs:217-222 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/fancy_tab_bar.rs"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"7051d09a38975dc9971f57015dad431cb31580d543a4e8e49290b4ac1c8cccd9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): kaku-gui/src/termwindow/selection.rs:105-110 | lua-api-crates/mux/src/pane.rs:54-59 \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":"kaku-gui/src/termwindow/selection.rs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"397d1704e82cf3b00923fe535e36518ce39b4593f4c9b50c4e7c9859a9c83286"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5\u20136 lines \u00D7 2): kaku-gui/src/termwindow/tab_rename.rs:769-774 | kaku-gui/src/termwindow/tab_rename.rs:778-782 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/tab_rename.rs"},"region":{"startLine":769}}}],"partialFingerprints":{"codehealthFindingId/v1":"3923d983de4d348547ad65bb317be999173647042a20f0aa1054d2fc29d61b25"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): kaku-gui/src/update.rs:181-186 | kaku-gui/src/update.rs:357-365 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/update.rs"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"daf3eaa48f10fdca32ec558564ab83c30a3c75973a2cefc800e6797114ff284b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): kaku/src/ai_config/tui.rs:2545-2550 | kaku/src/ai_config/tui.rs:2607-2612 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui.rs"},"region":{"startLine":2545}}}],"partialFingerprints":{"codehealthFindingId/v1":"dcc4c27383d51cf8f35a44745c2e381d36061008ea2f822b1067601447e20280"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): kaku/src/ai_config/tui/ui.rs:322-327 | kaku/src/ai_config/tui/ui.rs:342-347 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui/ui.rs"},"region":{"startLine":322}}}],"partialFingerprints":{"codehealthFindingId/v1":"01b8f54a00ec878c3dc3d123780037c1a22536b21a136546ac9ef6ae5c235a7e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): lua-api-crates/mux/src/pane.rs:101-106 | lua-api-crates/mux/src/pane.rs:111-116 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lua-api-crates/mux/src/pane.rs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"80e339a5df11f0eccccee24bdb92b645c62e2cc0ae2ca6de9d9b16f9d6f38a55"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): termwiz/src/render/terminfo.rs:390-395 | termwiz/src/render/terminfo.rs:412-417 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/render/terminfo.rs"},"region":{"startLine":390}}}],"partialFingerprints":{"codehealthFindingId/v1":"9993062b17feae6502520009148dcfb174124b2d2b83f3b3a85410eb90d97830"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): window/src/os/macos/window.rs:2433-2438 | window/src/os/macos/window.rs:2449-2454 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/window.rs"},"region":{"startLine":2433}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec5bd23e6669398c7a845a0c77602bb3d6259e8d198c2da1efd8eaebc4c3b7de"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): kaku-gui/src/termwindow/tab_rename.rs:864-868 | kaku-gui/src/termwindow/tab_rename.rs:894-898 | kaku-gui/src/termwindow/tab_rename.rs:928-932 \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":"kaku-gui/src/termwindow/tab_rename.rs"},"region":{"startLine":864}}}],"partialFingerprints":{"codehealthFindingId/v1":"84b1cb059faebf08e5d12f28f2ecd6d44d9e8ef95a60cf33e15ab6fbcf28962c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): kaku-gui/src/cli_chat/mod.rs:323-327 | kaku-gui/src/cli_chat/mod.rs:330-334 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/cli_chat/mod.rs"},"region":{"startLine":323}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6ff1137f9ef8c176c59ef6009db3dd70ebfbbe0bc6267753ffae973a064ceec"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): kaku-gui/src/codex_connection.rs:220-224 | kaku-gui/src/codex_connection.rs:267-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":"kaku-gui/src/codex_connection.rs"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"6960a276fcb908715435b09f5465ea9518b5402d50969a6cfba60149dc539295"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): kaku-gui/src/customglyph.rs:5670-5674 | kaku-gui/src/customglyph.rs:5685-5689 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/customglyph.rs"},"region":{"startLine":5670}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc090092ff10f5875667d3298e061ba20a99ecfaa15d200238bdee4f91ac148b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): kaku-gui/src/customglyph.rs:5700-5704 | kaku-gui/src/customglyph.rs:5715-5719 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/customglyph.rs"},"region":{"startLine":5700}}}],"partialFingerprints":{"codehealthFindingId/v1":"522852aed6f15897357ab9f12f3ed3e8448eec63a14e6930e8626dc3632f303f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): kaku-gui/src/overlay/ai_chat/state.rs:1730-1735 | kaku-gui/src/overlay/ai_chat/state.rs:2408-2412 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/state.rs"},"region":{"startLine":1730}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3c5f964e37195583954a960f3094a6996dbec7b1fbdcf74d3ef20bc713878a2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): kaku-gui/src/overlay/ai_chat/state.rs:2151-2155 | kaku-gui/src/overlay/ai_chat/state.rs:2473-2477 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/state.rs"},"region":{"startLine":2151}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb162e24bf373f7344dd49e044e34f2699c250d38700d3be7ef4efb69c8a5fc4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): kaku-gui/src/stats.rs:224-228 | kaku-gui/src/stats.rs:259-263 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/stats.rs"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd07738c92591f5d479273c40341b270f89c4c2d726f820f6802d4a640c16d0e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): crates/wezterm-client/src/pane/clientpane.rs:360-365 | kaku-gui/src/overlay/copy.rs:1216-1221 | mux/src/termwiztermtab.rs:235-240 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/pane/clientpane.rs"},"region":{"startLine":360}}}],"partialFingerprints":{"codehealthFindingId/v1":"b124daec1975432d33a7ffaadafd715d5e907c75e4c07eb64e58ff3a8fe7bc06"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): kaku-gui/src/cli_chat/mod.rs:847-852 | kaku-gui/src/overlay/ai_chat/layout.rs:5-10 \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":"kaku-gui/src/cli_chat/mod.rs"},"region":{"startLine":847}}}],"partialFingerprints":{"codehealthFindingId/v1":"77e4ec0513de6c86ab75896f2625f49bb1eac5f25f78a11561fd6da6185d8954"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): kaku-gui/src/overlay/copy.rs:226-231 | kaku-gui/src/overlay/quickselect.rs:732-737 \u2014 before extracting anything, compare \u0060kaku-gui/src/overlay/copy.rs\u0060 and \u0060kaku-gui/src/overlay/quickselect.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 96 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/copy.rs"},"region":{"startLine":226}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f77eef66f820a84f684f992fdf832b0ea25548154e04fd3f6477a6673c3976c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): kaku-gui/src/overlay/copy.rs:577-584 | kaku-gui/src/overlay/quickselect.rs:743-750 \u2014 before extracting anything, compare \u0060kaku-gui/src/overlay/copy.rs\u0060 and \u0060kaku-gui/src/overlay/quickselect.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 96 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/copy.rs"},"region":{"startLine":577}}}],"partialFingerprints":{"codehealthFindingId/v1":"81164125fd4054ba256f51f1690c524b5417a46eb5b7b521e7393b49078ec0e8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): kaku-gui/src/overlay/launcher.rs:568-573 | kaku-gui/src/overlay/selector.rs:228-233 \u2014 before extracting anything, compare \u0060kaku-gui/src/overlay/launcher.rs\u0060 and \u0060kaku-gui/src/overlay/selector.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 178 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/launcher.rs"},"region":{"startLine":568}}}],"partialFingerprints":{"codehealthFindingId/v1":"058bbfc47534171f0702b4661d1433e2e1494b525d9c94b3ccf0c66cbcb681b8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): kaku-gui/src/overlay/launcher.rs:575-580 | kaku-gui/src/overlay/selector.rs:235-240 \u2014 before extracting anything, compare \u0060kaku-gui/src/overlay/launcher.rs\u0060 and \u0060kaku-gui/src/overlay/selector.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 178 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/launcher.rs"},"region":{"startLine":575}}}],"partialFingerprints":{"codehealthFindingId/v1":"a89cb20b4c24c060b096eea182aa688168b9f96864742ff5fb895c9ab4b7be86"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): kaku-gui/src/overlay/prompt.rs:81-87 | kaku-gui/src/overlay/selector.rs:387-393 \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":"kaku-gui/src/overlay/prompt.rs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"85d63c29f8652f4a5340b27a469f0091665feb4d4756380dab4deed093368b4e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): kaku-gui/src/session_restore.rs:269-275 | window/src/os/macos/window.rs:983-989 \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":"kaku-gui/src/session_restore.rs"},"region":{"startLine":269}}}],"partialFingerprints":{"codehealthFindingId/v1":"08364ebddd40a7ecad0f7d5f62478b65aa0bac38e10b83b52d1fc45cbc4b892e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): kaku/src/ai_config/tui/ui.rs:79-90 | kaku/src/config_tui/ui.rs:158-169 \u2014 before extracting anything, compare \u0060kaku/src/ai_config/tui/ui.rs\u0060 and \u0060kaku/src/config_tui/ui.rs\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 112 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":"kaku/src/ai_config/tui/ui.rs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"20fb918ce787c03838bc09b7c297ec7ced128ec6ea08c191ed819828dde54822"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): kaku/src/doctor.rs:1399-1405 | kaku/src/reset.rs:432-438 \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":"kaku/src/doctor.rs"},"region":{"startLine":1399}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f4c296881e521d05032e8d7512883a510377962e37fa8fef0be5099d2adf194"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): mux/src/localpane.rs:528-537 | mux/src/termwiztermtab.rs:337-346 \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":"mux/src/localpane.rs"},"region":{"startLine":528}}}],"partialFingerprints":{"codehealthFindingId/v1":"162805ad6938d4d0e84a1685d10ef241df2f830f311c73b2eb912f9136d26be9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): term/src/terminalstate/mod.rs:56-61 | term/src/terminalstate/performer.rs:47-52 \u2014 before extracting anything, compare \u0060term/src/terminalstate/mod.rs\u0060 and \u0060term/src/terminalstate/performer.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 55 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/mod.rs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fb8d841af916e27d6acb6bff770ac7efcdedc21d22ced146fe9a7f3df6ca8f1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): term/src/terminalstate/mod.rs:87-97 | term/src/terminalstate/performer.rs:78-88 \u2014 before extracting anything, compare \u0060term/src/terminalstate/mod.rs\u0060 and \u0060term/src/terminalstate/performer.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 55 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/mod.rs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3e1f7f13cc2062e20eb3f5fb12306d10e0c1f92f45df40b341fcaaa7aa822da"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): term/src/terminalstate/mod.rs:940-950 | term/src/terminalstate/performer.rs:140-150 \u2014 before extracting anything, compare \u0060term/src/terminalstate/mod.rs\u0060 and \u0060term/src/terminalstate/performer.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 55 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/mod.rs"},"region":{"startLine":940}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a9a134aac52a8fef7851f4c4ef9d039f8d11e6c73a0c50970b0df8fdfa21f73"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): term/src/terminalstate/mod.rs:952-962 | term/src/terminalstate/performer.rs:152-162 \u2014 before extracting anything, compare \u0060term/src/terminalstate/mod.rs\u0060 and \u0060term/src/terminalstate/performer.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 55 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/mod.rs"},"region":{"startLine":952}}}],"partialFingerprints":{"codehealthFindingId/v1":"673ff35e02a704080b5bc2112a237ce1508d5cb83073a643a62464401ad059c4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): kaku-gui/src/termwindow/charselect.rs:250-262 | kaku-gui/src/termwindow/palette.rs:248-260 \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":"kaku-gui/src/termwindow/charselect.rs"},"region":{"startLine":250}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfd677b5af33c28772453ba543292bc68def552129e595bf5b12b536c7f224c9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): kaku-gui/src/ai_tools/registry.rs:191-207 | kaku-gui/src/ai_tools/registry.rs:254-270 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_tools/registry.rs"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca09f8749c14965b03433221a6e0fcfa189f7dbb9bbe7db03b95e52e0be91f8a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): crates/wezterm-ssh/src/host.rs:46-61 | crates/wezterm-ssh/src/host.rs:160-175 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/host.rs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"b83bd46265f2dcd830ae7b8013098206b7c18f784e8e021305bbf1c5d297848b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): kaku-gui/src/termwindow/mod.rs:5188-5201 | kaku-gui/src/termwindow/mod.rs:5238-5251 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":5188}}}],"partialFingerprints":{"codehealthFindingId/v1":"e79c920add2d257fe62ac01efd88b4f67f95c76df23e1e6be4a8318551bc022f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): kaku/src/ai_config/tui.rs:1090-1102 | kaku/src/ai_config/tui.rs:1262-1274 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui.rs"},"region":{"startLine":1090}}}],"partialFingerprints":{"codehealthFindingId/v1":"1811c0ca29360bfe5436fe08acb4a93cf00c51ac842c65ace05d0bc73c214b6e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): kaku/src/ai_config/tui/providers/mod.rs:471-481 | kaku/src/ai_config/tui/providers/mod.rs:1545-1556 | kaku/src/ai_config/tui/providers/mod.rs:1598-1608 \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":"kaku/src/ai_config/tui/providers/mod.rs"},"region":{"startLine":471}}}],"partialFingerprints":{"codehealthFindingId/v1":"78d1b0d5b990818fa846dfd4b01068fdbb7c78f359aedfbc0b15b695d87f4372"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/wezterm-escape-parser/src/tmux_cc/mod.rs:270-280 | crates/wezterm-escape-parser/src/tmux_cc/mod.rs:389-399 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/tmux_cc/mod.rs"},"region":{"startLine":270}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d17458ea2a87d256725f109128b049d9a9250d6fa23fa8f0e6175ecc408a4d3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): kaku/src/ai_config/tui.rs:1063-1073 | kaku/src/ai_config/tui/providers/mod.rs:2092-2102 \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":"kaku/src/ai_config/tui.rs"},"region":{"startLine":1063}}}],"partialFingerprints":{"codehealthFindingId/v1":"5aec05eae86c23f98a17989598970bcfcb242aaf993e2f4c277086a5b4639b5e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): crates/wezterm-escape-parser/src/tmux_cc/mod.rs:318-328 | crates/wezterm-escape-parser/src/tmux_cc/mod.rs:485-495 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/tmux_cc/mod.rs"},"region":{"startLine":318}}}],"partialFingerprints":{"codehealthFindingId/v1":"52895356450804b279d46fc750c20b415b3f408170c7a38c38f952b8fa9c3503"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): kaku/src/ai_config/tui/providers/mod.rs:1458-1468 | kaku/src/ai_config/tui/providers/mod.rs:1548-1558 | kaku/src/ai_config/tui/providers/mod.rs:1600-1610 \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":"kaku/src/ai_config/tui/providers/mod.rs"},"region":{"startLine":1458}}}],"partialFingerprints":{"codehealthFindingId/v1":"20b89ae354d354542d1c78cba15c568d967454f2073281bc26169bc0ed581d25"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): lua-api-crates/mux/src/pane.rs:211-221 | lua-api-crates/mux/src/pane.rs:238-243 | lua-api-crates/mux/src/pane.rs:250-257 \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":"lua-api-crates/mux/src/pane.rs"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f46b0a466e5344c9c493fd43e49d957492504f5b9d482dbcc3625b519cc650c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): crates/wezterm-font/src/rasterizer/freetype.rs:642-651 | crates/wezterm-font/src/rasterizer/freetype.rs:667-676 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/rasterizer/freetype.rs"},"region":{"startLine":642}}}],"partialFingerprints":{"codehealthFindingId/v1":"28c8f29bec9df278603f7319c542d6aec0d1c010d18fefc321ee6098f002dd99"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): kaku/src/ai_config/tui.rs:1052-1061 | kaku/src/ai_config/tui.rs:1083-1092 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui.rs"},"region":{"startLine":1052}}}],"partialFingerprints":{"codehealthFindingId/v1":"269ed289caf34ec0932181c42d4f77c365b0d989cc43cdb9b34841158af646a0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): kaku-gui/src/update.rs:324-333 | kaku-gui/src/update.rs:351-360 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/update.rs"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf2f798be6c847a54abcedcf0ca4d96b5485836ddd4a65a62467c392dc9a2a55"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): crates/wezterm-escape-parser/src/apc.rs:663-672 | crates/wezterm-escape-parser/src/apc.rs:674-683 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/apc.rs"},"region":{"startLine":663}}}],"partialFingerprints":{"codehealthFindingId/v1":"d23d28d4e6b43d5417d1e7cdba9c5ecd4426e736a1edc013685366401f0b2ca2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 4): kaku-gui/src/scripting/guiwin.rs:210-218 | kaku-gui/src/scripting/guiwin.rs:224-232 | kaku-gui/src/scripting/guiwin.rs:242-250 | kaku-gui/src/scripting/guiwin.rs:256-264 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/scripting/guiwin.rs"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"de9a90a639759105ca66a0cc85ed0a42b9d18453b49ce12bc6d94fefd2e169d6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): kaku-gui/src/ai_client/mod.rs:499-507 | kaku-gui/src/ai_client/mod.rs:665-673 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_client/mod.rs"},"region":{"startLine":499}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ade624060c70f3da108cb7dced4d62f910268ca09b8833e74011a5d4c1b97df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): kaku-gui/src/ai_tools/search.rs:47-55 | kaku-gui/src/ai_tools/search.rs:184-192 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_tools/search.rs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"3557c0323355938dc2d7f44c8325ec026a349c0e3a4dfb378602dfe745bb24e1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): kaku-gui/src/ai_client/responses.rs:299-307 | kaku-gui/src/ai_client/responses.rs:319-327 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_client/responses.rs"},"region":{"startLine":299}}}],"partialFingerprints":{"codehealthFindingId/v1":"eaed78068886b3a27b867c98bcc8566c4bb397e4d9a635c92646348f4fbb5603"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): crates/wezterm-escape-parser/src/osc.rs:858-865 | crates/wezterm-escape-parser/src/osc.rs:867-874 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/osc.rs"},"region":{"startLine":858}}}],"partialFingerprints":{"codehealthFindingId/v1":"44a0a59609b6c733d8d77a2a2739664f7d4f393fae5b31f212c83fa88dac8367"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): kaku-gui/src/stats.rs:368-375 | kaku-gui/src/stats.rs:388-395 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/stats.rs"},"region":{"startLine":368}}}],"partialFingerprints":{"codehealthFindingId/v1":"25d2f44b0d0e0b1810a557ec30ee02754e4ed7e001d1c92fc6ff98a34b23d314"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): crates/wezterm-font/src/rasterizer/freetype.rs:641-648 | crates/wezterm-font/src/rasterizer/freetype.rs:691-698 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/rasterizer/freetype.rs"},"region":{"startLine":641}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f9ae001d736e5e218c561788d6e0aae34966e2959b8be2880d40775751545a8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): kaku/src/reset.rs:345-352 | kaku/src/reset.rs:394-401 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/reset.rs"},"region":{"startLine":345}}}],"partialFingerprints":{"codehealthFindingId/v1":"22692f99790997dd4a779742331d6e9033fb76b7138c8ab57b9ad4d913c6b293"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): kaku/src/ai_config/tui/providers/mod.rs:585-591 | kaku/src/ai_config/tui/providers/mod.rs:1449-1455 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui/providers/mod.rs"},"region":{"startLine":585}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e2ae8bbf6c78f60df08a8507d3f7c845aad67a2371f248fa52f768caa67cebe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): kaku/src/ai_config/tui/providers/mod.rs:1791-1797 | kaku/src/ai_config/tui/providers/mod.rs:1799-1805 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui/providers/mod.rs"},"region":{"startLine":1791}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8ae9e0baccf865c7a015a433cc87acca3e97926113b8ef962ff7314edb7369b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): kaku/src/ai_config/tui/ui.rs:295-301 | kaku/src/ai_config/tui/ui.rs:322-327 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui/ui.rs"},"region":{"startLine":295}}}],"partialFingerprints":{"codehealthFindingId/v1":"73ea1cb80734af554cfc7d55c024a97361e99d2e14c1eaac37d476915c311eb8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): kaku/src/ai_config/tui/providers/mod.rs:1687-1692 | kaku/src/ai_config/tui/providers/mod.rs:1903-1908 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui/providers/mod.rs"},"region":{"startLine":1687}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f7ddc49242bdb3ea218c5d554bb3b309b2bc7f01e7b9ef35381c5177bc1edd0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): config/src/lib.rs:1955-1960 | config/src/lib.rs:1981-1986 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/lib.rs"},"region":{"startLine":1955}}}],"partialFingerprints":{"codehealthFindingId/v1":"bccf7985a0ab6279cab0f7687f6f6b1e2e332de89f897160b61073851221ee48"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): lua-api-crates/mux/src/tab.rs:47-51 | lua-api-crates/mux/src/window.rs:65-70 \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":"lua-api-crates/mux/src/tab.rs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"1411b6fb34910a3c4b550035431c4c74aca51dc053f0ada1b97846394bffce96"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 6): kaku-gui/src/scripting/guiwin.rs:203-207 | kaku-gui/src/scripting/guiwin.rs:217-221 | kaku-gui/src/scripting/guiwin.rs:231-235 | kaku-gui/src/scripting/guiwin.rs:249-253 | kaku-gui/src/scripting/guiwin.rs:263-267 | kaku-gui/src/scripting/guiwin.rs:278-282 \u2014 all 6 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/scripting/guiwin.rs"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd3fbd0947a507b36706c351d4f028bc8b0afcc4228d5100666e829461baf578"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): kaku/src/ai_config/tui/providers/assistant.rs:518-522 | kaku/src/ai_config/tui/providers/assistant.rs:524-528 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui/providers/assistant.rs"},"region":{"startLine":518}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8817638b2d6d0d0322b7b155c0363117223c71e13442ef15cf67a566488326e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): kaku-gui/src/termwindow/mod.rs:5979-5983 | kaku-gui/src/termwindow/mod.rs:5993-5997 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":5979}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d280cf3fe525a9ed65656ccc19f536dc533ec648317b8f81991cfbe3c4aa44e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): kaku/src/ai_config/tui/providers/assistant.rs:518-522 | kaku/src/ai_config/tui/providers/assistant.rs:524-528 | kaku/src/ai_config/tui/providers/assistant.rs:557-561 \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":"kaku/src/ai_config/tui/providers/assistant.rs"},"region":{"startLine":518}}}],"partialFingerprints":{"codehealthFindingId/v1":"9411cbceee3b87c9b12e92bc92ec8e6b08c602ccf9fa1739433b072e24433deb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): config/src/color.rs:285-289 | config/src/color.rs:291-295 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/color.rs"},"region":{"startLine":285}}}],"partialFingerprints":{"codehealthFindingId/v1":"abdb8904a1d5dca712c47f25bf3840442d86fd2e7fafe65b7a4d18ca7c8dad68"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/wezterm-escape-parser/src/osc.rs:1535-1540 | crates/wezterm-escape-parser/src/osc.rs:1545-1550 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/osc.rs"},"region":{"startLine":1535}}}],"partialFingerprints":{"codehealthFindingId/v1":"d71ca3f1436470ae80abeee9a96898670ad77f16a694753a24c6003180d6b625"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): crates/wezterm-escape-parser/src/tmux_cc/mod.rs:303-308 | crates/wezterm-escape-parser/src/tmux_cc/mod.rs:349-354 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/tmux_cc/mod.rs"},"region":{"startLine":303}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcd712a96408126e10b6581464f382b98f6f83732f78dc1f632c0c43383391fc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): kaku-gui/src/overlay/mod.rs:56-60 | kaku-gui/src/overlay/mod.rs:94-98 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/mod.rs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a8239e41c357fa3921b05234a5ff812831c916e30db90484dfb368430d1cfa9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): kaku-gui/src/session_restore.rs:1099-1105 | kaku-gui/src/session_restore.rs:1142-1148 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/session_restore.rs"},"region":{"startLine":1099}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f82c022a456ff0eebdae7e358e3828044c5653d0436292a731180ab9054e518"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): kaku-gui/src/update.rs:274-280 | kaku/src/update.rs:940-946 \u2014 before extracting anything, compare \u0060kaku-gui/src/update.rs\u0060 and \u0060kaku/src/update.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 67 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. 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":"kaku-gui/src/update.rs"},"region":{"startLine":274}}}],"partialFingerprints":{"codehealthFindingId/v1":"abb17e31e16dec558b1fd7d3420ba311ea11e44758b80f80da928d9bd9ef59ec"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): window/src/os/macos/connection.rs:250-254 | window/src/os/macos/connection.rs:261-265 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/connection.rs"},"region":{"startLine":250}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7a73a9ec66e694a67f40443145eeab30cd7b5ff3e3d46549eb21f01c25194e5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): window/src/os/macos/window.rs:3215-3219 | window/src/os/macos/window.rs:3289-3293 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/window.rs"},"region":{"startLine":3215}}}],"partialFingerprints":{"codehealthFindingId/v1":"47d7b73377314b60144f52fb302574fc515d8172e99c7f5cc731af3b87f6d9f5"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project color-funcs: color-funcs has instability 0.83 with 1 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"788ef9d0102cafc1160f4c18664365ed411fe7488f7cb1d0c316e72b2b15368c"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project env-bootstrap: env-bootstrap has instability 0.89 with 2 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"780bb57ce12a811955a688b151f88a2f38d42aaa253be4e8841d255ec43e1fbd"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project mux-lua: mux-lua has instability 0.82 with 2 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"725b687795585bf7177e8f81c4dcaf86875f84daf235f51144b0cc9f2ac84511"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project wezterm-client: wezterm-client has instability 0.83 with 3 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"b811b9cb25e41fa4b61d2d35237929c1e5d0205abcfb46267c98759a17f6ad8b"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project wezterm-mux-server-impl: wezterm-mux-server-impl has instability 0.92 with 1 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"66cea6914b971e7a7f93e9943dc941fa824b5359e6266df52b1efc7f874043a5"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: bintree: bintree: abstractness 0.00, instability 0.00, distance 1.00 \u2014 zone of pain \u2014 concrete and depended on by 1 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"f37e77316ff7fe2239d899a0871b005e8440fa01339f982969f786518293ba3f"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: frecency: frecency: abstractness 0.00, instability 0.00, distance 1.00 \u2014 zone of pain \u2014 concrete and depended on by 1 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"b9f6a8c69acb3144d4dfb7caf7790f8026446e788de5d6db5c0f7d5bf9b775fd"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: promise: promise: abstractness 0.00, instability 0.00, distance 1.00 \u2014 zone of pain \u2014 concrete and depended on by 9 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"e48cfe20d4756188a6154d6b5e8e72f81fd1c94924dcd6b94a9cf169086c7aa4"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: rangeset: rangeset: abstractness 0.00, instability 0.00, distance 1.00 \u2014 zone of pain \u2014 concrete and depended on by 6 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"3b6d645b882bcb04c84b455b4359788daeb55c6f1b489a8836cb92663eaedaef"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: umask: umask: abstractness 0.00, instability 0.00, distance 1.00 \u2014 zone of pain \u2014 concrete and depended on by 4 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"f336978760df4715c79f380741c8e690b011870fd13849d281b75036ff35c0ff"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: wezterm-char-props: wezterm-char-props: abstractness 0.00, instability 0.00, distance 1.00 \u2014 zone of pain \u2014 concrete and depended on by 3 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"f1caab42bc6c8726860c59ff18f90c381006be822ef55ddc31270edee01270a8"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: wezterm-uds: wezterm-uds: abstractness 0.00, instability 0.00, distance 1.00 \u2014 zone of pain \u2014 concrete and depended on by 3 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"b0485a7f12715198fc90fb44f2d4ab6f2fdff441624b838202c2873a52002dfd"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: luahelper: luahelper: abstractness 0.00, instability 0.05, distance 0.95 \u2014 zone of pain \u2014 concrete and depended on by 19 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0c3dccc0fd386b28519dfaf354fd8bd534178ebcbfc401eee15ee7734b99a652"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: wezterm-bidi: wezterm-bidi: abstractness 0.00, instability 0.13, distance 0.88 \u2014 zone of pain \u2014 concrete and depended on by 7 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"48f7d26111735f4cd350b14551ec715503b855d84b6c3fcf82190655008fc76c"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: wezterm-color-types: wezterm-color-types: abstractness 0.00, instability 0.13, distance 0.88 \u2014 zone of pain \u2014 concrete and depended on by 7 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"5bcd536330a297a686c5b6fde5bf277dc9951ac25de333eebf74bd90a685d987"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: wezterm-input-types: wezterm-input-types: abstractness 0.00, instability 0.13, distance 0.88 \u2014 zone of pain \u2014 concrete and depended on by 7 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"cfc938054aef6ede7e3b2c4d96bb896f30bb5c39faed13261870fc64daaea6fb"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: vtparse: vtparse: abstractness 0.25, instability 0.00, distance 0.75 \u2014 zone of pain \u2014 concrete and depended on by 2 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"e598fc3056388ab39833b0a380219765983a07b6b90f877a3dcdf2019ae0f8af"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: wezterm-blob-leases: wezterm-blob-leases: abstractness 0.25, instability 0.00, distance 0.75 \u2014 zone of pain \u2014 concrete and depended on by 5 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"2e7af0636ebceeb1091444a92cc30f87a8cbbd29e9e36749a6b3d156ee967f00"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: wezterm-toast-notification: wezterm-toast-notification: abstractness 0.00, instability 0.25, distance 0.75 \u2014 zone of pain \u2014 concrete and depended on by 3 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"1c24c60ed4ffe74efbc3bf8bc6a333d158cea896c942f083a898edde5edc4173"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: config: config: abstractness 0.01, instability 0.28, distance 0.70 \u2014 zone of pain \u2014 concrete and depended on by 28 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"908532b5bf936e655e8f548616800b7561401ce13757d8dbdecff8ffab126252"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: Element (LCOM4 13): Element\u0027s methods fall into 13 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 13 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/box_model.rs"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef351998c50f0b653bd77d16a04148dd65c8c8b932030fc623f9f0ac1c8a4cdb"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: Config (LCOM4 9): Config\u0027s methods fall into 9 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 9 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/config.rs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"93630b1fe91fc1b10f5ad1022dc58431a3b95732bac26ab86080bb6b21f0f712"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: Connection (LCOM4 9): Connection\u0027s methods fall into 9 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 9 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/connection.rs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"009787e6243921c75fb1480a028d616547381068c3978182f470d0ad13b51d93"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: Window (LCOM4 5): Window\u0027s methods fall into 5 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 5 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/window.rs"},"region":{"startLine":757}}}],"partialFingerprints":{"codehealthFindingId/v1":"b87d7ccbefe064108b7d394da472f6f20eba46ee5c52d6d16ae99357f12ea3df"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: KakuAssistantConfig (LCOM4 4): KakuAssistantConfig\u0027s methods fall into 4 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 4 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui.rs"},"region":{"startLine":653}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5d7482d6576658b2d1d6cf177bbc44ab44776129a239439f3dbadab36d90648"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: an upload waiting for relay authentication settles when its socket closes: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/web.test.cjs"},"region":{"startLine":1046}}}],"partialFingerprints":{"codehealthFindingId/v1":"8377c3f76892131409436dc4d0a93dd6eec476ea532a01998d1f12597cc8c295"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: kaku-gui/src/termwindow/mod.rs: kaku-gui/src/termwindow/mod.rs changed 52 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 174 in TermWindow::perform_key_assignment at line 4752. 29 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku-gui/src/termwindow/mod.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":4752}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c18a1c8bb4c9d3463c60d9918b24269d6be3fac37e41b9837387208984698a3"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/kaku-remote/src/web.rs: crates/kaku-remote/src/web.rs changed 56 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 116 in kaku_remote::web::run_session at line 2785. 17 of those changes were fix/bug commits, and the other 39 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- crates/kaku-remote/src/web.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/src/web.rs"},"region":{"startLine":2785}}}],"partialFingerprints":{"codehealthFindingId/v1":"a50b62f82b0930e11f5836f105ef446ec8fcd8c1251a069fc4cdf62863010059"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/kaku-remote/assets/web/index.html: crates/kaku-remote/assets/web/index.html changed 97 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 46 in index.html.connect at line 3516. 42 of those changes were fix/bug commits, and the other 55 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- crates/kaku-remote/assets/web/index.html\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/assets/web/index.html"},"region":{"startLine":3516}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1694fcd69152ecf8b9999d066bf769027bdaf1a245bcdbb75cdcb4f3a62b81d"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: kaku-gui/src/termwindow/mouseevent.rs: kaku-gui/src/termwindow/mouseevent.rs changed 35 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 98 in TermWindow::mouse_event_terminal at line 1867. 20 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku-gui/src/termwindow/mouseevent.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":"kaku-gui/src/termwindow/mouseevent.rs"},"region":{"startLine":1867}}}],"partialFingerprints":{"codehealthFindingId/v1":"081b812d1c89299b6c9ae39634be35233bd97a7601d2434fbb2944926990971f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: kaku-gui/src/commands.rs: kaku-gui/src/commands.rs changed 14 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 166 in kaku_gui::commands::derive_command_from_key_assignment at line 1106. 7 of those changes were fix/bug commits, and the other 7 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku-gui/src/commands.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":"kaku-gui/src/commands.rs"},"region":{"startLine":1106}}}],"partialFingerprints":{"codehealthFindingId/v1":"78b316f5e38dd84e5e6f5e68cc36a3714b62a2d8c59b777d9292e582cf832b1c"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/kaku-remote/src/share.rs: crates/kaku-remote/src/share.rs changed 22 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 56 in kaku_remote::share::serve at line 819. 9 of those changes were fix/bug commits, and the other 13 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- crates/kaku-remote/src/share.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/src/share.rs"},"region":{"startLine":819}}}],"partialFingerprints":{"codehealthFindingId/v1":"108bc0483c1d9b316a4ea5983b0c21f136708103f9104d79854d2b1d7b04552d"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/kaku-remote/assets/web/desktop.js: crates/kaku-remote/assets/web/desktop.js changed 19 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 61 in desktop.init at line 99. 6 of those changes were fix/bug commits, and the other 13 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- crates/kaku-remote/assets/web/desktop.js\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/assets/web/desktop.js"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"be49cd6db73a127bfd3e19e999ca312b3b3a590a0eef3e9a07f762f85687742b"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: window/src/os/macos/window.rs: window/src/os/macos/window.rs changed 17 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 51 in WindowView::did_resize at line 9419. 16 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- window/src/os/macos/window.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":"window/src/os/macos/window.rs"},"region":{"startLine":9419}}}],"partialFingerprints":{"codehealthFindingId/v1":"146a16715b004a331af4410f972ace0bb976fb9df72d17fafd0c0956ead44450"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/kaku-relay/src/main.rs: crates/kaku-relay/src/main.rs changed 29 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 29 in kaku_relay::serve_browser at line 1093. 14 of those changes were fix/bug commits, and the other 15 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- crates/kaku-relay/src/main.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-relay/src/main.rs"},"region":{"startLine":1093}}}],"partialFingerprints":{"codehealthFindingId/v1":"21b55bacfbd60a7bb8fa013a8a22f076333f358248d577f8f9ed5cf66cb9dca8"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: kaku-gui/src/tabbar.rs: kaku-gui/src/tabbar.rs changed 19 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 42 in TabBarState::new at line 1004. 7 of those changes were fix/bug commits, and the other 12 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku-gui/src/tabbar.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":"kaku-gui/src/tabbar.rs"},"region":{"startLine":1004}}}],"partialFingerprints":{"codehealthFindingId/v1":"46f1d591e2377fdf262d2eaed88279899b58556187d50dfd7e39a6a9ba31e300"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: kaku/src/main.rs: kaku/src/main.rs changed 29 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 25 in kaku::run_remote at line 323. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku/src/main.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/main.rs"},"region":{"startLine":323}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffb1d28298d07d2e9310438b51104181ee32928400bc7a17f283c87f236739a8"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: kaku-gui/src/overlay/ai_chat/state.rs: kaku-gui/src/overlay/ai_chat/state.rs changed 14 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 48 in App::drain_tokens at line 1823. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku-gui/src/overlay/ai_chat/state.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/state.rs"},"region":{"startLine":1823}}}],"partialFingerprints":{"codehealthFindingId/v1":"acdee345f968bf3ec1e6ea05708cf27c2ee5905468132a0190bb14c92539e35e"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: kaku/src/ai_config/tui.rs: kaku/src/ai_config/tui.rs changed 14 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 47 in kaku::ai_config::tui::save_field at line 2757. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku/src/ai_config/tui.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":"kaku/src/ai_config/tui.rs"},"region":{"startLine":2757}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f29df5249fe8e425534f9b68a8667aa040c74198d44e888347ede94c5cff3df"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: term/src/terminalstate/performer.rs: term/src/terminalstate/performer.rs changed 7 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 89 in Performer::osc_dispatch at line 852. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- term/src/terminalstate/performer.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":"term/src/terminalstate/performer.rs"},"region":{"startLine":852}}}],"partialFingerprints":{"codehealthFindingId/v1":"a56bf58857ac333a081102d8a82ad7779f826d85b9c71a18369216b125cb265b"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: kaku-gui/src/frontend.rs: kaku-gui/src/frontend.rs changed 15 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 28 in GuiFrontEnd::try_new at line 647. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku-gui/src/frontend.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":"kaku-gui/src/frontend.rs"},"region":{"startLine":647}}}],"partialFingerprints":{"codehealthFindingId/v1":"7740f83f411c2fa2282982817bcabd77aa51671d41321f045d8639f7c25cbea3"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: kaku-gui/src/termwindow/render/paint.rs: kaku-gui/src/termwindow/render/paint.rs changed 8 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 45 in TermWindow::paint_pass at line 261. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku-gui/src/termwindow/render/paint.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":"kaku-gui/src/termwindow/render/paint.rs"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d280e8a581daf8cba99e3f87a94fb7a168a0c0de579af0d69b5f604ff2f70ae"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/wezterm-input-types/src/lib.rs: crates/wezterm-input-types/src/lib.rs changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 111 in KeyEvent::encode_kitty at line 1660. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- crates/wezterm-input-types/src/lib.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-input-types/src/lib.rs"},"region":{"startLine":1660}}}],"partialFingerprints":{"codehealthFindingId/v1":"b53887743a4663c57e3ab2a86417b58b4a3aee83281e011e12e174c34c03988a"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: kaku/src/config_tui/mod.rs: kaku/src/config_tui/mod.rs changed 14 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 23 in App::normalize_value at line 987. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku/src/config_tui/mod.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/config_tui/mod.rs"},"region":{"startLine":987}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f4627669553ec49714aa5472a7c923ecac7a399100c44d193f5c7c93f790340"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: kaku-gui/src/termwindow/render/pane.rs: kaku-gui/src/termwindow/render/pane.rs changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 54 in TermWindow::paint_pane at line 152. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku-gui/src/termwindow/render/pane.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":"kaku-gui/src/termwindow/render/pane.rs"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e7c6657d60ebf43bacb4305de48df6cbba0cfd0471db2fe0dd9de654e504169"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: kaku-gui/src/ai_chat_engine/mod.rs: kaku-gui/src/ai_chat_engine/mod.rs changed 8 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 32 in kaku_gui::ai_chat_engine::run_agent at line 387. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku-gui/src/ai_chat_engine/mod.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_chat_engine/mod.rs"},"region":{"startLine":387}}}],"partialFingerprints":{"codehealthFindingId/v1":"d169fb57d79a46cebb8ce51b1770a2f9a57c64e4c4eab1421c6774cc9bd2acbe"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: kaku-gui/src/termwindow/resize.rs: kaku-gui/src/termwindow/resize.rs changed 9 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 27 in TermWindow::apply_dimensions at line 481. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku-gui/src/termwindow/resize.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":"kaku-gui/src/termwindow/resize.rs"},"region":{"startLine":481}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ab4947e46936297310628760232ff5a1763d9297d1ad61842382442e5f34ea4"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: kaku-gui/src/remote_tabs.rs: kaku-gui/src/remote_tabs.rs changed 7 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 33 in kaku_gui::remote_tabs::perform at line 21. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku-gui/src/remote_tabs.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":"kaku-gui/src/remote_tabs.rs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6b7a96b351844380dcdd14599926195137dd2ad6b031552b7f265abfc94b41b"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/kaku-remote/tests/live.cjs: crates/kaku-remote/tests/live.cjs changed 14 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in (anonymous) at line 32. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- crates/kaku-remote/tests/live.cjs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/live.cjs"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"46cc68504cba83a86f29b959db5bea53a36d38441b813aaff93252ae5e2ac3a8"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: kaku-gui/src/main.rs: kaku-gui/src/main.rs changed 9 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 21 in kaku_gui::async_run_terminal_gui at line 350. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku-gui/src/main.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/main.rs"},"region":{"startLine":350}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff1a5e31e047012293caf0c56fcae14228f5dbf22c41404019d81bb9f599ac75"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: kaku-gui/src/termwindow/render/fancy_tab_bar.rs: kaku-gui/src/termwindow/render/fancy_tab_bar.rs changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 30 in TermWindow::build_fancy_tab_bar at line 58. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku-gui/src/termwindow/render/fancy_tab_bar.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":"kaku-gui/src/termwindow/render/fancy_tab_bar.rs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"df44a597a7ce5546be909445b32f4264d93a70cca58f1aecea25bad70d0dd652"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: kaku-gui/src/session_restore.rs: kaku-gui/src/session_restore.rs changed 11 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in kaku_gui::session_restore::save_session_snapshot_impl at line 986. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku-gui/src/session_restore.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/session_restore.rs"},"region":{"startLine":986}}}],"partialFingerprints":{"codehealthFindingId/v1":"b869c75680a27c22d5777379b7ee3c42b8cd9eb06836db7b8949f0cbde6a2a71"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/wezterm-mux-server-impl/src/sessionhandler.rs: crates/wezterm-mux-server-impl/src/sessionhandler.rs changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 58 in SessionHandler::process_one at line 246. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- crates/wezterm-mux-server-impl/src/sessionhandler.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-mux-server-impl/src/sessionhandler.rs"},"region":{"startLine":246}}}],"partialFingerprints":{"codehealthFindingId/v1":"04cf4de34c5909f5b3380bbbc06f944370e93da23eee80490a9deb9abb201094"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/kaku-remote/tests/feel.cjs: crates/kaku-remote/tests/feel.cjs changed 8 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 21 in (anonymous) at line 92. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- crates/kaku-remote/tests/feel.cjs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/feel.cjs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"191af009baa67921a21116d8f18cc4a801383b4acaa485fd402e04452aa8b8b6"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: kaku-gui/src/cli_chat/mod.rs: kaku-gui/src/cli_chat/mod.rs changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 52 in kaku_gui::cli_chat::run_repl at line 545. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku-gui/src/cli_chat/mod.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/cli_chat/mod.rs"},"region":{"startLine":545}}}],"partialFingerprints":{"codehealthFindingId/v1":"af0a20e61678bd536318df4a6fe75cb5c4d09896bba6b744c4f91b245841257c"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/kaku-remote/src/p2p.rs: crates/kaku-remote/src/p2p.rs changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 31 in kaku_remote::p2p::carry at line 705. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- crates/kaku-remote/src/p2p.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/src/p2p.rs"},"region":{"startLine":705}}}],"partialFingerprints":{"codehealthFindingId/v1":"240ae0ab0230b6c3f70114ab4af333944bf52ab2d4f2f3f8b9c7a364e95b0bba"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: kaku-gui/src/ai_tools/search.rs: kaku-gui/src/ai_tools/search.rs changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 31 in kaku_gui::ai_tools::search::fallback_regex_search at line 269. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku-gui/src/ai_tools/search.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":"kaku-gui/src/ai_tools/search.rs"},"region":{"startLine":269}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5c418cec6ad36a84545f26660d2ae397e1ac5ada8759dcaa61cdccb8398d26a"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: mux/src/localpane.rs: mux/src/localpane.rs changed 7 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 22 in LocalPane::search at line 768. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- mux/src/localpane.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":"mux/src/localpane.rs"},"region":{"startLine":768}}}],"partialFingerprints":{"codehealthFindingId/v1":"43f6ea96e73f226431de8118d8ff6e95fd332b3f23ba9973b5703314a24be3ee"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: kaku-gui/src/termwindow/keyevent.rs: kaku-gui/src/termwindow/keyevent.rs changed 8 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 19 in TermWindow::raw_key_event_impl at line 528. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku-gui/src/termwindow/keyevent.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":"kaku-gui/src/termwindow/keyevent.rs"},"region":{"startLine":528}}}],"partialFingerprints":{"codehealthFindingId/v1":"5dcb9c9224b2d3c94dac80ff24ed05c63d5fc1f9d54cea22f74c21b01c5ea58a"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/wezterm-escape-parser/src/osc.rs: crates/wezterm-escape-parser/src/osc.rs changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 35 in OperatingSystemCommand::internal_parse at line 257. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- crates/wezterm-escape-parser/src/osc.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/osc.rs"},"region":{"startLine":257}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c060fbe0b8a6e062265d85bf518cbb395f08df21735b2e362869461f424fbcb"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: crates/wezterm-font/src/lib.rs: crates/wezterm-font/src/lib.rs changed 7 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in FontConfigInner::resolve_font at line 931. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- crates/wezterm-font/src/lib.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/lib.rs"},"region":{"startLine":931}}}],"partialFingerprints":{"codehealthFindingId/v1":"d753556d6a6fc585f25201bd958b351cfa2dca9a88c88953e020f2f7c3f5fabe"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: kaku/src/doctor.rs: kaku/src/doctor.rs changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 18 in kaku::doctor::build_environment_group at line 262. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku/src/doctor.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":"kaku/src/doctor.rs"},"region":{"startLine":262}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ac422f7133670b8fce8fe1c6f773736bb6232fa08a523bec65d980d66b84771"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: kaku-gui/src/overlay/ai_chat/render.rs: kaku-gui/src/overlay/ai_chat/render.rs changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 27 in kaku_gui::overlay::ai_chat::render::render_chat at line 463. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku-gui/src/overlay/ai_chat/render.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":"kaku-gui/src/overlay/ai_chat/render.rs"},"region":{"startLine":463}}}],"partialFingerprints":{"codehealthFindingId/v1":"0eff4831d1d919b3fa07374fb4dafd2e062dc9630ffc15c49bfb986e949feb30"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: kaku-gui/src/overlay/launcher.rs: kaku-gui/src/overlay/launcher.rs changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 34 in LauncherState::run_loop at line 624. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku-gui/src/overlay/launcher.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":"kaku-gui/src/overlay/launcher.rs"},"region":{"startLine":624}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ab9264e58ad48ccd397f440089930b4a984b48de405944338aaa46de12defba"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: kaku-gui/src/overlay/ai_chat/input.rs: kaku-gui/src/overlay/ai_chat/input.rs changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 32 in kaku_gui::overlay::ai_chat::input::handle_mouse at line 424. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku-gui/src/overlay/ai_chat/input.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":"kaku-gui/src/overlay/ai_chat/input.rs"},"region":{"startLine":424}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f41cf90f01d0d5eda90dccc6c4a7615abdfe7215068bfaac1bb7658ccb6a97b"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: kaku-gui/src/termwindow/tab_rename.rs: kaku-gui/src/termwindow/tab_rename.rs changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in TabRenameModal::compute at line 799. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku-gui/src/termwindow/tab_rename.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":"kaku-gui/src/termwindow/tab_rename.rs"},"region":{"startLine":799}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3b8c31f8b0408f0e4fb6a88756349eb6e00d2c07438dd302bf55d0714ce88f6"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: kaku-gui/src/overlay/ai_chat/mod.rs: kaku-gui/src/overlay/ai_chat/mod.rs changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 26 in kaku_gui::overlay::ai_chat::ai_chat_overlay at line 82. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku-gui/src/overlay/ai_chat/mod.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/mod.rs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"321ec378c6bb636e38f034568a57be7a84d8ee8b3312f5f2d16e2e7a9f26df63"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: kaku-gui/src/overlay/confirm.rs: kaku-gui/src/overlay/confirm.rs changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 23 in kaku_gui::overlay::confirm::run_confirmation_impl at line 43. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku-gui/src/overlay/confirm.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":"kaku-gui/src/overlay/confirm.rs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"da0938c4530c2d4d789c816aed9feaa95b8e40e346bc055db8c302db22847fee"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: crates/wezterm-surface/src/line/test.rs: crates/wezterm-surface/src/line/test.rs changed 5 times in last 90 days and 5 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 1 (its worst body is wezterm_surface::line::test::bold at line 405), 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(surface): #608 stop the link scan at the last cell instead of aborting\u201D; \u201Cfix(links): keep hard-newline output out of hyperlink targets\u201D; \u201Cfix(links): #547 rejoin rows a TUI wrapped without the wrap attribute\u201D; \u201Cfix: tighten terminal links and macOS interactions\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- crates/wezterm-surface/src/line/test.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-surface/src/line/test.rs"},"region":{"startLine":405}}}],"partialFingerprints":{"codehealthFindingId/v1":"f65b76cabb8a0643af3247cef4d464b3781dff452f732488c54c0f23ce27fc12"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: crates/wezterm-surface/src/line/line.rs: crates/wezterm-surface/src/line/line.rs changed 5 times in last 90 days and 5 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 14 (its worst body is Line::apply_hyperlink_rules at line 571), 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(links): keep hard-newline output out of hyperlink targets\u201D; \u201Cfix(links): drop needless borrows in the row continuity check\u201D; \u201Cfix(links): #547 rejoin rows a TUI wrapped without the wrap attribute\u201D; \u201Cfix: tighten terminal links and macOS interactions\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- crates/wezterm-surface/src/line/line.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-surface/src/line/line.rs"},"region":{"startLine":571}}}],"partialFingerprints":{"codehealthFindingId/v1":"794bf478d6c26bf8f9fdef143d57d0cb12143d21f6e994a1f991259f0376b16f"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: kaku-gui/src/ai_tools/paths.rs: kaku-gui/src/ai_tools/paths.rs changed 5 times in last 90 days and 5 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 14 (its worst body is kaku_gui::ai_tools::paths::reject_relative_cwd_escape at line 298), 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(ai): harden tool security and partial stream turns\u201D; \u201Cfix: address review follow-ups on security and state repair\u201D; \u201Cfix(ai): harden tool security and stream robustness\u201D; \u201Cfix: keep code search safe without ripgrep\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku-gui/src/ai_tools/paths.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":"kaku-gui/src/ai_tools/paths.rs"},"region":{"startLine":298}}}],"partialFingerprints":{"codehealthFindingId/v1":"7aabfd27795bb9e1b0a99c5fb82d87b3fd65924656e85abc3f3695730dced43f"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: window/src/os/macos/menu.rs: window/src/os/macos/menu.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 2 (its worst body is Menu::item_at_index at line 49), 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(macos): rebuild the menubar in place on config reload\u201D; \u201Cfix(menu): retain separator items instead of adopting them\u201D; \u201Cfix(gui): harden launcher teardown and guard menubar init\u201D; \u201Cfix(macos): make terminal context menu safe\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- window/src/os/macos/menu.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":"window/src/os/macos/menu.rs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"93f369ad1ed9ba23622d6d1e62b043559423ce4f9647236986b554a0d80aa4f6"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: kaku/src/init.rs: kaku/src/init.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 kaku::init::imp::resolve_preferred_kaku_bin at line 320), 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(init): run only the bundled setup script in release builds\u201D; \u201Cfix(shell): only persist completed first-run state\u201D; \u201Cfix(shell): converge state.json across XDG entry points\u201D; \u201Cfix: preserve managed shell state across XDG paths\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku/src/init.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":"kaku/src/init.rs"},"region":{"startLine":320}}}],"partialFingerprints":{"codehealthFindingId/v1":"665fbae5baa82f14ca6add720601d1092153a7dd38adcf5664f44463d4f5091d"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: kaku/src/shell.rs: kaku/src/shell.rs changed 5 times in last 90 days and 4 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 8 (its worst body is kaku::shell::find_shell_executable at line 182), 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(shell): only persist completed first-run state\u201D; \u201Cfix: address review follow-ups on security and state repair\u201D; \u201Cfix(shell): converge state.json across XDG entry points\u201D; \u201Cfix: preserve managed shell state across XDG paths\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku/src/shell.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/shell.rs"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3b4589f099e0293bb4cf1caa26d7c1019aca61c5039efbbc5f33ef9227ef727"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: kaku-gui/src/inline_ai.rs: kaku-gui/src/inline_ai.rs changed 4 times in last 90 days and 4 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 5 (its worst body is kaku_gui::inline_ai::job_paths at line 96), 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(ai): never run a fix that quits or kills apps on Cmd\u002BShift\u002BE\u201D; \u201Cfix(ai): keep file names whole in inline summaries\u201D; \u201Cfix(ai): preserve inline explanations and command candidates\u201D; \u201Cfix(ai): keep inline command requests valid and repeatable\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku-gui/src/inline_ai.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":"kaku-gui/src/inline_ai.rs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"765215f04df7c1b5957812cb0b7c78f771553dcc442e1ff87250e3643808fdcf"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: window/src/lib.rs: window/src/lib.rs changed 5 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 9 (its worst body is WindowEventSender::dispatch at line 297), 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(window): give voice input tools a caret to find in the terminal view\u201D; \u201Cfix(macos): #574 isolate hotkey sessions and recover display geometry\u201D; \u201Cfix(macos): make terminal context menu safe\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- window/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":"window/src/lib.rs"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"d88d2d59120313f416dc7a3aa1e4d0179b4f9d46097f91985ac58ddcfe18ff7e"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: kaku-gui/src/termwindow/render/agent_title.rs: kaku-gui/src/termwindow/render/agent_title.rs changed 5 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 12 (its worst body is kaku_gui::termwindow::render::agent_title::agent_topic at line 76), 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(gui): keep the agent title fitted and clear of the first row\u201D; \u201Cfix(gui): keep complete words in agent topics\u201D; \u201Cfix(gui): give the agent mark half a point more room before the topic\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku-gui/src/termwindow/render/agent_title.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":"kaku-gui/src/termwindow/render/agent_title.rs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc8e37f4d56e9c3aa6a434fb4cccf17db817419e094d3ba393bcfd7a27f40332"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: kaku-gui/src/overlay/confirm_close_pane.rs: kaku-gui/src/overlay/confirm_close_pane.rs changed 4 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 4 (its worst body is kaku_gui::overlay::confirm_close_pane::confirm_close_pane at line 12), 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(ui): draw confirmation frames with the window\u0027s palette\u201D; \u201Cfix(gui): record the cwd on every tab close path\u201D; \u201Cfix(gui): close the pane its confirmation was opened for\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku-gui/src/overlay/confirm_close_pane.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":"kaku-gui/src/overlay/confirm_close_pane.rs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ee00723a390877a95884288b2cc324a03dd9880efb9f6e50b1f5d502bc59871"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: kaku-gui/src/overlay/ai_chat/types.rs: kaku-gui/src/overlay/ai_chat/types.rs changed 4 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 4 (its worst body is ChatPalette::heading_marker_attr at line 48), 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(ui): quiet the frame lines Kaku draws on dark themes\u201D; \u201Cfix(ai): clarify chat input and use a blinking caret\u201D; \u201Cfix: harden AI response state and tool boundaries\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku-gui/src/overlay/ai_chat/types.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":"kaku-gui/src/overlay/ai_chat/types.rs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbffa9c0ba27c0957e9b1645a557916433f6ac4bfa44ec2e002fb9431d3b864c"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: window/src/os/macos/app.rs: window/src/os/macos/app.rs changed 3 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 10 (its worst body is window::os::macos::app::first_service_path at line 1423), 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(macos): stop blocking log out, restart and shut down\u201D; \u201Cfix(macos): #574 isolate hotkey sessions and recover display geometry\u201D; \u201Cfix(macos): make terminal context menu safe\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- window/src/os/macos/app.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":"window/src/os/macos/app.rs"},"region":{"startLine":1423}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6929ceaba4a63f30be8676552269af9e28bb0b963374e92128cf1654b12f510"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: kaku/src/diagnostics.rs: kaku/src/diagnostics.rs changed 3 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 6 (its worst body is kaku::diagnostics::collect_crash_reports at line 224), 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(doctor): redact committed input method text\u201D; \u201Cfix(doctor): keep typed keys out of the diagnostics bundle\u201D; \u201Cfix(doctor): redact URL credentials and fine-grained GitHub tokens\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku/src/diagnostics.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":"kaku/src/diagnostics.rs"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bb8cf71d0e8f868ebdd72dcfebb3dcbf7ca387882da05860020000c7ba4dbaf"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: kaku-gui/src/ai_chat_engine/compact.rs: kaku-gui/src/ai_chat_engine/compact.rs changed 3 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 9 (its worst body is kaku_gui::ai_chat_engine::compact::micro_compact at line 131), 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(ai): improve chat overlay context, prompt guidance, and compaction hints\u201D; \u201Cfix(ai): harden tool security and stream robustness\u201D; \u201Cfix: harden AI response state and tool boundaries\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku-gui/src/ai_chat_engine/compact.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":"kaku-gui/src/ai_chat_engine/compact.rs"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"af7f9488546ca98bf5c0eab79bb5f09c07f80cb348a73a3b786e8dda16f9bc22"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: kaku-gui/src/ai_tools/web.rs: kaku-gui/src/ai_tools/web.rs changed 3 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 14 (its worst body is kaku_gui::ai_tools::web::exec_http_request at line 64), 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(ai): harden tool security and partial stream turns\u201D; \u201Cfix(ai): harden tool security and stream robustness\u201D; \u201Cfix: harden AI response state and tool boundaries\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-29..2026-10-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-29 18:56:01 \u002B08:00\u0027 --until=\u00272026-10-27 18:56:01 \u002B08:00\u0027 --full-history --no-merges -- kaku-gui/src/ai_tools/web.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":"kaku-gui/src/ai_tools/web.rs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1f3b78a7cbc9d229c25843e1c235146d7d2a01a234b2d086cfa673af94e7706"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #1: If anonymized user #1 becomes unavailable, 26 significant file(s) lose their only recent owner: kaku-gui/src/customglyph.rs, kaku-gui/src/ai_chat_engine/mod.rs, crates/wezterm-cell/src/lib.rs, crates/color-types/src/lib.rs, kaku-gui/src/ai_tools/search.rs, kaku-gui/src/ai_chat_engine/approval.rs, kaku-gui/src/overlay/ai_chat/input.rs, kaku-gui/src/ai_tools/registry.rs (\u002B18 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"069153471e9d2e6ccca011171e3d49a62987a943373d9ec1b5d6e94459e2f85c"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #2: If anonymized user #2 becomes unavailable, 10 significant file(s) lose their only recent owner: kaku-gui/src/ai_client/mod.rs, kaku-gui/src/ai_client/responses.rs, crates/wezterm-escape-parser/src/parser/mod.rs, termwiz/src/lineedit/mod.rs, kaku-gui/src/ai_client/assistant_config.rs, kaku/src/ai_config/tui/providers/codex.rs, mux/src/connui.rs, kaku-gui/src/ai_client/think_filter.rs (\u002B2 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"47fcbf9e38cc590276c79e4b730da62aeb91b9091fe527e6cec49ac192194649"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #3: If anonymized user #3 becomes unavailable, 3 significant file(s) lose their only recent owner: term/src/terminalstate/kitty.rs, crates/wezterm-client/src/pane/clientpane.rs, kaku-gui/src/shapecache.rs. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"422fc89d8d22c9f7a7dde60916bb8b51c55fae948a3b5700d834bf6e0dd7b845"}},{"ruleId":"D16","level":"note","message":{"text":"Further sole-owners (lower concentration): 1 other contributor(s) are each the sole owner of a small amount of code below the off-boarding threshold \u2014 folded into the bus-factor score and metrics (40 single-owned of 330 analysed files in total, counted over production source files of roughly 2,400 bytes or more, excluding vendored, generated, example/demo and scaffolding-template trees and test files identified by path convention, largest first; 330 of the 432 production source files in this repository met that bar). They are anonymized user #4 (1 file(s)) \u2014 spread or document their files in the same way, at lower priority than the named off-boarding risks above. The files folded here: crates/wezterm-font/src/ftwrap.rs."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6eac528f2429e724e1a97ed868f79eefbcf1888dab4af9a9e673429369bb5b2f"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: CTRL-C is 0x3, should it be normalized to C here \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/window.rs"},"region":{"startLine":729}}}],"partialFingerprints":{"codehealthFindingId/v1":"940e230e4a8eb38871d433dda267203a274aa49c9828b7a78852e714ec04cb81"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: docs say to insert the text here, \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/window.rs"},"region":{"startLine":7938}}}],"partialFingerprints":{"codehealthFindingId/v1":"31fcb1ac82d4b77c03a168af66a8ad4c17fc0163f15309f9762ab550b816f077"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: returns NSArray\u003CNSAttributedStringKey\u003E * \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/window.rs"},"region":{"startLine":7948}}}],"partialFingerprints":{"codehealthFindingId/v1":"6642fc6c4f762378a1e6ca19f1d5f5d9a651d40a03849ca7af534c4626afdb69"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: also respect self.application_keypad \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/input.rs"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"8df5f51362d46022090725b63987bdf824aa3f997848e0566a7ef3f71542cc4d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: garbage collect unreachable WidgetId\u0027s from self.state \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/widgets/mod.rs"},"region":{"startLine":453}}}],"partialFingerprints":{"codehealthFindingId/v1":"51d1539ce13d8b92ca8edd02976a580c4ee8a0c3cc833101fe266b810ea7898b"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: this doesn\u0027t behave correctly for terminals without bce. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/render/terminfo.rs"},"region":{"startLine":397}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce0da156a62257dfdf75cf730e698c60ce096c3c1e1e4967cbc10cf64c00fcde"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: this doesn\u0027t behave correctly for terminals without bce. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/render/terminfo.rs"},"region":{"startLine":419}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0be55d7303bebe571fc5a423cf47766207f6ab03da050ca9a0865e965c7f6e7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this isn\u0027t spec\u0027d by terminfo, but some terminals \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/render/terminfo.rs"},"region":{"startLine":547}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5de469e7b70c4b3fe3d6815301ce1e90b38b24c93c4354d11caee38f8348857"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: slice out the requested region of the image, \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/render/terminfo.rs"},"region":{"startLine":602}}}],"partialFingerprints":{"codehealthFindingId/v1":"23aa748db4211e5d34f15d1f94b89df225b898b723e70a8ad66df2a416d2b7ba"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: } else if self.caps.sixel() { \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/render/terminfo.rs"},"region":{"startLine":624}}}],"partialFingerprints":{"codehealthFindingId/v1":"865893e5e91a97805eaf93fccb45fadfbb1542a652331e21149b6e0b2c08dbdb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: could we use ECMA-48 REP for this?"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/render/terminfo.rs"},"region":{"startLine":1083}}}],"partialFingerprints":{"codehealthFindingId/v1":"8279b046e595a8fec73642041bbeade72db46ff5715ae80079b540df7644c86d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: there\u0027s no way we can match anything. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/lineedit/mod.rs"},"region":{"startLine":580}}}],"partialFingerprints":{"codehealthFindingId/v1":"07eb8d23d9a270c8a7fce9862ec4ec58bb298515dca8659abd5ff68fa8be51f4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: there\u0027s no way we can match anything. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/lineedit/mod.rs"},"region":{"startLine":635}}}],"partialFingerprints":{"codehealthFindingId/v1":"ddb94c22b10ece0c191bfdfe072387a8e115f84d0dbaf3f4704f19e05ee662b3"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: borrow bidi mode from line \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/screen.rs"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"5add34eb6c6abcdebb3de49eb4c574dc93083bd90623f4276c4f15fef23fe2c1"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: borrow bidi mode from line \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/screen.rs"},"region":{"startLine":333}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4547433cd76deb1412f5303bb93c406943087d277d8bbe6e81e37787c30ad02"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: when we can set the left margin, we should test that here \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/test/c0.rs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5dc669ca19abff9a7062083523d9ac2bdf9c9f5e28b351aee79f963326555f4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: when we can set the left margin, we should test that here \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/test/c0.rs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce8a4e502926bb5e519ec68b519cfc848f6f4eba0b92fc499c2a3124aabe3950"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // mod selection; FIXME: port to render layer \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/test/mod.rs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"192e2bcce9e8237808adcf535f584e65c0f46e77fcae028a18ed2efa07c151bb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: make this configurable via TerminalConfiguration \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/kitty.rs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b898156dcf26b5c12a052cdae9367151c627e8eb85dd1ec92e9125fc6d46664"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: send an EINVAL error back here \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/kitty.rs"},"region":{"startLine":769}}}],"partialFingerprints":{"codehealthFindingId/v1":"28c7af7d7d77b9d1f024d2d3f1137fa6ad85c4ea9519980adecb84f91372659d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: selective_erase when supported \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/mod.rs"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"b831beb3092aa3a7577b3c0e69daca30c45a9b91f8f4388dd1d5f487c225dc6c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: see https://vt100.net/docs/vt510-rm/DECSTR.html"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/mod.rs"},"region":{"startLine":1489}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ace5ceb557d32ba76b2fe7cf1e3d2782f06cf093dc1cad83304e02120ca3ebb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: disambiguate with TabId \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/lib.rs"},"region":{"startLine":1597}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ed15685e413239c46d54d16169b893d3b9f1bf9337ab21c5cb19d18e27abd81"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: disambiguate with TabId \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/lib.rs"},"region":{"startLine":1674}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb95567351d2ed992bb4f928807f9c86c274ae506fc00e92f5ebf4f48a5bc0f9"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: clipboard \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/lib.rs"},"region":{"startLine":1722}}}],"partialFingerprints":{"codehealthFindingId/v1":"47f31f8341290a61acd876a44e5d9614f71a153228968fe513bdb2e1ab7928d8"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: split pane pixel dimensions \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/lib.rs"},"region":{"startLine":1729}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fb1373eaeea21c21ad988ddf4a40110b4a59b247d0c58d140f14603f46ae739"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: clipboard? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/lib.rs"},"region":{"startLine":1897}}}],"partialFingerprints":{"codehealthFindingId/v1":"14afff39a5b53f750f8c421a9cb836c1e99c19944cc1947268f6ec530ea7536e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: do we need to proactively list available tabs here? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/localpane.rs"},"region":{"startLine":1019}}}],"partialFingerprints":{"codehealthFindingId/v1":"309029a3f038ee0ad0db3ed72d315e944d2fe595b086ea693d3a304da0f3240f"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: this isn\u0027t useful without a way to talk to the remote mux. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/ssh.rs"},"region":{"startLine":275}}}],"partialFingerprints":{"codehealthFindingId/v1":"23c9612de6b2ee1caf1aa34db091b84de352adf0549b3de36bef267d942c7a4c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: TerminalWaker assumes that we\u0027re a SystemTerminal but that \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/ssh.rs"},"region":{"startLine":574}}}],"partialFingerprints":{"codehealthFindingId/v1":"5668716ccc8ce01e2495d91677e6e3181193cf88385bee481e6b8962cd4c0e17"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: TerminalWaker assumes that we\u0027re a SystemTerminal but that \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/termwiztermtab.rs"},"region":{"startLine":481}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a182ebfa609186216d054c84196765970d93caadb41b2eeb2ed4a1a82940e0d"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: connect to something? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/termwiztermtab.rs"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1f96e322cca4798f06fda88cfc518a68036e28e6d9202e452bbe2df0457aace"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: make a singleton \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/termwiztermtab.rs"},"region":{"startLine":570}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2856115b00e9588a49de00f7a5540382f887a484f1e7d0f8af6da23178db88b"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: use domain_label here, but needs to be async \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/commands.rs"},"region":{"startLine":524}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebccf5ad3309c27dcd98aa37f38b604d3fba5029aac73ea61639bec26a140231"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: use domain_label here, but needs to be async \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/commands.rs"},"region":{"startLine":554}}}],"partialFingerprints":{"codehealthFindingId/v1":"746a5cb9cef3b3677f7b82161eaf9a23611ada285a49d7781e7e25126f32b176"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: find a new assignment \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/commands.rs"},"region":{"startLine":1371}}}],"partialFingerprints":{"codehealthFindingId/v1":"aeb48ed41cf8dcbb4e11cc652cf8f24419d5d06d97214a5c320499d7a9b5027f"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: find a new assignment \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/commands.rs"},"region":{"startLine":1382}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c9d28cb9ac78701adcb075a36a09c98fe1d5c2c74f9d55c867a8a70cee7c344"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: consider eliminating these codes from termwiz::input::KeyCode \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/keyevent.rs"},"region":{"startLine":1269}}}],"partialFingerprints":{"codehealthFindingId/v1":"67929c03226d33c874ed0262c29ec43348d11d0d4d1b340feb8db44815c13a42"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: determine exact width of macos ... buttons \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/fancy_tab_bar.rs"},"region":{"startLine":323}}}],"partialFingerprints":{"codehealthFindingId/v1":"30bd701afbe503d915d11fe33f1078e656245d14f475619e73f48996a7015567"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: need more paragraph context \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/mod.rs"},"region":{"startLine":1011}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0d7d52fec5286f681806076de68f3f01a9506bbd53932261210431b9b60747f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we only have a single scrollbar in a single position. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/pane.rs"},"region":{"startLine":379}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b18343d8e9ece3afa504565cdb55137e096f9be48f8c8a4b9cb975661af61d6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: render a thingy to jump to prior prompt \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/pane.rs"},"region":{"startLine":766}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c075443101e9bec7218ffe2bc41248ee16aa64e3b095954b616450ac3efab74"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: visual bell background layer \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/pane.rs"},"region":{"startLine":861}}}],"partialFingerprints":{"codehealthFindingId/v1":"49301ad71610fb489b2d4f47f29a9d008b3726e7a7e95676f49b85a823035999"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: scrollbar \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/pane.rs"},"region":{"startLine":862}}}],"partialFingerprints":{"codehealthFindingId/v1":"530dc69fae421fdc64a924fb549ef4f774c83dc507a28c14cd599cde3d1539ce"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remember logical/visual mapping for selection \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/screen_line.rs"},"region":{"startLine":532}}}],"partialFingerprints":{"codehealthFindingId/v1":"67689b53e7cf55e34ab7d27b585838b372f16a95aa91326bd9f661cbc1bf50d8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: clipping, but we can do that based on pixels \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/screen_line.rs"},"region":{"startLine":607}}}],"partialFingerprints":{"codehealthFindingId/v1":"30a1152d916734f3fd417cfbce53c9e3fa15b2d303f3b5d76f523abc4a2ff099"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: expose other states here \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/scripting/guiwin.rs"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"98a16f57e0904c28047c6b48cd32dea34de5efda8ed455797f9bbb943eac43cf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO: check iterm rendering behavior when the image is larger than the width of the screen. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-surface/src/change.rs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"57039a701e1b9a63b965087dba0b17a58141cfd6a8bb83a95fd7633ce7abee25"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: let\u0027s build a string and a byte-to-cell map here, and \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-surface/src/line/line.rs"},"region":{"startLine":539}}}],"partialFingerprints":{"codehealthFindingId/v1":"b07b006a664e2abd04d2b859e54e01dcdf88fc6fc9ddf9bc88cb977aedc5cd4e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: look back and look ahead for cells that are hidden by \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-surface/src/line/line.rs"},"region":{"startLine":696}}}],"partialFingerprints":{"codehealthFindingId/v1":"016d7e309c84e6204c3c231114bd8cd93548cb7cb500fbb273bd0172ae7ea064"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: we can skip the look-back for second and subsequent iterations \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-surface/src/line/line.rs"},"region":{"startLine":1034}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe2fd57b8ac9fa9809aa9508a44fda9361375e066124b67bc851cf75ee47bde9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This fails even though the type is a symlink: \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/tests/e2e/sftp.rs"},"region":{"startLine":511}}}],"partialFingerprints":{"codehealthFindingId/v1":"20f1c46a432dc0f39fdef35993ef98557239766f5b157a188ea5594016cf1052"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: overridden config path? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/sessioninner.rs"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e7c9139ffcfbff38c549c2801571944b6866d013107e749645fc1a4f72031b7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Move this somewhere to avoid re-allocating buffer \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/sessioninner.rs"},"region":{"startLine":684}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d583652f086ba4b511b957152696f7e57bd5edbce7a6b4d89937cbe65646558"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Hyper and Meta are not handled yet. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-input-types/src/lib.rs"},"region":{"startLine":1707}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc00fc28306dcf27ee10c952cd821f26764b4c339d683a0da8e9b378429c852b"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: ideally we\u0027d get the correct unshifted key from \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-input-types/src/lib.rs"},"region":{"startLine":1874}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf3a4b0e0ab98a25f875c4b78d858bacc4650392e3647570ac1a681de4f45390"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: pass a callback for querying custom palette colors \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/hbwrap.rs"},"region":{"startLine":442}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3e04c1f77cf22631784a122aa75dc9369d55a75d00a89aafca5f853eb10d4da"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: hb_paint_funcs_set_custom_palette_color_func \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/hbwrap.rs"},"region":{"startLine":480}}}],"partialFingerprints":{"codehealthFindingId/v1":"00d839d49eca1b732d08ea05fe719334003e8fde72933507abe60f6ef78a11a1"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: gradient vectors are expressed as font units, \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/rasterizer/freetype.rs"},"region":{"startLine":545}}}],"partialFingerprints":{"codehealthFindingId/v1":"344e22c72c53797ab524d668fd1a8a3e514e2011b3c1a171e29b74e5b3aecbd1"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: harfbuzz, in COLR.hh, pushes the inverse 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":"crates/wezterm-font/src/rasterizer/freetype.rs"},"region":{"startLine":592}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fadc7433265248530a617be31eb182fa790d839bd5f3ae8eac57d2b8d764d30"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: data size optimization opportunity: if we could somehow know that we \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/csi.rs"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"33f5de2a9b34f1af7a4a302b98f4e68e31ed86e3f9f7f2af46a566a90e8414de"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: data size optimization opportunity: if we could somehow know that we \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/esc.rs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"854be103f7d334d9425ff78496f155f4b1057085c9dfd548e2d72152f86717a5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: protect against k, v containing : or = \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/hyperlink.rs"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"27cf2edb6b418190ad1794bdb8b38a4418cd01e8e946a6345b66c67bfd0ad20d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: ensure that link.uri doesn\u0027t contain characters \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/hyperlink.rs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"12f018e162bf55dc3345160a99ee17542f9b8a5219a429f44beaea9d99d75b4d"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: from linear \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/parser/sixel.rs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e93451dd951c5095db43247c2ef3ca9b9e7cdfa1bf7146f57b531bcdbab2417"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: We currently get a bunch of these; we\u0027ll need \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/client.rs"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc9c6a1018f6c586571406435fc6725d84cee6964e2c6cac219e7b869d6a21f3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: advice remote host of interesting workspaces \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/domain.rs"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"d673358679be721f1944dc3881fa69189de9013e67ab54746be6034d8ebd15f4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: decide how to handle key_up for mux client \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/pane/clientpane.rs"},"region":{"startLine":480}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b73550c2b66a473be2a8031ac823d6a27119385734bed4579410b3d75204d19"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: retrieve this from the remote \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/pane/clientpane.rs"},"region":{"startLine":549}}}],"partialFingerprints":{"codehealthFindingId/v1":"553346eac15e321f970278066beafcd16916e069198c0be2ea04eeda17e5f577"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // Pd       MONGOLIAN TODO SOFT HYPHEN \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/bidi/src/bidi_class.rs"},"region":{"startLine":659}}}],"partialFingerprints":{"codehealthFindingId/v1":"396daa6aff3775ba1a27215d805e3a8997aba151b25bb3c799884bb446c76eaa"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // Lm       MONGOLIAN LETTER TODO LONG VOWEL SIGN \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/bidi/src/bidi_class.rs"},"region":{"startLine":666}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ea4f7f7f5f99c649cd2c58e4d570bf319c7648e13643543695d83bb6d3443b9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // Lo  [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/bidi/src/bidi_class.rs"},"region":{"startLine":667}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ef974404500d4304f72d26ebcaea72b19482c2d3f258b7a81a0c48596fff2bb"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: also allow deserialziing from bool \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/config.rs"},"region":{"startLine":4035}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6030bd90eb054b606b0220708252eccce207720cec9c075c6f7d87ed1da72ea"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO: tags to categorize the option \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/meta.rs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"735e159e70db832b667cd2711e0f2abc0db124c59f1aaab53324103c3fc89697"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO: For enum types, the set of possible values \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/meta.rs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"6aa0d03941858d1da841fabca7607eb261cb66f275e18fbe9dd518b568ea9d3f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO: For struct types, the fields in the child struct \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/meta.rs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"85f500247654860cc724281110722bf4e28a1aca59b2d69885573d11649a5d22"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Tmux-cc in the future? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/ssh.rs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"1dbf369237b91ff9decc10ace389ee12244437208dab8b2bcda5a8a2b227b203"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Cmd, PowerShell in the future? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/ssh.rs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd3fd077ea71db98cef4d5d398f23c2320ac2abad925451ed2bed801a673df24"}},{"ruleId":"D20","level":"note","message":{"text":"No ADRs found: No ADRs found. No recognised ADR directory (\u0060docs/adr/\u0060, \u0060docs/decisions/\u0060, \u0060adr/\u0060, \u0060docs/rfcs/\u0060, an \u0060ADR0001/\u0060 folder, or their siblings) exists anywhere in this tree. What was searched, so you can tell an empty log from a search that missed one: every directory under the tree (build output, dependencies and VCS metadata excepted), for a document that is either any non-index page inside a recognised ADR directory, whatever its name and however deeply nested (\u0060docs/adr/use-postgres.md\u0060, \u0060docs/adr/2024/0001-x.md\u0060); or a file anywhere whose name is ADR-shaped (\u00600001-use-postgres.md\u0060, \u0060adr-012-caching.md\u0060); or, when neither turned anything up, a document carrying the decision-record signature (an \u0022Architecture Decision Record\u0022 heading, or Status / Context / Decision / Consequences as section headings). A decision log that clears none of these \u2014 unnumbered files outside any recognised directory, without those headings \u2014 is not seen by this check and this row is then wrong. If that is your case, say so rather than renaming anything; otherwise, consider recording architectural decisions in \u0060docs/adr/\u0060."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d2bea044ff79d7d275f5a91a6e2f548586178eaf480274c33960ad020c854631"}},{"ruleId":"D26","level":"note","message":{"text":"Projects may be oversized for their cohesion: 2 of 64 project(s) overshoot their size bounds, lowering Project Cohesion to 9.4/10. The most over is \u0060kaku-gui\u0060 (77276 LoC, 256 module-visible types across 12 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":"c3303842fb09429434f19e5c2bb1a1b44ded7dfc3ef97fba595b3fb1e7921270"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A05:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7942de456cf90037958fa4ae1fe7702fa483a6e74e1ce617e52f7ccb11dd0c87"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ba2cc3b3a14ded61e79429d134692b5df09a7fbd113dcfdbd102288bd7791a20"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"688804dae5ca45f2e7025ace4f99122682a23436dc1e96607ccf62ad9342acc1"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5d4a388a2de0fb6a06937f553a85562d31fd3b30365f5c3521302cbf6945ac59"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ce562489b4baea98f302698bdd3843c5eb13c035062a4522f24ea24ac396cf54"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a1d88bc5d8de9dc638d8daa2826172df7ddecc5be6053378199afa215e5a0c03"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9445ebbcd517f4dbd0ae85d62d14f0cfe70071ca40ae4d25c503a7de46c929ca"},"taxa":[{"id":"CWE-416","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"bd3f92e2b614b623157e8ebdd664bf2a4bca8505907a80cb68bd8609d6f6a786"},"taxa":[{"id":"CWE-416","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"2ece24e5b08d2322972ee4eb3ef76521f1a0ffb5cd6458f70c38740563803148"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d3942a50e078ace1a9c7930c5f9704faf852cf43d85f7180835198ddcb6569fc"},"taxa":[{"id":"CWE-415","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A05:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7a67cf09c428f8330fcf82490ba02925ee3e0ca467126f06add45589e20a4685"},"taxa":[{"id":"CWE-415","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A05:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b100f4b4b8d367384c21eb9b9bb77756c127c05071c8ca6648f5cb082c331f27"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"de5bf5c8203705f911b03048957a2027faa93da3114d5e1c58673477eebb6f11"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a8e608d260f80ca19074b3e74e855b83ee7c25a6230c8b6feb7ce25f8da41b84"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"48e086b52fb0bab33b12a87bf6b969ccd034c3edd0d560ff9f6b77ce7512174d"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"8584aee4f0df8ae693483e501764d26f3384a119df72293fd628e0d3373c3aa5"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"871d8c3ec2beda01bf02ed6f1d8faa0b1f506f4ac5eaa3fc64c9ce7523625949"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7c73b14382a2c46e9a7736576815b4e32df0ccd750f6e36728a1278d6edce592"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f56cadad72f9269053ea8308b5a27665cf06e26e0264fbe4318159228c213c39"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"692cde0393a89bcafc86a0f6d7128cfaed258194d2d34f9ad350fedcc91abbad"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"23efcc2690522e6635642e4b8b37ec5c0798d2056a0a70b6d5ab632a45eccab9"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"fefd3534e9c80a9a4bba3e06f934034dd9c8086fdb256d45456d81bd2fe560f7"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c3f6a234c5f2eea81aa83e9692ac3b2391ac92cbacd1f9b3429705b58fc47ae5"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f8132681d3a68d4ed27c22d59f36b056be008c156a11a49b18e525f39e067dcb"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"44aa8d68476bdd0171f1797d7bfbbeb7090c76babdc08246a682aec323fe0518"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7513c207168d94804db74c633d860162c7e3e8dfc62a00c6cd2d2894fa01490b"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"af465903d7b7d3fd5b2a974fa0908378987a01f050f3d9564e36e15bf160ba49"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"610aaa6ff6ae07c46f7c6cc2f2f304a424c72c5f726a1331a285c13f1a188e39"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b8a480a60ff15317cfdcf66564e8acdfcfbbf8009d9013705452ee61ef59c8df"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"27c8902d99df6e50ae4d9ce8b361db95242ebe3e36e82088fd7818a60e35949c"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e7a0c7d7516854d0b0f7ee31fde10470b7d85740fc35ca242d939315c1d80bb8"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e1b4a2cf70068f070255bbe4346564e4c063ce8e33e2a167f19c7ee01b9b6642"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"bf9a0f5c3ca3d62ef93edae6d87f3c55d79818734a083e884d798c328a52b8f0"},"taxa":[{"id":"CWE-415","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A05:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"22bc9eb2e9322d73902e889af131305936a4eea828955216475a2b00004dd766"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"42e54c4d3934145963a4af7f88b8f845c3c20694011aff7f900f8d8a3e90c906"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ea3a3a9e2eed8c43fd7015a625f124f7fcd45e9260e56134d8d0f602044aa63e"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"447ebe07f65904e84a754ca44fc151317027bf96a2073fffb7a048f28fbb3cc6"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b97e5ede44b67968fb8c309f9aa744b0c8cb24b8d36a617fa68aa372b322342e"},"taxa":[{"id":"CWE-415","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A05:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"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":"da0ff6976db034fba1a6debc49f1bdb6e1f4556b398ae2ce2f18c8d11e4be1f5"},"taxa":[{"id":"CWE-191","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-248","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A10:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e9e2c75d2fefa94504a6443bd33d31210eecfcc19eda5a718aaf21e504742ebf"},"properties":{"dependency":{"package":"openssl","version":"0.10.75","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5922a5beeab5ac077ffb485a783ad545036e79b56239f83da38f3fb84336b113"},"properties":{"dependency":{"package":"paste","version":"1.0.15","advisory":"RUSTSEC-2024-0436","reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"2b5cc6a78fe02a95b2f6755616011982ae866dcba8c2aeaae7b037f36ce19be5"},"properties":{"dependency":{"package":"unsafe-libyaml","version":"0.2.11","advisory":"RUSTSEC-2024-0449","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":"4975822701b3b96654c82dada9bad969e348a6adefa52cd3bba1b6cfd71c3bb7"},"properties":{"dependency":{"package":"bincode","version":"1.3.3","advisory":"RUSTSEC-2025-0141","reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"1092cdc16bab90e26caa98781415518f2a1a0fec9b43d183894264e01dcc42b6"},"properties":{"dependency":{"package":"event-listener","version":"5.4.1","advisory":"RUSTSEC-2026-0221","reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"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":"c64e30c28e3c0e2ac4c865fc1656b78d3404e0bf0484e55f9176b7c5f283f360"},"properties":{"dependency":{"package":"tokio","version":"1.50.0","advisory":"RUSTSEC-2026-0386","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":"ca383df8f93c1fcb449201c7c47b9fc487e55acf31a9bb60212d29fe36dde189"},"properties":{"dependency":{"package":"block-buffer","version":"0.10.4","advisory":"[GHSA redacted]","reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"2509b067ece1c3cd49fdeafea5ddd820f8487a54685319ef69ce931ef4a81f07"},"properties":{"dependency":{"package":"tokio","version":"1.52.3","advisory":"RUSTSEC-2026-0386","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":"d820d6820e5bd5bd2243f33d83847fcf9fc477ff7f8ed3409ba6b0b5dbb8bba6"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"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":"db73fa4d62f235b878af529501bbef082327aece6e209524858eb2a6723b3710"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"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":"52ac8420ec4a0d2649b79750c3134d491484b0b64f27f09de0a830450f3addfa"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/bidi/src/bidi_class.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5aea1db50344cfd0b294d2b2e060719ed63502824c8c1e572f71e7771282d5b5"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away, so if it breaks, no one currently understands it. It does carry its own tests, so the behaviour is pinned even though the understanding is gone: schedule a read-through, using those tests as the specification, before the next change lands here."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/bidi/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d3546cb2c69351a0dd16c604ad4149dce3d37e562cf1ff48131fea717ab67d8"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away, so if it breaks, no one currently understands it. It does carry its own tests, so the behaviour is pinned even though the understanding is gone: schedule a read-through, using those tests as the specification, before the next change lands here."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-surface/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ca5c052fe469fe98c29c0fb010c1a9987015a13d0faf84fc70e71411eaabb30"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away, so if it breaks, no one currently understands it. It does carry its own tests, so the behaviour is pinned even though the understanding is gone: schedule a read-through, using those tests as the specification, before the next change lands here."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/input.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f46720c5d94603917cbdeb2c136afbee1c5eb151da94b517dec17c7f56425a3f"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away, so if it breaks, no one currently understands it. It does carry its own tests, so the behaviour is pinned even though the understanding is gone: schedule a read-through, using those tests as the specification, before the next change lands here."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/render/terminfo.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3706d4dc7658fcc350b56f1580c4b9c4efa214fe73d4173f56b66f711aa59826"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/sessioninner.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"11a7b014278bf76a0337b738594d2b8f22cc11098c15e403954667a74758c7f3"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away, so if it breaks, no one currently understands it. It does carry its own tests, so the behaviour is pinned even though the understanding is gone: schedule a read-through, using those tests as the specification, before the next change lands here."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-char-props/src/widechar_width.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d6e34ff15275fab76183fea6c40194311a137e73bdbaee6459f9c6dee83d1a0"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/ssh.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc559d1be2bbf435b0cc97e1c625b1a8efdc71bd65a251fad9fda30c6e2a4318"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away, so if it breaks, no one currently understands it. It does carry its own tests, so the behaviour is pinned even though the understanding is gone: schedule a read-through, using those tests as the specification, before the next change lands here."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/vtparse/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"11ddb801425001a5f275d3de4ab99c267222d5df92d5b2a5727d3080b750ee01"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away, so if it breaks, no one currently understands it. It does carry its own tests, so the behaviour is pinned even though the understanding is gone: schedule a read-through, using those tests as the specification, before the next change lands here."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/tmux_cc/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a07a45483d0118c281b9aaf51bf54d689fbb985e0cd5dab86d5dcf50afdf09ce"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/domain.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"41b60d1a1d67900db5d34e3059a12d292ee3685121005acb5b584bed574c267e"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away, so if it breaks, no one currently understands it. It does carry its own tests, so the behaviour is pinned even though the understanding is gone: schedule a read-through, using those tests as the specification, before the next change lands here."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/apc.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"553a7d7408aedecf34255c8dba1bfb67c143513b7fc3fa982a0fe5db62b34adf"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/kitty.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"25f5d5b8b6edc8f0e43f761e0e34306434539b4abd700ab24678f76215f457e2"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/hbwrap.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"10a7dc0fcb90b9ae7de808388f4af274066e90c9d91723e309dfbd23686f3129"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/rasterizer/freetype.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0c93a4b8cb0921a8dfffe8cba50caf77ae5b57c9266f5ffe09a31f159a24126"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/parser.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"58283a236923a4553d45e0f951fe8fbdd6e7e3775542be398306570fa9a5e722"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/pane/renderable.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa0d1e497ba86713eff664a9513c11bfa49b48ba1d5d89e23c3c9b0531969fe9"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away, so if it breaks, no one currently understands it. It does carry its own tests, so the behaviour is pinned even though the understanding is gone: schedule a read-through, using those tests as the specification, before the next change lands here."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/widgets/layout.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"94ea11c7999cd36f8993001ed4646b281af3fcf113426a9fd090b3d41eeaaf37"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away, so if it breaks, no one currently understands it. It does carry its own tests, so the behaviour is pinned even though the understanding is gone: schedule a read-through, using those tests as the specification, before the next change lands here."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/pane_encoding.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"09a8e373d78703f0d5fb812dde04011d59654b5f4eb4e0fa518026996c46088e"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/domain.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"af4d6354d497ee160d4dc9a7a14465dbb51438fca2ee8453ae046d57c483773a"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/pane/clientpane.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2506cd7173aba4a493894aa3b68bd7bb16a224a5dcd0fff8156cc09032597d14"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away, so if it breaks, no one currently understands it. It does carry its own tests, so the behaviour is pinned even though the understanding is gone: schedule a read-through, using those tests as the specification, before the next change lands here."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/bintree/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f1a75418528967a7b058b1c2209c0b2f422347a18516181757da1a195ee5fb4"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/background.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f37f1d92c7fe0013b5b96e0369f9aa2da625f00c1c1858e7066e321d9d4842f"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away, so if it breaks, no one currently understands it. It does carry its own tests, so the behaviour is pinned even though the understanding is gone: schedule a read-through, using those tests as the specification, before the next change lands here."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/shapecache.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"380c011e654bdf6c5a0c72927caecc2ad1173e3314957235ef282b8dd6713df3"}},{"ruleId":"D34","level":"note","message":{"text":"Further orphaned files (smaller): 118 smaller file(s) also have no living knowledge \u2014 folded into the freshness score and metrics rather than raised one row each \u2014 most significant first: crates/lfucache/src/lib.rs, lua-api-crates/mux/src/pane.rs, crates/wezterm-cell/src/image.rs, lua-api-crates/share-data/src/lib.rs, crates/wezterm-escape-parser/src/lib.rs, crates/pty/src/cmdbuilder.rs, termwiz/src/widgets/mod.rs, termwiz/src/terminal/unix.rs (and 110 more) (142 orphaned of 330 analysed files in total, counted over production source files of roughly 2,400 bytes or more, excluding vendored, generated, example/demo and scaffolding-template trees and test files identified by path convention, largest first; 330 of the 432 production source files in this repository met that bar). Attach the read to the next change that touches one of them: have a second person review that change, and leave behind a short comment or test recording what the file is for, so the knowledge comes back at the cost of a change you were making anyway."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"ce861fd78f6935114d3a342cb90ad25870f984e1042954fcbbe27c0e23be3658"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/lfucache/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6895c7267c3fa383bfd7eb5268fcd6ec65fa21eac2e0636537c1236b6142f8f4"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lua-api-crates/mux/src/pane.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e50d777dfc8fb22cb4dd6e4a80712feca01dba0bd25fb571d0bf07073d392fa"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-cell/src/image.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4371c141bd3a336500788d13f68e0bca882a2cff00f6e317ef0df91eb39d1cda"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lua-api-crates/share-data/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"95e038aaea23b38bc4fc254edc66bf46e4b8b33375ef8b1360a9beacc093db08"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"539e0f68c808d1e0495d3c7f869ff62ca5f2905f5fd3cdc4e7682e5968fd265f"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/pty/src/cmdbuilder.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4755ba39a1ac7ca8021862f409879c82f8caa71169177f69972a8f44672dbd7"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/widgets/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"98c802a2166d4b4db0f9632e241e4736073083c38ad7646bba27cb6bd0941326"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/terminal/unix.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cafd54f3b1d091b3b8fe50249395959514afd42f221e42f61b61f50d20597eb"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/rasterizer/colr.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1c3c4d6a43ace0bb7c5647ee4e54bd8a2566d01d80a3f6625eb0168b2b7d7ef"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/selector.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a583d89f16c1b8d71fa397d84207a82fad6fee1434b2138b0c4fe55254fcc27"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lua-api-crates/serde-funcs/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"446f4e33bb93aa4267fe3271b610d37f5f90df9f483c9c4b8a2bcf129295f6a0"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/bitmaps/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"627fe84aff301a0cfe500cbbfb43e211f40989fc9d6cdba8f23e8b178e09a2c1"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/filedescriptor/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"126f94c6ac6b613bb3dd2dbdd9a98941b570e5cb997284df046c9ddeb4738742"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/mouse.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbb1cc946e4e768fc2e8e7f08bb15b361ec493a2bf9b3980514955db357530a0"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/stats.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4ccc377c26cea26cdfa358845cd02a292f8678050c803c1de2f697706b2f1e0"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/rasterizer/harfbuzz.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3afa9b5f2d97cf5a8a5c0ea078c3e0dcbe34e8d71685940647e45251e989b613"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/auth.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f290387ba666260877c668e89425d7521b0e360cb9624a3d00aa14ce1d4ca27"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/background.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6fa08b0e5a12ec63d2ccf5ce465d88a40f986daaee8f454728e1138a9ac2694"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/scripting/guiwin.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d710f4f9c92ee7e8c49c8bfaa79b9c55bae5a7a05777a68fb040ce759d47fb4"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/sftp/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a70ea7870ce121a02d4c61441e3ff787fae1e8ce53006a56dd65a78e128b306b"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/pty/src/unix.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4edc9693b24d20876996b9591a89aa03cb431a54662aa4e9072d7c3593cedaf"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-dynamic/derive/src/fromdynamic.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"16aadfa5b6dba27934f3d8e40ad7b3f36929e563be395289dec3cf59993e364f"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/window_buttons.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cdf005b91572196de0caf412ee0dcc4e56e7a7d7794e96094eba336c3368366"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/quad.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"90577b3464f08ae15d2664caaad6d769b1fa16e946cf77926f1fc3e87061867c"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-dynamic/src/error.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"23e91169b45e3204e0fcec2856faec0a4c7242aa35d183a24c55ecfb1820363d"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-surface/src/line/clusterline.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d969d1c20093da4866af4fe0e091a2ab897907a9fafe381548db03c32c3b6262"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-surface/src/change.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d27fec6a2c79ad1d51244b64ff4d458cf1c80db02887ffe7b80bdc17efbae42d"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/sftp/types.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0972bf4f358f86afa13ce8facb1d6c63f6acf6b244bf59e3766ef756b46e2b0b"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/rangeset/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7743d0466b45fa039fa4bf8aff12510a893d12c29197d9f47e66c1c5ac382b07"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/vtparse/src/transitions.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ce5a74afbc50e71bae6dc297533bbfa65d3acfea10eeac08bd835fd7b10d2ee"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/pty/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7c4544e218e16ba129204c95fb7d78eb2ac4de38b07b8f5d4decc54c09df805"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-surface/src/hyperlink.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1901e72c0b765b3ccf4da66fa3b51bce02015b0f47e70d5ea6244117f640b86d"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-surface/src/cellcluster.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0489625bb21720e3d2fe8ce2d81280957714c1276f7b19c7f2f374d8458ec37a"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/paneselect.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ed946765e58720458e75057b3ae669832cb3b1f0bd51042b72fe003afbcce8d"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/bidi/src/bidi_brackets.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"aff9f09b72d7f69b8847fff828aa8072fa0c85d4755e876b4a58e8063b2ee039"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/env-bootstrap/src/ringlog.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"13d068f97f72ffeaceedbcff004598adb7d5f138617fb183c7440abf8992c66b"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/keycodes.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f26da4a1c0989b2c386148e1dc21a434d8c262f3c48a853be5b19b703a0f1b0"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lua-api-crates/mux/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4781196a11f941ccf4627b59e47d98b7afda39ed6caa26d11a1c0260f71afce5"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lua-api-crates/time-funcs/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3824443f642720811d4e8aa8a17a7df6f18c281112db1277a25c675b10440d1f"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/parser/sixel.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e568b6033abd4208c0bd9af28df77c8c678d80e1cdb0d05886662a2a98499f6"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/base91/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8a04899e3534aa84f0fd3ac3134ed34da83f855f3d7c7a3d932ea3e1d9b434f"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/pty.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0985b1f4245ac7af1e9cd292afa9cc611081612714e77fe4c8f6e809012bd1e6"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lua-api-crates/color-funcs/src/image_colors.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c67d802bdf1f8ff528e4234d48cb161b7027affb9c61f3000044968e319272cb"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/keymap.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cb0c41fdea7ffe370711a6850f13cbd2dd559297230efab11f8a0dc231e9f6f"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-dynamic/src/fromdynamic.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6d2b521ca577691aaa3a14e613ab6bb5d0acc28a2db4f789d49bb6db88eac94"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/units.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"783af2de3074f5f666540f5a185b6cf64fe9a77421116299e6018dc09b598131"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lua-api-crates/termwiz-funcs/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bcd9a76c5b20f2171035e2c35753369c4f66a8cf8de946b5d4c1a98555838d15"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/derive/src/attr.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"573188cc6763a131c8dae4025b09c0b491ecd6aef460a2e472841e63dc0d453f"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/color.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9f92c53bbb75bd41c4f83ac80a96854d7352890d584cc913aa581fe551a37e4"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/pty/src/serial.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5b621ff0167410117395bd3d0c39a0fbf32e14b841fb4ab3607f67ade920810"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/host.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2eaef38aea185d0a346b02136211c8d94df704ad02b1b379a7f59a8545f87cd4"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/ssh_agent.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9961da4a09b9f76ab86c566932e306b9a1a87aef9ac01c417d587cce7a6b7f75"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/promise/src/spawn.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"baab840714264992e27889c86ae7efe0c276b955f8307fbce78a0606db573a91"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-dynamic/derive/src/todynamic.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c20df39972c0217b155123637b7390e8371b0327a22384dd29a9576d2f82d996"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/tabout/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7869897007d46bb7fed7dea82141b14bdf2fc7225146fd6e31a6b7f949e92012"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/cli/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2c688f1a0ac07ae6a42ceb1d49719af6522440f9411998b93be47a077b81eb3"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lua-api-crates/color-funcs/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed522a9bf9d812d2230175ec2aa9b6504bfeaf1038c6e27de35d61afc0d816ed"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/esc.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6b042ab18af41754caef9850f389d3b5c4a314d5b0c4c2c62f22656cd0309db"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/luahelper/src/enumctor.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b55b9a28aebf9e5e3cfd60e31def59983a760e168ab5ee8354e8a1677e1ead6f"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/cli/list.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3f4aa0195a1c60034092d5e8bcefef75c72ec657014b2dbbe5a287a8e814526"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/config.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb0d80171ef9eb9bd4e055ae5850bdd8e0d0783c9ec869530cb70ffbe6a4663b"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/cli/list_clients.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1332a218abfa75755f6c192cfce670911613162dd865a28db33cc71ce89b9a0e"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/channelwrap.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fa37d8ec78cba0ad3190fd61d6ffaa1cc022e6cbc9fd4bd5fc4b7ea9cf90513"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/cli/activate_tab.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f83d5d9863cf9dd97a408d1d4c6fe5fc04ef852574970f32a7ad38f430a2b026"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/keys.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4187ae3f6f5233b0902ce946eda5cc15a5ca5222f7da40b94fd6aeab13cbccd"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lua-api-crates/mux/src/tab.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"59426dd6567436ff62fcf1384dec87597a414297ba190601a341f53fe21bea32"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/renderable.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"158c1c68f164f3067a76f87dda2af3040183ed05f10ceee68386218130118179"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/sixel.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6c155eb640e37098a9580a305e61a551d254879e9d736ec69dbe7da6f13f1d9"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminalstate/iterm.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"04d0850e64b415d87d8786aabff5a4313b9c67b65d56f7f67fb744d80406f2dc"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/bitmaps/atlas.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4eedef1d7efd5db63589a25f09776eb65b8261ab29cb88ff4195b9ebd45f80e8"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/session.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea6dba1a0bd0c13c07b8aaad1791ce1c07e117954bbfa093702ca26eff6ad611"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/terminal.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7be6d8c301455537ae9a624dd9608bdd2c795e6dc0b1fa04451327f3845792ce"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/lineedit/host.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4591aaa61ebf66226325a78893036d54472848943ea89f190bd48a5bf034fdd8"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/ssh.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd63d7f494f27c257e580e90208488ff8e5bebccec2d3217faf792b10d106445"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/shaper/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b5a18c0c27d0c3ca17ef74483525578d4f59dc8b24d87cb7e1cdd0017bf42e9"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ea38f463d056e006f97d1c68341a8d35c1adb35a58c95c6a0be9b6fa93b1c92"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/error.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7cb3138b45508c9f802b689fd9a2507ed74561fc82f129eeadf55f4d2b94903f"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-escape-parser/src/error.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bd98a59a7396e573f1bbc8d6dad2030e69e43250449c92958556646f4aae867"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/terminal/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"054be093135ab21961d8fe5d8d7eedf9af2582dc9f7fda8c653eefecb46403e4"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-dynamic/src/todynamic.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7a2a37908471977aa708a0fd5d9f44cda3c724ed7d9a389c21dd0f053f7193d"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/sftp/error.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bc792410001f0e6e408ff15b2f32fdd71988a367901684a34040ced3b0dbc2f"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/colorease.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"49a8d33bc8149acb2bb71d732864d06b437e8c9dae547fedbb7a7c73682576a4"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lua-api-crates/color-funcs/src/schemes/iterm2.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"020bf13c36e80f1ce5d6694f2b9a4eb3f573d80f92ada6f6c9701461d8d48529"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/terminal/buffered.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a795d6d8be4549fdd07959a681e8f3e23c73d951f5f3257b6d10e4ec2e5209a0"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/frecency/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb7b4d2b794dd6ba3e69e73acd7cfcc609deacb78555c392f7a7eb11e2daddf9"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lua-api-crates/mux/src/window.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c9b4dcac846ed29aa1bd5e6c2e0caf29e1b25c1b95e857eea720e4e4391593b"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-char-props/codegen/src/main.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"efcaa2977924fbba794ea206c9983c334ddfa5779c7b29fbf261f4b0b854a42c"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-dynamic/src/object.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a80927efd76c76d6caac65bbd17a525750d1910aa6f34568b667bbd7173e3fc7"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-mux-server-impl/src/pki.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a527d9d0ad4aa56e495dc3fd21006745a51aeb9882e4003512a96bb09da9824d"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/unix.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c965dc1e06d0a12034592a366956fb5719f215795c99f17747a2358df745f09"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/cli/spawn_command.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f3b0ee8828fd57ff5f42a188146c1af627b303b1d32df6a41cc6c5d5de54356"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/cli/split_pane.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3470b2a7918912e128e71c68294f756823a24e88aab7ddb2e1b256588e79e693"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/tls.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"841085aa7afc67bf9d391c6b39d9b0fb4d07b1f38b0a60895842242eb9857225"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"config/src/terminal.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bab792bc41fee72d24e33228b5a0c65070aaba2022604798c80a10a909d9473e"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-blob-leases/src/lease.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fa562c527d8cd3cae623fdae8851cb96caeb54206327af50eb757175a815103"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/lineedit/history.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"240cf78bbf1ebc3f1115073ee6e18ec8101ab5453000b5bdc71bbe67f5e37964"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/ratelim/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd07541a53d842edec39d4c58cbfa314b17fe0df7c4c572c0cc909358ee20d47"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-client/src/pane/mousestate.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ff332d875bc94e0d0a7b8da37936aaaa9a91e42030fb9995decf883345725a1"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-ssh/src/sessionwrap.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecdd878b3cdd237e51468c976e35b0a408abfba21b15f6a557786d4f2f8ab933"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lua-api-crates/color-funcs/src/schemes/gogh.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"45c0211f2c270bf79a28075c646c5742c2251f0bfcb2a29dee3f9eee85e21519"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-mux-server-impl/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b9044077ff1faf60244f6d89d12990071f81ba6b7f68ebd09123fb8b663d09f"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/scripting/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f54f784ef58c00a644e1622f14bbd79e109612a6824204fb47028bae454ac53"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/cli/get_text.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b72b71fa17800774bb60bcfa7738f8be527ed425fad3bee1dc9846dbeb07a62f"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-mux-server-impl/src/local.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"39094cbf39cb021c10960852b52ec9522336568fcb4b5e8e61999fc1823f7b85"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lua-api-crates/color-funcs/src/schemes/base16.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8fc3d506f487083230cae65129b491b870493a563225b76a26e5dda0010536ab"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lua-api-crates/mux/src/domain.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"44db4b774c7cc39dd071499816917b5f1488bd0a33b561e95f7c4d2ec98d8dea"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-blob-leases/src/storage.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9635ab1868895159d7d8c7647cc8fe351cba415047b597beb84c0b3e3cf75402"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"lua-api-crates/url-funcs/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e7c2b81299c0c0251216820b25d89fbd573d1a8ec7bee5041ec7722a2452243"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/prompt.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"67799b1928b1b737ddbd50db079ad6de19730fe4c317fd5da877ffc86b507b42"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/src/input.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d93647a0fce17ae95d2ab932e3fe044bdce6c42aa4d9408d84c638beca7210ef"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-uds/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bb5cf7ebfa8ae94b7f897d247944c329d265e8e6c21e05376bc5136784debd7"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/cli/proxy.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2fc0b90b2675099b4bb9eebbdbe6a6139e63014a86f6b9083ac0d8ed2e49d9b"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/cli/zoom_pane.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"38d84f4833378a9bf7bccb2423d54e5022d59bedaef257cd5518b9eed16ddf75"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"termwiz/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5224042658958b140109e57e5d502399e894982cfdeffc5b9d75a63aeb9b7a7"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-dynamic/src/value.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"625ad186e935debb65658044fce86508f39318fe6ed9c874af0df0ded4105861"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"mux/src/client.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"088e768594b1d3882e98a396bbe7f8c414e8820a5bd99b8c5942c463373150fc"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/cli/move_pane_to_new_tab.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1161a78b922f37c54f52fc59462098a2e06c6154e645c7af853518d3a271bd6"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/promise/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8618ddde9e108077bfe7486ddbd771e858853f93787ccf0261888da9917246ed"}},{"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"},"taxa":[{"id":"CICD-SEC-9","toolComponent":{"name":"OWASP Top 10 CI/CD Security Risks","guid":"3c9b2a6e-5d14-4f7b-8e02-6a1d9c4b7f35"}}]},{"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"},"taxa":[{"id":"CICD-SEC-9","toolComponent":{"name":"OWASP Top 10 CI/CD Security Risks","guid":"3c9b2a6e-5d14-4f7b-8e02-6a1d9c4b7f35"}}]},{"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":"cc682cd7167c2c692b624e54d299d32b2ea2b5b3eb72f5516f0dfab9c0ce991d"},"taxa":[{"id":"CICD-SEC-3","toolComponent":{"name":"OWASP Top 10 CI/CD Security Risks","guid":"3c9b2a6e-5d14-4f7b-8e02-6a1d9c4b7f35"}}]},{"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":"f835698d3fa3d3dcc24589f87d4147ca2330f2e8406cc35f1deb699a0df310ba"},"taxa":[{"id":"CICD-SEC-5","toolComponent":{"name":"OWASP Top 10 CI/CD Security Risks","guid":"3c9b2a6e-5d14-4f7b-8e02-6a1d9c4b7f35"}}]},{"ruleId":"D44","level":"warning","message":{"text":"End-of-life runtime: Rust 1.95: rust-toolchain.toml declares Rust 1.95 as this project\u0027s toolchain file, and Rust 1.95, superseded by 1.96 on 2026-05-28 (the Rust project patches only the current stable). An unsupported runtime receives no security patches, so every vulnerability disclosed in it since 2026-05-28 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":[{"physicalLocation":{"artifactLocation":{"uri":"rust-toolchain.toml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dde701f9c40b0b8cb202babf3f8d8da48dda44162595030f1b0a8f7d57710684"}},{"ruleId":"AC2","level":"error","message":{"text":"\u003Cinput\u003E without a programmatic label: This control has only a placeholder \u2014 a placeholder is not a label (it vanishes on input and many AT ignore it). Add a \u003Clabel for\u003E, a wrapping \u003Clabel\u003E, or aria-label."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/assets/web/index.html"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"9105e61d984c7e3e3c28c9d9fcf4453eb378e7412b47177fc758c88b9aa52a21"}},{"ruleId":"AC3","level":"warning","message":{"text":"Page without a main landmark: No \u003Cmain\u003E (or role=\u0022main\u0022) means no \u0022skip to content\u0022 target and a weaker landmark map. Wrap the primary content in \u003Cmain\u003E."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/assets/web/index.html"},"region":{"startLine":2}}}],"partialFingerprints":{"codehealthFindingId/v1":"3df946df3d63efdf28ed9c71f14003b64bea72eb4a5c976b155a3381797b782d"}},{"ruleId":"AC6","level":"warning","message":{"text":"Animation without a prefers-reduced-motion guard: \u0060#bar .dot.in\u0060 moves (\u0060animation: dot-in 0.25s ease-out\u0060) and nothing reads prefers-reduced-motion for it \u2014 no @media (prefers-reduced-motion) rule for this element, no reset this project loads \u2014 so a motion-sensitive user cannot turn it off (WCAG 2.3.3). Declare it under @media (prefers-reduced-motion: no-preference), or neutralise it under reduce."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/assets/web/index.html"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"58aaf1b3ae27ef261b5ca3ef8b025258c281769c84e6a8b0428b0eb8e6effe6b"}},{"ruleId":"AC6","level":"warning","message":{"text":"Animation without a prefers-reduced-motion guard: \u0060#bar .dot.out\u0060 moves (\u0060animation: dot-out 0.3s ease-in forwards\u0060) and nothing reads prefers-reduced-motion for it \u2014 no @media (prefers-reduced-motion) rule for this element, no reset this project loads \u2014 so a motion-sensitive user cannot turn it off (WCAG 2.3.3). Declare it under @media (prefers-reduced-motion: no-preference), or neutralise it under reduce."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/assets/web/index.html"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"8df31f142ceb98d1b1432ffb00630a7e413f505a0f08c7a6a9855cb4b4c13586"}},{"ruleId":"AC6","level":"warning","message":{"text":"Focus outline removed in CSS without a :focus replacement: \u0060#bar .tab input\u0060 sets the outline to none/0 and no visible :focus / :focus-visible style for that element replaces it in this stylesheet, so a keyboard user cannot see where focus is. Draw a focus ring (outline, box-shadow or border) under :focus-visible."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/assets/web/index.html"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"7192e97ef66709e94801339d7a0549217702b9d6ba363fb2dc8d91c2e349967c"}},{"ruleId":"AC6","level":"warning","message":{"text":"Focus outline removed in CSS without a :focus replacement: \u0060#find input\u0060 sets the outline to none/0 and no visible :focus / :focus-visible style for that element replaces it in this stylesheet, so a keyboard user cannot see where focus is. Draw a focus ring (outline, box-shadow or border) under :focus-visible."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/assets/web/index.html"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d018750b496d0c14625953b5f3b446cc1cc3552d58129c7467e3c3d370f5159"}},{"ruleId":"AC6","level":"warning","message":{"text":"Focus outline removed in CSS without a :focus replacement: \u0060#dialog\u0060 sets the outline to none/0 and no visible :focus / :focus-visible style for that element replaces it in this stylesheet, so a keyboard user cannot see where focus is. Draw a focus ring (outline, box-shadow or border) under :focus-visible."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/assets/web/index.html"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a4461cd2180a5ad4b5caf4cf56a87f9d78d39cc941d8ffde240a621dfc98ff0"}},{"ruleId":"AC6","level":"warning","message":{"text":"Focus outline removed in CSS without a :focus replacement: \u0060#dialog button:focus-visible\u0060 sets the outline to none/0 and no visible :focus / :focus-visible style for that element replaces it in this stylesheet, so a keyboard user cannot see where focus is. Draw a focus ring (outline, box-shadow or border) under :focus-visible."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/assets/web/index.html"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7d42c4d16bd02d4cb355d221de5c10902517ec395732d8629dc2f5471206743"}},{"ruleId":"AC6","level":"warning","message":{"text":"Focus outline removed in CSS without a :focus replacement: \u0060.xterm.focus\u0060 sets the outline to none/0 and no visible :focus / :focus-visible style for that element replaces it in this stylesheet, so a keyboard user cannot see where focus is. Draw a focus ring (outline, box-shadow or border) under :focus-visible."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/assets/web/xterm.css"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0999ccfb3e26e2f8b99742c4d5d260b7b2cb5fd7159e7119944e99eb9cce053"}},{"ruleId":"AC7","level":"warning","message":{"text":"Accessibility enforcement below the top rung: No accessibility enforcement found \u2014 no automated accessibility check runs over the HTML your app renders. Assert the accessibility invariants over that HTML in the test suite you already have (parse the output and assert, or drive a browser), and gate that test in CI so a regression blocks the merge. What was searched, so you can tell an absence from a miss: the 2 markup file(s) this pass actually assessed, the linter configuration checked in beside them, and this repository\u0027s test and CI files \u2014 matched by name against the accessibility checkers this dimension carries. An audit run outside the repository, a hosted scanner, or a check whose name is not one of those, is not seen here."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d46019b86eff5ddad9db289e6802ac158899e980df54c34f67722442787ead62"}},{"ruleId":"DM4","level":"error","message":{"text":"Anemic domain model: DecodedPdu: \u0060DecodedPdu\u0060 is a data-only domain entity with \u0060pub\u0060 mutable state and no invariant-enforcing behaviour of its own, while the repo holds the logic in a foreign service/manager/use-case \u2014 the anemic domain model. Move the behaviour onto the entity so it enforces its own invariants (or make it an immutable value object with private fields) rather than being driven from outside."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/codec/src/lib.rs"},"region":{"startLine":287}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e80e2d1ec20e681fc3d7007857349cb5e33d800d7ef8fad9e9f69cc4f0ffa73"}},{"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":"M4","level":"note","message":{"text":"README/code drift: term/README.md links to \u0060terminal/struct.Terminal.html\u0060, but \u0060term/terminal/struct.Terminal.html\u0060 does not exist. Checked without a model against the repository: its files and folders, the scripts and dependencies of every package.json, the projects, namespaces, package references and target frameworks of the .NET build, the SDK and Node pins, and the identifiers of every file that is not a document; the documents\u0027 own text never counts. A footprint generated at build time, read only by a platform, or living outside this repository is not seen, and this row is then wrong."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"term/README.md"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"004c93ebaba433e1ac6beb78afe4198583bd729f3fdf77910a1da77f6778f846"}},{"ruleId":"P10","level":"note","message":{"text":"Large public API surface: 377/529 types (71%) 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":"P2","level":"note","message":{"text":"Logging is not universal: Only 25/26 runnable modules use logging (modules with no entry point or server are excluded \u2014 they are libraries a runnable module hosts). Silent: \u0060crates/wezterm-char-props/codegen\u0060."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"91a94e21d6d4d0e6a2003f94505b0b02b157176f0b24c4820f3f82b4447a97fe"}},{"ruleId":"P4","level":"note","message":{"text":"No release approval gate: The release is automated and no gate that pauses it for a human is DECLARED IN THIS REPOSITORY\u0027S PIPELINE FILES. What was read: every file under \u0060.github/workflows/\u0060, \u0060.forgejo/workflows/\u0060, \u0060.gitea/workflows/\u0060, \u0060.azuredevops/\u0060 and \u0060.azure-pipelines/\u0060, plus \u0060.gitlab-ci*\u0060 and \u0060azure-pipelines*\u0060 \u2014 with comment text stripped, so documenting a gate is not declaring one. What would have counted: GitLab\u0027s \u0060when: manual\u0060, CircleCI\u0027s \u0060type: approval\u0060, an Azure \u0060ManualValidation@\u0060 task or an \u0060approvals:\u0060 block, a Jenkins \u0060input\u0060 step, a \u0060uses:\u0060 step naming an approval action, an \u0060environment:\u0060 paired with \u0060reviewers\u0060 / \u0060required_reviewers\u0060 / \u0060protection\u0060 / \u0060wait-timer\u0060 / \u0060deployment_branch_policy\u0060, a draft-release step, a \u0060workflow_dispatch\u0060 promotion, or a release-event gate. \u2605 What this cannot see, because none of it is a file: a GitHub environment whose required reviewers are configured in repo SETTINGS, a branch protection rule, or an organisation deployment policy \u2014 all of them real, enforced gates that live outside the repository. If yours is one of those, this row is wrong and nothing in the tree could have told us. Otherwise: whatever the release trigger points at is published to users unreviewed, so a mistagged or unverified commit ships and the only remedy is a follow-up release."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6c11e2dbd483b4b423b95ac61bfcc7af1d55351b28a20d2b1105b31cfe38cc60"}},{"ruleId":"P7","level":"warning","message":{"text":"Outbound HTTP without resilience: \u0060reqwest::blocking::get(\u0060 makes an outbound HTTP call, and nothing bounds it: no timeout, deadline, retry or circuit breaker is set for it here, and the client has no process-wide default. A slow or failing dependency will hold this service\u0027s request, thread or connection until the call gives up on its own \u2014 or never, for a client with no default timeout."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-char-props/codegen/src/main.rs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"2752204fe8fc2a8e22ccc2cc55b99165f88a174654410466de693e73385926c0"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060fs.mkdtempSync\u0060 in \u0060anonymous function\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/feel.cjs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a294af86d97a4403f5327c64ed8f0d698c7b8791e503aeb25515dc6a0ea0337"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060execFileSync\u0060 in \u0060anonymous function\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/feel.cjs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"416d1e18e3013e300e7b5920629f17238a668ce27bc8992225974901816beb3a"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060fs.mkdirSync\u0060 in \u0060anonymous function\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/feel.cjs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"98e8eed8df9c54dfb87995924ba58fdb74ae65ef85356a3c916721c6f176aa55"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060fs.mkdirSync\u0060 in \u0060anonymous function\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/feel.cjs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d0c04a62d57c179a8d117562cfa3a3c1f93d034958d33bbe5bb4e1e5591031b"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060fs.writeFileSync\u0060 in \u0060anonymous function\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/feel.cjs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b1157fa1a9e5705591a27f4366512df341bfddb6aecd2cf208f41da15d80021"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060fs.existsSync\u0060 in \u0060callback to until\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/feel.cjs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7927ce017c6d28f1987dcde2d7b40213b7e915923c609282bbcffa2794bc449"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060execFileSync\u0060 in \u0060anonymous function\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/feel.cjs"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3052dd981431499c1b87d5d7f2226824acf375c35a9e711c94026cfd0a56690"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060fs.rmSync\u0060 in \u0060anonymous function\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/feel.cjs"},"region":{"startLine":400}}}],"partialFingerprints":{"codehealthFindingId/v1":"d81d6fe1743bb607ac1e13cfae509cfbf6716e1c3a52aae004dd71caab71e127"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060fs.mkdtempSync\u0060 in \u0060anonymous function\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/live.cjs"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"025cad5dcbcee54fef5959b6391b5a26c64c7cc3876347f19bfd84d6b4cabd7e"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060fs.mkdirSync\u0060 in \u0060anonymous function\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/live.cjs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b026fc506e1838df82f862d8f922fe22268f9427efb61a630705935384ba12b"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060fs.mkdirSync\u0060 in \u0060anonymous function\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/live.cjs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c2e89319a68673115abce323b4e73ed6c2ff9c421a2ad2541e8803aa2f53d18"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060fs.writeFileSync\u0060 in \u0060anonymous function\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/live.cjs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"a41446bd032c2aaaa9739b3bfa5a6aef42d2ad017dd581c7c7248f8413a700db"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060fs.existsSync\u0060 in \u0060callback to until\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/live.cjs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"59d9317dca65141377901b9e50b35fcf3bcb547679ae21e20b2ae53649ed45d0"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060fs.readFileSync\u0060 in \u0060anonymous function\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/live.cjs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b1ccd219d0550a185f687628ec6218129d013a9df203d9fc222570893e8251f"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060fs.writeFileSync\u0060 in \u0060anonymous function\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/live.cjs"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"028e12c8722a1d3ed298eb10cf4dc729d784bbbc6b60708d0de74fc3c254cfca"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060fs.existsSync\u0060 in \u0060callback to until\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/live.cjs"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"0805b59ddd1bdbbd7c28ac77e6e8e6894d30eff3c44a6c18390c75ed7d6c71db"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060fs.readFileSync\u0060 in \u0060anonymous function\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/live.cjs"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"a95b4b90a17a3bcdaf9a36ae7459e47c11c4aeca1eab71d72fc6f8874cdfa64e"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060fs.existsSync\u0060 in \u0060callback to until\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/live.cjs"},"region":{"startLine":244}}}],"partialFingerprints":{"codehealthFindingId/v1":"469efb180187330bb4203090f6bb5dbe49096c0957d898f4015a6e91c0710962"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060fs.readFileSync\u0060 in \u0060callback to until\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/live.cjs"},"region":{"startLine":244}}}],"partialFingerprints":{"codehealthFindingId/v1":"242ee94f2d0d1fa3e4ec4a66e3d4813fcd569688030ee5938a598ae4eaf5b15c"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060fs.writeFileSync\u0060 in \u0060anonymous function\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/live.cjs"},"region":{"startLine":246}}}],"partialFingerprints":{"codehealthFindingId/v1":"11b6714de03fb9839204c40d930f1b81835bf2ddac1a4a51fd9d3e64c53d9bd1"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060fs.mkdirSync\u0060 in \u0060anonymous function\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/live.cjs"},"region":{"startLine":291}}}],"partialFingerprints":{"codehealthFindingId/v1":"db3030593443e01e3208c3a686be022b4550212d3d017623a25abcfdb3118fc7"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060fs.writeFileSync\u0060 in \u0060anonymous function\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/live.cjs"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"520565722379763b67c8e266fa0e4e2955750c3aca8f7067314f779a2bc8e4f7"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060fs.readFileSync\u0060 in \u0060anonymous function\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/live.cjs"},"region":{"startLine":325}}}],"partialFingerprints":{"codehealthFindingId/v1":"21e869cf85539e73e1816327c56241ea371ed778d492df4cea585ea65a05c0e1"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060fs.readdirSync\u0060 in \u0060anonymous function\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/live.cjs"},"region":{"startLine":346}}}],"partialFingerprints":{"codehealthFindingId/v1":"2aa3e65db41e0557d4c24c10c3a7c2b8a2f99ff1cbf525ab1263f5dd5b510bdf"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060fs.readFileSync\u0060 in \u0060anonymous function\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/live.cjs"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac76519662b4fed43ce908fa2dfb5264996763dc794c6b970a61e1420e7c69a8"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060fs.mkdirSync\u0060 in \u0060anonymous function\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/live.cjs"},"region":{"startLine":352}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdd2f703b1b6bf464b4283c5a93a36f08e86c9c8bacc7f9ec4adc15aac4003aa"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060crypto.hkdfSync\u0060 in \u0060derive\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/live.cjs"},"region":{"startLine":408}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef2bea714fa486af12817113c6e6fbfdbaf8c0b9ab71f47150add736176768e5"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060crypto.generateKeyPairSync\u0060 in \u0060anonymous function\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/live.cjs"},"region":{"startLine":419}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7b52dfdefead0ac01febb9bc5ab5873fdc2198c57509c55437dc1312f59c67d"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060fs.readFileSync\u0060 in \u0060anonymous function\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/live.cjs"},"region":{"startLine":483}}}],"partialFingerprints":{"codehealthFindingId/v1":"db434e346d28df84a618a8fa420d33825fd5c385e161e7116e1c620dbc053b08"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060fs.rmSync\u0060 in \u0060anonymous function\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/live.cjs"},"region":{"startLine":491}}}],"partialFingerprints":{"codehealthFindingId/v1":"5af44e0e2e31427779610314871fd2e88c4bbd8ff345d0357e3e0bf69f2677fa"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060fs.mkdtempSync\u0060 in \u0060anonymous function\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/static_page.cjs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4796e70b007b7361cf8f9a4e5914e0b3757e279a789f8ca0dff3270f088e965"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060execFileSync\u0060 in \u0060anonymous function\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/static_page.cjs"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"712fd588b0e190c982e25eab757567572dabb5eef98f5b07401a323e1dbaeff2"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060fs.mkdirSync\u0060 in \u0060anonymous function\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/static_page.cjs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae022f474b11bc48b3e1e1e39d4ccaf9b566d431e7e61b84132e48ede0a1d894"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060fs.mkdirSync\u0060 in \u0060anonymous function\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/static_page.cjs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ae220e2142d7aebc056f2258bc0015468d71cdb2c790da6d3ab18a73b50a3db"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060fs.writeFileSync\u0060 in \u0060anonymous function\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/static_page.cjs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"89a48f94a5d6881c56f37ff27c82cf13e39f415ac3deee73b5d4ec52d5a8485f"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060execFileSync\u0060 in \u0060cli\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/static_page.cjs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"517f1b104e4e7846a7bcd1552af75ff040f5d4177022fceadffb33cfd0b1370c"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060fs.existsSync\u0060 in \u0060callback to until\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/static_page.cjs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"32115dc5f5246b7076c7f64c61bc10a2908f76cb0e6fe49b3b8db98e71035e91"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060fs.rmSync\u0060 in \u0060anonymous function\u0060 blocks the event loop until it finishes \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/tests/static_page.cjs"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3fe96e6cd8d1d0fdea3c657325491f6de672299470a461695ea5ae56aaadce8"}},{"ruleId":"S1","level":"note","message":{"text":"Security headers incomplete: Set: Referrer-Policy. Missing: Content-Security-Policy, Strict-Transport-Security, X-Content-Type-Options, X-Frame-Options \u2014 the four headers that carry the points of this card\u0027s security-headers term (Content-Security-Policy, Strict-Transport-Security, X-Content-Type-Options, X-Frame-Options), 0.5 each.(\u22122.0 on this card.) The server: \u0060axum::serve(\u0060 (crates/kaku-remote/src/lib.rs:709)."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"e9931804dbad8b1657857c9b88c05b8faeff182b6e2bb88641bd59bac687876e"}},{"ruleId":"S1","level":"note","message":{"text":"No inbound request validation detected: No handler of this repository\u0027s Rust server answers 400, 413 or 422 (\u0060StatusCode::BAD_REQUEST\u0060, \u0060HttpResponse::BadRequest()\u0060, \u0060Status::BadRequest\u0060, tonic \u0060Status::invalid_argument\u0060), and nothing declares validation \u2014 no \u0060validator\u0060/\u0060garde\u0060 derive, no body limit (\u0060DefaultBodyLimit::max\u0060, \u0060RequestBodyLimitLayer\u0060, \u0060JsonConfig::default().limit(\u2026)\u0060, Rocket \u0060Limits\u0060) \u2014 nothing shows inbound requests being checked, and refused, before a handler acts on them. A check that answers its failure with 200 and an error body is not seen. (\u22122.0 on this card.) The server: \u0060axum::serve(\u0060 (crates/kaku-remote/src/lib.rs:709)."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0ffa303f3c9cef4b4c2cf028a78ce2f3c83f6078f80716eea7362fad047265eb"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060!found \u0026\u0026 !new_val.is_empty() \u0026\u0026 new_val != \u0022-\u0022\u0060 appears character-identically in 2 files \u2014 kaku/src/ai_config/tui.rs, kaku/src/ai_config/tui/providers/codex.rs. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui.rs"},"region":{"startLine":3026}}}],"partialFingerprints":{"codehealthFindingId/v1":"f92fa3055ff24d83c4c6717bc6b3a22459165d90a788afb17692287ed3db4aaf"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060!io::stdin().is_terminal() || !io::stdout().is_terminal()\u0060 appears character-identically in 2 files \u2014 kaku/src/reset.rs, kaku/src/update.rs. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/reset.rs"},"region":{"startLine":381}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fdd3399d78e5e076e6faa655e78d3a4fc5cfdb255595f2223450809d87d3452"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060!key.modifiers.contains(KeyModifiers::CONTROL) \u0026\u0026 !key.modifiers.contains(KeyModifiers::SUPER)\u0060 appears character-identically in 2 files \u2014 kaku/src/ai_config/tui.rs, kaku/src/config_tui/mod.rs. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/ai_config/tui.rs"},"region":{"startLine":3155}}}],"partialFingerprints":{"codehealthFindingId/v1":"eaf9e8ed10d983cccda6b006b92831747668715be2c8cd62d94daa62070a2f20"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060!self.window_background.is_empty() || self.config.window_background_opacity != 1.0\u0060 appears character-identically in 2 files \u2014 kaku-gui/src/termwindow/render/paint.rs, kaku-gui/src/termwindow/render/tab_bar.rs. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/paint.rs"},"region":{"startLine":275}}}],"partialFingerprints":{"codehealthFindingId/v1":"d49cc4ba5af5d3771a38c84a56cf019879d2ee6e3c364e9fce8c57f77f106919"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060answer.is_empty() || answer == \u0022y\u0022 || answer == \u0022yes\u0022\u0060 appears character-identically in 2 files \u2014 kaku/src/doctor.rs, kaku/src/reset.rs. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/doctor.rs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bd3a35576538b4dcbfe407cba52e555d5f8baacb714c295b13ba1f35ec732d4"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060config.enable_tab_bar \u0026\u0026 !config.hide_tab_bar_if_only_one_tab\u0060 appears character-identically in 2 files \u2014 kaku-gui/src/termwindow/mod.rs, kaku-gui/src/termwindow/resize.rs. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":1645}}}],"partialFingerprints":{"codehealthFindingId/v1":"11cdaac61fab4323df09a7ccb7ab55349a52944dae68dc3f6014a675be82cb61"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060input.generics.lt_token.is_some() || input.generics.where_clause.is_some()\u0060 appears character-identically in 2 files \u2014 crates/wezterm-dynamic/derive/src/fromdynamic.rs, crates/wezterm-dynamic/derive/src/todynamic.rs. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-dynamic/derive/src/fromdynamic.rs"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bfd4206e716f519fff569b2f65901b85bd4615f43b6aec583ef66d3bd837fc7"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060mods.contains(Modifiers::CTRL) \u0026\u0026 ctrl_mapping(c).is_some()\u0060 appears character-identically in 2 files \u2014 crates/wezterm-input-types/src/lib.rs, termwiz/src/input.rs. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-input-types/src/lib.rs"},"region":{"startLine":1974}}}],"partialFingerprints":{"codehealthFindingId/v1":"61d27b9e43cb4c44aa91dd683c5fb4fdf3449d6eb201dcd1af4790703b7dea40"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060name.eq_ignore_ascii_case(\u0022authorization\u0022) || name.eq_ignore_ascii_case(\u0022content-type\u0022)\u0060 appears character-identically in 2 files \u2014 kaku-gui/src/ai_client/assistant_config.rs, kaku/src/ai_config/tui.rs. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_client/assistant_config.rs"},"region":{"startLine":301}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a1027d6151d4f27969763408290cb757bf4aeaa3e8bf220a022a4d945694e0b"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060self.client.config().effective_api_mode() == ApiMode::Responses \u0026\u0026 !msg.responses_items.is_empty()\u0060 appears character-identically in 2 files \u2014 kaku-gui/src/ai_chat_engine/mod.rs, kaku-gui/src/overlay/ai_chat/state.rs. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_chat_engine/mod.rs"},"region":{"startLine":1100}}}],"partialFingerprints":{"codehealthFindingId/v1":"9eeda997a54bbfbc2c7decb77ac0d0dcfe24a016a4debcd1412e6445bdc4504f"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060self.filter_term.pop().is_none() \u0026\u0026 !self.always_fuzzy\u0060 appears character-identically in 2 files \u2014 kaku-gui/src/overlay/launcher.rs, kaku-gui/src/overlay/selector.rs. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/launcher.rs"},"region":{"startLine":682}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a5304f68170582edcf9e3c064116171cfaed21c44464bbc66b2cb143dddcaa7"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060self.filtering || !self.filter_term.is_empty()\u0060 appears character-identically in 2 files \u2014 kaku-gui/src/overlay/launcher.rs, kaku-gui/src/overlay/selector.rs. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/launcher.rs"},"region":{"startLine":527}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b3558bbe56333816abeee153167d32dc02791645b185cd6987cfbef4dcd86a2"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060self.show_tab_bar \u0026\u0026 !self.config.tab_bar_at_bottom\u0060 appears character-identically in 5 files \u2014 kaku-gui/src/termwindow/mod.rs, kaku-gui/src/termwindow/render/agent_title.rs, kaku-gui/src/termwindow/render/borders.rs, kaku-gui/src/termwindow/render/mod.rs. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/mod.rs"},"region":{"startLine":3962}}}],"partialFingerprints":{"codehealthFindingId/v1":"8882e3b3c43e02354c88708f79e0976a87444d4b91f797f22179eeb03a26b4fa"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060self.show_tab_bar \u0026\u0026 self.config.tab_bar_at_bottom\u0060 appears character-identically in 2 files \u2014 kaku-gui/src/termwindow/render/paint.rs, kaku-gui/src/termwindow/render/pane.rs. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/render/paint.rs"},"region":{"startLine":368}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e8532452b1c202a897c11a619a60dc72dec74889c9918d5e8cd3820dd10d149"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060term_window.show_tab_bar \u0026\u0026 !term_window.config.tab_bar_at_bottom\u0060 appears character-identically in 3 files \u2014 kaku-gui/src/termwindow/charselect.rs, kaku-gui/src/termwindow/palette.rs, kaku-gui/src/termwindow/paneselect.rs. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/termwindow/charselect.rs"},"region":{"startLine":395}}}],"partialFingerprints":{"codehealthFindingId/v1":"d51ed579e4d95e911b7ffd44671665f396fef2060fe4a11b85aba2e48005a5bf"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060width as usize == 0 || height as usize == 0\u0060 appears character-identically in 2 files \u2014 crates/wezterm-font/src/rasterizer/freetype.rs, crates/wezterm-font/src/rasterizer/harfbuzz.rs. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/rasterizer/freetype.rs"},"region":{"startLine":472}}}],"partialFingerprints":{"codehealthFindingId/v1":"b337062d520b307da92a87f045f43c2bb1cabf3f893eedc63016af64e90d16b3"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060y \u003E 0 \u0026\u0026 y as usize \u003C= self.filtered_entries.len()\u0060 appears character-identically in 2 files \u2014 kaku-gui/src/overlay/launcher.rs, kaku-gui/src/overlay/selector.rs. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/launcher.rs"},"region":{"startLine":734}}}],"partialFingerprints":{"codehealthFindingId/v1":"76716d210824e6a3f9b888f3e732206298c1faf67417b0a04f04afda00a9daa3"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (empty catch): An empty catch block silently discards the error \u2014 failures vanish with no log and no rethrow. Log it, handle it, or don\u0027t catch it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/assets/web/desktop.js"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e67991351e118e710da567a63384c680aed807b38914bf112a94eacda0caf59"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (empty catch): An empty catch block silently discards the error \u2014 failures vanish with no log and no rethrow. Log it, handle it, or don\u0027t catch it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/assets/web/desktop.js"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"13fc0af8bd6d5fa844d78fc645ce85381443c8be50a0f07f525eae61ff407b9b"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (empty catch): An empty catch block silently discards the error \u2014 failures vanish with no log and no rethrow. Log it, handle it, or don\u0027t catch it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/assets/web/desktop.js"},"region":{"startLine":460}}}],"partialFingerprints":{"codehealthFindingId/v1":"29bfc5da8999bd15d6f4d8329c3df215683b6839605c9e9a1d3862dcc6eb342c"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (empty catch): \u0060.catch(() =\u003E {})\u0060 handles the rejection by doing nothing \u2014 the failure is discarded with no log and no rethrow, and the chain carries on as if the work succeeded. Log it through whatever this codebase already uses to report problems, hand it to a caller that can (\u0060next(error)\u0060, a returned rejection), or don\u0027t catch it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/assets/web/desktop.js"},"region":{"startLine":500}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7a467ec1f426fc2d7d43652ebeaee7ed1a7b6741c1bdb778ecb1afa17211d54"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (empty catch): \u0060.catch(() =\u003E {})\u0060 handles the rejection by doing nothing \u2014 the failure is discarded with no log and no rethrow, and the chain carries on as if the work succeeded. Log it through whatever this codebase already uses to report problems, hand it to a caller that can (\u0060next(error)\u0060, a returned rejection), or don\u0027t catch it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/assets/web/desktop.js"},"region":{"startLine":512}}}],"partialFingerprints":{"codehealthFindingId/v1":"4290b11c3e319dc0a3df83c5b0ff5a136708f9ea45adf3becff52fc9616e7059"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (empty catch): \u0060.catch(() =\u003E {})\u0060 handles the rejection by doing nothing \u2014 the failure is discarded with no log and no rethrow, and the chain carries on as if the work succeeded. Log it through whatever this codebase already uses to report problems, hand it to a caller that can (\u0060next(error)\u0060, a returned rejection), or don\u0027t catch it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/assets/web/desktop.js"},"region":{"startLine":560}}}],"partialFingerprints":{"codehealthFindingId/v1":"57da61173b4e812f4f6d61e78d72bf7e6d9dd803d3d746d43055ff967f11b4e6"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (empty catch): \u0060.catch(() =\u003E {})\u0060 handles the rejection by doing nothing \u2014 the failure is discarded with no log and no rethrow, and the chain carries on as if the work succeeded. Log it through whatever this codebase already uses to report problems, hand it to a caller that can (\u0060next(error)\u0060, a returned rejection), or don\u0027t catch it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/assets/web/desktop.js"},"region":{"startLine":561}}}],"partialFingerprints":{"codehealthFindingId/v1":"506e360e35c8da7dfd42d81ebfff906df68d3e642e73ca1a4300adb5c3c7419c"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (empty catch): An empty catch block silently discards the error \u2014 failures vanish with no log and no rethrow. Log it, handle it, or don\u0027t catch it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/assets/web/desktop.js"},"region":{"startLine":601}}}],"partialFingerprints":{"codehealthFindingId/v1":"96418ec480210bbfd330b7e545e9a1492fa46d855a9f46590a707dd96ebb4527"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (empty catch): An empty catch block silently discards the error \u2014 failures vanish with no log and no rethrow. Log it, handle it, or don\u0027t catch it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/assets/web/desktop.js"},"region":{"startLine":712}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a730c719820c0cf28ace685d0eb0ce138732ce32d7741fb29f75eb764eddd20"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (empty catch): \u0060.then(\u2026, () =\u003E {})\u0060 handles the rejection by doing nothing \u2014 the failure is discarded with no log and no rethrow, and the chain carries on as if the work succeeded. Log it through whatever this codebase already uses to report problems, hand it to a caller that can (\u0060next(error)\u0060, a returned rejection), or don\u0027t catch it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-remote/assets/web/desktop.js"},"region":{"startLine":1167}}}],"partialFingerprints":{"codehealthFindingId/v1":"f25be81a94126aa9c64a71c0a17581479a8dd12271f6a0e8433503c60b2c181a"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info!\u0060 at line 767 is handed a format string with \u0060{\u2026}\u0060 values in it, so tracing records one finished \u0060message\u0060 field \u2014 the values in it cannot be queried, filtered or aggregated as fields, and every occurrence reads as a different message. Record the values as fields beside a constant message instead: \u0060info!(order_id = %order_id, status = ?status, \u0022order status updated\u0022)\u0060 (\u0060%\u0060 records a value by its \u0060Display\u0060, \u0060?\u0060 by its \u0060Debug\u0060, a bare name as itself), which a JSON subscriber, OpenTelemetry or a log store keeps as queryable keys. An error goes in as a field too: \u0060error = %err\u0060."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-relay/src/main.rs"},"region":{"startLine":767}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee0de44fafd84184bd05aa47e6f7541b1377c7aad53026b19d2793ed246e95b1"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info!\u0060 at line 858 is handed a format string with \u0060{\u2026}\u0060 values in it, so tracing records one finished \u0060message\u0060 field \u2014 the values in it cannot be queried, filtered or aggregated as fields, and every occurrence reads as a different message. Record the values as fields beside a constant message instead: \u0060info!(order_id = %order_id, status = ?status, \u0022order status updated\u0022)\u0060 (\u0060%\u0060 records a value by its \u0060Display\u0060, \u0060?\u0060 by its \u0060Debug\u0060, a bare name as itself), which a JSON subscriber, OpenTelemetry or a log store keeps as queryable keys. An error goes in as a field too: \u0060error = %err\u0060."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-relay/src/main.rs"},"region":{"startLine":858}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1283f1b69c7b1c97d11b7336795a28b521f027fd4f6e76b3a872f1db3774f03"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info!\u0060 at line 863 is handed a format string with \u0060{\u2026}\u0060 values in it, so tracing records one finished \u0060message\u0060 field \u2014 the values in it cannot be queried, filtered or aggregated as fields, and every occurrence reads as a different message. Record the values as fields beside a constant message instead: \u0060info!(order_id = %order_id, status = ?status, \u0022order status updated\u0022)\u0060 (\u0060%\u0060 records a value by its \u0060Display\u0060, \u0060?\u0060 by its \u0060Debug\u0060, a bare name as itself), which a JSON subscriber, OpenTelemetry or a log store keeps as queryable keys. An error goes in as a field too: \u0060error = %err\u0060."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-relay/src/main.rs"},"region":{"startLine":863}}}],"partialFingerprints":{"codehealthFindingId/v1":"08b9fb3da293eee7c565ed70cc99fc054ae76b07a5f9ed178210ba85a392d0bf"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info!\u0060 at line 1028 is handed a format string with \u0060{\u2026}\u0060 values in it, so tracing records one finished \u0060message\u0060 field \u2014 the values in it cannot be queried, filtered or aggregated as fields, and every occurrence reads as a different message. Record the values as fields beside a constant message instead: \u0060info!(order_id = %order_id, status = ?status, \u0022order status updated\u0022)\u0060 (\u0060%\u0060 records a value by its \u0060Display\u0060, \u0060?\u0060 by its \u0060Debug\u0060, a bare name as itself), which a JSON subscriber, OpenTelemetry or a log store keeps as queryable keys. An error goes in as a field too: \u0060error = %err\u0060."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-relay/src/main.rs"},"region":{"startLine":1028}}}],"partialFingerprints":{"codehealthFindingId/v1":"caf4456b22551258d78853837e0d4fe9d971a63b8bfd47353262094ef4ed4dec"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn!\u0060 at line 1264 is handed a format string with \u0060{\u2026}\u0060 values in it, so tracing records one finished \u0060message\u0060 field \u2014 the values in it cannot be queried, filtered or aggregated as fields, and every occurrence reads as a different message. Record the values as fields beside a constant message instead: \u0060warn!(order_id = %order_id, status = ?status, \u0022order status updated\u0022)\u0060 (\u0060%\u0060 records a value by its \u0060Display\u0060, \u0060?\u0060 by its \u0060Debug\u0060, a bare name as itself), which a JSON subscriber, OpenTelemetry or a log store keeps as queryable keys. An error goes in as a field too: \u0060error = %err\u0060."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-relay/src/main.rs"},"region":{"startLine":1264}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d7052f0aec6eeea4660ac6fa5898e281929e7c256fd95912168b3d803a69f4c"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn!\u0060 at line 1272 is handed a format string with \u0060{\u2026}\u0060 values in it, so tracing records one finished \u0060message\u0060 field \u2014 the values in it cannot be queried, filtered or aggregated as fields, and every occurrence reads as a different message. Record the values as fields beside a constant message instead: \u0060warn!(order_id = %order_id, status = ?status, \u0022order status updated\u0022)\u0060 (\u0060%\u0060 records a value by its \u0060Display\u0060, \u0060?\u0060 by its \u0060Debug\u0060, a bare name as itself), which a JSON subscriber, OpenTelemetry or a log store keeps as queryable keys. An error goes in as a field too: \u0060error = %err\u0060."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-relay/src/main.rs"},"region":{"startLine":1272}}}],"partialFingerprints":{"codehealthFindingId/v1":"271a11f252fc4a5e96c4c43006f5d3bedfedc7f7ca569ac37a137c3946c61056"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info!\u0060 at line 1301 is handed a format string with \u0060{\u2026}\u0060 values in it, so tracing records one finished \u0060message\u0060 field \u2014 the values in it cannot be queried, filtered or aggregated as fields, and every occurrence reads as a different message. Record the values as fields beside a constant message instead: \u0060info!(order_id = %order_id, status = ?status, \u0022order status updated\u0022)\u0060 (\u0060%\u0060 records a value by its \u0060Display\u0060, \u0060?\u0060 by its \u0060Debug\u0060, a bare name as itself), which a JSON subscriber, OpenTelemetry or a log store keeps as queryable keys. An error goes in as a field too: \u0060error = %err\u0060."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-relay/src/main.rs"},"region":{"startLine":1301}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b6f1bbd56d58fec1d66f51ebf3d0bcd18df8240dba5a9af1629da3ffc705aeb"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info!\u0060 at line 1320 is handed a format string with \u0060{\u2026}\u0060 values in it, so tracing records one finished \u0060message\u0060 field \u2014 the values in it cannot be queried, filtered or aggregated as fields, and every occurrence reads as a different message. Record the values as fields beside a constant message instead: \u0060info!(order_id = %order_id, status = ?status, \u0022order status updated\u0022)\u0060 (\u0060%\u0060 records a value by its \u0060Display\u0060, \u0060?\u0060 by its \u0060Debug\u0060, a bare name as itself), which a JSON subscriber, OpenTelemetry or a log store keeps as queryable keys. An error goes in as a field too: \u0060error = %err\u0060."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-relay/src/main.rs"},"region":{"startLine":1320}}}],"partialFingerprints":{"codehealthFindingId/v1":"fdc161ab0a4c7eff037946e6c168f70d7f659781446ec0ac2bf530ed20d0b00e"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info!\u0060 at line 1333 is handed a format string with \u0060{\u2026}\u0060 values in it, so tracing records one finished \u0060message\u0060 field \u2014 the values in it cannot be queried, filtered or aggregated as fields, and every occurrence reads as a different message. Record the values as fields beside a constant message instead: \u0060info!(order_id = %order_id, status = ?status, \u0022order status updated\u0022)\u0060 (\u0060%\u0060 records a value by its \u0060Display\u0060, \u0060?\u0060 by its \u0060Debug\u0060, a bare name as itself), which a JSON subscriber, OpenTelemetry or a log store keeps as queryable keys. An error goes in as a field too: \u0060error = %err\u0060."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/kaku-relay/src/main.rs"},"region":{"startLine":1333}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d342609122003d49a983ded65de2e8ebb32ade7030314b52e0c299bc16a4818"}},{"ruleId":"X7","level":"note","message":{"text":"Silent fallback default on Err: \u0060get_palette_data\u0060 turns every \u0060Err\u0060 into \u0060String::new()\u0060 \u2014 a failure becomes a plausible value and a silent behavior change with no trail. Log the error or propagate it with \u0060?\u0060. If that constant is the correct answer rather than a stand-in for a value that could not be read, say so in a comment on the arm or in the doc comment, and the row stops firing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"crates/wezterm-font/src/ftwrap.rs"},"region":{"startLine":733}}}],"partialFingerprints":{"codehealthFindingId/v1":"15d4e888c9c17a5102f37f18049f70cc6aecda04640074e362aaea84f7e48189"}},{"ruleId":"X7","level":"note","message":{"text":"Silent fallback default on Err: \u0060newest_files\u0060 turns every \u0060Err\u0060 into \u0060Vec::new()\u0060 \u2014 a failure becomes a plausible value and a silent behavior change with no trail. Log the error or propagate it with \u0060?\u0060. If that constant is the correct answer rather than a stand-in for a value that could not be read, say so in a comment on the arm or in the doc comment, and the row stops firing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku/src/diagnostics.rs"},"region":{"startLine":322}}}],"partialFingerprints":{"codehealthFindingId/v1":"c884de2329d7df49f5b2874016c26ba62de33750f994ea690b0a2348e32371f3"}},{"ruleId":"X7","level":"note","message":{"text":"Silent fallback default on Err: \u0060load_index\u0060 turns every \u0060Err\u0060 into \u0060vec![]\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":"kaku-gui/src/ai_conversations.rs"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"37e751441d0be47df21d24f1cbadd89b938fe2146ac3f61113dc0d725cf45d33"}},{"ruleId":"X7","level":"note","message":{"text":"Silent fallback default on Err: \u0060read_file_preview\u0060 turns every \u0060Err\u0060 into \u0060\u0022[unreadable file omitted]\u0022.to_string()\u0060 \u2014 a failure becomes a plausible value and a silent behavior change with no trail. Log the error or propagate it with \u0060?\u0060. If that constant is the correct answer rather than a stand-in for a value that could not be read, say so in a comment on the arm or in the doc comment, and the row stops firing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/overlay/ai_chat/state.rs"},"region":{"startLine":368}}}],"partialFingerprints":{"codehealthFindingId/v1":"705acbfc210211f445685a79ef7586d81a469b078806f7d826c761a1c5f6add3"}},{"ruleId":"X7","level":"note","message":{"text":"Silent fallback default on Err: \u0060name\u0060 turns every \u0060Err\u0060 into \u0060\u0022macOS\u0022.to_string()\u0060 \u2014 a failure becomes a plausible value and a silent behavior change with no trail. Log the error or propagate it with \u0060?\u0060. If that constant is the correct answer rather than a stand-in for a value that could not be read, say so in a comment on the arm or in the doc comment, and the row stops firing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"window/src/os/macos/connection.rs"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c16b65cb299e2e76c75fb73777020660c173ee7438a6f1b10b0a9297e0d4594"}},{"ruleId":"X9","level":"note","message":{"text":"Subsumed condition operand: \u0060prompt.contains(\u0022SHELL SAFETY\u0022)\u0060 can never decide this \u0060||\u0060 \u2014 every value satisfying \u0060prompt.contains(\u0022SHELL SAFETY\u0022)\u0060 also satisfies \u0060prompt.contains(\u0022SAFETY\u0022)\u0060, so the \u0060||\u0060 chain is already decided by the latter. The expression is equivalent to the chain without it, which means it is wider than it reads. Delete the dead operand, or narrow the surviving one if IT is the accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"kaku-gui/src/ai_chat_engine/mod.rs"},"region":{"startLine":1426}}}],"partialFingerprints":{"codehealthFindingId/v1":"af7455b657798cc33ef68533736d217ae3166625cad836e50942839b9401c09a"}}],"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-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-191","guid":"31b5d115-a84b-875f-a016-48689827db3c","name":"CWE-191","shortDescription":{"text":"CWE-191"},"helpUri":"https://cwe.mitre.org/data/definitions/191.html"},{"id":"CWE-248","guid":"64b58946-d244-a556-a48a-f82fcd4f4186","name":"Uncaught Exception","shortDescription":{"text":"Uncaught Exception"},"helpUri":"https://cwe.mitre.org/data/definitions/248.html"},{"id":"CWE-259","guid":"ae9ad959-fbb6-9d5e-892d-3dca66da0b69","name":"Use of Hard-coded Password","shortDescription":{"text":"Use of Hard-coded Password"},"helpUri":"https://cwe.mitre.org/data/definitions/259.html"},{"id":"CWE-353","guid":"09d7e902-d4ee-f05d-ae6c-0a1554d0c18f","name":"Missing Support for Integrity Check","shortDescription":{"text":"Missing Support for Integrity Check"},"helpUri":"https://cwe.mitre.org/data/definitions/353.html"},{"id":"CWE-415","guid":"5d94f4b3-d3aa-0c5c-a4f9-897bc66edcd7","name":"CWE-415","shortDescription":{"text":"CWE-415"},"helpUri":"https://cwe.mitre.org/data/definitions/415.html"},{"id":"CWE-416","guid":"5033f6dd-9f76-b45d-8413-c4eaaa64ba48","name":"CWE-416","shortDescription":{"text":"CWE-416"},"helpUri":"https://cwe.mitre.org/data/definitions/416.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":"Embedded Malicious Code","shortDescription":{"text":"Embedded Malicious Code"},"helpUri":"https://cwe.mitre.org/data/definitions/506.html"},{"id":"CWE-676","guid":"550e6fab-2881-3252-8a05-c688a6b19c14","name":"Use of Potentially Dangerous Function","shortDescription":{"text":"Use of Potentially Dangerous Function"},"helpUri":"https://cwe.mitre.org/data/definitions/676.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":"Improper Neutralization of Special Elements used in a Command (\u0027Command Injection\u0027)","shortDescription":{"text":"Improper Neutralization of Special Elements used in a Command (\u0027Command Injection\u0027)"},"helpUri":"https://cwe.mitre.org/data/definitions/77.html"},{"id":"CWE-78","guid":"2e31ceaf-c7ae-2e5e-9661-cfb1362789cf","name":"Improper Neutralization of Special Elements used in an OS Command (\u0027OS Command Injection\u0027)","shortDescription":{"text":"Improper Neutralization of Special Elements used in an OS Command (\u0027OS Command Injection\u0027)"},"helpUri":"https://cwe.mitre.org/data/definitions/78.html"},{"id":"CWE-79","guid":"fd45580b-e8c4-fc5e-8c2f-aa8fab0b4dbf","name":"Improper Neutralization of Input During Web Page Generation (\u0027Cross-site Scripting\u0027)","shortDescription":{"text":"Improper Neutralization of Input During Web Page Generation (\u0027Cross-site Scripting\u0027)"},"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-89","guid":"6d08fdad-37eb-c150-bbf0-d7d946863407","name":"Improper Neutralization of Special Elements used in an SQL Command (\u0027SQL Injection\u0027)","shortDescription":{"text":"Improper Neutralization of Special Elements used in an SQL Command (\u0027SQL Injection\u0027)"},"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":"Improper Control of Generation of Code (\u0027Code Injection\u0027)","shortDescription":{"text":"Improper Control of Generation of Code (\u0027Code Injection\u0027)"},"helpUri":"https://cwe.mitre.org/data/definitions/94.html"}]},{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61","version":"2025","organization":"OWASP Foundation","informationUri":"https://top10.owasp.org/2025/","isComprehensive":false,"shortDescription":{"text":"The OWASP Top 10:2025 web application security risks."},"taxa":[{"id":"A02:2025","guid":"668dee9e-41bc-6354-97d0-fdf8f40c50c1","name":"Security Misconfiguration","shortDescription":{"text":"Security Misconfiguration"},"helpUri":"https://top10.owasp.org/2025/A02_2025-Security_Misconfiguration/"},{"id":"A03:2025","guid":"168e227c-7735-2e57-bc6e-997affe644c5","name":"Software Supply Chain Failures","shortDescription":{"text":"Software Supply Chain Failures"},"helpUri":"https://top10.owasp.org/2025/A03_2025-Software_Supply_Chain_Failures/"},{"id":"A05:2025","guid":"87e86033-3231-8458-8e4a-5cb82743553a","name":"Injection","shortDescription":{"text":"Injection"},"helpUri":"https://top10.owasp.org/2025/A05_2025-Injection/"},{"id":"A06:2025","guid":"491554d7-b8e4-9652-91a9-53700dc92ece","name":"Insecure Design","shortDescription":{"text":"Insecure Design"},"helpUri":"https://top10.owasp.org/2025/A06_2025-Insecure_Design/"},{"id":"A07:2025","guid":"334ddd78-539d-d35c-83dd-253647eb7eaf","name":"Authentication Failures","shortDescription":{"text":"Authentication Failures"},"helpUri":"https://top10.owasp.org/2025/A07_2025-Authentication_Failures/"},{"id":"A08:2025","guid":"84b0c297-710e-9a5f-9335-936ecb260c36","name":"Software or Data Integrity Failures","shortDescription":{"text":"Software or Data Integrity Failures"},"helpUri":"https://top10.owasp.org/2025/A08_2025-Software_or_Data_Integrity_Failures/"},{"id":"A10:2025","guid":"9ca3ab55-ca61-fd5e-b9ab-3dad2efa59d0","name":"Mishandling of Exceptional Conditions","shortDescription":{"text":"Mishandling of Exceptional Conditions"},"helpUri":"https://top10.owasp.org/2025/A10_2025-Mishandling_of_Exceptional_Conditions/"}]},{"name":"OWASP Top 10 CI/CD Security Risks","guid":"3c9b2a6e-5d14-4f7b-8e02-6a1d9c4b7f35","organization":"OWASP Foundation","informationUri":"https://owasp.org/www-project-top-10-ci-cd-security-risks/","isComprehensive":false,"shortDescription":{"text":"The OWASP Top 10 CI/CD Security Risks."},"taxa":[{"id":"CICD-SEC-3","guid":"458c83a6-ebf7-cf55-8cc3-b4d949bbf271","name":"Dependency Chain Abuse","shortDescription":{"text":"Dependency Chain Abuse"},"helpUri":"https://owasp.github.io/www-project-top-10-ci-cd-security-risks/CICD-SEC-03-Dependency-Chain-Abuse"},{"id":"CICD-SEC-5","guid":"cc7f4610-8859-e654-9029-d5f97d992220","name":"Insufficient PBAC (Pipeline-Based Access Controls)","shortDescription":{"text":"Insufficient PBAC (Pipeline-Based Access Controls)"},"helpUri":"https://owasp.github.io/www-project-top-10-ci-cd-security-risks/CICD-SEC-05-Insufficient-PBAC"},{"id":"CICD-SEC-9","guid":"b3d36727-0395-5b51-94c4-5e173d62eab3","name":"Improper Artifact Integrity Validation","shortDescription":{"text":"Improper Artifact Integrity Validation"},"helpUri":"https://owasp.github.io/www-project-top-10-ci-cd-security-risks/CICD-SEC-09-Improper-Artifact-Integrity-Validation"}]}],"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":57,"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."]}]}