{"$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":"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":"D12","name":"Dependency Hygiene","shortDescription":{"text":"Dependency Hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/D12"},{"id":"D13","name":"Secret Scanning","shortDescription":{"text":"Secret Scanning"},"helpUri":"https://codehealth.canine.dev/dimensions/D13","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D14","name":"License Compliance","shortDescription":{"text":"License Compliance"},"helpUri":"https://codehealth.canine.dev/dimensions/D14"},{"id":"D15","name":"Churn \u00D7 Complexity Hotspots","shortDescription":{"text":"Churn \u00D7 Complexity Hotspots"},"helpUri":"https://codehealth.canine.dev/dimensions/D15"},{"id":"D16","name":"Bus Factor","shortDescription":{"text":"Bus Factor"},"helpUri":"https://codehealth.canine.dev/dimensions/D16"},{"id":"D17","name":"Explicit Debt","shortDescription":{"text":"Explicit Debt"},"helpUri":"https://codehealth.canine.dev/dimensions/D17"},{"id":"D19","name":"Documentation Quality","shortDescription":{"text":"Documentation Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D19"},{"id":"D21","name":"Naming Consistency","shortDescription":{"text":"Naming Consistency"},"helpUri":"https://codehealth.canine.dev/dimensions/D21"},{"id":"D28","name":"Secrets (history)","shortDescription":{"text":"Secrets (history)"},"helpUri":"https://codehealth.canine.dev/dimensions/D28","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D29","name":"Static Analysis (SAST)","shortDescription":{"text":"Static Analysis (SAST)"},"helpUri":"https://codehealth.canine.dev/dimensions/D29","relationships":[{"target":{"id":"CWE-79","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-89","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-94","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-77","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-79","CWE-89","CWE-78","CWE-94","CWE-77"]}},{"id":"D30","name":"Dependency Vulnerabilities","shortDescription":{"text":"Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D30","relationships":[{"target":{"id":"CWE-1395","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-937","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1395","CWE-937"]}},{"id":"D34","name":"Knowledge Freshness","shortDescription":{"text":"Knowledge Freshness"},"helpUri":"https://codehealth.canine.dev/dimensions/D34"},{"id":"D35","name":"Change Coupling","shortDescription":{"text":"Change Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D35"},{"id":"D36","name":"Supply-chain Provenance \u0026 Signing","shortDescription":{"text":"Supply-chain Provenance \u0026 Signing"},"helpUri":"https://codehealth.canine.dev/dimensions/D36","relationships":[{"target":{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1357","CWE-494"]}},{"id":"D43","name":"Malicious Dependencies","shortDescription":{"text":"Malicious Dependencies"},"helpUri":"https://codehealth.canine.dev/dimensions/D43","relationships":[{"target":{"id":"CWE-506","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-506"]}},{"id":"AX10","name":"Code composition","shortDescription":{"text":"Code composition"},"helpUri":"https://codehealth.canine.dev/dimensions/AX10"},{"id":"M1","name":"Documentation (README)","shortDescription":{"text":"Documentation (README)"},"helpUri":"https://codehealth.canine.dev/dimensions/M1"},{"id":"M2","name":"Architecture documentation","shortDescription":{"text":"Architecture documentation"},"helpUri":"https://codehealth.canine.dev/dimensions/M2"},{"id":"M3","name":"Folder \u0026 project structure","shortDescription":{"text":"Folder \u0026 project structure"},"helpUri":"https://codehealth.canine.dev/dimensions/M3"},{"id":"M4","name":"Documentation accuracy","shortDescription":{"text":"Documentation accuracy"},"helpUri":"https://codehealth.canine.dev/dimensions/M4"},{"id":"P1","name":"CI/CD gates","shortDescription":{"text":"CI/CD gates"},"helpUri":"https://codehealth.canine.dev/dimensions/P1"},{"id":"P12","name":"CI test-gate honesty","shortDescription":{"text":"CI test-gate honesty"},"helpUri":"https://codehealth.canine.dev/dimensions/P12"},{"id":"P3","name":"Security \u0026 performance tooling","shortDescription":{"text":"Security \u0026 performance tooling"},"helpUri":"https://codehealth.canine.dev/dimensions/P3"},{"id":"P6","name":"Release Hygiene","shortDescription":{"text":"Release Hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/P6"},{"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":"IncludeCode.run (cyclomatic 31): IncludeCode.run 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":"doc/src/sphinx/exts/includecode.py"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"39cd791c144b94bd4ef2e97d6b87bb78a47048f401534dc5dfaea74cc9d90920"}},{"ruleId":"D1","level":"warning","message":{"text":"Interpreter.apply (cyclomatic 28): Interpreter.apply 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":"finagle-memcached/src/main/scala/com/twitter/finagle/memcached/Interpreter.scala"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"5857d5f60748bafcb08c116c69db45a24b06e6e2a286d48fc0e03733d5cc8ec3"}},{"ruleId":"D1","level":"warning","message":{"text":"NameTree.eval (cyclomatic 20): NameTree.eval 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":"finagle-core/src/main/scala/com/twitter/finagle/NameTree.scala"},"region":{"startLine":251}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec73b6d15082b6a8d99ac2f07438c95e0c1469e1ce9243cebd8fdf5f12e44087"}},{"ruleId":"D1","level":"warning","message":{"text":"Simulation.main (cyclomatic 18): Simulation.main 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":"finagle-benchmark/src/main/scala/com/twitter/finagle/balancersim/Simulation.scala"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b66f6e99acb1f616649844ae869dad6941aece5e9a06e707292dbcd2644ae41"}},{"ruleId":"D1","level":"warning","message":{"text":"NameTree.simplify (cyclomatic 18): NameTree.simplify 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":"finagle-core/src/main/scala/com/twitter/finagle/NameTree.scala"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"9319822fe5c31c6156d4d6a4eab0b75f6a4d51b5e19a1d33cfe6748ce39ac91e"}},{"ruleId":"D1","level":"warning","message":{"text":"Namer.bind (cyclomatic 18): Namer.bind 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":"finagle-core/src/main/scala/com/twitter/finagle/Namer.scala"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4155bfe57378d17a5d61e564e42d2bf6590a1d7ac7ba79fe197e6eb38fb0de0"}},{"ruleId":"D1","level":"warning","message":{"text":"AuthNegotiation.step (cyclomatic 18): AuthNegotiation.step 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":"finagle-mysql/src/main/scala/com/twitter/finagle/mysql/AuthNegotiation.scala"},"region":{"startLine":192}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b049d2776436be821c3e95839e537460fbc958dc9fd3084842719945ba2c1ae"}},{"ruleId":"D1","level":"warning","message":{"text":"Group.withMaxSyncConcurrency (cyclomatic 16): Group.withMaxSyncConcurrency 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":"finagle-exp/src/main/scala/com/twitter/finagle/exp/fiber_scheduler/fiber/Group.scala"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce561420b2702f606481f57fcd4d31b205e9cf182b468d7ff011f25d70220632"}},{"ruleId":"D1","level":"warning","message":{"text":"MuxClientSession.handleProcessMessage (cyclomatic 16): MuxClientSession.handleProcessMessage 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":"finagle-mux/src/main/scala/com/twitter/finagle/mux/pushsession/MuxClientSession.scala"},"region":{"startLine":246}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb3818a3dcc2494fe63eeeb1d294373c8d9060803380308299b8d244afb2cf00"}},{"ruleId":"D2","level":"warning","message":{"text":"IncludeCode.run (cognitive 48): IncludeCode.run has cognitive complexity 48 (threshold 15). Drivers by points: if/else 19 (34 pts), boolean chains 5, ternaries 4 (5 pts), error handling 3, 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":"doc/src/sphinx/exts/includecode.py"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"a287d343b6971893170430bb361884596f2c18a8013ced41cedfe88a83df30e3"}},{"ruleId":"D2","level":"warning","message":{"text":"Interpreter.apply (cognitive 39): Interpreter.apply has cognitive complexity 39 (threshold 15). Drivers by points: if/else 16 (25 pts), match/switch 7 (13 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":"finagle-memcached/src/main/scala/com/twitter/finagle/memcached/Interpreter.scala"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ab75b3c97a08e0a7e241d0cd7f480d1cbfb47ad1bcb6639391be68d5ebfaa96"}},{"ruleId":"D2","level":"warning","message":{"text":"Rfc7230HeaderValidation.validateValue (cognitive 25): Rfc7230HeaderValidation.validateValue has cognitive complexity 25 (threshold 15). Drivers by points: if/else 13 (21 pts), match/switch 1 (2 pts), boolean chains 1, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-base-http/src/main/scala/com/twitter/finagle/http/headers/Rfc7230HeaderValidation.scala"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"95d8b5e1dbdb8ae133ea0462aee3c7f3293b774842ae9277523755fbb6c8401b"}},{"ruleId":"D2","level":"warning","message":{"text":"ClientDispatcher.decodePacket (cognitive 25): ClientDispatcher.decodePacket has cognitive complexity 25 (threshold 15). Drivers by points: loops 5 (20 pts), if/else 3 (4 pts), match/switch 1 (nesting depth added 16). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-mysql/src/main/scala/com/twitter/finagle/mysql/ClientDispatcher.scala"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"2505f84c6eba76d949c8a4afdb66c5b7f149312a801da088ace063327d910dc6"}},{"ruleId":"D2","level":"warning","message":{"text":"LinearPathMatcher.extractMatchingParameterValues (cognitive 23): LinearPathMatcher.extractMatchingParameterValues has cognitive complexity 23 (threshold 15). Drivers by points: if/else 10 (14 pts), match/switch 3 (8 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":"finagle-http/src/main/scala/com/twitter/finagle/http/exp/routing/PathMatcher.scala"},"region":{"startLine":355}}}],"partialFingerprints":{"codehealthFindingId/v1":"f443704da126b7b27609f5b03deae64cf3b42d5276e64f77eb27d00945256f9b"}},{"ruleId":"D2","level":"warning","message":{"text":"Message.decodeTreq (cognitive 23): Message.decodeTreq has cognitive complexity 23 (threshold 15). Drivers by points: if/else 9 (17 pts), match/switch 3 (5 pts), loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-mux/src/main/scala/com/twitter/finagle/mux/transport/Message.scala"},"region":{"startLine":446}}}],"partialFingerprints":{"codehealthFindingId/v1":"450858d7a53e791100a8eb6b3b507e4a92154c7c4730e6e6aff73fe9e0aae4ad"}},{"ruleId":"D2","level":"warning","message":{"text":"Netty4FormPostEncoder.encode (cognitive 23): Netty4FormPostEncoder.encode has cognitive complexity 23 (threshold 15). Drivers by points: if/else 7 (10 pts), match/switch 4 (9 pts), loops 1 (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":"finagle-netty4-http/src/main/scala/com/twitter/finagle/netty4/http/Netty4FormPostEncoder.scala"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"956d8bdadd5c2e4d4cc65e43f72a1b0e5903e8236c59eb4b6f78b1763aa78608"}},{"ruleId":"D2","level":"warning","message":{"text":"WeightedP2CPick.pick (cognitive 22): WeightedP2CPick.pick has cognitive complexity 22 (threshold 15). Drivers by points: if/else 14 (22 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":"finagle-core/src/main/scala/com/twitter/finagle/loadbalancer/aperture/WeightedP2CPick.scala"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"1736710d2573bca65b6eb1c7f8b50ba1b1b456aab17edf490eaaef1ef61aba18"}},{"ruleId":"D2","level":"warning","message":{"text":"ClientDecoder.decodeData (cognitive 22): ClientDecoder.decodeData has cognitive complexity 22 (threshold 15). Drivers by points: if/else 13 (21 pts), match/switch 1 (nesting depth added 8). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-memcached/src/main/scala/com/twitter/finagle/memcached/protocol/text/client/ClientDecoder.scala"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"781aca3718c02c92f0e44d83bed770344b2e3370e4ff383d5916a4beb329b444"}},{"ruleId":"D2","level":"warning","message":{"text":"StringUtil.splitWorker (cognitive 21): StringUtil.splitWorker has cognitive complexity 21 (threshold 15). Drivers by points: if/else 9 (15 pts), boolean chains 3, loops 2 (3 pts) (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-base-http/src/main/scala/com/twitter/finagle/http/util/StringUtil.scala"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"182897443f1bcb8d62d73da658b78c7bad73619ee4b5528b25101df4b8c2d7a0"}},{"ruleId":"D2","level":"warning","message":{"text":"Simulation.main (cognitive 21): Simulation.main has cognitive complexity 21 (threshold 15). Drivers by points: if/else 8 (10 pts), loops 4 (9 pts), boolean chains 1, match/switch 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-benchmark/src/main/scala/com/twitter/finagle/balancersim/Simulation.scala"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0a75e9e8dd79b34101e423151ee453086578513c06f10cd41ce99a16d09b859"}},{"ruleId":"D2","level":"warning","message":{"text":"RequeueFilter.issueRequest (cognitive 21): RequeueFilter.issueRequest has cognitive complexity 21 (threshold 15). Drivers by points: if/else 12 (18 pts), boolean chains 2, match/switch 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-core/src/main/scala/com/twitter/finagle/service/RequeueFilter.scala"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fd78f5f8e9aeadbc88096fb982009ce0b3c5a9adad8937dd530418d80e263ee"}},{"ruleId":"D2","level":"warning","message":{"text":"Name.all (cognitive 20): Name.all has cognitive complexity 20 (threshold 15). Drivers by points: match/switch 5 (13 pts), if/else 7 (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":"finagle-core/src/main/scala/com/twitter/finagle/Name.scala"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"edd34cba9cdafe975dc38a76d16e2ddd23c8aba3a402cef4d9d8bfd70bab694e"}},{"ruleId":"D2","level":"warning","message":{"text":"NameTree.simplify (cognitive 20): NameTree.simplify has cognitive complexity 20 (threshold 15). Drivers by points: match/switch 7 (15 pts), if/else 5 (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":"finagle-core/src/main/scala/com/twitter/finagle/NameTree.scala"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"0762614c4807f1332c573f1d2c40598884b52f8d2d16b9c05c263a597e4130c3"}},{"ruleId":"D2","level":"warning","message":{"text":"Netty4ClientSslConfigurations.startClientWithKey (cognitive 20): Netty4ClientSslConfigurations.startClientWithKey has cognitive complexity 20 (threshold 15). Drivers by points: loops 7 (19 pts), match/switch 1 (nesting depth added 12). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-netty4/src/main/scala/com/twitter/finagle/netty4/ssl/client/Netty4ClientSslConfigurations.scala"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"85129c1c5be06e0cc4b16f502eb7893a48f00efc72bee14195cd5bc884edc445"}},{"ruleId":"D2","level":"warning","message":{"text":"Netty4ServerSslConfigurations.startServerWithKey (cognitive 20): Netty4ServerSslConfigurations.startServerWithKey has cognitive complexity 20 (threshold 15). Drivers by points: loops 7 (19 pts), match/switch 1 (nesting depth added 12). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-netty4/src/main/scala/com/twitter/finagle/netty4/ssl/server/Netty4ServerSslConfigurations.scala"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"e92b376572fadc4bf12d7d1417bafe71061703908ba960f91576e9a795e45197"}},{"ruleId":"D2","level":"warning","message":{"text":"QueryParamDecoder.decodeParams (cognitive 19): QueryParamDecoder.decodeParams has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10 (16 pts), boolean chains 3 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-base-http/src/main/scala/com/twitter/finagle/http/QueryParamDecoder.scala"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2b42d62bb267ac41b78233484b60191708ebae39471770ba75019cbf2a9fb45"}},{"ruleId":"D2","level":"warning","message":{"text":"P2CPick.pick (cognitive 19): P2CPick.pick has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10 (17 pts), boolean chains 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-core/src/main/scala/com/twitter/finagle/loadbalancer/p2c/P2CPick.scala"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"7827adbf216860af0323f3301764b11abfbd62989fc11ca73756e442d83efdc7"}},{"ruleId":"D2","level":"warning","message":{"text":"TraceId.deserialize (cognitive 19): TraceId.deserialize has cognitive complexity 19 (threshold 15). Drivers by points: if/else 12 (18 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":"finagle-core/src/main/scala/com/twitter/finagle/tracing/TraceId.scala"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"249285704d8f27d63f1ca63a92b5388ab1a0b9ae1cf7c86cc2766ce3359d99f0"}},{"ruleId":"D2","level":"warning","message":{"text":"Group.withMaxSyncConcurrency (cognitive 19): Group.withMaxSyncConcurrency has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10 (11 pts), boolean chains 6, loops 1 (2 pts) (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-exp/src/main/scala/com/twitter/finagle/exp/fiber_scheduler/fiber/Group.scala"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"a73d7bf299039c53ce35574974db68fae8bf5e3269d4376506b154b703101f44"}},{"ruleId":"D2","level":"warning","message":{"text":"ZstdDecoder.decode (cognitive 19): ZstdDecoder.decode has cognitive complexity 19 (threshold 15). Drivers by points: if/else 4 (11 pts), error handling 2 (5 pts), match/switch 1 (2 pts), loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-netty4/src/main/java/com/twitter/finagle/netty4/codec/compression/zstd/ZstdDecoder.java"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"12f3c6e0dd14c7a6c16cce51a92a026b756a7366cce5bf65ba45cea1faf980f5"}},{"ruleId":"D2","level":"warning","message":{"text":"HttpDtab.readXDtabPairs (cognitive 18): HttpDtab.readXDtabPairs has cognitive complexity 18 (threshold 15). Drivers by points: if/else 5 (9 pts), loops 4 (7 pts), 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":"finagle-base-http/src/main/scala/com/twitter/finagle/http/codec/HttpDtab.scala"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"e753179d4dd27dfd428a90b59942adf08980b61adbba76705064b54898b91aa7"}},{"ruleId":"D2","level":"warning","message":{"text":"UriUtils.isValidUri (cognitive 18): UriUtils.isValidUri has cognitive complexity 18 (threshold 15). Drivers by points: if/else 6 (14 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":"finagle-netty4-http/src/main/scala/com/twitter/finagle/netty4/http/util/UriUtils.scala"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"f87126ebb99218f4a95459e7efca8d462534e3b135c4a943c4b82faaf1a560c8"}},{"ruleId":"D2","level":"warning","message":{"text":"Endpoint.parseJson (cognitive 18): Endpoint.parseJson has cognitive complexity 18 (threshold 15). Drivers by points: loops 10 (15 pts), match/switch 2 (3 pts) (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":"finagle-serversets/src/main/scala/com/twitter/finagle/serverset2/Entry.scala"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"665b1c0f5f091849f4480c5fa211719a3caa84dec8fe5927dac7427392c0d5b5"}},{"ruleId":"D2","level":"warning","message":{"text":"ClientTraceAnnotationsFilter.module (cognitive 18): ClientTraceAnnotationsFilter.module has cognitive complexity 18 (threshold 15). Drivers by points: if/else 7 (15 pts), match/switch 1 (3 pts) (nesting depth added 10). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-thriftmux/src/main/scala/com/twitter/finagle/thriftmux/service/ClientTraceAnnotationsFilter.scala"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"73f37f50bca31744a11faa9c51b00f12f99fa54fd1526907190e7dbf793d39e6"}},{"ruleId":"D2","level":"warning","message":{"text":"NameTree.eval (cognitive 17): NameTree.eval has cognitive complexity 17 (threshold 15). Drivers by points: match/switch 6 (14 pts), if/else 3 (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":"finagle-core/src/main/scala/com/twitter/finagle/NameTree.scala"},"region":{"startLine":251}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c744f5bb17f0fcae4fc872dd3b1904d5dea13e330b363a02932baf5c26dac78"}},{"ruleId":"D2","level":"warning","message":{"text":"StabilizingAddr.apply (cognitive 17): StabilizingAddr.apply has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9 (10 pts), match/switch 3 (4 pts), loops 1 (2 pts), boolean chains 1 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-core/src/main/scala/com/twitter/finagle/addr/StabilizingAddr.scala"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3e7e25021ee1e84074a3c3998ea84c73ff913e49e113b24fa029a4542062446"}},{"ruleId":"D2","level":"warning","message":{"text":"LengthFieldFramer.readNextFrameLength (cognitive 17): LengthFieldFramer.readNextFrameLength has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12 (16 pts), match/switch 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-core/src/main/scala/com/twitter/finagle/decoder/LengthFieldFramer.scala"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"a015a774b743defda5af76befe99d8dc83f5cbfa7b15ed06566e89784b7e363f"}},{"ruleId":"D2","level":"warning","message":{"text":"Trace.letTracerAndId (cognitive 17): Trace.letTracerAndId has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9 (12 pts), match/switch 2 (5 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":"finagle-core/src/main/scala/com/twitter/finagle/tracing/Trace.scala"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce1f1555ae71c0412c860955fc5810da23bd761f5019bc49f90a15e0fba03b15"}},{"ruleId":"D2","level":"warning","message":{"text":"RedisPartitioningService.mergeResponses (cognitive 17): RedisPartitioningService.mergeResponses has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (7 pts), match/switch 4 (7 pts), loops 1 (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":"finagle-redis/src/main/scala/com/twitter/finagle/redis/RedisPartitioningService.scala"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"7168326d96b67ecfeae2e3d3ccf6afb5f868ed4e5ea49cfb72db99b5b438ccbc"}},{"ruleId":"D2","level":"warning","message":{"text":"Namer.bind (cognitive 16): Namer.bind has cognitive complexity 16 (threshold 15). Drivers by points: match/switch 4 (12 pts), if/else 4 (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":"finagle-core/src/main/scala/com/twitter/finagle/Namer.scala"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d1f7137298718cb831a9bf22710e51e7e67b95a33362f77b2603919df466af0"}},{"ruleId":"D2","level":"warning","message":{"text":"HeapLeastLoaded.get (cognitive 16): HeapLeastLoaded.get has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9 (14 pts), boolean chains 1, loops 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-core/src/main/scala/com/twitter/finagle/loadbalancer/heap/HeapLeastLoaded.scala"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc1fdf4e94afe1977f6e9af33cb312bb965eb1df65a2b48f34260f5717cc672d"}},{"ruleId":"D2","level":"warning","message":{"text":"TraceInitializerFilter.apply (cognitive 16): TraceInitializerFilter.apply has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10 (16 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":"finagle-core/src/main/scala/com/twitter/finagle/tracing/TraceInitializerFilter.scala"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"b571f47b41809a15ae59df5cff14d1c4da7622e8bfdd15cd752e7fccc09e3a0a"}},{"ruleId":"D2","level":"warning","message":{"text":"AnnotatingTracingFilter.apply (cognitive 16): AnnotatingTracingFilter.apply has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6 (11 pts), match/switch 2 (5 pts) (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-core/src/main/scala/com/twitter/finagle/tracing/TraceInitializerFilter.scala"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"460b245aa85279e1c4c88b854a84948e4c61ae775df7faf9758e4e0139762449"}},{"ruleId":"D2","level":"warning","message":{"text":"LogFormatter.escape (cognitive 16): LogFormatter.escape has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9 (13 pts), match/switch 1 (2 pts), boolean chains 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: one other method here (LogFormatter.escape) 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":"finagle-http/src/main/scala/com/twitter/finagle/http/filter/LoggingFilter.scala"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e655fc35b99b5f3e1dabe6e5d80108a117f386647e08dbbaff914ec74b1dbc4"}},{"ruleId":"D2","level":"warning","message":{"text":"LogFormatter.escape (cognitive 16): LogFormatter.escape has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9 (13 pts), match/switch 1 (2 pts), boolean chains 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: one other method here (LogFormatter.escape) 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":"finagle-http/src/main/scala/com/twitter/finagle/http/filter/LoggingFilter.scala"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"178f3848661e3d4fe22ea6af551541db7a360936e6fc4ea647c4e04f42fa0d98"}},{"ruleId":"D2","level":"warning","message":{"text":"MuxClientSession.handleProcessMessage (cognitive 16): MuxClientSession.handleProcessMessage has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (12 pts), match/switch 2 (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":"finagle-mux/src/main/scala/com/twitter/finagle/mux/pushsession/MuxClientSession.scala"},"region":{"startLine":246}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa065f53791f82d02a7e7f80146df06c4653bbb346743472fd7d8bace3b000e1"}},{"ruleId":"D2","level":"warning","message":{"text":"AuthNegotiation.step (cognitive 16): AuthNegotiation.step has cognitive complexity 16 (threshold 15). Drivers by points: match/switch 5 (9 pts), if/else 5 (7 pts) (nesting depth added 6). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-mysql/src/main/scala/com/twitter/finagle/mysql/AuthNegotiation.scala"},"region":{"startLine":192}}}],"partialFingerprints":{"codehealthFindingId/v1":"167b3568c18699b742ccec1cfe8462bb3e23a0d52ece473cfd7fd504ebd98682"}},{"ruleId":"D2","level":"warning","message":{"text":"PgNumeric.bigDecimalToNumeric (cognitive 16): PgNumeric.bigDecimalToNumeric has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10 (14 pts), loops 1 (2 pts) (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-postgresql/src/main/scala/com/twitter/finagle/postgresql/types/PgNumeric.scala"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1d7f2f34dffa42dc87cde3a9bc08a926c7853657e720fe3ae6fe36e1bbe0039"}},{"ruleId":"D2","level":"warning","message":{"text":"Zk2Resolver.merge (cognitive 16): Zk2Resolver.merge has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (8 pts), match/switch 3 (8 pts) (nesting depth added 6). 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":"finagle-serversets/src/main/scala/com/twitter/finagle/serverset2/Zk2Resolver.scala"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"37918bc8850c11ba8f0dd137b2f3ffb66e41c19fecaac8a9d6128ea92448c4ab"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Message: TooManyMethods \u2014 64 methods. The bar is 30 methods; this is 34 over it, 2.13\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-base-http/src/main/scala/com/twitter/finagle/http/Message.scala"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"917820864339b0a84faa8d78961192a7e7ae65524787606510eb78b472e78fde"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ClientBuilder: TooManyMethods \u2014 57 methods. The bar is 30 methods; this is 27 over it, 1.90\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-core/src/main/scala/com/twitter/finagle/builder/ClientBuilder.scala"},"region":{"startLine":245}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b5d23c5e2a260170b75e9fbff33e8cc655066a12e0222c882a2a06139c24b36"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Tracing: TooManyMethods \u2014 48 methods. The bar is 30 methods; this is 18 over it, 1.60\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-core/src/main/scala/com/twitter/finagle/tracing/Tracing.scala"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"58186b806e877935fb2fde3e0596dd2439bbb1b6f55b5c71fcad362c8bcf62ff"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Request: TooManyMethods \u2014 45 methods. The bar is 30 methods; this is 15 over it, 1.50\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-base-http/src/main/scala/com/twitter/finagle/http/Request.scala"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f6ea836136527167600a819525f37e9214d7abcaf7e2e0552ffbadca4e43d20"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Row: 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":"finagle-mysql/src/main/scala/com/twitter/finagle/mysql/Row.scala"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5e808fde78d9247bca5b2bffc9849e0af999b1bfb62cf7c0ae0ecc5b6efe556"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: NameTreeParsers: 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":"finagle-core/src/main/scala/com/twitter/finagle/NameTreeParsers.scala"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d5cc35f97b285509785dd629d939d43baca0035def5fe3f6abe2710480def7f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AbstractByteBufByteReader: TooManyMethods \u2014 31 methods. The bar is 30 methods; this is 1 over it, 1.03\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-netty4/src/main/scala/com/twitter/finagle/netty4/AbstractByteBufByteReader.scala"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa99fb3b48d570679488307d3489bccbe9782a3146f14e4444a5c56d8560f170"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (46 shared lines): finagle-thriftmux/src/main/scala/com/twitter/finagle/thriftmux/service/ThriftMuxResponseClassifier.scala:81-130 | finagle-thriftmux/src/main/scala/com/twitter/finagle/thriftmux/service/ThriftMuxResponseClassifier.scala:193-242 \u2014 These two members are variants of one another: 46 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":"finagle-thriftmux/src/main/scala/com/twitter/finagle/thriftmux/service/ThriftMuxResponseClassifier.scala"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b14f17f0f5a916a893b08b2d493fdaf967dc6f0a99d2f42e87e44b0f29afe49"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): finagle-core/src/main/scala/com/twitter/finagle/loadbalancer/Balancers.scala:80-93 | finagle-core/src/main/scala/com/twitter/finagle/loadbalancer/Balancers.scala:120-139 | finagle-core/src/main/scala/com/twitter/finagle/loadbalancer/Balancers.scala:149-165 | finagle-core/src/main/scala/com/twitter/finagle/loadbalancer/Balancers.scala:371-383 \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":"finagle-core/src/main/scala/com/twitter/finagle/loadbalancer/Balancers.scala"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6d3c9e6064b17edb3dbba82374a06fb8b08074e5b5bf33c2fe88bf95f318f3b"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): finagle-memcached/src/main/scala/com/twitter/finagle/memcached/Client.scala:711-723 | finagle-memcached/src/main/scala/com/twitter/finagle/memcached/Client.scala:725-737 | finagle-memcached/src/main/scala/com/twitter/finagle/memcached/Client.scala:739-751 | finagle-memcached/src/main/scala/com/twitter/finagle/memcached/Client.scala:753-765 \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":"finagle-memcached/src/main/scala/com/twitter/finagle/memcached/Client.scala"},"region":{"startLine":711}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e1fbd9e2f9e48e8755df22a50555040b70031f8a3b3741f64d4a3ce6f42e14a"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): finagle-redis/src/main/scala/com/twitter/finagle/redis/protocol/commands/Hashes.scala:82-94 | finagle-redis/src/main/scala/com/twitter/finagle/redis/protocol/commands/Keys.scala:100-112 | finagle-redis/src/main/scala/com/twitter/finagle/redis/protocol/commands/Sets.scala:47-57 | finagle-redis/src/main/scala/com/twitter/finagle/redis/protocol/commands/SortedSets.scala:338-348 \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":"finagle-redis/src/main/scala/com/twitter/finagle/redis/protocol/commands/Hashes.scala"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"320c2564fcacc0364d36c479d0f507e1c74dc1242e2a51ec35954715336903cd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (31 lines \u00D7 2): finagle-thrift/src/main/scala/com/twitter/finagle/thrift/RichClientParam.scala:138-168 | finagle-thrift/src/main/scala/com/twitter/finagle/thrift/RichServerParam.scala:86-116 \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. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-thrift/src/main/scala/com/twitter/finagle/thrift/RichClientParam.scala"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"704430a720af176a29d20872950ef59591e54860ba3e2060001e83d98c9336f9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): finagle-thrift/src/main/scala/com/twitter/finagle/thrift/RichClientParam.scala:184-206 | finagle-thrift/src/main/scala/com/twitter/finagle/thrift/RichServerParam.scala:132-154 \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. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-thrift/src/main/scala/com/twitter/finagle/thrift/RichClientParam.scala"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"89f27be5aa828f814866bff1f84fb6c9051f07a8374e8b6df1be585edd9e232f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): finagle-thrift/src/main/scala/com/twitter/finagle/thrift/service/ThriftResponseClassifier.scala:92-113 | finagle-thrift/src/main/scala/com/twitter/finagle/thrift/service/ThriftResponseClassifier.scala:199-220 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060finagle-thrift/src/main/scala/com/twitter/finagle/thrift/service/ThriftResponseClassifier.scala:92\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-thrift/src/main/scala/com/twitter/finagle/thrift/service/ThriftResponseClassifier.scala"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"0002af5faddc6a3fd37e298e2291dd472091f5c7f300626d51533826f4802f3b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): finagle-thriftmux/src/main/scala/com/twitter/finagle/thriftmux/service/ThriftMuxResponseClassifier.scala:93-114 | finagle-thriftmux/src/main/scala/com/twitter/finagle/thriftmux/service/ThriftMuxResponseClassifier.scala:205-226 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060finagle-thriftmux/src/main/scala/com/twitter/finagle/thriftmux/service/ThriftMuxResponseClassifier.scala:93\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-thriftmux/src/main/scala/com/twitter/finagle/thriftmux/service/ThriftMuxResponseClassifier.scala"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"0dfc30cc69dee6467915335fbcf4228148174b71875c080af361201f08a6c6a0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): finagle-core/src/main/scala/com/twitter/finagle/service/ExpiringService.scala:28-46 | finagle-core/src/main/scala/com/twitter/finagle/service/ExpiringService.scala:76-94 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060finagle-core/src/main/scala/com/twitter/finagle/service/ExpiringService.scala:28\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-core/src/main/scala/com/twitter/finagle/service/ExpiringService.scala"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"e017e0d805f915908f779734239d3577b8361c12e064e7eccfdb659679354147"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): finagle-core/src/main/scala/com/twitter/finagle/loadbalancer/Balancers.scala:227-241 | finagle-core/src/main/scala/com/twitter/finagle/loadbalancer/Balancers.scala:320-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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060finagle-core/src/main/scala/com/twitter/finagle/loadbalancer/Balancers.scala:227\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-core/src/main/scala/com/twitter/finagle/loadbalancer/Balancers.scala"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"545666a36f814e89abb1852275906a9d4d615eb00a240b03183fb7405509177a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): finagle-thrift/src/main/scala/com/twitter/finagle/thrift/service/ThriftResponseClassifier.scala:116-129 | finagle-thrift/src/main/scala/com/twitter/finagle/thrift/service/ThriftResponseClassifier.scala:223-236 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060finagle-thrift/src/main/scala/com/twitter/finagle/thrift/service/ThriftResponseClassifier.scala:116\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-thrift/src/main/scala/com/twitter/finagle/thrift/service/ThriftResponseClassifier.scala"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"c97ef52624f29fbdcf549d4c6b1dea87cc73b1bf5fd3a878c521b7fb9e15098f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): finagle-thriftmux/src/main/scala/com/twitter/finagle/thriftmux/service/ThriftMuxResponseClassifier.scala:117-130 | finagle-thriftmux/src/main/scala/com/twitter/finagle/thriftmux/service/ThriftMuxResponseClassifier.scala:229-242 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060finagle-thriftmux/src/main/scala/com/twitter/finagle/thriftmux/service/ThriftMuxResponseClassifier.scala:117\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-thriftmux/src/main/scala/com/twitter/finagle/thriftmux/service/ThriftMuxResponseClassifier.scala"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"0be29ce5fd37aecc616d1d3f3b763673708760993c2dd37a072485721bb599fc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): finagle-core/src/main/scala/com/twitter/finagle/tracing/TraceInitializerFilter.scala:213-223 | finagle-core/src/main/scala/com/twitter/finagle/tracing/TraceInitializerFilter.scala:250-260 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060finagle-core/src/main/scala/com/twitter/finagle/tracing/TraceInitializerFilter.scala:213\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-core/src/main/scala/com/twitter/finagle/tracing/TraceInitializerFilter.scala"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"c590bc86f60be6f61974ffdb5ba7ce42c23923d2b9f7307f17e5f3a5afaa639b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201311 lines \u00D7 2): finagle-serversets/src/main/scala/com/twitter/finagle/serverset2/client/apache/ApacheZooKeeper.scala:254-262 | finagle-serversets/src/main/scala/com/twitter/finagle/serverset2/client/apache/ApacheZooKeeper.scala:279-289 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060finagle-serversets/src/main/scala/com/twitter/finagle/serverset2/client/apache/ApacheZooKeeper.scala:254\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-serversets/src/main/scala/com/twitter/finagle/serverset2/client/apache/ApacheZooKeeper.scala"},"region":{"startLine":254}}}],"partialFingerprints":{"codehealthFindingId/v1":"b132468090f3d2ef0915028e6228e9447749d9ac9c7f201c31c9028051ed16ee"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 4): finagle-memcached/src/main/scala/com/twitter/finagle/memcached/Client.scala:714-723 | finagle-memcached/src/main/scala/com/twitter/finagle/memcached/Client.scala:728-737 | finagle-memcached/src/main/scala/com/twitter/finagle/memcached/Client.scala:742-751 | finagle-memcached/src/main/scala/com/twitter/finagle/memcached/Client.scala:756-765 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060finagle-memcached/src/main/scala/com/twitter/finagle/memcached/Client.scala:714\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-memcached/src/main/scala/com/twitter/finagle/memcached/Client.scala"},"region":{"startLine":714}}}],"partialFingerprints":{"codehealthFindingId/v1":"880908d87b93db97e36b84f1ad4dbbb3f2d4514565d7310f679263361631f36e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201310 lines \u00D7 4): finagle-redis/src/main/scala/com/twitter/finagle/redis/protocol/commands/Hashes.scala:85-94 | finagle-redis/src/main/scala/com/twitter/finagle/redis/protocol/commands/Keys.scala:103-112 | finagle-redis/src/main/scala/com/twitter/finagle/redis/protocol/commands/Sets.scala:49-57 | finagle-redis/src/main/scala/com/twitter/finagle/redis/protocol/commands/SortedSets.scala:340-348 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from all 4 call sites, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060finagle-redis/src/main/scala/com/twitter/finagle/redis/protocol/commands/Hashes.scala:85\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-redis/src/main/scala/com/twitter/finagle/redis/protocol/commands/Hashes.scala"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c01dd80000e5a844a4a03dd345334b6d50d8909f1b0403dd14a83c15ee71a4e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): finagle-core/src/main/scala/com/twitter/finagle/tracing/TraceInitializerFilter.scala:210-219 | finagle-core/src/main/scala/com/twitter/finagle/tracing/TraceInitializerFilter.scala:247-256 | finagle-core/src/main/scala/com/twitter/finagle/tracing/TraceInitializerFilter.scala:343-352 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060finagle-core/src/main/scala/com/twitter/finagle/tracing/TraceInitializerFilter.scala:210\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-core/src/main/scala/com/twitter/finagle/tracing/TraceInitializerFilter.scala"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd2c3763b300212702658e0f564e56b3974180cc604ffdadd9e6124c00db38d0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): finagle-memcached/src/main/scala/com/twitter/finagle/memcached/Client.scala:784-793 | finagle-memcached/src/main/scala/com/twitter/finagle/memcached/Client.scala:798-807 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060finagle-memcached/src/main/scala/com/twitter/finagle/memcached/Client.scala:784\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-memcached/src/main/scala/com/twitter/finagle/memcached/Client.scala"},"region":{"startLine":784}}}],"partialFingerprints":{"codehealthFindingId/v1":"84c76c18e4c93a5780923041a87957a23569550632e0b7c4639b3da8974663b3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): finagle-thriftmux/src/main/scala/com/twitter/finagle/thriftmux/service/ThriftMuxResponseClassifier.scala:81-90 | finagle-thriftmux/src/main/scala/com/twitter/finagle/thriftmux/service/ThriftMuxResponseClassifier.scala:193-202 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060finagle-thriftmux/src/main/scala/com/twitter/finagle/thriftmux/service/ThriftMuxResponseClassifier.scala:81\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-thriftmux/src/main/scala/com/twitter/finagle/thriftmux/service/ThriftMuxResponseClassifier.scala"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"a11fd48ac9307fae48c59e05bbe103893b1212533593c55c72693fa0ea54eb7a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 4): finagle-core/src/main/scala/com/twitter/finagle/loadbalancer/Balancers.scala:80-88 | finagle-core/src/main/scala/com/twitter/finagle/loadbalancer/Balancers.scala:120-128 | finagle-core/src/main/scala/com/twitter/finagle/loadbalancer/Balancers.scala:149-157 | finagle-core/src/main/scala/com/twitter/finagle/loadbalancer/Balancers.scala:371-379 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060finagle-core/src/main/scala/com/twitter/finagle/loadbalancer/Balancers.scala:80\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060finagle-core/src/main/scala/com/twitter/finagle/loadbalancer/Balancers.scala:131\u0060 calls \u0060P2CPeakEwma\u0060 and \u0060finagle-core/src/main/scala/com/twitter/finagle/loadbalancer/Balancers.scala:158\u0060 does not \u2014 after which the two agree again for 2 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-core/src/main/scala/com/twitter/finagle/loadbalancer/Balancers.scala"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6d06effc00bdaab69b9f79127c87e3685d1c065029d31fc5807bbaa987ee0f4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): finagle-netty4-http/src/main/scala/com/twitter/finagle/netty4/http/Bijections.scala:64-72 | finagle-netty4-http/src/main/scala/com/twitter/finagle/netty4/http/Bijections.scala:119-127 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-netty4-http/src/main/scala/com/twitter/finagle/netty4/http/Bijections.scala"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"35765dc1cf331a0408d6d616c04e4064f6e9d1af3738991bcf3493620a9baf45"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): finagle-serversets/src/main/scala/com/twitter/finagle/serverset2/client/apache/ApacheZooKeeper.scala:85-93 | finagle-serversets/src/main/scala/com/twitter/finagle/serverset2/client/apache/ApacheZooKeeper.scala:305-313 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060finagle-serversets/src/main/scala/com/twitter/finagle/serverset2/client/apache/ApacheZooKeeper.scala:85\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-serversets/src/main/scala/com/twitter/finagle/serverset2/client/apache/ApacheZooKeeper.scala"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"b41d16eafaa8ca4ee01f589d247d3a9f94fd24279a548a6ed5a2c64f47d94286"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): finagle-benchmark/src/main/scala/com/twitter/finagle/thrift/ThriftGenBenchmark.scala:38-45 | finagle-benchmark/src/main/scala/com/twitter/finagle/thrift/ThriftGenBenchmark.scala:101-108 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060finagle-benchmark/src/main/scala/com/twitter/finagle/thrift/ThriftGenBenchmark.scala:38\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-benchmark/src/main/scala/com/twitter/finagle/thrift/ThriftGenBenchmark.scala"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"13047f7bec5dd2f9ac2abb2c8a6d04099093aafc02e1649ef5d9158ba35a7cb5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): finagle-memcached/src/main/scala/com/twitter/finagle/memcached/MockClient.scala:123-128 | finagle-memcached/src/main/scala/com/twitter/finagle/memcached/MockClient.scala:136-142 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060finagle-memcached/src/main/scala/com/twitter/finagle/memcached/MockClient.scala:123\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-memcached/src/main/scala/com/twitter/finagle/memcached/MockClient.scala"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ed6e79c55c4c578ed04a05684a9f0f75b177359694112c976e4d7e7ffdff0af"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): finagle-serversets/src/main/scala/com/twitter/finagle/serverset2/client/apache/ApacheZooKeeper.scala:195-200 | finagle-serversets/src/main/scala/com/twitter/finagle/serverset2/client/apache/ApacheZooKeeper.scala:238-243 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060finagle-serversets/src/main/scala/com/twitter/finagle/serverset2/client/apache/ApacheZooKeeper.scala:195\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-serversets/src/main/scala/com/twitter/finagle/serverset2/client/apache/ApacheZooKeeper.scala"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"e611e86f6fdd5042d2b2be4530d8990afb5863a18104b0b10a0035cd168a428a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): finagle-netty4/src/main/scala/com/twitter/finagle/netty4/ssl/client/Netty4ClientSslConfigurations.scala:77-81 | finagle-netty4/src/main/scala/com/twitter/finagle/netty4/ssl/server/Netty4ServerSslConfigurations.scala:81-85 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060finagle-netty4/src/main/scala/com/twitter/finagle/netty4/ssl/client/Netty4ClientSslConfigurations.scala:77\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-netty4/src/main/scala/com/twitter/finagle/netty4/ssl/client/Netty4ClientSslConfigurations.scala"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"a45e35321ae76834854ccc5343915957ca16a6ff5e2538f1a61cb6621e25e0d7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (34 lines \u00D7 2): doc/src/sphinx/code/client-server-anatomy/netty3/Pipeline.scala:8-41 | doc/src/sphinx/code/client-server-anatomy/netty4/Pipeline.scala:8-41 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060doc/src/sphinx/code/client-server-anatomy/netty3/Pipeline.scala:8\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it. Note first that the copies are not typed on the same thing: \u0060CharsetUtil\u0060 names \u0060io.netty.util.CharsetUtil\u0060 in one and \u0060org.jboss.netty.util.CharsetUtil\u0060 in another \u2014 different types that share a simple name, which is why the text matched. A single extracted unit cannot be given a parameter type that fits both, so unifying those types (or introducing a shared abstraction over them) is the step that has to come BEFORE the extraction above; if they are deliberately separate, the duplication is the price of that separation and the honest resolution is to record the decision rather than to extract."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"doc/src/sphinx/code/client-server-anatomy/netty3/Pipeline.scala"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"161d14336b61ae6f604861fbb72144f05e53ea828db664b38f8635aa9b904fc6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): finagle-toggle/src/main/scala/com/twitter/finagle/server/WriteOnce.scala:19-40 | finagle-toggle/src/main/scala/com/twitter/finagle/toggle/WriteOnce.scala:19-40 \u2014 \u0060finagle-toggle/src/main/scala/com/twitter/finagle/server/WriteOnce.scala\u0060 and \u0060finagle-toggle/src/main/scala/com/twitter/finagle/toggle/WriteOnce.scala\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 1 separate duplicated blocks between them, totalling at least 22 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-toggle/src/main/scala/com/twitter/finagle/server/WriteOnce.scala"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"75c5bb0d01fe27b3d5183c25f9a062ad16a66080ccfc385566ed918db0448f04"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): finagle-base-http/src/main/scala/com/twitter/finagle/http/GenStreamingSerialServerDispatcher.scala:151-167 | finagle-core/src/main/scala/com/twitter/finagle/dispatch/ServerDispatcher.scala:133-149 \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":"finagle-base-http/src/main/scala/com/twitter/finagle/http/GenStreamingSerialServerDispatcher.scala"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b357b4fbd261bd7740504d5b9385102e99c0a18be2b2e99809fdae6ad5adc76"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): finagle-core/src/main/scala/com/twitter/finagle/client/EndpointerStackClient.scala:98-102 | finagle-thriftmux/src/main/scala/com/twitter/finagle/ThriftMux.scala:628-632 \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":"finagle-core/src/main/scala/com/twitter/finagle/client/EndpointerStackClient.scala"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c7c2e2af56950659f2a1e25a663d240abab0998be4763309425bcbf7e1bbe69"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): finagle-core/src/main/scala/com/twitter/finagle/client/StackClient.scala:56-61 | finagle-core/src/main/scala/com/twitter/finagle/server/StackServer.scala:33-38 \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":"finagle-core/src/main/scala/com/twitter/finagle/client/StackClient.scala"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"71671accd4e4c0eb78927d40922d100cdf5af05e5b605688d788e64638f83708"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): finagle-memcached/src/main/scala/com/twitter/finagle/memcached/partitioning/MemcachedPartitioningService.scala:130-135 | finagle-redis/src/main/scala/com/twitter/finagle/redis/RedisPartitioningService.scala:203-209 \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":"finagle-memcached/src/main/scala/com/twitter/finagle/memcached/partitioning/MemcachedPartitioningService.scala"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"390b19b16752b9621f627ff12e41a142b37e3cad199b30db221bc856d31f4244"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): finagle-mysql/src/main/scala/com/twitter/finagle/mysql/PlainHandshake.scala:13-25 | finagle-mysql/src/main/scala/com/twitter/finagle/mysql/SecureHandshake.scala:84-96 \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":"finagle-mysql/src/main/scala/com/twitter/finagle/mysql/PlainHandshake.scala"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0dfa18e76290bce68d051d60fee6c8b74476cdcb8981967971a5d91fb1decb4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): finagle-redis/src/main/scala/com/twitter/finagle/redis/protocol/commands/BtreeSortedSet.scala:39-45 | finagle-redis/src/main/scala/com/twitter/finagle/redis/protocol/commands/Hashes.scala:57-64 | finagle-redis/src/main/scala/com/twitter/finagle/redis/protocol/commands/Hashes.scala:69-76 \u2014 there are 3 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 3 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-redis/src/main/scala/com/twitter/finagle/redis/protocol/commands/BtreeSortedSet.scala"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"4adc7ac8e81b8da01708fc25299ded790867bea6b42acf28474f649ce882c63e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): finagle-stats-core/src/main/scala/com/twitter/finagle/stats/MetricsStatsReceiver.scala:237-247 | finagle-stats-core/src/main/scala/com/twitter/finagle/stats/PrometheusExporterHandler.scala:63-73 \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":"finagle-stats-core/src/main/scala/com/twitter/finagle/stats/MetricsStatsReceiver.scala"},"region":{"startLine":237}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfb55a2856619036458365dc0068a0b24b16237078580377fc35bf07c441b4d3"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: SimpleChannelSnooper (LCOM4 17): SimpleChannelSnooper\u0027s methods fall into 17 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 17 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":"finagle-netty4/src/main/scala/com/twitter/finagle/netty4/channel/ChannelSnooper.scala"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbcb6e17fd20157bbecea09bc9b9fef52e522fa40bbb0db136f90fdb72205cb8"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: Metrics (LCOM4 6): Metrics\u0027s methods fall into 6 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 6 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-stats-core/src/main/scala/com/twitter/finagle/stats/Metrics.scala"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4c6dacb04f26b180bae92982989e413d901c25f3290bf23b94956b26b8de192"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #1: If anonymized user #1 becomes unavailable, 4 significant file(s) lose their only recent owner: finagle-core/src/main/scala/com/twitter/finagle/Exceptions.scala, finagle-core/src/main/scala/com/twitter/finagle/InetResolver.scala, finagle-serversets/src/main/scala/com/twitter/finagle/serverset2/Zk2Resolver.scala, finagle-mux/src/main/scala/com/twitter/finagle/mux/pushsession/MuxServerSession.scala. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"5c0c60b7e5511943d9950265be21ba96959d3ce7487f3f6d97e245856cbd9509"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: URLEncoder is known to be slow, explore more efficient options. \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":"finagle-base-http/src/main/scala/com/twitter/finagle/http/QueryParamEncoder.scala"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"24954e4cade5ed059b6d5cbddf65d61b50d835c3bd7a3f132f384a3fb07d2813"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we can do better than a regex \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":"finagle-base-http/src/main/scala/com/twitter/finagle/http/QueryParamEncoder.scala"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"3959e54d435dcdc0cc22ef707b37e857a4ce8846bd42fe22a4476ee5a01ced7c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: These latency events are dependent on the running time 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":"finagle-benchmark/src/main/scala/com/twitter/finagle/balancersim/Simulation.scala"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ecf4dc521eff2224752827904f77ac204fb531bc06b27329345df7d57f26927"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: export standard deviation. \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":"finagle-benchmark/src/main/scala/com/twitter/finagle/balancersim/Simulation.scala"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"56c76a14a25d7ebed73fed14ae3c903efa78b125bf934d9b16aba9cd5b92deb7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this is a bit of a cheat since we fastpath values without a space in the new impl \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":"finagle-benchmark/src/main/scala/com/twitter/finagle/http/ParamMapBenchmark.scala"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"cce3f7bd474f2b839bf633d71251472901ec2115fe389158d627ac46cf3144d1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we should simply transform the stack for boolean \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":"finagle-core/src/main/scala/com/twitter/finagle/FactoryToService.scala"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb5c04facf010a44d5c0f693b7f2360ebcd54c83ea51aa98b90544eca1d1d4eb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we should simply transform the stack for boolean \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":"finagle-core/src/main/scala/com/twitter/finagle/filter/MaskCancelFilter.scala"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"21ee73a5c0f0328552f74fca15981ba87b390407e30ad9b464e6b64fda349d14"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: many case classes have a $outer field because they close over an outside scope. \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":"finagle-core/src/main/scala/com/twitter/finagle/util/StackRegistry.scala"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"4839d480c1eba87390b43eace4ee124c0ee8d8dbffdaf966c0563dbb30a9d0c0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We might consider doing round-robin over the set of \u0022default\u0022 timers in 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":"finagle-core/src/main/scala/com/twitter/finagle/util/DefaultTimer.scala"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"7cdbcdc68de166f2297368faf96221ffc69b654216ea53ee9c0b30f040db7e7a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(jdonham) test fractional weights \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":"finagle-core/src/test/scala/com/twitter/finagle/NameTreeTest.scala"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d6f6bbf1504a0e333a36c29abc03e5bd655ea068c1008a215aeb486c8924431"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should test this with a smoothWin to get a more \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":"finagle-core/src/test/scala/com/twitter/finagle/loadbalancer/aperture/LoadBandTest.scala"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"d50776911f2c0bf54af7dcf9f072d87cd12193904d967adc58620c5c6fc9d3a8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Consider using scalacheck here. (CSL-595)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-core/src/test/scala/com/twitter/finagle/tracing/TraceTest.scala"},"region":{"startLine":441}}}],"partialFingerprints":{"codehealthFindingId/v1":"3da4c80b6b768a6e01c8642a21cc026b61ff60261b4830e714582b426742b488"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO - spec compliant, but *will* break things \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":"finagle-http/src/main/scala/com/twitter/finagle/http/exp/routing/PathMatcher.scala"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"888d35b343735dc82aca6c582224e1ebf8564e96a994f1c0d4fb75c2f8b28b9a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO - TrieSpecMatcher \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":"finagle-http/src/main/scala/com/twitter/finagle/http/exp/routing/PathMatcher.scala"},"region":{"startLine":418}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba69622e1ff0b3691bfda1ccdabaef3b95877e2a4c02852602ea588ad415b8be"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: missing Parameter properties (https://swagger.io/specification/#parameter-object):"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-http/src/main/scala/com/twitter/finagle/http/exp/routing/Parameter.scala"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e65b6c06127e01a98925301435e162b74351da7a305487514022e43b0de61cd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO - minimum, maximum, exclusive minimum, exclusive maximum, multipleOf \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":"finagle-http/src/main/scala/com/twitter/finagle/http/exp/routing/Parameter.scala"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"65979bd702d5be5901f71fd8c8e33d939115fcef835feec234aca23095c4a0c1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO - add support for exploding path styles at https://swagger.io/docs/specification/serialization/"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-http/src/main/scala/com/twitter/finagle/http/exp/routing/Parameter.scala"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"9386f3013ca2f6187aa7dd987cf59bfceb391d386e875a1d368bed12b46f302d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO - array support \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-http/src/main/scala/com/twitter/finagle/http/exp/routing/Parameter.scala"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"74e5403a27dfe9e169a7b8787e1a3020fead28b4eb8e255791584af3c5c14a0b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO - object support (https://swagger.io/specification/#schema-object)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-http/src/main/scala/com/twitter/finagle/http/exp/routing/Parameter.scala"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"612ef1135e6e538daae70b25c569c598b9fd2646e4827fa5ec62d039e8dd5305"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO - TrieHttpRouter \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":"finagle-http/src/main/scala/com/twitter/finagle/http/exp/routing/HttpRouter.scala"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"f55a1f85aa10ab80e2907f60e87aa2325b207870529495fa426e9f4a89537198"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: c.t.u.Base64StringEncoder is too permissive: the only way to win is not to play \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":"finagle-http/src/test/scala/com/twitter/finagle/http/SpnegoAuthenticatorTest.scala"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"4529b7c14dd34c3c6f54e2b3e9c75a4899d9b97d816df84a19c5e7e75a46f6c1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Test ALPN \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":"finagle-http/src/test/scala/com/twitter/finagle/http/DirectPayloadsLifecycleTest.scala"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b531a513bad30608fa87cbf6077ef9bc9c5530ea9ba1938b0a97b25ea09bcd1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Consolidate behavior between h1 and h2 \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":"finagle-http/src/test/scala/com/twitter/finagle/http/AbstractH2CEndToEndTest.scala"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"567a46c6e00cd9e833ffbbf9f3679c538c22476ea28dd63f5738e99576caf2c7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: with offload on this now throws a ChannelClosedException \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":"finagle-http/src/test/scala/com/twitter/finagle/http/AbstractEndToEndTest.scala"},"region":{"startLine":875}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f8333aab7675e23bcd9d5544689996c9bcf686c371dc312a6a292bfde7ebb78"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: revert to 8.kilobytes after we resolve https://github.com/netty/netty/issues/7511"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-http2/src/main/scala/com/twitter/finagle/http2/param/Params.scala"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"42dea6833417ef105f3210277a57e24a6e0afefe81f6a246a31b9c1baa60b84c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // \u0060FailureDetector\u0060 to kick in. TODO - look into using/validating unique content. \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":"finagle-http2/src/main/scala/com/twitter/finagle/http2/transport/client/H2ClientFilter.scala"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2348c6e274b16865f45e650cf82853904cccef32405e786a5768b248c5b3562"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: is this the behavior we want? Maybe we want to signal Closed to drain? \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":"finagle-http2/src/test/scala/com/twitter/finagle/http2/transport/client/RefCountedFactoryTest.scala"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"e394c1d058b034f5701b9eb1d099ba7a7d686bd1a8bbac050baf877b624ed19b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: do we want to buffer and then discard if there might have been a gc? \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":"finagle-mux/src/main/scala/com/twitter/finagle/mux/lease/exp/RequestSnooper.scala"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"40f71bfa2db6efc3237f1fd68b1272c7832f67b6e508612ab20f8d2171afd9a8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: can we recycle logs so not so many of them end up in oldgen? \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":"finagle-mux/src/main/scala/com/twitter/finagle/mux/lease/exp/LogsReceiver.scala"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d7dd57af9f529064f5b1e607cc20b5ffc9950ea938dffe98a27b94d334d6c13"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should no longer be private[finagle] when the api is locked down \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":"finagle-mux/src/main/scala/com/twitter/finagle/mux/lease/exp/Lessor.scala"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"324b6679911edfec9e56bab5890eb25186e9b90bf97cdae84884f40c42913202"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should not just work with Duration, ie be generic \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":"finagle-mux/src/main/scala/com/twitter/finagle/mux/lease/exp/Lessor.scala"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4f91a06da8a4d527b2f683eab7afe5801d50bc7b3b67cf0a6256266f3498395"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Lessors should expose capabilities \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":"finagle-mux/src/main/scala/com/twitter/finagle/mux/lease/exp/Lessor.scala"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"be1adc64d6a5255e5cf11a07193805fe681ff02b40da2864d7501ee30b256e12"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: npending is specific to servers, and isn\u0027t meaningful for other types \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":"finagle-mux/src/main/scala/com/twitter/finagle/mux/lease/exp/Lessor.scala"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b20aadc7932278f4374b90d7ea081d4afbcbe9834c22b3186b2d91e22ae45bb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: given that discount should be consistent for a generation, it doesn\u0027t \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-mux/src/main/scala/com/twitter/finagle/mux/lease/exp/Coordinator.scala"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b0776863d5b38167aca35fdeb3111c556a1cb1332131ad978bbff90084b7acd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: wake up more often to see if the target \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-mux/src/main/scala/com/twitter/finagle/mux/lease/exp/Coordinator.scala"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb8818a3aab0f2daf12b49ac88b63a45054d32cc0872c6506f33cd14b9872463"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: if grabbing memory info is slow, rewrite this to only check memory info occasionally \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":"finagle-mux/src/main/scala/com/twitter/finagle/mux/lease/exp/Coordinator.scala"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"8454140a86e4f1e43e881d4184a377b3e17f59c24997d3451ed95474acc4f7ad"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO MN: reenable \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":"finagle-mux/src/main/scala/com/twitter/finagle/mux/lease/exp/Coordinator.scala"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"abd7778818733e04dfa4ed452e6c30fcc030c9e83c9160662b3c1bd1a9d1b416"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: can this API be made easier to use? \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":"finagle-mux/src/main/scala/com/twitter/finagle/mux/lease/exp/ClockedDrainer.scala"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"050df1d8a8652be47fdf31c0b243c3ec3d9698eeaa68989554c85e3b47856c63"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: issue leases immediately. \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":"finagle-mux/src/main/scala/com/twitter/finagle/mux/lease/exp/ClockedDrainer.scala"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b1e91cfcc947df899b28a5ec89ccdba3a4593c2f98849cf27ab5a1aedb35431"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Wake up sleepers if the rate changes more than some \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":"finagle-mux/src/main/scala/com/twitter/finagle/mux/lease/exp/ByteCounter.scala"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d002c638afd25a1ca0142f4cdb95ba850493489d5b51893391d6beb8df96ce7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: W, P could be configurable--for some servers, 100ms may be too slow \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":"finagle-mux/src/main/scala/com/twitter/finagle/mux/lease/exp/ByteCounter.scala"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"57d4f9f3d6386c43e43b8df5761f80010889e41abd25e67240a3b02bcbafce98"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Our MessageWriter potentially contains unwritten dispatches which \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":"finagle-mux/src/main/scala/com/twitter/finagle/mux/pushsession/ClientTracker.scala"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"095ce1ffb4f83d911433edba56a4f1ed0937f031814d1d62c163f8dda809c729"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Update this extractor in the event that we \u0022fix\u0022 the control \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":"finagle-mux/src/main/scala/com/twitter/finagle/mux/transport/Message.scala"},"region":{"startLine":432}}}],"partialFingerprints":{"codehealthFindingId/v1":"41d3d888cb2a0032f61b904c7d0e9448b7663ab6be687d704ad16365067846d7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: technically we should probably check for duplicate \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":"finagle-mux/src/main/scala/com/twitter/finagle/mux/transport/Message.scala"},"region":{"startLine":470}}}],"partialFingerprints":{"codehealthFindingId/v1":"9bacf88f49047daadb6af9f52e071a9b6d9de9e5ba6fc54ffa227129a0dc0f3b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should we worry about releasing clear \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":"finagle-mux/src/main/scala/com/twitter/finagle/mux/util/TagMap.scala"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8619b14db0018a01c188c3184f33fcad9dd1fe5717c98f57316bb0c58e8c769"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this is not a very helpful exception for diagnosing negotiation failure. \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":"finagle-mux/src/test/scala/com/twitter/finagle/mux/AbstractSmuxTest.scala"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"a577d9bec4b7852d1e517412db55e5bad00f1193c18b0ee4221594468d860203"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: create an accessor to Parameter.wrap, so type errors are caught at compile time. \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":"finagle-mysql/src/main/scala/com/twitter/finagle/mysql/Parameter.scala"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef2e836c15e7d46c32251920c3b94227aa0ba8b86c7c405e085b810bcea637a3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: When streaming is implemented the done signal should be \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-mysql/src/main/scala/com/twitter/finagle/mysql/ClientDispatcher.scala"},"region":{"startLine":250}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ab01c863266eb1b0ace8caf76a90ad73089595418eaee8a0a8ad4c95fda4bf1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (vk): PR against Netty; we need to construct out of given Headers so we avoid \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":"finagle-netty4-http/src/main/scala/com/twitter/finagle/netty4/http/Netty4StreamTransport.scala"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"905544bf2ec5300dd282e1d2bad454126a7eba513b3bcbbb0f47491814fbe49f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this breaks backpressure as the bytes are not really sent but since we only use \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":"finagle-netty4/src/main/java/com/twitter/finagle/netty4/codec/compression/zstd/ZstdStreamingEncoder.java"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"a62e2700a3eb7dce1ec364181053cf1df7e3d5b9b2fba875c57444111d41d9da"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Figure out if it makes sense to bypass localhost connections when HTTP proxy is \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":"finagle-netty4/src/main/scala/com/twitter/finagle/netty4/channel/AbstractNetty4ClientChannelInitializer.scala"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"28b3212b3003eab88d1002b459bfac576e5485e9e0c9c8d3427df01b995874a1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO we should return a DelayingServiceFactory until \u0060observable\u0060 is no \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":"finagle-partitioning/src/main/scala/com/twitter/finagle/partitioning/PartitionNodeManager.scala"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"793121d921c916401505091854ff76ff4215c96ad537b89bb150a9ed84bea629"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: COPY in CRDB cannot be done within a prepared statement \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":"finagle-postgresql/src/it/scala/com/twitter/finagle/postgresql/RichClientSpec.scala"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"8df828a030b0ff9af4e0ce2dc8484b1f7a5f377bcf7f7808da76291e61d4039c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: COPY in CRDB cannot be done within a prepared statement \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":"finagle-postgresql/src/it/scala/com/twitter/finagle/postgresql/RichClientSpec.scala"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"98e8d855fa8e32d43fe8491a4901e46a0e5dc44e1cfd331a9de42ca41c08e05e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: investigate CRDB failure \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":"finagle-postgresql/src/it/scala/com/twitter/finagle/postgresql/PreparedStatementSpec.scala"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"454da6ad1bd113b2b57981b58e21e0f5e20e458e8423e4600301a424ad41c614"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: investigate CRDB failures \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-postgresql/src/it/scala/com/twitter/finagle/postgresql/types/ValueWritesSpec.scala"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6bbc34b3946810587de6fb5eb69d47ef9f857b5bccb1425ef9cd82df911d258"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: what\u0027s an appropriate value 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":"finagle-postgresql/src/main/scala/com/twitter/finagle/postgresql/PgSqlTransporter.scala"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ecacd2a4af98c097c6bd85a29d9e91d332c11937b5288a976a3df36b9af9d36"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \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":"finagle-postgresql/src/main/scala/com/twitter/finagle/postgresql/FrontendMessage.scala"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"85ee6dad19430748e39f3a8f74ffb19362bea8893a7b4d3f31f72467cc088029"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \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":"finagle-postgresql/src/main/scala/com/twitter/finagle/postgresql/machine/SimpleQueryMachine.scala"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2bd4f45425958ac466a155e71841fcb2462e93b04c38638cf088d2ee3e5fdd8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \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":"finagle-postgresql/src/test/scala/com/twitter/finagle/postgresql/PropertiesSpec.scala"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"cfc04ca2579ce3b7bc6fbd09bb0ae53c3999829e7b93432732516c7399a76fdb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \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":"finagle-postgresql/src/test/scala/com/twitter/finagle/postgresql/machine/MachineSpec.scala"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"5810fbe74e3bea7ecca0f30abe102375350f9b5c50106f6860ea010400ba5d9a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Show or similar instead of toString \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":"finagle-postgresql/src/main/scala/com/twitter/finagle/postgresql/Errors.scala"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"51a9e37500493017fd6325c0cfc435b93bafc61e637caba66d5e78b33568c003"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: parse out the fields to expose the category and sql 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":"finagle-postgresql/src/main/scala/com/twitter/finagle/postgresql/BackendMessage.scala"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"09157fe87ce41976443e5027a5026e22b7b13dc2e18e564c24355b2529dcb2b2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: handle discard() to client can cancel the stream \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":"finagle-postgresql/src/main/scala/com/twitter/finagle/postgresql/machine/SimpleQueryMachine.scala"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0c3b016758d2cb9c21c431f02bcb49dc6f8de8a98ab4868f20b44add009f10b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: handle discard() to client can cancel the stream \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":"finagle-postgresql/src/main/scala/com/twitter/finagle/postgresql/machine/ExecuteMachine.scala"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"47fd455bcf6d390e2bfa7db485b2feba82b284e8c491f37c0fd1242159f6369c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: don\u0027t ignore \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":"finagle-postgresql/src/main/scala/com/twitter/finagle/postgresql/machine/SimpleQueryMachine.scala"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"8230d4f4e2727d80215c97951cdebec970e4bbc063fa5130cbd41466c976077c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: don\u0027t ignore \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":"finagle-postgresql/src/main/scala/com/twitter/finagle/postgresql/machine/HandshakeMachine.scala"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3426e5070d3ec2e219846c5b156f1d88da4f3ccc0caad48520c8eb920d14431"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we can avoid sending this one when the Prepare phase already returned NoData. \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":"finagle-postgresql/src/main/scala/com/twitter/finagle/postgresql/machine/ExecuteMachine.scala"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8f7aeaba95fe954bbb3579878e9354bc39d774a7f6f804e373ae0054de19616"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we can avoid this one by reusing the one in the first execution. Not sure what the best API for this is 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":"finagle-postgresql/src/main/scala/com/twitter/finagle/postgresql/machine/ExecuteMachine.scala"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"343dd9881179251da4fda39c64a89ead27472d3ba304d7faa59d6040f19e18ec"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: the ReadyForQuery here is fake \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":"finagle-postgresql/src/main/scala/com/twitter/finagle/postgresql/machine/ExecuteMachine.scala"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b0ca7bd8fb806163dff1622ba0ac11a665d73ee7c147cfc45ce5730fdae7734"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: not clear what to do about strings that contain the null byte? \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":"finagle-postgresql/src/main/scala/com/twitter/finagle/postgresql/transport/PgBuf.scala"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"10e50b0ea63069b6dc117a027aeb7db400aa90ffef07b184018aecff721bbda9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this is actually a bit mask, but it\u0027s not clear if any other values are possible anyway \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":"finagle-postgresql/src/main/scala/com/twitter/finagle/postgresql/transport/PgBuf.scala"},"region":{"startLine":266}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3b8f73696b9dddd0b41a8a0928a4f99c469dd0d22f835c05429dd042569b875"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Json is really only meant for reading... \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":"finagle-postgresql/src/main/scala/com/twitter/finagle/postgresql/types/ValueWrites.scala"},"region":{"startLine":254}}}],"partialFingerprints":{"codehealthFindingId/v1":"8945161989db6c43f266cf8a475257c50d7b942dd0a0b3f47650dc4ef3423c9e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Once we have actual data types, Gen.oneOf(...) \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":"finagle-postgresql/src/test/scala/com/twitter/finagle/postgresql/PropertiesSpec.scala"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"50e4cfe06a5bd097a2bb40d331f087e5c0b05547cfed8921fcc52159912844c3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this will need to be dervied from the dataType when used in a DataRow \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":"finagle-postgresql/src/test/scala/com/twitter/finagle/postgresql/PropertiesSpec.scala"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"7de171f93d7a125af6c4878816fe69f850624468657add2a02b77547f644bbe4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: more weight on non-null \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":"finagle-postgresql/src/test/scala/com/twitter/finagle/postgresql/PropertiesSpec.scala"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"28c04ba80b801c1d0bc0a63041cddb00611cc22e656f1607975690333ee24477"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: produce the appropriate bytes based on the field descriptors. Should also include nulls. \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":"finagle-postgresql/src/test/scala/com/twitter/finagle/postgresql/PropertiesSpec.scala"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"9481f4e0fb7a745fe390a9c944bcf2cb9f4f060196952fd344e31cb5ca0abb9f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: the statefulness of the test is pretty brittle \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":"finagle-postgresql/src/test/scala/com/twitter/finagle/postgresql/machine/SimpleQueryMachineSpec.scala"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"367bbf7050426dcfd9aa61066bffc2463e3d44bc5b80d9c6bf57ffc575e6aa7d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: ideally we generate fragments here, but not sure how to do that with scalacheck \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":"finagle-postgresql/src/test/scala/com/twitter/finagle/postgresql/machine/MachineSpec.scala"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3da8187dd25a9f94478fb40f9b19af4ebe272ac38969e5b06e4921b12698749"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this isn\u0027t actually a TTL, which means that the second assertion \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":"finagle-redis/src/it/scala/com/twitter/finagle/redis/commands/key/KeyClientIntegrationSuite.scala"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"41e8e9adb8fb74dcbdc3fe6a0fdd440925fbe1795c2999e75937188abb4e5e05"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: the exact error message varies in different versions of redis. fix this later \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":"finagle-redis/src/it/scala/com/twitter/finagle/redis/commands/transaction/TransactionClientIntegrationSuite.scala"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"93de5a52eadb2255efa90c570424dfb65253efef0c80b27596b61b2db5a114f0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: the exact error message varies in different versions of redis. fix this later \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":"finagle-redis/src/it/scala/com/twitter/finagle/redis/commands/transaction/TransactionClientIntegrationSuite.scala"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"e246130a54e82c5df399a95e6e31aa24532c34c5facec73cb26b5073bbd44ac0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: CLIENT KILL \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":"finagle-redis/src/main/scala/com/twitter/finagle/redis/ServerCommands.scala"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"72745ffc412f81d90699caa6d22814c228e76f69f953c4c3e9ea1a91f73b3993"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: CLIENT LIST \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":"finagle-redis/src/main/scala/com/twitter/finagle/redis/ServerCommands.scala"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3a37f7d6cebf25a119532dabdf2b535be1312010da7f4593adc6e3e42996677"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: CLIENT GETNAME \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":"finagle-redis/src/main/scala/com/twitter/finagle/redis/ServerCommands.scala"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"992891a9c714e9cef9799efb9dd7dd9ffd5ac33abb4c4e18c71a28500dd5c055"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: CLIENT PAUSE \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":"finagle-redis/src/main/scala/com/twitter/finagle/redis/ServerCommands.scala"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"1327d6fb77b8b269773a410ab49c6d6ef712864af660137bdf009da3ad9ab196"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: CLIENT SETNAME \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":"finagle-redis/src/main/scala/com/twitter/finagle/redis/ServerCommands.scala"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb693d21e45cf868d9e1d572f41b520b2c1c6fa842f9aabc8b7992c43c1ba50e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: ROLE \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":"finagle-redis/src/main/scala/com/twitter/finagle/redis/ServerCommands.scala"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"aaf5a3d222f702d6a75eebe7eb6217228af5d64c64ec7c8a091141fed8f377f8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: SHUTDOWN \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":"finagle-redis/src/main/scala/com/twitter/finagle/redis/ServerCommands.scala"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"eac6802a1bc05b737f4ec6f914b4c9949e426bd13b79403b1d776902bb1c01c6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: BGREWRITEAOF \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":"finagle-redis/src/main/scala/com/twitter/finagle/redis/ServerCommands.scala"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a392e3a5ff366eab73a800e7e249d7f0b83089306a467ed98a2638a5ab6ee3a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: BGSAVE \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":"finagle-redis/src/main/scala/com/twitter/finagle/redis/ServerCommands.scala"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c0a4a1818e3390eb4e5d4e30ea21b30bbb4b8066f84e750d4bddef387e9dc27"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: COMMAND \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":"finagle-redis/src/main/scala/com/twitter/finagle/redis/ServerCommands.scala"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"b17b6f9b2be60d6fa24715e907bb94a149ba3257ddf08538e190f3bf3938e445"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: COMMAND COUNT \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":"finagle-redis/src/main/scala/com/twitter/finagle/redis/ServerCommands.scala"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3592dc31e56e96f090d8e6fd78a777188182a372333a0b05cc81f712b1149cb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: COMMAND GETKEYS \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":"finagle-redis/src/main/scala/com/twitter/finagle/redis/ServerCommands.scala"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"eedbf7a01b24616a342cd6a7f25a8392916d5ccb5ce47d2ad7dd5aedb4ea5d47"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: COMMAND INFO \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":"finagle-redis/src/main/scala/com/twitter/finagle/redis/ServerCommands.scala"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"b40bc2e94c8fd2069f51e1e21d1abeaa9f8817dd1a838f28bc1f17be9d5df49d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: CONFIG GET \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":"finagle-redis/src/main/scala/com/twitter/finagle/redis/ServerCommands.scala"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4cdb6b6cc26afe2994dabbce615fccc75ceb24d8016805a11bdb257a9d1a59e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: CONFIG REWRITE \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":"finagle-redis/src/main/scala/com/twitter/finagle/redis/ServerCommands.scala"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1f60c7fd9e93dca1f162ab0c0894a31ee28113d8d7e884e2cc84c5e601529d3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: CONFIG SET \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":"finagle-redis/src/main/scala/com/twitter/finagle/redis/ServerCommands.scala"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"814331a71580c712b79c47dc20561d9ade370d36f4a50ee43211a1a8b8b3ecd3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: CONFIG RESETSTAT \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":"finagle-redis/src/main/scala/com/twitter/finagle/redis/ServerCommands.scala"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd15a2f1f940677b2ccfda063d198227dc32799091157b3c0f0d599220c0ffc7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: DEBUG OBJECT \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":"finagle-redis/src/main/scala/com/twitter/finagle/redis/ServerCommands.scala"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"eca54e1bfe7913094c25c2127fe22380fe65aca334c37100c2216328468b67fb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: DEBUG SEGFAULT \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":"finagle-redis/src/main/scala/com/twitter/finagle/redis/ServerCommands.scala"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc14f3d8de7bbf3bc8e37b0f403944cf898cf30aeac77d122cd5a3ee2f48cf35"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: LAST SAVE \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":"finagle-redis/src/main/scala/com/twitter/finagle/redis/ServerCommands.scala"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"b372e4ff45b4ab44eb8799013754d8796b99d2a3bdd5e8248262febf1bb1cb6c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: MONITOR \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":"finagle-redis/src/main/scala/com/twitter/finagle/redis/ServerCommands.scala"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bc9fac19bcae173fdce9ed8c59bf62b81b022df180e83707f5a0419ba683bbd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: SAVE \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":"finagle-redis/src/main/scala/com/twitter/finagle/redis/ServerCommands.scala"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d7bcb03160d4987eeb02ea85010a8d8958fce4ff90bea6b1873ff71351fae99"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: SLOWLOG \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":"finagle-redis/src/main/scala/com/twitter/finagle/redis/ServerCommands.scala"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e5689e30b76f7f79efed0d00fa97142c200865251c47aa9ed3f548a0b9a076f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: TIME \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":"finagle-redis/src/main/scala/com/twitter/finagle/redis/ServerCommands.scala"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"16a63ecdbd62dbff637f120273a7843753c0e04695e44587aa78d7d4913ffb65"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: ECHO \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":"finagle-redis/src/main/scala/com/twitter/finagle/redis/ConnectionCommands.scala"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"499a66c9a2f26d554e0b0795934c57776cfe26fd5a121c47d4675d617227d854"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: PING with argument \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":"finagle-redis/src/main/scala/com/twitter/finagle/redis/ConnectionCommands.scala"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"27f6be21df93555f552edd6089104890c13fc403195cb1f607d5793ca729229a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(John Sirois): DigestAuthenticationProvider is broken - uses platform default charset \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":"finagle-serversets/src/main/java/com/twitter/finagle/common/zookeeper/ZooKeeperClient.java"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"c14fe734b13ae660a9b1cab5a0c5f5450b9e8fd22296b130736e1f2b3c69eede"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(John Sirois): Inject the helper so that backoff strategy can be configurable. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-serversets/src/main/java/com/twitter/finagle/common/zookeeper/ServerSetImpl.java"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"d225dd26c9b275070a36aa5cf06247e665f36cdcaf76267707f5965c1ef2f6e4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(William Farner): Cancel the watch when \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":"finagle-serversets/src/main/java/com/twitter/finagle/common/zookeeper/Group.java"},"region":{"startLine":718}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f05f3948989ecbdc32e38a5cbe01a1af64f664f0806856c0d76f47802366ed7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Watchers are tied to the life of the 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":"finagle-serversets/src/main/scala/com/twitter/finagle/zookeeper/ZkClientFactory.scala"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e76f5bdb31cace45924411a24d562a2d6b3d032423120d992d87ca430f8f8f5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: figure out why MockTimer doesn\u0027t work. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-serversets/src/test/scala/com/twitter/finagle/serverset2/ZkSessionEndToEndTest.scala"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"adbea52f45da932946c9175e2bfd341b2bf5369bd22b7904aeb6a592c1a3b952"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo: ideally these would be computed as rates over time, but this is a \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-stats-core/src/main/scala/com/twitter/finagle/stats/MetricsStatsReceiver.scala"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"118123382502cc57395cd1e24ef6095934e674ead28dba3ca1eb6d334c9e0d45"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: only try once? \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":"finagle-thrift/src/main/scala/com/twitter/finagle/thrift/TTwitterServerFilter.scala"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6bae766cdaa047897e22d3650f8c9f3968ef06030a3e4d8c4f1acfeb345c0f3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO reconcile these types w/ req / rep \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":"finagle-thrift/src/main/scala/com/twitter/finagle/thrift/exp/partitioning/PartitioningStrategy.scala"},"region":{"startLine":737}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6348160f54662ab3274b1086c5b12efdb38f3f901de2476acc82723cd06cb1e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: also apply this for Protocols.binaryFactory \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":"finagle-thrift/src/main/scala/com/twitter/finagle/thrift/transport/ThriftClientPreparer.scala"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"68bcb7ab478e7d044802c4fdcd57a14ab32845a48969538db4ed1beed85b2780"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo: remove this test after dropping support for JDK8. \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":"finagle-thrift/src/test/scala/com/twitter/finagle/thrift/TFinagleBinaryProtocolTest.scala"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"17bd2ce5a459e04e7626298f72476317fa0f635d08313649cb2a05e46aa74a0a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo: remove this test after dropping support for JDK8. \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":"finagle-thrift/src/test/scala/com/twitter/finagle/thrift/TFinagleBinaryProtocolTest.scala"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ddd7b33e9f7703f8a35d7a7e1c1c2cceb9f2b75e51ce23ccd572ede4cd71320"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO set the Path 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":"finagle-thriftmux/src/main/scala/com/twitter/finagle/ThriftMux.scala"},"region":{"startLine":352}}}],"partialFingerprints":{"codehealthFindingId/v1":"d15fd485b63d8c63dac157ff763d465fa3d72aa2cd0eaf8eb10ce1f3dc813c82"}},{"ruleId":"D28","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9852f132eae5d7f011300d8facf18e5ec6d7c0f6affcf47e36ba6258ae8a6e2a"},"properties":{"commitSha":"225fb8a114bf3920f046281eb95acf2c6cb9abdc"}},{"ruleId":"D28","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3cdfd7beb31b791ae18dcb425e21eb157c842e7bbcd522cc330573c1a6538db1"}},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"31b400b9b35f7e6f60bdd436966b4a23f1d5954fa4d681c6333a8bd0b55e853b"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e575410511a5c402c1511f82a9b847b5d2c0621c7a5d46721b35c259d6f85721"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"58114e9099ecf71b4c783173442dbc0440a9d4ae50943cb3f736f59438ec9e23"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6b31561fcbcdd67bd43875daeddcb866da7bb6d26cc93ed178c3d7df95099a54"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c23ce62a9cc7d5a284fe476c8fe92d5b8f210ea3987c08d75b31ee62a0596f42"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6d7bc2c62f0f1739e262775fbaeda08a466af0fbc496a8ed0f7ff78bd64b30e8"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"830b0b307d0a5c5b718a40f00c02ba86860652ca86d66f348dd7ea21af4b3378"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"29bdf01bea719752d01a94d88d5b0a023f7b4a79f6082abbab1bb161a8f9da01"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"aa538c37165644b260a47f325fde3854a5117b2eeae3adcd2b288b6d51b6bd58"},"taxa":[{"id":"CWE-918","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f3d391aec1ea6e90b36df6499bd6cd10cc11a85c00b206b8240891f209498264"},"taxa":[{"id":"CWE-918","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"32ddc2a6bbc24feee17928d951e10bd52668ed26a06995bb643e5646e89fcf5c"},"taxa":[{"id":"CWE-89","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d347707550986299396ac270ad5dfb495f23037be4196c3b5361ecfedc80f5b4"},"taxa":[{"id":"CWE-1104","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-1329","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ed941b55603b7948fad68cbc0149f64551a14209270ac2be24da4ebf6221c4cc"},"taxa":[{"id":"CWE-1104","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-1329","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3c03f57f372dc7acb2c7e18e6ee5a7dbd0d701a3b567806a75dba59440f3330c"},"taxa":[{"id":"CWE-1104","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-1329","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"2e307b58274a4a0fc6cac1b823124a2b7804810abfa8ea28d7c34a2860037bf4"},"taxa":[{"id":"CWE-319","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D34","level":"note","message":{"text":"Concentrated knowledge decay: 516 of 552 significant files have no living knowledge, while the repository is still being changed at a low rate (5 commit(s) in the last 90 days) \u2014 so this is one repo-wide knowledge-decay state, not 516 separate risks. Counted over 552 of the 1204 production source files in this repository: the rest are under the ~2,400-byte size floor this dimension measures over. The code moved on without the people who understood these files: document them or schedule a read-through before the next change lands in them."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"008bd8d3156a7f5206da709f59f1f87af76671c6b9becea72c8c9cffbcbd4f8e"}},{"ruleId":"D34","level":"note","message":{"text":"Most significant orphaned file: One of the orphaned files carrying the most lost knowledge \u2014 ranked by size weighted by the file\u0027s role in the codebase, the same weighting behind the score above, so core code outranks equally large plumbing. A reasonable place to start a read-through before the aggregate risk above bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-core/src/main/scala/com/twitter/finagle/builder/ClientBuilder.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a06bb36aa3f6d3d8cd3f6472045fb7312af2ec2b26775393007512ade93fd16"}},{"ruleId":"D34","level":"note","message":{"text":"Most significant orphaned file: One of the orphaned files carrying the most lost knowledge \u2014 ranked by size weighted by the file\u0027s role in the codebase, the same weighting behind the score above, so core code outranks equally large plumbing. A reasonable place to start a read-through before the aggregate risk above bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-thrift/src/main/scala/com/twitter/finagle/thrift/exp/partitioning/PartitioningStrategy.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"283cb282099f29f5f18ad113fe4be3464dda23753571ae283f61d2332cee9706"}},{"ruleId":"D34","level":"note","message":{"text":"Most significant orphaned file: One of the orphaned files carrying the most lost knowledge \u2014 ranked by size weighted by the file\u0027s role in the codebase, the same weighting behind the score above, so core code outranks equally large plumbing. A reasonable place to start a read-through before the aggregate risk above bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-thrift/src/main/scala/com/twitter/finagle/Thrift.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a1f7c38b9e875877a4101f328d5ec9c8eaacdc1b6b8bb813787317e85761738"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: EndpointerStackClient.scala \u2194 ListeningStackServer.scala: \u0060finagle-core/src/main/scala/com/twitter/finagle/client/EndpointerStackClient.scala\u0060 and \u0060finagle-core/src/main/scala/com/twitter/finagle/server/ListeningStackServer.scala\u0060 change together 53% of the time (9 of the 17 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 9 shared commits counted here, the most recent 3 are \u006011ca7e82\u0060 finagle: more comprehensive support for dimensional metrics; \u0060188c6f6b\u0060 finagle-core: Don\u0027t migrate all metrics yet; \u00604867a5c7\u0060 finagle-core: Move SourceRole subtypes into its object \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"finagle-core/src/main/scala/com/twitter/finagle/client/EndpointerStackClient.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"282b89390286fed813f85c50e59572910c16edd9db52f64884840d9178b29279"}},{"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":"9658270ba49f37ed04e99ab1263b6393cd42aed8bdfb7aafd9fa1070f5491895"}},{"ruleId":"D36","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ace515990e7ee0f17b5c17e44dd168a5bdecf90804a3a3dd845cf05540978013"}},{"ruleId":"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":"P3","level":"note","message":{"text":"No SAST: No static application security testing detected. For this repository\u0027s stack, add scalafix or scapegoat (or \u0060semgrep --config=auto\u0060, which runs on any language) as a CI step. What was searched, so you can tell an absence from a miss: the 4073 CI workflow file(s) in this repository, and the scanner and linter configuration checked in beside them. A scan that runs outside CI, one configured in your forge\u0027s web UI rather than in a committed file, or a tool whose name is none of those this check carries, is not seen \u2014 if that is your case the row is wrong, and saying so is more useful than adding a second scanner."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6e54424179c892f03ef2fd003130ac4bd43f39bbf3b1ca0a0143e25acb80ec87"}}],"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-1104","guid":"4c918cb5-b2a6-6c55-9963-a44ee464305e","name":"CWE-1104","shortDescription":{"text":"CWE-1104"},"helpUri":"https://cwe.mitre.org/data/definitions/1104.html"},{"id":"CWE-1329","guid":"f70f1c3f-4ccf-cb5e-bdd3-03ba4868d36d","name":"CWE-1329","shortDescription":{"text":"CWE-1329"},"helpUri":"https://cwe.mitre.org/data/definitions/1329.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-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-319","guid":"7af97476-9f0d-4458-9163-3d2043918a1a","name":"CWE-319","shortDescription":{"text":"CWE-319"},"helpUri":"https://cwe.mitre.org/data/definitions/319.html"},{"id":"CWE-353","guid":"09d7e902-d4ee-f05d-ae6c-0a1554d0c18f","name":"CWE-353","shortDescription":{"text":"CWE-353"},"helpUri":"https://cwe.mitre.org/data/definitions/353.html"},{"id":"CWE-494","guid":"b8a65e0d-e459-4a55-a931-fc1136482375","name":"Download of Code Without Integrity Check","shortDescription":{"text":"Download of Code Without Integrity Check"},"helpUri":"https://cwe.mitre.org/data/definitions/494.html"},{"id":"CWE-506","guid":"401d6455-56e3-0552-9a39-f77461673e3f","name":"CWE-506","shortDescription":{"text":"CWE-506"},"helpUri":"https://cwe.mitre.org/data/definitions/506.html"},{"id":"CWE-77","guid":"332c8ade-6612-9f56-a06b-d8d90b1a8750","name":"Command Injection","shortDescription":{"text":"Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/77.html"},{"id":"CWE-78","guid":"2e31ceaf-c7ae-2e5e-9661-cfb1362789cf","name":"OS Command Injection","shortDescription":{"text":"OS Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/78.html"},{"id":"CWE-79","guid":"fd45580b-e8c4-fc5e-8c2f-aa8fab0b4dbf","name":"Cross-site Scripting (XSS)","shortDescription":{"text":"Cross-site Scripting (XSS)"},"helpUri":"https://cwe.mitre.org/data/definitions/79.html"},{"id":"CWE-798","guid":"5e8f057d-fee3-995a-a0cb-9fc5b0d174d1","name":"Use of Hard-coded Credentials","shortDescription":{"text":"Use of Hard-coded Credentials"},"helpUri":"https://cwe.mitre.org/data/definitions/798.html"},{"id":"CWE-89","guid":"6d08fdad-37eb-c150-bbf0-d7d946863407","name":"SQL Injection","shortDescription":{"text":"SQL Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/89.html"},{"id":"CWE-918","guid":"2e9b9091-5a0f-dc57-b644-7ad04bd56e64","name":"CWE-918","shortDescription":{"text":"CWE-918"},"helpUri":"https://cwe.mitre.org/data/definitions/918.html"},{"id":"CWE-937","guid":"16f316ae-415c-b354-a59b-1f7905f756e9","name":"Using Components with Known Vulnerabilities","shortDescription":{"text":"Using Components with Known Vulnerabilities"},"helpUri":"https://cwe.mitre.org/data/definitions/937.html"},{"id":"CWE-94","guid":"75e7f50c-6c2f-dd52-bf40-bf6c52b861fd","name":"Code Injection","shortDescription":{"text":"Code Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/94.html"}]}],"properties":{"codehealthPublication":{"public":true,"notice":"This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings \u2014 which rule fired, in which file, on which line, and how to fix it \u2014 are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.","securityFindingsRedacted":19,"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."]}]}