{"$schema":"https://json.schemastore.org/sarif-2.1.0.json","version":"2.1.0","runs":[{"tool":{"driver":{"name":"codehealth","informationUri":"https://codehealth.canine.dev","rules":[{"id":"D1","name":"Cyclomatic Complexity","shortDescription":{"text":"Cyclomatic Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D1"},{"id":"D2","name":"Cognitive Complexity","shortDescription":{"text":"Cognitive Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D2"},{"id":"D3","name":"God Classes","shortDescription":{"text":"God Classes"},"helpUri":"https://codehealth.canine.dev/dimensions/D3"},{"id":"D4","name":"Code Duplication","shortDescription":{"text":"Code Duplication"},"helpUri":"https://codehealth.canine.dev/dimensions/D4"},{"id":"D5","name":"Coupling","shortDescription":{"text":"Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D5"},{"id":"D9","name":"Test Distribution","shortDescription":{"text":"Test Distribution"},"helpUri":"https://codehealth.canine.dev/dimensions/D9"},{"id":"D13","name":"Secret Scanning","shortDescription":{"text":"Secret Scanning"},"helpUri":"https://codehealth.canine.dev/dimensions/D13","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D15","name":"Churn \u00D7 Complexity Hotspots","shortDescription":{"text":"Churn \u00D7 Complexity Hotspots"},"helpUri":"https://codehealth.canine.dev/dimensions/D15"},{"id":"D16","name":"Bus Factor","shortDescription":{"text":"Bus Factor"},"helpUri":"https://codehealth.canine.dev/dimensions/D16"},{"id":"D17","name":"Explicit Debt","shortDescription":{"text":"Explicit Debt"},"helpUri":"https://codehealth.canine.dev/dimensions/D17"},{"id":"D19","name":"Documentation Quality","shortDescription":{"text":"Documentation Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D19"},{"id":"D20","name":"ADR Quality","shortDescription":{"text":"ADR Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D20"},{"id":"D21","name":"Naming Consistency","shortDescription":{"text":"Naming Consistency"},"helpUri":"https://codehealth.canine.dev/dimensions/D21"},{"id":"D22","name":"Internal API Consistency","shortDescription":{"text":"Internal API Consistency"},"helpUri":"https://codehealth.canine.dev/dimensions/D22"},{"id":"D26","name":"Project Cohesion","shortDescription":{"text":"Project Cohesion"},"helpUri":"https://codehealth.canine.dev/dimensions/D26"},{"id":"D28","name":"Secrets (history)","shortDescription":{"text":"Secrets (history)"},"helpUri":"https://codehealth.canine.dev/dimensions/D28","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D29","name":"Static Analysis (SAST)","shortDescription":{"text":"Static Analysis (SAST)"},"helpUri":"https://codehealth.canine.dev/dimensions/D29","relationships":[{"target":{"id":"CWE-79","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-89","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-94","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-77","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-79","CWE-89","CWE-78","CWE-94","CWE-77"]}},{"id":"D31","name":"IaC \u0026 Container Security","shortDescription":{"text":"IaC \u0026 Container Security"},"helpUri":"https://codehealth.canine.dev/dimensions/D31","relationships":[{"target":{"id":"CWE-1032","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-732","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-16","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1032","CWE-732","CWE-16"]}},{"id":"D34","name":"Knowledge Freshness","shortDescription":{"text":"Knowledge Freshness"},"helpUri":"https://codehealth.canine.dev/dimensions/D34"},{"id":"D35","name":"Change Coupling","shortDescription":{"text":"Change Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D35"},{"id":"D36","name":"Supply-chain Provenance \u0026 Signing","shortDescription":{"text":"Supply-chain Provenance \u0026 Signing"},"helpUri":"https://codehealth.canine.dev/dimensions/D36","relationships":[{"target":{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1357","CWE-494"]}},{"id":"D37","name":"Vulnerability-disclosure Policy","shortDescription":{"text":"Vulnerability-disclosure Policy"},"helpUri":"https://codehealth.canine.dev/dimensions/D37","relationships":[{"target":{"id":"CWE-1059","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1059"]}},{"id":"D44","name":"Platform End-of-Life","shortDescription":{"text":"Platform End-of-Life"},"helpUri":"https://codehealth.canine.dev/dimensions/D44"},{"id":"AX10","name":"Code composition","shortDescription":{"text":"Code composition"},"helpUri":"https://codehealth.canine.dev/dimensions/AX10"},{"id":"AX3","name":"Project dependency cycles","shortDescription":{"text":"Project dependency cycles"},"helpUri":"https://codehealth.canine.dev/dimensions/AX3"},{"id":"AX4","name":"Dependency direction","shortDescription":{"text":"Dependency direction"},"helpUri":"https://codehealth.canine.dev/dimensions/AX4"},{"id":"AX8","name":"Test isolation","shortDescription":{"text":"Test isolation"},"helpUri":"https://codehealth.canine.dev/dimensions/AX8"},{"id":"AX9","name":"CQS / query purity","shortDescription":{"text":"CQS / query purity"},"helpUri":"https://codehealth.canine.dev/dimensions/AX9"},{"id":"ES1","name":"Fold determinism","shortDescription":{"text":"Fold determinism"},"helpUri":"https://codehealth.canine.dev/dimensions/ES1"},{"id":"ES2","name":"Immutable events","shortDescription":{"text":"Immutable events"},"helpUri":"https://codehealth.canine.dev/dimensions/ES2"},{"id":"M1","name":"Documentation (README)","shortDescription":{"text":"Documentation (README)"},"helpUri":"https://codehealth.canine.dev/dimensions/M1"},{"id":"M2","name":"Architecture documentation","shortDescription":{"text":"Architecture documentation"},"helpUri":"https://codehealth.canine.dev/dimensions/M2"},{"id":"M3","name":"Folder \u0026 project structure","shortDescription":{"text":"Folder \u0026 project structure"},"helpUri":"https://codehealth.canine.dev/dimensions/M3"},{"id":"M4","name":"Documentation accuracy","shortDescription":{"text":"Documentation accuracy"},"helpUri":"https://codehealth.canine.dev/dimensions/M4"},{"id":"P1","name":"CI/CD gates","shortDescription":{"text":"CI/CD gates"},"helpUri":"https://codehealth.canine.dev/dimensions/P1"},{"id":"P12","name":"CI test-gate honesty","shortDescription":{"text":"CI test-gate honesty"},"helpUri":"https://codehealth.canine.dev/dimensions/P12"},{"id":"P2","name":"Observability","shortDescription":{"text":"Observability"},"helpUri":"https://codehealth.canine.dev/dimensions/P2"},{"id":"P3","name":"Security \u0026 performance tooling","shortDescription":{"text":"Security \u0026 performance tooling"},"helpUri":"https://codehealth.canine.dev/dimensions/P3"},{"id":"P4","name":"Deployment \u0026 Rollback","shortDescription":{"text":"Deployment \u0026 Rollback"},"helpUri":"https://codehealth.canine.dev/dimensions/P4"},{"id":"P6","name":"Release Hygiene","shortDescription":{"text":"Release Hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/P6"},{"id":"PF3","name":"Async \u0026 latency hygiene","shortDescription":{"text":"Async \u0026 latency hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/PF3"},{"id":"X9","name":"Subsumed condition operand","shortDescription":{"text":"Subsumed condition operand"},"helpUri":"https://codehealth.canine.dev/dimensions/X9"}]}},"results":[{"ruleId":"D1","level":"warning","message":{"text":"interop::bin::client::main (cyclomatic 20): interop::bin::client::main 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":"interop/src/bin/client.rs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"da2126d4cd8135583f0061b954b45092c80553602defed0bbdd83831426d7271"}},{"ruleId":"D1","level":"warning","message":{"text":"Builder::compile_with_config (cyclomatic 19): Builder::compile_with_config has cyclomatic complexity 19 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-prost-build/src/lib.rs"},"region":{"startLine":753}}}],"partialFingerprints":{"codehealthFindingId/v1":"9bd0343411648b28e5e63fb6ec0154a4ae2941c86be286cdd5fd0fe64183e457"}},{"ruleId":"D1","level":"warning","message":{"text":"Builder::compile_fds_with_config (cyclomatic 18): Builder::compile_fds_with_config has cyclomatic complexity 18 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-prost-build/src/lib.rs"},"region":{"startLine":875}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3b11106e2086765b9adbe14bd4f8e6b2f567de325a16d444751146555a8afae"}},{"ruleId":"D1","level":"warning","message":{"text":"GrpcWebCall::poll_frame (cyclomatic 18): GrpcWebCall::poll_frame 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":"tonic-web/src/call.rs"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"95a76cacb6125d78538ee707931e92554a95052455eaa3711fef16ad5e176521"}},{"ruleId":"D1","level":"warning","message":{"text":"TonicBuildMethod::request_response_name (cyclomatic 17): TonicBuildMethod::request_response_name has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-prost-build/src/lib.rs"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"4484cbf366b9143dff48d759bc119580311ce55c9ae886688e5d1f336bba958d"}},{"ruleId":"D1","level":"warning","message":{"text":"CodeGen::compile (cyclomatic 16): CodeGen::compile has cyclomatic complexity 16 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc-protobuf-build/src/lib.rs"},"region":{"startLine":322}}}],"partialFingerprints":{"codehealthFindingId/v1":"93fe80f0f31a853798c141e7e201bb9b1f78218ad887f259090a09af594fdda4"}},{"ruleId":"D1","level":"warning","message":{"text":"TlsConnector::new (cyclomatic 16): TlsConnector::new has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic/src/transport/channel/service/tls.rs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"05289b222e7208350d4d1833bf5675a5b5998b6fd8706617b3a7eaea57436124"}},{"ruleId":"D1","level":"warning","message":{"text":"AdsWorker::add_watcher (cyclomatic 16): AdsWorker::add_watcher 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":"xds-client/src/client/worker.rs"},"region":{"startLine":895}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d95387d19eee91553c1749d75a35dde22796f1bf8b22d2318b8c0f4e8acf17f"}},{"ruleId":"D2","level":"warning","message":{"text":"AdsWorker::add_watcher (cognitive 40): AdsWorker::add_watcher has cognitive complexity 40 (threshold 15). Drivers by points: if/else 9 (20 pts), match/switch 4 (13 pts), loops 2 (7 pts) (nesting depth added 25). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This file is where this pass\u0027s cognitive complexity CONCENTRATES: xds-client/src/client/worker.rs holds 4 of the 20 functions over the threshold \u2014 including the worst \u2014 and 43 of the 139 points over it (31%), 2.3\u00D7 the next-largest file (tonic/src/codec/decode.rs at 19). No single row can show this, because each is measured only against the threshold: reducing this one file moves this dimension further than any other file in the repository."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"xds-client/src/client/worker.rs"},"region":{"startLine":895}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7baab242718b219d0848580c44618929fcd5ba4b8659c94987c8b44491bd071"}},{"ruleId":"D2","level":"warning","message":{"text":"StreamingInner::decode_chunk (cognitive 34): StreamingInner::decode_chunk has cognitive complexity 34 (threshold 15). Drivers by points: if/else 15 (31 pts), match/switch 1 (2 pts), boolean chains 1 (nesting depth added 17). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic/src/codec/decode.rs"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fc69036642f4182fd3c84cf52b03d580aeb44ad44698c7d4d2d5c5783a31a51"}},{"ruleId":"D2","level":"warning","message":{"text":"GrpcWebCall::poll_frame (cognitive 29): GrpcWebCall::poll_frame has cognitive complexity 29 (threshold 15). Drivers by points: match/switch 6 (19 pts), if/else 4 (7 pts), loops 1 (2 pts), boolean chains 1 (nesting depth added 17). 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":"tonic-web/src/call.rs"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f99b5c10925b32e0538ca401091d47cd9a11ab5585e2f033cd6727c63c564d5"}},{"ruleId":"D2","level":"warning","message":{"text":"AdsWorker::run (cognitive 27): AdsWorker::run has cognitive complexity 27 (threshold 15). Drivers by points: match/switch 8 (16 pts), if/else 3 (6 pts), loops 3 (5 pts) (nesting depth added 13). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident. This file is where this pass\u0027s cognitive complexity CONCENTRATES: xds-client/src/client/worker.rs holds 4 of the 20 functions over the threshold \u2014 including the worst \u2014 and 43 of the 139 points over it (31%), 2.3\u00D7 the next-largest file (tonic/src/codec/decode.rs at 19). No single row can show this, because each is measured only against the threshold: reducing this one file moves this dimension further than any other file in the repository."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"xds-client/src/client/worker.rs"},"region":{"startLine":625}}}],"partialFingerprints":{"codehealthFindingId/v1":"e75f49af6664fe65b2219e045b50aceb23401f36deb7b56c8dd400404ffa11fc"}},{"ruleId":"D2","level":"warning","message":{"text":"EndpointsResource::validate (cognitive 24): EndpointsResource::validate has cognitive complexity 24 (threshold 15). Drivers by points: if/else 9 (20 pts), loops 3 (4 pts) (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc-xds/src/resource/endpoint.rs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"913866db6e7748728233842fbc2bbc39014782b0cdbaf7af00c701026d197fd4"}},{"ruleId":"D2","level":"warning","message":{"text":"grpc_benchmark::client::blocking_streaming (cognitive 22): grpc_benchmark::client::blocking_streaming has cognitive complexity 22 (threshold 15). Drivers by points: if/else 8 (21 pts), loops 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc-benchmark/src/client.rs"},"region":{"startLine":384}}}],"partialFingerprints":{"codehealthFindingId/v1":"713b709080f25d65d61a6da9756e1904ab97c3b7433e929ba5069afd69034cea"}},{"ruleId":"D2","level":"warning","message":{"text":"CodeGen::compile (cognitive 21): CodeGen::compile has cognitive complexity 21 (threshold 15). Drivers by points: loops 7 (12 pts), if/else 9 (nesting depth added 5). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc-protobuf-build/src/lib.rs"},"region":{"startLine":322}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9cc5521a2833f78e141a8affc385a2f2ed5bc8b38d59c7dd9408e684d84a9bf"}},{"ruleId":"D2","level":"warning","message":{"text":"TlsConnector::new (cognitive 21): TlsConnector::new has cognitive complexity 21 (threshold 15). Drivers by points: if/else 8 (15 pts), match/switch 3, loops 1 (2 pts), boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic/src/transport/channel/service/tls.rs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce7c1fbd374e798ff2cbabd67c1b5745307ce2f9f43b98558952ecd6d2cca4f4"}},{"ruleId":"D2","level":"warning","message":{"text":"grpc::client::transport::http_connect::do_connect_handshake (cognitive 20): grpc::client::transport::http_connect::do_connect_handshake has cognitive complexity 20 (threshold 15). Drivers by points: if/else 8 (17 pts), match/switch 1 (2 pts), loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc/src/client/transport/http_connect/mod.rs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"c089adc748fec448957e88877669ff60bdc0b2c2179615d5a778c89181ee7e81"}},{"ruleId":"D2","level":"warning","message":{"text":"grpc_benchmark::client::blocking_unary (cognitive 20): grpc_benchmark::client::blocking_unary has cognitive complexity 20 (threshold 15). Drivers by points: if/else 7 (19 pts), loops 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc-benchmark/src/client.rs"},"region":{"startLine":338}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e3fc23dd8bef9e248f1249005eddd3755f13656806f49185d3a18c6c1432ace"}},{"ruleId":"D2","level":"warning","message":{"text":"TonicBuildMethod::request_response_name (cognitive 20): TonicBuildMethod::request_response_name has cognitive complexity 20 (threshold 15). Drivers by points: if/else 10 (12 pts), boolean chains 4, match/switch 2 (4 pts) (nesting depth added 4). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-prost-build/src/lib.rs"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"abc945408d865be8ea1e607e513a5d0a025e2bce394bd49b248651adf5f11265"}},{"ruleId":"D2","level":"warning","message":{"text":"Reconnect::poll_ready (cognitive 19): Reconnect::poll_ready has cognitive complexity 19 (threshold 15). Drivers by points: match/switch 4 (11 pts), if/else 3 (6 pts), boolean chains 1, loops 1 (nesting depth added 10). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic/src/transport/channel/service/reconnect.rs"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"bda3a6f1b318645f9e648ab32f0f844d897c1477a7b9b1ff7bcf14c29dcb6ff1"}},{"ruleId":"D2","level":"warning","message":{"text":"Builder::compile_with_config (cognitive 19): Builder::compile_with_config has cognitive complexity 19 (threshold 15). Drivers by points: if/else 11, loops 7, boolean chains 1. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-prost-build/src/lib.rs"},"region":{"startLine":753}}}],"partialFingerprints":{"codehealthFindingId/v1":"132402348be5d8301d8fbe07c3faacf9e64cd830064e0497c762853c480003d6"}},{"ruleId":"D2","level":"warning","message":{"text":"AdsWorker::run_stream_task (cognitive 19): AdsWorker::run_stream_task has cognitive complexity 19 (threshold 15). Drivers by points: if/else 3 (10 pts), match/switch 3 (8 pts), loops 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This file is where this pass\u0027s cognitive complexity CONCENTRATES: xds-client/src/client/worker.rs holds 4 of the 20 functions over the threshold \u2014 including the worst \u2014 and 43 of the 139 points over it (31%), 2.3\u00D7 the next-largest file (tonic/src/codec/decode.rs at 19). No single row can show this, because each is measured only against the threshold: reducing this one file moves this dimension further than any other file in the repository."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"xds-client/src/client/worker.rs"},"region":{"startLine":803}}}],"partialFingerprints":{"codehealthFindingId/v1":"9af5fc0cce826fbbb7053461048fa369894a7b7196880156b651cfb80bddad3f"}},{"ruleId":"D2","level":"warning","message":{"text":"grpc_xds::resource::route::validate_route_action (cognitive 18): grpc_xds::resource::route::validate_route_action has cognitive complexity 18 (threshold 15). Drivers by points: if/else 6 (15 pts), loops 1 (2 pts), match/switch 1 (nesting depth added 10). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc-xds/src/resource/route.rs"},"region":{"startLine":443}}}],"partialFingerprints":{"codehealthFindingId/v1":"0dff0a8f64a4b88cf8e4170f2ae47d6994d379b423331407a0a0027cf8fa1982"}},{"ruleId":"D2","level":"warning","message":{"text":"interop::bin::client::main (cognitive 18): interop::bin::client::main has cognitive complexity 18 (threshold 15). Drivers by points: if/else 7 (12 pts), loops 2 (3 pts), match/switch 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":"interop/src/bin/client.rs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"10552efa4a883d102988ed5abb30cee425a7180eea43f6a50058edfb7cd512e6"}},{"ruleId":"D2","level":"warning","message":{"text":"Builder::compile_fds_with_config (cognitive 18): Builder::compile_fds_with_config has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10, loops 7, boolean chains 1. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-prost-build/src/lib.rs"},"region":{"startLine":875}}}],"partialFingerprints":{"codehealthFindingId/v1":"efdd9ad198361fe06918bfd2a86d5ded60bbf526117cbaf4dd3fbc633a4e99a5"}},{"ruleId":"D2","level":"warning","message":{"text":"UnencodedHeaderValue::fmt (cognitive 17): UnencodedHeaderValue::fmt has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (14 pts), loops 1 (2 pts), boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc/src/metadata/value.rs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"93ac3bfdd50e13e3686f968d3399ccbf114ab0b21e02943ef7cac17b3eb6b5c8"}},{"ruleId":"D2","level":"warning","message":{"text":"AdsWorker::run_connected (cognitive 17): AdsWorker::run_connected has cognitive complexity 17 (threshold 15). Drivers by points: if/else 2 (8 pts), match/switch 3 (8 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. This file is where this pass\u0027s cognitive complexity CONCENTRATES: xds-client/src/client/worker.rs holds 4 of the 20 functions over the threshold \u2014 including the worst \u2014 and 43 of the 139 points over it (31%), 2.3\u00D7 the next-largest file (tonic/src/codec/decode.rs at 19). No single row can show this, because each is measured only against the threshold: reducing this one file moves this dimension further than any other file in the repository."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"xds-client/src/client/worker.rs"},"region":{"startLine":758}}}],"partialFingerprints":{"codehealthFindingId/v1":"166172a1593a331e3d46cf218fcc2a0ad72c2faf6f08b96e7e4ba402fca3396d"}},{"ruleId":"D2","level":"warning","message":{"text":"BenchmarkClient::start (cognitive 16): BenchmarkClient::start has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8 (11 pts), match/switch 4, loops 1 (nesting depth added 3). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc-benchmark/src/client.rs"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0889ba23b56405516a00ced0350b03ca5f07e1ec5f1bd3fd4b566ce1fecd5dc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: client/worker.rs: FileTooLong \u2014 775 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 65% of them inside a single declaration: AdsWorker (2 blocks, 547-1451). The bar is 500 significant lines; this is 275 over it, 1.55\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"xds-client/src/client/worker.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0d2e3951b3b0f7abd29921c5faa41f2fd9f972f4e8939eca8c3d7a83009f41e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: metadata/map.rs: FileTooLong \u2014 740 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 240 over it, 1.48\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic/src/metadata/map.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebe16c99bf3f4aaa43061c9e53640cf893899eadefa906878d523feaf28c7f54"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: server/mod.rs: FileTooLong \u2014 723 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 223 over it, 1.45\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic/src/transport/server/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d711363587924781b9e555c5c32507214f270f601897e4069172b90bcf93229b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ErrorDetails: TooManyMethods \u2014 43 methods. The bar is 30 methods; this is 13 over it, 1.43\u00D7 the bar. This type is on a published API surface \u2014 a cargo-semver-checks gate in CI (.github/workflows/CI.yml) declares its compatibility contractual \u2014 so moving members onto a smaller type is a breaking change for every consumer, not a local refactor. To reduce it, treat the split as an API migration: move each cohesive group onto its own published type and keep the old members as deprecated forwards for a deprecation period, removing them at the next compatibility break. Where the surface has to stay as it is, that is a decision to record rather than a change to make."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-types/src/richer_error/error_details/mod.rs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"70a5f2f263a0b2a1e3a87d082b7deb5cd672dfb798f039b4a759d778328bf721"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: grpc_benchmark::bin::bench::main: FunctionTooLong \u2014 grpc_benchmark::bin::bench::main runs 143 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 43 over it, 1.43\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc-benchmark/src/bin/bench.rs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"05ac1545b9a7a1e6c7dc0d00d7fefe1ba50fe0b013542b30e7e7a09cdbb86e3b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Endpoint: TooManyMethods \u2014 42 methods. The bar is 30 methods; this is 12 over it, 1.40\u00D7 the bar. This type is on a published API surface \u2014 a cargo-semver-checks gate in CI (.github/workflows/CI.yml) declares its compatibility contractual \u2014 so moving members onto a smaller type is a breaking change for every consumer, not a local refactor. To reduce it, treat the split as an API migration: move each cohesive group onto its own published type and keep the old members as deprecated forwards for a deprecation period, removing them at the next compatibility break. Where the surface has to stay as it is, that is a decision to record rather than a change to make."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic/src/transport/channel/endpoint.rs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"21c932e2f7c4146cc5588346d7ba8f428f7fbc83decb0ceefe7cbb49a7aac037"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: AdsWorker: ClassTooLong \u2014 506 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 18 methods, 2 blocks, lines 547-1451. The bar is 400 significant lines; this is 106 over it, 1.27\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"xds-client/src/client/worker.rs"},"region":{"startLine":547}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a28c297645193ee23e2d363b23928d00b3953bad702be214b93f91b71c2e022"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: tonic_build::server::generate_internal: FunctionTooLong \u2014 tonic_build::server::generate_internal runs 123 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 23 over it, 1.23\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-build/src/server.rs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"32a8ad98af22d1dd25d14cf0688a447e2db019d5dc74eb86256e9094ff825305"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Builder: TooManyMethods \u2014 36 methods. The bar is 30 methods; this is 6 over it, 1.20\u00D7 the bar. This type is on a published API surface \u2014 a cargo-semver-checks gate in CI (.github/workflows/CI.yml) declares its compatibility contractual \u2014 so moving members onto a smaller type is a breaking change for every consumer, not a local refactor. To reduce it, treat the split as an API migration: move each cohesive group onto its own published type and keep the old members as deprecated forwards for a deprecation period, removing them at the next compatibility break. Where the surface has to stay as it is, that is a decision to record rather than a change to make."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-prost-build/src/lib.rs"},"region":{"startLine":424}}}],"partialFingerprints":{"codehealthFindingId/v1":"efcf725b06a82412c79eb71d5ae5d2f264ba501fb170a06ebcdb2d0f9b35a659"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: MetadataMap: TooManyMethods \u2014 33 methods. The bar is 30 methods; this is 3 over it, 1.10\u00D7 the bar. This type is on a published API surface \u2014 a cargo-semver-checks gate in CI (.github/workflows/CI.yml) declares its compatibility contractual \u2014 so moving members onto a smaller type is a breaking change for every consumer, not a local refactor. To reduce it, treat the split as an API migration: move each cohesive group onto its own published type and keep the old members as deprecated forwards for a deprecation period, removing them at the next compatibility break. Where the surface has to stay as it is, that is a decision to record rather than a change to make."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic/src/metadata/map.rs"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"042081bb76e34b9bafbf97b55285f67aec3e06d7e0fe9dec910438f695e0b26b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Server: TooManyMethods \u2014 33 methods. The bar is 30 methods; this is 3 over it, 1.10\u00D7 the bar. This type is on a published API surface \u2014 a cargo-semver-checks gate in CI (.github/workflows/CI.yml) declares its compatibility contractual \u2014 so moving members onto a smaller type is a breaking change for every consumer, not a local refactor. To reduce it, treat the split as an API migration: move each cohesive group onto its own published type and keep the old members as deprecated forwards for a deprecation period, removing them at the next compatibility break. Where the surface has to stay as it is, that is a decision to record rather than a change to make."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic/src/transport/server/mod.rs"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"77abcd9944b93ab6c9ae9e30eef9557e1c298597f9ca32c971ed2fb1e405918d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 545 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 45 over it, 1.09\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-prost-build/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b684387792b5bd51dc57175406cd3b7bac2ec0c8d039ddcffd2c536527b0922"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: BenchmarkClient.start: MethodTooLong \u2014 start runs 101 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 1 over it, 1.01\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc-benchmark/src/client.rs"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4b0eac1bdce7421f707d1e251cefc2c7908120f7faffd359e7bde868218ec82"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member family (4 members, 29 shared lines): tonic-build/src/server.rs:470-519 | tonic-build/src/server.rs:529-586 | tonic-build/src/server.rs:595-644 | tonic-build/src/server.rs:654-712 \u2014 These 4 members are variants of one another: a block of 29 lines reported below appears in every one of them, and the pairwise near-duplicate rows they would otherwise produce are collapsed into this row. Read them as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-build/src/server.rs"},"region":{"startLine":470}}}],"partialFingerprints":{"codehealthFindingId/v1":"9872287181085309345145e526541ef8e403e236481e1e7c38b7e5b6dcfeef04"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (70 corresponding lines): tonic-reflection/src/server/v1.rs:53-122 | tonic-reflection/src/server/v1alpha.rs:53-122 \u2014 These two members are one piece of code written twice and then edited apart: 70 consecutive lines correspond almost exactly, broken only by small local edits. Most of that correspondence is NOT reported as duplicated blocks below \u2014 the edits cut it into fragments and only the largest of them clear the block floor, so the rows below understate it. The repair is at the members\u0027 grain \u2014 factor the shared implementation into one the two call with their differences as parameters or as an injected step, or, where the difference is systematic (an extra return value, one transport against another), generate one from the other. Left alone, the next edit has to be made twice and the two will drift further apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-reflection/src/server/v1.rs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ea07d21e10d5fd86d2b0fcb7f4831eba5b606235a3870f0d54d21d63a5c64a8"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (35 corresponding lines): grpc-protobuf/src/server/server_streaming.rs:91-129 | grpc-protobuf/src/server/unary.rs:94-149 \u2014 These two members are one piece of code written twice and then edited apart: 35 consecutive lines correspond almost exactly, broken only by small local edits. Most of that correspondence is NOT reported as duplicated blocks below \u2014 the edits cut it into fragments and only the largest of them clear the block floor, so the rows below understate it. The repair is at the members\u0027 grain \u2014 factor the shared implementation into one the two call with their differences as parameters or as an injected step, or, where the difference is systematic (an extra return value, one transport against another), generate one from the other. Left alone, the next edit has to be made twice and the two will drift further apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc-protobuf/src/server/server_streaming.rs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"97592faa06e6d3aa395d8077b3b2286502f74acb24046ceedec17a1e81fe03eb"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): tonic-build/src/client.rs:251-274 | tonic-build/src/client.rs:282-305 | tonic-build/src/client.rs:313-336 | tonic-build/src/client.rs:344-367 \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":"tonic-build/src/client.rs"},"region":{"startLine":251}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5e2a0888f49b03f8e349b49a6517ec0aeab24defaa49cac74b1b5974f219c42"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (43 lines \u00D7 2): tonic-prost-build/src/lib.rs:782-824 | tonic-prost-build/src/lib.rs:888-930 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-prost-build/src/lib.rs"},"region":{"startLine":782}}}],"partialFingerprints":{"codehealthFindingId/v1":"b59e22a93c7ac2b9d0667954cd8017fbf8c70fa4d6d36e6ef72301ee817bc747"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (31 lines \u00D7 2): grpc-protobuf/src/server/server_streaming.rs:94-124 | grpc-protobuf/src/server/unary.rs:100-130 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc-protobuf/src/server/server_streaming.rs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"d444bdaaabf4284b359235e0c4db17c90dbbd42b8537e6cdca2e503d955fc308"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (29 lines \u00D7 2): tonic-prost-build/src/lib.rs:834-862 | tonic-prost-build/src/lib.rs:936-964 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-prost-build/src/lib.rs"},"region":{"startLine":834}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d613303a5ace2db4ff84a8edc1dd202d42d9dfaf1f68f7490f0baad83be1e0c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): grpc/src/metadata/map.rs:1056-1081 | grpc/src/metadata/map.rs:1105-1130 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc/src/metadata/map.rs"},"region":{"startLine":1056}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c34cedfd876e0ce47bbb9badc7e0bd8454a95086e485c40ee5f301a09f0dd07"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): tonic/src/transport/channel/endpoint.rs:109-134 | tonic/src/transport/channel/endpoint.rs:140-165 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic/src/transport/channel/endpoint.rs"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cae71fbf60ab2ba1b427779aea6fe8854a0c1138672549c17a930c4616c576e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22\u201323 lines \u00D7 2): grpc-benchmark/src/client.rs:350-372 | grpc-benchmark/src/client.rs:398-419 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc-benchmark/src/client.rs"},"region":{"startLine":350}}}],"partialFingerprints":{"codehealthFindingId/v1":"adcbf00d3062103ce1d39f7af2ebd89332619e12b6cdaf37e61c6266b914ec2f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 4): tonic-build/src/server.rs:492-511 | tonic-build/src/server.rs:559-578 | tonic-build/src/server.rs:617-636 | tonic-build/src/server.rs:685-704 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-build/src/server.rs"},"region":{"startLine":492}}}],"partialFingerprints":{"codehealthFindingId/v1":"426a06e07ee390ac07f4b4261cc0c462db963fdf3463bc5ea8b012e1e84a26ef"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): grpc-protobuf/src/status.rs:137-156 | grpc/src/status/status_code.rs:151-170 \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":"grpc-protobuf/src/status.rs"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"83f6ba6228938d2c7bb087a31515ea49401bb27c4a9a21863f1f2ea4270b258c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): tonic-build/src/server.rs:532-551 | tonic-build/src/server.rs:657-676 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-build/src/server.rs"},"region":{"startLine":532}}}],"partialFingerprints":{"codehealthFindingId/v1":"74a6248c15ae9b4fee35566dd77618f63e8bad59dd1ce0e560257747e69faa10"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): tonic/src/transport/server/incoming.rs:196-213 | tonic/src/transport/server/incoming.rs:219-236 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic/src/transport/server/incoming.rs"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"54b558b38c78a0eb003f4330ec303294ddcd5673de767ef947909f6fc6b8d893"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): tonic-reflection/src/server/v1.rs:107-122 | tonic-reflection/src/server/v1alpha.rs:107-122 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-reflection/src/server/v1.rs"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"b11c758d109f743a29b14fe3e72132b5139735ed59603a5fad14423a9096e7f9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201315 lines \u00D7 2): grpc-protobuf/src/server/client_streaming.rs:96-106 | grpc-protobuf/src/server/unary.rs:135-149 \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":"grpc-protobuf/src/server/client_streaming.rs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"943ab4e337db89d4ea1adba9ac7f4b3a091f4350f0b08de3126483d2e5ba72da"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13\u201314 lines \u00D7 2): grpc-benchmark/src/client.rs:247-260 | grpc-benchmark/src/server.rs:145-157 \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":"grpc-benchmark/src/client.rs"},"region":{"startLine":247}}}],"partialFingerprints":{"codehealthFindingId/v1":"13a6f3cf03dc695eb2998d7f88a8a906562af8a86b2c7eadcb20a9e43c9bd24d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): tonic/src/server/grpc.rs:270-283 | tonic/src/server/grpc.rs:344-357 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic/src/server/grpc.rs"},"region":{"startLine":270}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a5f56c7ead513c931cc428810e259f956efc6a22e8a415586654c144efa15aa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): tonic-reflection/src/server/v1.rs:54-66 | tonic-reflection/src/server/v1alpha.rs:54-66 \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":"tonic-reflection/src/server/v1.rs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2dfbf7a70978026fd79ef2f778b9b383ffdb1cd96c555e212d88e15d2f95e12"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201312 lines \u00D7 2): grpc/src/client/load_balancing/child_manager.rs:258-268 | grpc/src/client/load_balancing/child_manager.rs:290-301 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc/src/client/load_balancing/child_manager.rs"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"506e629b0233cfb92c5f908770628df00bde5392810f3e105325b3357aec8c94"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): tonic-build/src/manual.rs:409-420 | tonic-build/src/manual.rs:423-434 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-build/src/manual.rs"},"region":{"startLine":409}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f96d2d405af0cc1138ad9488f3a1fe29c72205f17d88e5372c7a65741c8def8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): xds-client/src/client/worker.rs:1328-1339 | xds-client/src/client/worker.rs:1355-1366 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"xds-client/src/client/worker.rs"},"region":{"startLine":1328}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a4876180ebbb25a03413193be96f6592aa5426f8b6fc787aa10db66b04e8457"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): grpc/src/codec/compression/gzip.rs:102-112 | grpc/src/codec/compression/gzip.rs:163-173 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc/src/codec/compression/gzip.rs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"da6fd655231b087b73453f952168068381b04ba7e70ff5eb3451771f55fbfb1b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): tonic-build/src/server.rs:335-345 | tonic-build/src/server.rs:360-370 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-build/src/server.rs"},"region":{"startLine":335}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fbdffd2d72eedf2f7a2f0e4b836af0f7247f5da852b7d07c745823080e9b822"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): tonic/src/status.rs:876-885 | tonic/src/status.rs:904-913 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic/src/status.rs"},"region":{"startLine":876}}}],"partialFingerprints":{"codehealthFindingId/v1":"49c94a4c51707742eb0021895ac583693fc40f08fc73e304e4b229ab3819aa2a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u201310 lines \u00D7 2): tonic-build/src/client.rs:56-63 | tonic-build/src/server.rs:70-79 \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":"tonic-build/src/client.rs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"bac7df2e9a196b207c67c861b42aaf1de1a21a2877cc64284655834b60dbe435"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): xds-client/src/client/worker.rs:658-667 | xds-client/src/client/worker.rs:670-679 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"xds-client/src/client/worker.rs"},"region":{"startLine":658}}}],"partialFingerprints":{"codehealthFindingId/v1":"7351a965838526fa1c1932c6a88ee674326b1c29560e61403fdeedac71b90145"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): xds-client/src/client/worker.rs:1056-1065 | xds-client/src/client/worker.rs:1337-1346 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"xds-client/src/client/worker.rs"},"region":{"startLine":1056}}}],"partialFingerprints":{"codehealthFindingId/v1":"4653b2df3fff28b7d96cfe06c6fa6d97f42995b28ec59032f812e23a33aba7ef"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 4): tonic-build/src/server.rs:477-485 | tonic-build/src/server.rs:543-551 | tonic-build/src/server.rs:601-609 | tonic-build/src/server.rs:668-676 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-build/src/server.rs"},"region":{"startLine":477}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4692f20d1ac44367e8b9aeb4c480c26a24529721a65034ec8595547aaf14ae8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): grpc/src/credentials/rustls/server/mod.rs:257-265 | grpc/src/credentials/rustls/server/mod.rs:271-279 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc/src/credentials/rustls/server/mod.rs"},"region":{"startLine":257}}}],"partialFingerprints":{"codehealthFindingId/v1":"47d5bdea2390dabd17809d9fe57f86c66a82d293369d8e4cd1e97367811dde8a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 4): tonic-build/src/client.rs:254-261 | tonic-build/src/client.rs:285-292 | tonic-build/src/client.rs:316-323 | tonic-build/src/client.rs:347-354 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-build/src/client.rs"},"region":{"startLine":254}}}],"partialFingerprints":{"codehealthFindingId/v1":"b36992e672900963df0655fb1c65286e87fd8315a8e67c9432a635a9378fd5ce"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): grpc/src/client/subchannel.rs:125-131 | grpc/src/client/subchannel.rs: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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc/src/client/subchannel.rs"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ece50d7c40187eec6297a16ffa8ee49ccbe1702d8471cffbfcbd6e05860b51b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): tonic-build/src/client.rs:265-270 | tonic-build/src/client.rs:296-301 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-build/src/client.rs"},"region":{"startLine":265}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc2e74365f86057f5dd46c2b1127903d76bbd547a0074c9a121a28bb5dc35d2d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): tonic-build/src/server.rs:471-475 | tonic-build/src/server.rs:530-534 | tonic-build/src/server.rs:655-659 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-build/src/server.rs"},"region":{"startLine":471}}}],"partialFingerprints":{"codehealthFindingId/v1":"40fa4b240c148afc946b7d20cbc4d24242d260f356fdecf71d64180be9bd854a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): tonic-build/src/client.rs:327-331 | tonic-build/src/client.rs:358-362 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-build/src/client.rs"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"24ed1cbd991af37b45888bfc64a5adfade25b62317eeb5d94b27c72ed9a1a5e1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): grpc/src/client/load_balancing/lazy.rs:174-179 | grpc/src/client/load_balancing/pick_first.rs:681-686 \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":"grpc/src/client/load_balancing/lazy.rs"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d92412dada9d8ee62054ae08669477f8346032e95628e10d49df1a693423678"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): grpc/src/client/load_balancing/mod.rs:489-495 | grpc/src/client/load_balancing/pick_first.rs:656-662 \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":"grpc/src/client/load_balancing/mod.rs"},"region":{"startLine":489}}}],"partialFingerprints":{"codehealthFindingId/v1":"225d553115c9d176de349a460baa37a321d9b8a481d032c9540d1f90c801298f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): grpc/src/client/name_resolution/unix.rs:46-51 | grpc/src/client/name_resolution/unix_abstract.rs:46-51 \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":"grpc/src/client/name_resolution/unix.rs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"888c6718112fd12f4afbba4dc20ce3a4890d43643e2849eb787204a47e239211"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): grpc/src/credentials/rustls/client/mod.rs:139-150 | grpc/src/credentials/rustls/server/mod.rs:229-240 \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":"grpc/src/credentials/rustls/client/mod.rs"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"7331f9326c922471a8594d253739381f4b71ac574425336eea643c826d765ce4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): grpc-xds/src/resource/endpoint.rs:302-312 | tonic-xds/src/xds/resource/endpoints.rs:199-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":"grpc-xds/src/resource/endpoint.rs"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1f41fdf75350ff249299664bb5970e867b8a57f2f000915272c2e92476912a3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): grpc-xds/src/resource/listener.rs:153-158 | tonic-xds/src/xds/resource/listener.rs:119-124 \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":"grpc-xds/src/resource/listener.rs"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c32911497894fea13e5bfb26c0356398a47874d112508378f9d169bdae0495f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): interop/src/bin/client.rs:58-64 | interop/src/bin/server.rs:48-54 \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":"interop/src/bin/client.rs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c3a20f635cd1044ad44c3d735e5d457d7edb5825b21c0bc045a379c5ed8ba68"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): grpc/src/metadata/key.rs:126-136 | tonic/src/metadata/key.rs:126-136 \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":"grpc/src/metadata/key.rs"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1a98d1f4a33621d030d700479d8bbcba4a84fb3d2bb79b194f9f309a34c50d0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): grpc-protobuf/src/client/bidi.rs:91-98 | grpc-protobuf/src/client/client_streaming.rs:103-110 \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":"grpc-protobuf/src/client/bidi.rs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"d75b9789cc2ca2bc35a291b3bfeeb4453fefb831c5171925272305c7c5533eb2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): grpc-protobuf/src/client/server_streaming.rs:94-102 | grpc-protobuf/src/client/unary.rs:122-130 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc-protobuf/src/client/server_streaming.rs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"94acc9195f58c9f4aaf9ac8008b519eaa99b6a01890f173caba1d1699af6ae20"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): tonic/src/body.rs:105-110 | tonic/src/service/interceptor.rs:278-283 \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":"tonic/src/body.rs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"af18acd1c9825b893f6287b9ca8d7c056e2df7a30529bb959db193feeaf417f8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): tonic-types/src/richer_error/std_messages/bad_request.rs:110-118 | tonic-types/src/richer_error/std_messages/quota_failure.rs:128-136 \u2014 before extracting anything, compare \u0060tonic-types/src/richer_error/std_messages/bad_request.rs\u0060 and \u0060tonic-types/src/richer_error/std_messages/quota_failure.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 31 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-types/src/richer_error/std_messages/bad_request.rs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"66807820d901c26abb170f1477bb18bc1f9b6f1d4b901cb57005f095269501bb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): tonic-types/src/richer_error/std_messages/bad_request.rs:125-132 | tonic-types/src/richer_error/std_messages/quota_failure.rs:143-150 \u2014 before extracting anything, compare \u0060tonic-types/src/richer_error/std_messages/bad_request.rs\u0060 and \u0060tonic-types/src/richer_error/std_messages/quota_failure.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 31 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-types/src/richer_error/std_messages/bad_request.rs"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"be8e90feedfa0384e21684f7ff117c57a3f214b214e37fa9c3184cd071714599"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 10): tonic-types/src/richer_error/std_messages/bad_request.rs:142-149 | tonic-types/src/richer_error/std_messages/debug_info.rs:65-72 | tonic-types/src/richer_error/std_messages/error_info.rs:81-88 | tonic-types/src/richer_error/std_messages/help.rs:123-130 | tonic-types/src/richer_error/std_messages/loc_message.rs:69-76 | tonic-types/src/richer_error/std_messages/prec_failure.rs:147-154 | tonic-types/src/richer_error/std_messages/quota_failure.rs:160-167 | tonic-types/src/richer_error/std_messages/request_info.rs:68-75 | tonic-types/src/richer_error/std_messages/resource_info.rs:81-88 | tonic-types/src/richer_error/std_messages/retry_info.rs:80-87 \u2014 before extracting anything, compare \u0060tonic-types/src/richer_error/std_messages/bad_request.rs\u0060 and \u0060tonic-types/src/richer_error/std_messages/quota_failure.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 31 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-types/src/richer_error/std_messages/bad_request.rs"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e95ff0ba33e53bebdb8c4f8d9de28a5ffbd0c29fec7f246290073650514ca9f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 10): tonic-types/src/richer_error/std_messages/bad_request.rs:160-165 | tonic-types/src/richer_error/std_messages/debug_info.rs:83-88 | tonic-types/src/richer_error/std_messages/error_info.rs:99-104 | tonic-types/src/richer_error/std_messages/help.rs:141-146 | tonic-types/src/richer_error/std_messages/loc_message.rs:87-92 | tonic-types/src/richer_error/std_messages/prec_failure.rs:165-170 | tonic-types/src/richer_error/std_messages/quota_failure.rs:178-183 | tonic-types/src/richer_error/std_messages/request_info.rs:86-91 | tonic-types/src/richer_error/std_messages/resource_info.rs:99-104 | tonic-types/src/richer_error/std_messages/retry_info.rs:98-103 \u2014 before extracting anything, compare \u0060tonic-types/src/richer_error/std_messages/bad_request.rs\u0060 and \u0060tonic-types/src/richer_error/std_messages/quota_failure.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 31 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-types/src/richer_error/std_messages/bad_request.rs"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7f27853755cddb7ec01ffe7b40a37c0179aa42782ca1bf9cbbc8262a056488f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): codegen/src/main.rs:51-63 | codegen/src/main.rs:65-75 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"codegen/src/main.rs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"500bf1535c0ec8c0bc59800e1cf611a591999c46a001d741b640ae988e5cdba5"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: tonic-build: tonic-build: abstractness 0.20, instability 0.00, distance 0.80 \u2014 zone of pain \u2014 concrete and depended on by 1 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"45b2448442497f49e65b17a690115cadc3817baf6147ddc8ea0e8ca7605bf074"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: tonic-prost: tonic-prost: abstractness 0.00, instability 0.20, distance 0.80 \u2014 zone of pain \u2014 concrete and depended on by 4 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"53ab7dcb92e665e03712bfbe38eae69aff6b7e87c7568091dd08be1721a26619"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: tonic: tonic: abstractness 0.20, instability 0.00, distance 0.80 \u2014 zone of pain \u2014 concrete and depended on by 8 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"3459ccb2b46da401249e317e54983435196685398be8923eb2bba886be0222b1"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: xds-client: xds-client: abstractness 0.21, instability 0.00, distance 0.79 \u2014 zone of pain \u2014 concrete and depended on by 3 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"b252a435c73a362cc36e45eb9a6cc57e7cafcc5df4ca2e9f7db0088ed6169bdf"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: grpc-protobuf-build: grpc-protobuf-build: abstractness 0.00, instability 0.25, distance 0.75 \u2014 zone of pain \u2014 concrete and depended on by 3 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"658b94661ab14c09cd2a98f292428631d9c57aea8dc5c3c4b8d4d9501222bdd5"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: tonic-prost-build: tonic-prost-build: abstractness 0.00, instability 0.25, distance 0.75 \u2014 zone of pain \u2014 concrete and depended on by 3 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"3dba7e28dd2114409f64f69cc079d004e60130e41d3ef6eb60a728690fa15a98"}},{"ruleId":"D13","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e7c208832590bc0a210ba7de8b7fe59d7415b842b8bb69e5c4e557ceea8bd763"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D13","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"17121efec7f1def98a617a38908eabfb1dccfe2eb7a802e1fc2362863750a246"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D13","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"de8d581bcdf1dbfa489ab3be1541902b0207a7982d1871720fefb61980c1e4ff"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D13","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"740f3490da49f7c8e87b4455242068b7f2f3ca977c384245a7b077beac8bd40a"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D13","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"411af09e49e7043d4a87909e77cd990bd054ddddd2a0a463474c3fd7961fbd63"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D13","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5ea31e4d522c6e24ebdae2301a7b966dcb9f8e6ff0456884954a32a94bdd852b"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D13","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a6bb9a997a1265eb7f5f9101ba85a9cbd7f85b71b5d6670a5abf5bb12536ecd6"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D13","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"60bf8fe27c0f72a230ce59b5ee66e747f3a5565fdb89d93dfa550ba6387ca67e"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: xds-client/src/client/worker.rs: xds-client/src/client/worker.rs changed 7 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in AdsWorker::add_watcher at line 895. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-06-30..2026-09-28, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-30 09:08:08 -07:00\u0027 --until=\u00272026-09-28 09:08:08 -07:00\u0027 --full-history --no-merges -- xds-client/src/client/worker.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"xds-client/src/client/worker.rs"},"region":{"startLine":895}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c75d71c52f21e645354d6a8069111d8f6ce97df230592152f1dba7653e63711"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: interop/src/bin/client.rs: interop/src/bin/client.rs changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 20 in interop::bin::client::main at line 81. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-06-30..2026-09-28, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-30 09:08:08 -07:00\u0027 --until=\u00272026-09-28 09:08:08 -07:00\u0027 --full-history --no-merges -- interop/src/bin/client.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"interop/src/bin/client.rs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2e41ae0297787cea0522b7f15b42a5006005aa9cd45948b509e14d3bb3ad56b"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #1: If anonymized user #1 becomes unavailable, 13 significant file(s) lose their only recent owner: grpc-xds/src/resource/route.rs, grpc-xds/src/resource/endpoint.rs, grpc-xds/src/resource/cluster.rs, xds-client/src/codec/prost.rs, grpc-xds/src/resource/listener.rs, tonic-xds/src/xds/endpoint_manager.rs, xds-client/src/metrics.rs, xds-client/src/resource/mod.rs (\u002B5 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"fef5e8d99befac5ba9789f36e3517feb7d4887ed93b26e90a5df5fd1dfd29e69"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #2: If anonymized user #2 becomes unavailable, 6 significant file(s) lose their only recent owner: grpc-benchmark/src/client.rs, grpc-benchmark/src/server.rs, grpc-benchmark/src/worker.rs, grpc/src/client/transport/http_connect/mod.rs, grpc/src/credentials/rustls/tls_stream.rs, grpc-benchmark/src/main.rs. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"729acfd89cf4fec53ed68bf68114804761bb72e19c164a61370fdf44a97acedf"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #3: If anonymized user #3 becomes unavailable, 3 significant file(s) lose their only recent owner: grpc/src/codec/compression/gzip.rs, grpc/src/codec/compression/registry.rs, grpc/src/codec/compression.rs. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"34a8cb0b2b6be8620b0b31b8d686205008c0a0f43be6cf21f0d95508d8be3c2e"}},{"ruleId":"D16","level":"note","message":{"text":"Further sole-owners (lower concentration): 3 other contributor(s) are each the sole owner of a small amount of code below the off-boarding threshold \u2014 folded into the bus-factor score and metrics (26 single-owned of 248 analysed files in total, counted over production source files of roughly 2,400 bytes or more, excluding vendored, generated and example/demo trees and test files identified by path convention, largest first; 248 of the 291 production source files in this repository met that bar). They are anonymized user #4 (2 file(s)), anonymized user #5 (1 file(s)), anonymized user #6 (1 file(s)) \u2014 spread or document their files in the same way, at lower priority than the named off-boarding risks above."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6eac528f2429e724e1a97ed868f79eefbcf1888dab4af9a9e673429369bb5b2f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Use gRPC servers when available. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc-benchmark/build.rs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8a2ccd028db29348a5d052a7a19febd64cb05cc7aad3e028ff4562e2e17742d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Implement poisson load distribution when adding 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":"grpc-benchmark/src/client.rs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"47672ae7ffd076ee1d2e52429398e701e34c37df7b6c4293f58a429b9bad349a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Delay this check until the field is read in order to allow \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc-protobuf-build/src/lib.rs"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc20c830c34a96b60bdf1c8588769b25dd4a738ea9cdf4d2afc7ef4df8fe3f9c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: b/361751487: This .into() and .try_into() is only \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc-protobuf/generated/google/rpc/status.u.pb.rs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdfc558328bde9b0cc5277ca40752ccf406c84821d67a63d28164ebc932d5676"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: b/361751487: This .into() and .try_into() is only \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc-protobuf/generated/google/rpc/status.u.pb.rs"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"74df7ddbea711439d84019cc4c7266ba1d13c19d8710097ed0c01ff689f328cf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: b/361751487: This .into() and .try_into() is only \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc-protobuf/generated/google/rpc/status.u.pb.rs"},"region":{"startLine":358}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c59dd446b9ff54543f90692f0159a58fe054364db0dba7a5ca7e8b6fb57d60f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: b/361751487: This .into() is only 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":"grpc-protobuf/generated/google/rpc/status.u.pb.rs"},"region":{"startLine":231}}}],"partialFingerprints":{"codehealthFindingId/v1":"edcf507ba25582ea7af78b6427749457d786ef265a70278a7ac0f243ec2f05a4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: b/361751487: This .into() is only 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":"grpc-protobuf/generated/google/rpc/status.u.pb.rs"},"region":{"startLine":371}}}],"partialFingerprints":{"codehealthFindingId/v1":"6109e0cd1d53733626c35624b904a55f74c3e1c07e1fe89946563c363ecba7ea"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: reconsider this error handling; it will be sent to the client. But it may also never \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc-protobuf/src/trailers_conv.rs"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"d109f284def33ca22b2320fec97964206825df910ac7f1e1fd541255676ae2e7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: delete this type once MSRV is v1.92. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc-protobuf/src/lib.rs"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ab9f06451c3fe0fc420c3481e4c3500113b0764e112f1e74ce17a1c417e06f1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: delete this type once MSRV is v1.92. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc/src/send_future.rs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8e4cf43e30e67476da2b0d32b3b6bfb9ea2fab225fe8274d85925c3c05bb776"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Allocate both the request and response messages together in an \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc-protobuf/src/server/unary.rs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5da54a13a5b708c5006501e4ac5a2ea7f4cc98697dff98051d0ba395f1996ad"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove once the xDS dependency manager is implemented. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc-xds/src/xds_config.rs"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe1ed9dcbdd43c0beeb6b599ab45a4879bcf4b0a11f3b682fcc472add4554833"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: implement request routing components (virtual-host domain matching, then \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc-xds/src/resource/route.rs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb701e834862c37f9555bff7aedd8fd847e7c64a8ae7bb3d09196b18d47dd986"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove once dependency manager calls this. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc-xds/src/resource/route.rs"},"region":{"startLine":502}}}],"partialFingerprints":{"codehealthFindingId/v1":"06fabe815ef0346dcd58af6a2517171b4111d98ed1bee9f27e73fdb85063b0ab"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove once the xDS dependency manager subscribes to these resource \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc-xds/src/resource/mod.rs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"014b9ebc184590649a8941997c7e5efbc410464984a7204c1e744e3514f37d47"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: consider unifying with \u0060xds_client::message::Locality\u0060 (same \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc-xds/src/resource/endpoint.rs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0d85ffedfd3885c0f0cfed39a8563947989d8b719666270ae7f41af96862e04"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: reuse \u0060grpc::client::name_resolution::Address\u0060 when wiring resolver. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc-xds/src/resource/endpoint.rs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a07b8a2bbd6f616384ea41c76fee26af6c4bb0b936ea2dfdc086ab21acdbac7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: model \u0060transport_socket\u0060 (security) and load-balancing-policy \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc-xds/src/resource/cluster.rs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4491dd3c9ebe3fdff6974e9639bfdd9ea4e702886d477c2800cf5f3a75b0140"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(easwars): Move this somewhere else, where appropriate. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc/src/client/subchannel.rs"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"3108f8613e88ac4526af2c596c9ab00d98e1c83859621242639f83d41f8455a2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should 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":"grpc/src/client/subchannel.rs"},"region":{"startLine":335}}}],"partialFingerprints":{"codehealthFindingId/v1":"436a84c5644980e3dfa8dd7bfea372f1ac8d429d318e83652d691f4a14f28ac4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(easwars): Does it make sense for disconnected() to return an \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc/src/client/subchannel.rs"},"region":{"startLine":412}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4f747f57061f777f61187680fc64edb0bc3686f736241d8f52e5f9f6e9648e1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: make public once fields are fixed. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc/src/client/mod.rs"},"region":{"startLine":461}}}],"partialFingerprints":{"codehealthFindingId/v1":"82fe7f3e7edfb3156b306c05186af6a831d57ba25f2a2887c5054c3f53366157"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: make public once fields are fixed. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc/src/server/mod.rs"},"region":{"startLine":554}}}],"partialFingerprints":{"codehealthFindingId/v1":"1597f9f6a4a4cb4ad409611adae224eab9704ffdd3677a9788722db1c1323afd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(nathanielford) This construction is currently a rough-cut placeholder. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc/src/client/channel.rs"},"region":{"startLine":198}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d232aff67a94b4069d8e70c4637209146c15b51d48e64315230eec2fd59c992"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(nathanielford): Return errors here instead of panicking. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc/src/client/channel.rs"},"region":{"startLine":207}}}],"partialFingerprints":{"codehealthFindingId/v1":"c61dab152c67e2796d53a372a2c84c34110010b68fa790c2ed9e3a1b8856aa06"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Use an arc_swap::ArcSwap instead that contains T and a channel closed \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc/src/client/channel.rs"},"region":{"startLine":559}}}],"partialFingerprints":{"codehealthFindingId/v1":"82eff3c3e1fe6709ab18278606482d009ecb55f487c23297547a848aaee24db9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(easwars): Remove this and instead derive Debug. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc/src/client/load_balancing/test_utils.rs"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"a49e052f214558d865b999f0bab53a43c2c47ad9c3e0d71c62ff8f31ab1683c8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO: Consider whether this should really be public. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc/src/client/load_balancing/subchannel.rs"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7e02ed1c406828e7e7b5e2dcc1b2fe5f29af30e1feced315a90c587a290a47e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should steady_state be a \u0022mode\u0022 selector enum, e.g.: \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc/src/client/load_balancing/pick_first.rs"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"36d73a9fd86a3e60881353a3e52517a7a686cc10f38d0a74b0be6dbe183fcee3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: prevent redundant IDLE updates? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc/src/client/load_balancing/pick_first.rs"},"region":{"startLine":219}}}],"partialFingerprints":{"codehealthFindingId/v1":"a29f175db18f295c16d1cdfac2c3b4429834651a9611e487eda3734c958a7dce"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: avoid this update if we are in TF (i.e. sticky TF)? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc/src/client/load_balancing/pick_first.rs"},"region":{"startLine":260}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1bd1fe05ff28255ec0630d640c63a3845605bcb4c35df5407f42502d02f6425"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: set the last connection error?  Is it correct to do so, \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc/src/client/load_balancing/pick_first.rs"},"region":{"startLine":268}}}],"partialFingerprints":{"codehealthFindingId/v1":"1fd62de4d3ec480624417a44952ddab00eb94a2b7b64a8fef92b7955f31eef4e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: make error mandatory. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc/src/client/load_balancing/pick_first.rs"},"region":{"startLine":463}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ce3516fe1f5903e29073b1c25f9f70fde313c063199a812a14f6a63123b0caf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: is it safe to assume any call to work() while idle means we \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc/src/client/load_balancing/pick_first.rs"},"region":{"startLine":602}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce7cd716a38b6b228dc1af32532a296edc29d4e9301ef0630ec46cbc93095d9e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: implement me. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc/src/client/load_balancing/mod.rs"},"region":{"startLine":404}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca8d99bd60a52580082b2160b2b0dcf77f74ecfe4287b023c6b9793ccca59c03"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: implement me. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc/src/client/load_balancing/mod.rs"},"region":{"startLine":408}}}],"partialFingerprints":{"codehealthFindingId/v1":"42478f43ebff6aa9dc117d49d5c4da2fdef2ebc9910a4090cc3ffabadafa5df1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: log the error so it isn\u0027t completely lost. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc/src/client/load_balancing/lazy.rs"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"60cac001db7be0c7cb78b72682247d694fca9801f38a068a2f0ab30b534442d9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: The following options are specific to HTTP/2. We should \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc/src/client/transport/mod.rs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b34e89651840478573178451d555587b287f4739418a28edaa5d7bd25520812"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Evaluate defining custom buffer types instead of exposing \u0060bytes::Buf\u0060 and \u0060bytes::BufMut\u0060 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc/src/codec/compression.rs"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b5053b732919f29f57c0d12b7feee91c3f0e5a02a2eb77118ab54af00d58f66"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Evaluate defining custom buffer types instead of exposing \u0060bytes::Buf\u0060 and \u0060bytes::BufMut\u0060 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc/src/codec/compression.rs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"b08320a606c2c082b6e914318e3626ba0082fae3db19afdb7612ebbbd6151863"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Consider increasing the security level once gRPC supports \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc/src/credentials/local.rs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2242abc4df8dcb4e8eb58aaebd34844bc7fe03282fd0e248149339a24ee5fa7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: make attributes optional by removing from the constructor? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc/src/credentials/call.rs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"9cc4fe5c2f90aaf78646b7c63b3f43bea016a296c5617421e518bb20e33f69c3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Consider returning a \u0060ServeOutcome\u0060 enum (e.g. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc/src/server/mod.rs"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"0661863428aed52742a1d98fad753213bda15d82342ba3e3b0d0d7f9ac067105"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(sauravz): The shutdown signal is currently per-listener like tonic \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"grpc/src/server/mod.rs"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f441aae0b9fe8fa88646965b5163e7674b3c7c24946a12bc6b9f7b6a04ebe3a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //      TODO: this should expect Code::Internal instead. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/integration_tests/tests/status.rs"},"region":{"startLine":428}}}],"partialFingerprints":{"codehealthFindingId/v1":"f26ad207d8aee03eda9722b03b39ed51e5e47fd690c487a7b97c7c11371d5d7a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This should return OutOfRange \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/integration_tests/tests/max_message_size.rs"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a3fe17d71971fcb9a7139d6ff10c8fc580d9979f007bb9b7b981a83130572d8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //! TODO: wire dynamic outlier-detection config updates from xDS \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-xds/src/client/loadbalance/loadbalancer.rs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"573c91ac048198fbc71c11bb06977e803c61f46b23a51ce921fc5d611e35f72f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(madhurishgupta): Full A42 sizes the ring by each endpoint\u0027s \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-xds/src/client/loadbalance/pickers/ring_hash.rs"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"dac3b07c833bbcc3e78419d52ad98d4394b9838677ee84b9ad522281273cca7f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(madhurishgupta): populate hash policies from the route\u0027s RDS \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-xds/src/xds/routing.rs"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"dcdd44ad38323d43e6df029553b98b6a114d7234da9ab843ee3ad115282482c0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Remove this arm once ExactMatch is fully removed from envoy-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":"tonic-xds/src/xds/resource/route_config.rs"},"region":{"startLine":504}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f0641253b38737d64f4e14b580c172b900457fba8c57f95afbaa6bcace58688"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Remove this arm once SafeRegexMatch is fully removed from envoy-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":"tonic-xds/src/xds/resource/route_config.rs"},"region":{"startLine":513}}}],"partialFingerprints":{"codehealthFindingId/v1":"762d54cddad234e398b65bc64bcb063b51780fe099ed83e503843372b090d870"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove once A48 (least-request LB) and priority LB consume all fields. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-xds/src/xds/resource/mod.rs"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"a74c8e7dbc3f9e3edd0b622ad2ffd1aa89de5b6ca95228e3ed3abe86506df2ea"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: bubble this into \u0060transport\u0060 and expose generic http2 reasons. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic/src/status.rs"},"region":{"startLine":406}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1c8c337ff107a42b5db83ea05672aece6cd8e52f31eb65bce0709ca030d141a"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: improve buf usage. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic/src/codec/decode.rs"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"303abd9d20588c0f7babaeedbab59ca4d196d4e29190a75ffc374f2739f55d94"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: support customizing the compression level \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic/src/codec/compression.rs"},"region":{"startLine":254}}}],"partialFingerprints":{"codehealthFindingId/v1":"360818b455bc62354d31a51190080f55daccd215b9d47927138a3880a58d983c"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: support customizing the compression level \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic/src/codec/compression.rs"},"region":{"startLine":263}}}],"partialFingerprints":{"codehealthFindingId/v1":"57f51dea8542fa2d3867d40a277d3516d5a746c1801e3b3e7ec7886d461d9b59"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: support customizing the compression level \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic/src/codec/compression.rs"},"region":{"startLine":272}}}],"partialFingerprints":{"codehealthFindingId/v1":"67f3b2b3655a3d7753758df908a2d85454274955a739f8720c3c615978405eb0"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: determine if we want to expose this or not. This is really \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic/src/transport/channel/endpoint.rs"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2e13258ce65c5bcbcf1872ff03e7b40d8c0f045ee1c47abfce9495ec51c3503"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO: once federated bootstrap support lands, derive the authority from \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"xds-client/src/client/worker.rs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"fef958bac20d2beaf5acd8e4e91baa62f7c57359fdaa3a003460b0d829674fca"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: unify with the grpc-rust runtime trait \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"xds-client/src/runtime/mod.rs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"741133eff6051e24785bda6b6e1b1331ce89464c588f4ae66ed2a4d2ead0c6da"}},{"ruleId":"D19","level":"note","message":{"text":"Documentation: no project overview: The document names \u0027Criterion benchmarks\u0027 as its content, giving no indication of what Tonic does or why it is being benchmarked. State the project\u0027s purpose (benchmarking request/response construction performance) and how to run benchmarks."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic/benches-disabled/README.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbeb84c1ea6221187b5a361e988e5d6c0760c9182048ebe628daaeb0fdfd8b0f"}},{"ruleId":"D20","level":"note","message":{"text":"No ADRs found: No ADRs found. No recognised ADR directory (\u0060docs/adr/\u0060, \u0060docs/decisions/\u0060, \u0060adr/\u0060, \u0060docs/rfcs/\u0060, an \u0060ADR0001/\u0060 folder, or their siblings) exists anywhere in this tree. What was searched, so you can tell an empty log from a search that missed one: every directory under the tree (build output, dependencies and VCS metadata excepted), for a document that is either any non-index page inside a recognised ADR directory, whatever its name and however deeply nested (\u0060docs/adr/use-postgres.md\u0060, \u0060docs/adr/2024/0001-x.md\u0060); or a file anywhere whose name is ADR-shaped (\u00600001-use-postgres.md\u0060, \u0060adr-012-caching.md\u0060); or, when neither turned anything up, a document carrying the decision-record signature (an \u0022Architecture Decision Record\u0022 heading, or Status / Context / Decision / Consequences as section headings). A decision log that clears none of these \u2014 unnumbered files outside any recognised directory, without those headings \u2014 is not seen by this check and this row is then wrong. If that is your case, say so rather than renaming anything; otherwise, consider recording architectural decisions in \u0060docs/adr/\u0060."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d2bea044ff79d7d275f5a91a6e2f548586178eaf480274c33960ad020c854631"}},{"ruleId":"D22","level":"warning","message":{"text":"Inconsistent API surface for CallOptions between client and server. The client-side CallOptions exposes mutable setters and getters for properties like deadline, whereas the server-side CallOptions only exposes a constructor with no visible property accessors or setters. This suggests a divergence in how call configuration is handled or exposed.: Align the server-side CallOptions to match the client-side API by adding getter/setter methods for consistency, or document why the server-side options are immutable/constructor-only. (signatures: grpc.client.CallOptions.set_deadline(deadline: Instant) | grpc.client.CallOptions.deadline(): Instant | grpc.server.CallOptions.new(): Self)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"14a6304b6728a5b02f79381f7d4ad79b74debc0524f7a3c045da0f56ce187e11"}},{"ruleId":"D22","level":"warning","message":{"text":"Inconsistent parameter naming and typing for SendStream.send. Client uses \u0060msg\u0060 typed as \u0060\u0026dyn SendMessage\u0060, while server uses \u0060item\u0060 typed as \u0060ResponseStreamItem\u0060. While the types differ due to context (request vs response), the parameter name inconsistency (\u0060msg\u0060 vs \u0060item\u0060) is confusing for developers switching contexts.: Standardize the parameter name to \u0060message\u0060 or \u0060msg\u0060 across both client and server SendStream implementations. (signatures: grpc.client.SendStream.send(msg: \u0026dyn SendMessage, options: SendOptions): Result | grpc.server.SendStream.send(item: ResponseStreamItem, options: SendOptions): Result)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"1d13c133c69780a27b7d0a5926dbd440c6d56126493b58d1056d91f1a43fc167"}},{"ruleId":"D22","level":"warning","message":{"text":"Inconsistent method naming for receiving messages. Client uses \u0060recv\u0060, while server uses \u0060next\u0060. These perform the same logical operation (advancing the stream and retrieving the next message) but have different names and return types (\u0060ResponseStreamItem\u0060 vs \u0060Result\u0060).: Unify the method name to \u0060next\u0060 or \u0060recv\u0060 across both client and server streams. Align return types to a common \u0060ResponseStreamItem\u0060 or \u0060Result\u0060 wrapper. (signatures: grpc.client.RecvStream.recv(msg: \u0026mut dyn RecvMessage): ResponseStreamItem | grpc.server.RecvStream.next(msg: \u0026mut dyn RecvMessage): Result)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"314129873207619b1d5c3fbf1b045fbc5f76a1ac8267b476e97bbd204a7c80df"}},{"ruleId":"D22","level":"warning","message":{"text":"Inconsistent parameter naming in dynamic send streams. Client uses \u0060msg\u0060, server uses \u0060item\u0060. Same issue as the non-dynamic streams.: Standardize the parameter name to \u0060message\u0060 or \u0060msg\u0060 across both client and server DynSendStream implementations. (signatures: grpc.client.DynSendStream.dyn_send(msg: \u0026dyn SendMessage, options: SendOptions): Result | grpc.server.DynSendStream.dyn_send(item: ResponseStreamItem, options: SendOptions): Result)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"20a3d9e60de2a4828107cf2f9a89029938536fcdfd0e30c3d11337e5fdc5be05"}},{"ruleId":"D22","level":"warning","message":{"text":"Inconsistent method naming in dynamic receive streams. Client uses \u0060dyn_recv\u0060, server uses \u0060dyn_next\u0060. This mirrors the inconsistency in the non-dynamic streams.: Unify the method name to \u0060dyn_next\u0060 or \u0060dyn_recv\u0060 across both client and server dynamic streams. (signatures: grpc.client.DynRecvStream.dyn_recv(msg: \u0026mut dyn RecvMessage): ResponseStreamItem | grpc.server.DynRecvStream.dyn_next(msg: \u0026mut dyn RecvMessage): Result)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"dd7428fc57d8ff8b45dedf6b8e69ce6f9199035bfe3bc01b60e39d3990952276"}},{"ruleId":"D22","level":"warning","message":{"text":"Duplicate WorkScheduler types in different modules. Both \u0060grpc.client.name_resolution.WorkScheduler\u0060 and \u0060grpc.client.load_balancing.WorkScheduler\u0060 have the same signature \u0060schedule_work(data: WorkData)\u0060. It is unclear if these are distinct interfaces or if one is a duplicate/refactor artifact.: Consolidate into a single \u0060WorkScheduler\u0060 trait/type in a common module (e.g., \u0060grpc.core\u0060 or \u0060grpc.client\u0060) to avoid duplication and confusion. (signatures: grpc.client.name_resolution.WorkScheduler.schedule_work(data: WorkData) | grpc.client.load_balancing.WorkScheduler.schedule_work(data: WorkData))"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"00a24eda57178556639efd50e8df427bbb2935c5160710e54770f33606ba3830"}},{"ruleId":"D22","level":"warning","message":{"text":"Inconsistent method naming and signatures for ChannelController. The name resolution controller uses \u0060update\u0060 with a \u0060ResolverUpdate\u0060, while the load balancing controller uses \u0060update_picker\u0060 with an \u0060LbState\u0060. These are likely part of the same controller interface but are split or named inconsistently.: Unify the ChannelController interface to have consistent method names (e.g., \u0060update_state\u0060 or \u0060update\u0060) and ensure the update types are compatible or clearly distinct in purpose. (signatures: grpc.client.name_resolution.ChannelController.update(update: ResolverUpdate): Result | grpc.client.load_balancing.ChannelController.update_picker(update: LbState))"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"7cfa91555eb418e33d63a2c797b9b8d779dec679c16367fdac6492f910415c8e"}},{"ruleId":"D22","level":"warning","message":{"text":"Inconsistent interceptor signatures. Client interceptors return streams \u0060(SendStream, RecvStream)\u0060, while server interceptors return \u0060Trailers\u0060 and take explicit \u0060tx\u0060/\u0060rx\u0060 streams. This makes it difficult to write shared interceptor logic or understand the flow.: Align the interceptor signatures. If possible, make server interceptors return a result containing the trailers and streams, or adjust client interceptors to follow a similar pattern to server interceptors for consistency. (signatures: grpc.client.interceptor.Intercept.intercept(headers: RequestHeaders, options: CallOptions, next: I): (SendStream, RecvStream) | grpc.server.interceptor.Intercept.intercept(headers: RequestHeaders, options: CallOptions, tx: \u0026mut impl SendStream, rx: impl RecvStream, next: \u0026impl Handle): Trailers)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"5fc30423cfced8046d53a936a58ca8ab84e3cffbf503d79245119a9b4a713ffd"}},{"ruleId":"D26","level":"note","message":{"text":"Projects may be oversized for their cohesion: 2 of 21 project(s) overshoot their size bounds, lowering Project Cohesion to 8.1/10. The most over is \u0060grpc\u0060 (29297 LoC, 217 public types across 21 directories). Review these for cohesion \u2014 draw the boundary inside the module first (group each responsibility into its own package or directory and keep the cross-boundary members non-public), since splitting a published package moves types between packages and breaks consumers."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d5a94650dc74886a0f1f08eb9fb6775f1fc395279ef7e901c970c9d26f767a72"}},{"ruleId":"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":"982ab57d9fa07a9d7984f579ef125a9528dfc88c0428190d56ed95525875409a"},"properties":{"commitSha":"115b95ceedbd58186d6c461b0a7f12e10353dbfd"}},{"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":"90b33ce49c2f84d7f62178924f98e7ec7f6c15c6fdaf686f0d900894f234ebe8"}},{"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":"573405430b013c376941ec634df9184bb4d52ae38c14d4ec6c8154413c7b4313"}},{"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":"3ccdc59c30e851ace7a1000877acc051944195c5c5b1f9cac753e7772693c517"},"properties":{"commitSha":"115b95ceedbd58186d6c461b0a7f12e10353dbfd"}},{"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":"61adc19c0621094b6f12b2d7f98091c5e6dc162ef911babd53eddc2b25c0a362"}},{"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":"c21437ab1524384b9686d156feb1f3cda3fbfc6e11967f6a0dc1ed0baa788bfc"},"properties":{"commitSha":"4aa76b566f307d0075f6c035d1c960dd7e548031"}},{"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":"edf4497487fa72aa338cdd69ab82a1e2bce69046d8e6a2913966f8d72edab0c2"},"properties":{"commitSha":"f74e7dbff78db77bd5f18c769f854222a62fe5c2"}},{"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":"4f69e13e65e1b7f94fdd032c05a7385684ca5212a4304afd402ab99d198e85d2"}},{"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":"27d0620c0e7b0a5566244319813e42601c6f759ccda1cbdb1526ae2e4bfa03c2"},"properties":{"commitSha":"335a373a403615a9737b2e19d0089c89bcaa3c4e"}},{"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":"d90cd19a514ebb59af5a008b18c51d667484e9e5ca737d5f1a2773043f8410fd"},"properties":{"commitSha":"335a373a403615a9737b2e19d0089c89bcaa3c4e"}},{"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":"21c44c883ad4fad46650a9dd0b4b8e721f02c2c68c58ff2c05b8cacad0a2c413"},"properties":{"commitSha":"a8ef9d6c4275f84f5624de61e105b10971faade4"}},{"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":"e7ea8c8c261452f3f0f1ad9b22cc5d651114fdf27f996bc6f9f93ff9a74b9e13"},"properties":{"commitSha":"ed53be57799f680e704fd0c801f171d4f4954c29"}},{"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":"61fd2a9aa7edfc0955a5d8859368f28ec8bc88dd811270b446c71185544b905b"},"properties":{"commitSha":"4ea3fdfd1e098e9cf2124a98ec13c6be7f916f53"}},{"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":"5939a7c6f533f7e5a3fc4f82872099c829a5199b0d1c4d514ef6497072e58a76"},"properties":{"commitSha":"b131e63ffb6dc485f445deb3d27ea4537588e86a"}},{"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":"42070d3c47a7342513aa13b4da40c6529d43d392d442134dddf61dc1bc4b031e"},"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":"aa45492f82371c16432a8b16c053ae9dcb5b8c22edeef170025643207072b7b9"},"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":"1c57ff7ee4f5493fd19f9027d26752196d0f66f7a9bc394273afdf83bfd8064a"},"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":"458bbd04949473b9960e3be7ecdf42aa5c5013515f78ca455526ac82ec94eb6c"},"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":"cfe0105dc2ade9f851220704b95c414fb92266d185c7671f5e5617aeee38dbe7"},"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":"3376355923d877d24d40dea4054bf59d6ba9bf9709767bb8cc2d11dd086f6212"},"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":"25f99693acc0330371459a3525e21a749a0a1fdbc3fd010528848ad13d9489cb"},"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":"8443e9a3aa820ed973cf54ee5e44d7a6d2c463ba428035d8621507c45201094e"},"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":"f715b5dac9f93f66c9769f4fc624f26cf07e5fdb54a77216313d461094143593"},"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":"1d146bca3958ed46ef4800d15ad31eacac76eb8b56952ffc0c1f24c294f1e1cf"},"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":"c402ac3524d0b09891e8a6aa7dec06a81c1077771ab91e1735e482e6919501a7"},"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":"3c8e933dbad79c25d1d459f5518c351c900112291519519831dfb83904c8b877"},"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":"7ba8b7e0f9e2b6b4e0f79f08d6d10602bb32870d1c32425941a8fad2f2a2c149"},"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":"bdb7dec8ad616bff6df00f7d1def96b632aac2cd5f8dc4faced372bb4c15c0a5"},"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":"62d3f5df99be339a918e6d928763fadfdb3ed45886559df974aff8b0732840ff"},"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":"f01a496724d28929ea2f99715f50cc2b627ba33bb5f5c17752b0c680412e50f5"},"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":"8d518dab6c942257a2b289613a3849e631bd761ba0ed0090bcb421925d16701d"},"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":"20695591df518307119477365ec996d8f4189b664285f5e2241cedeed2b58cc0"},"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":"ed87f0409bc02f5b25376fd20a0d87f061cd6f3f46a07399ebc59b5631c4e06e"},"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":"5e1c99da53cbc6965139e594ec86b5b044ba61aa841df5864affa559d8674cee"},"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":"e57d7e1c15d67a7284993e59406623780f2439f46c6e795c4f4ec9faf8745506"},"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":"e584944d73cb547a08af1eff65d50985373dc6ac13701571bd844d209544a241"},"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":"c18798ba4279234007b47c16fa4b405570bc72a90ead7f6523fb1841ae6a6e21"},"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":"efacc7cc7becb5b4c06e3024712d404437975c08b1d1a671d739390111900ca8"},"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":"8591df20032277449ddefc12b70ad39808f56ae7ccf3c6a07e8948c17307c788"},"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":"555a542e9fa1c227f3f029ca8df9d64b43a7e717deb430758b09e2b740754892"},"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":"8bf095f1fedb1acfc84d19a300fb6689441c93a2f030c1a1f704b2700b304c8e"},"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":"6946ff76ae458e9e867926df043c4c81efb42075f13ca6f6f7e7c0e6b5d4281e"},"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":"ef98a2ec9b3140bb581c76128d03bf887c7330106f62d6525457073385ea6de9"},"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":"9ece4905bc23a771f848be372b69a3bc5c23531e203c66d07af449bf237054a4"},"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":"587aa4eda58a70246ee328eaf83cb8a1249664a4ad6dac73ef599def59c54f0e"},"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":"a4c29c409464edbf7441ecae9a0b05c9c37ba0d63cfaed7de11733e89c178fd6"},"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":"ade2eb2c544f01546979402f7af2532b5e7733a16d0b8e40f43c50b63e1080f2"},"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":"db2b1d9526f3dc7a7b084163475c8971a556724c836d532c6f71b4762fc38b35"},"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":"d0433e61c3a42d4c06a1bb42f2852771b83901ca87d1262d8f1cb6c2fc5330d6"},"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":"928af8d32272b48c804c20639dfca13f478d4f746e4d2066127a1dedf52d9e32"},"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":"559c5cea56a4ff5ea37a451e2a347dd4f56a07378f42efc9492edf3d9ce5669d"},"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":"c0b2ea61a09fad2f19f7868494b2826d23f17b85efa2e64baa28958b2e842e3e"},"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":"288028cd85f01c733202ad9ee5488d69bf596e78e3aea3726acff7cc8de62152"},"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":"4dd1999d19dcee2737892f5380a7c13f395bfde50d39fe132949ef6601b671cc"},"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":"d468964bc3d5857c49d6e747c4d4186d690b589afee02f2b6c6c41077523c271"},"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":"164d1ae8911cf3cbc9cb113d722180169846282d6d1f711e2bddb1503c803730"},"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":"e997e47a75cc908a862a33f8bdb7b83d9b3b982f32ec80f6eb3fea20d147009b"},"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":"7741fce4d58a6f0826e643e1cd2c096bc8a5f095c65568f4d29dd3efa60361ea"},"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":"0118785db9eb3b591cf3a144406f12075be675a870e29d0405b94482126a0466"},"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":"dc2f6ff1ea6fd8f6a095d4da8b07e12c738f962f0fa6b601084a1c2d05794c6f"},"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":"b5573a825b7884acda2aecd58ab8a910d9ad62a50954c6d34e28e096aac26062"},"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":"3e79206f5d51b06558296f7e091b872efb543ae95e5f51eaaab2e53cc82aa1e8"},"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":"ee3a4d48b97be9f6f43b9be0bc5beaed47db324aa15af24248ebb937e89774cc"},"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":"4e384e445b5730214c47e5f1b09db8b07ffedf99f7a086b6d38e158e9a9a3cf8"},"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":"11dd14f7664c08f28b5a51a41794d99e01e87c450b25b20cdfb77d14a11808a6"},"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":"2d8ca94aee1654b2cd21c93d95b4721ff52a25bb448482ea4bac855cc013587a"},"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":"e7c38c13b6d33a2ec295eaf14d020f0f13b309aef5eab45d5554e51f81dab6fc"},"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":"61abae2b8d4cd2ca0e3e2d47ed7d694816c4de9ac118dfc6b3722e447d4ed7fb"},"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":"e35efdd8d6b0585364acc931114dd2d6260fabab4e2e4bed01e2436f327c23bd"},"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":"81213028df59e0002e916941c5e9594f952408bb102582468931364a63827974"},"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":"afece0d4449be63ca97f3253a727d5923d3eeae3323acc8e3f67003c3a22b919"},"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":"d098368878a26cf7f5f8b55de6040aa6327fed995f432fdfa1a0dd6b60760740"},"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":"4492d7fe602ab4823158f0bbe8542127685a23d642e21d8cf0a6a3e61a530e5a"},"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":"398c8de818a6d9e3727bdd76ff917ca08b5402db1a8be1335fd2bf6490999466"},"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":"1ef31426cd481e18bc2a53a01b08d3170987adec4eb38710c912e4f9ef5babe1"},"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":"e8fa0bc2df0126f6f5389fa816c9ac0ff50e9d2c147cd09fbdb983676a60b2a8"},"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":"d645d6f35834105b6c7ec87328ada9db654a6f0241530198167cf3245d8cefba"},"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":"93f3a86e9feb428941c074c301bba502db588db88e3a8591b5938ca2b4c4a201"},"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":"c4a85d3b66178c00d73642d7fabbaec3c244de9cbdc3be95d8b7ad7212d6f0a2"},"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":"f597c25f4e3fb6eddf409316a160927753d66ac97f72349962c2b3c240d94f24"},"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":"c5281b26cbb5125f5ef738535fdf7002d38bcad2591de45fabd4bda331d57205"},"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":"5e3dbd18291b7daafefd5ea9784784ca542468454c2f75458e3d759b5428b00b"},"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":"307735ffa11f690bd12e077adc431ab26a47e6923eba42e5f076ab057846bbb9"},"taxa":[{"id":"CWE-522","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"0e20c1f9ae77d6b5d2d187f46e62c68f7c015952405539a4e3b1a1c1e49895be"},"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":"25b41ce3961fb435a7130114aa1c9a2d872aea1ee7f5c7db6ef05992e9ed71de"},"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":"f64666f79c8a080e1825203ac3ecee485119a9dfed96ae6dea4500d2db0fb820"},"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":"a55f19dba5857ae9ddd6bc9b341798a8036f454a44ead32df082abdfcaf12959"},"taxa":[{"id":"CWE-522","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"899ae00c713324cb0acc3ba090a3297347051598fdcca6ce0fc2b78a0a84cf38"},"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":"e881ba110b06f02cbf7f3aa7c6bf9c354f8d4c26defd292358f3d5e1ac96b318"},"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":"19363cdc4a240d2dec096003df8fdcd1c7e44d51f31d238190be6e362b24766f"},"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":"c2c1b36548b9499ee3c5212027bef3a787f33c77d6ac465c42e9ed48796d89a5"},"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":"11ec911179a3d0f13498e0a567bc049bf327af5883d634fff4457034c3c99b14"},"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":"a75c677e09a6f1f4d9e9ff076f14f70f0dbef4c49f530e6c9a3b1074053560c4"},"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":"81e45fe5ca92ad99ec23c00873c91b970605b37c3a1203f015656d8c34430136"},"taxa":[{"id":"CWE-522","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-types/src/richer_error/error_details/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"25b731c7defd71a41f7f968e5ef06f666dd83d977f6982b1f7c5a3e16c2dc76c"}},{"ruleId":"D34","level":"note","message":{"text":"Further orphaned files (smaller): 18 smaller file(s) also have no living knowledge \u2014 folded into the freshness score and metrics rather than raised one row each \u2014 most significant first: tonic-build/src/manual.rs, tonic-types/src/richer_error/std_messages/quota_failure.rs, tonic-types/src/richer_error/std_messages/prec_failure.rs, tonic-types/src/richer_error/std_messages/help.rs, tonic-types/src/richer_error/std_messages/retry_info.rs, tonic/src/transport/channel/service/user_agent.rs, tonic-types/src/richer_error/std_messages/error_info.rs, tonic-types/src/richer_error/std_messages/resource_info.rs (and 10 more) (19 orphaned of 248 analysed files in total, counted over production source files of roughly 2,400 bytes or more, excluding vendored, generated and example/demo trees and test files identified by path convention, largest first; 248 of the 291 production source files in this repository met that bar). Attach the read to the next change that touches one of them: have a second person review that change, and leave behind a short comment or test recording what the file is for, so the knowledge comes back at the cost of a change you were making anyway."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"ce861fd78f6935114d3a342cb90ad25870f984e1042954fcbbe27c0e23be3658"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling clique: lib.rs, lib.rs, lib.rs, lib.rs, lib.rs: 5 files \u2014 \u0060tonic-build/src/lib.rs\u0060, \u0060tonic-health/src/lib.rs\u0060, \u0060tonic-reflection/src/lib.rs\u0060, \u0060tonic-types/src/lib.rs\u0060, \u0060tonic-web/src/lib.rs\u0060 \u2014 all change together with no explicit dependency: a fully-connected co-change clique, not 10 separate couplings. They share one concern (thin parallel siblings over a common abstraction), so extract the shared part into ONE unit and the whole clique\u0027s coupling clears at once \u2014 you do not need to break each pair individually."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic-build/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a15343c89e1d9bf228eb6439579e4bbfe4bb5f4c37f2895698d8be6ccde35d9"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: request.rs \u2194 response.rs: \u0060tonic/src/request.rs\u0060 and \u0060tonic/src/response.rs\u0060 change together 57% of the time (8 of the 14 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency between them. They sit in the same directory, but in this ecosystem each file is its own module \u2014 a sibling reference still needs an import \u2014 so the missing import edge is real: the coupling runs through shared behaviour, not a declared dependency. If they duplicate structure, extract the common part into one unit; otherwise the coupling is hidden and worth breaking. You can check this without leaving the row: of the 8 shared commits counted here, the most recent 3 are \u0060a09d4534\u0060 optimize header name handling in \u0060Grpc::map_response\u0060 (#1359); \u0060911ce6c4\u0060 chore(doc): Enable doc_auto_cfg (#1742); \u0060ed95d276\u0060 feat: Use http::Extensions directly (#1710) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic/src/request.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"92d71ba92bc38b827cb9338ae21f18ac12d8598a403219ea03d845f369dc24fe"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: decode.rs \u2194 encode.rs: \u0060tonic/src/codec/decode.rs\u0060 and \u0060tonic/src/codec/encode.rs\u0060 change together 54% of the time (19 of the 35 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency between them. They sit in the same directory, but in this ecosystem each file is its own module \u2014 a sibling reference still needs an import \u2014 so the missing import edge is real: the coupling runs through shared behaviour, not a declared dependency. If they duplicate structure, extract the common part into one unit; otherwise the coupling is hidden and worth breaking. You can check this without leaving the row: of the 19 shared commits counted here, the most recent 3 are \u00603a706b24\u0060 chore: Use Status constructor for each kind of status (#1913); \u00600964cb24\u0060 feat(grpc-web): make public codec methods to enable grpc-web client a\u2026; \u0060c7836521\u0060 add more explicit logging (#1658) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tonic/src/codec/decode.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"21b12dd38b165f027458d008587a8e9b2e8f6cbc50e916235318f89de4b384b1"}},{"ruleId":"D36","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"1b213f6eedd4b140d0bc37bdf1496f72811a643f34064f12518b32e9e83bcfc7"}},{"ruleId":"D36","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"0e17f71490e4d120a48b2b2881ab866c93b272bef2febb673a3e8e42b2c288ab"}},{"ruleId":"D36","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"759dca709f1a032fb6f624ce672e6afb5558fce53ecf01fb73618c4d33923164"}},{"ruleId":"D36","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"eb00976a698a5d68999b7ee6d27206fd374e916853e7ff1ead5eed42386f043f"}},{"ruleId":"D36","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"90f83b4fa27db32740afe9540c905f3c0499caed87f61049a8a903ecc95b41c3"}},{"ruleId":"D36","level":"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":"M1","level":"warning","message":{"text":"README may be stale: 294 code files changed in the last 6 months but the README was not touched \u2014 it may no longer reflect the system."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"e973e7a8d5d866995cbf78b120250fe7f132bf928812d48ca62e69aba11b9910"}},{"ruleId":"M2","level":"note","message":{"text":"No ADRs: No Architecture Decision Records found \u2014 no conventional ADR directory, no numbered \u0060NNNN-title\u0060 documents in any markup this check reads, and nothing ADR-shaped by content. Design rationale recorded elsewhere (a design-notes tree, a mailing list, pull-request discussion) is not visible to this check and is not re-findable per decision, so a future maintainer cannot ask why one choice was made and get an answer."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"670b3d6e36a756d63097d0dfbf90afd5fc761308800b9354894a07c3f4e4aa14"}},{"ruleId":"P2","level":"note","message":{"text":"Logging is not universal: Only 5/9 runnable modules use logging (modules with no entry point or server are excluded \u2014 they are libraries a runnable module hosts). Silent: \u0060codegen\u0060, \u0060grpc\u0060, \u0060grpc-benchmark\u0060, \u0060xds-client\u0060."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"91a94e21d6d4d0e6a2003f94505b0b02b157176f0b24c4820f3f82b4447a97fe"}},{"ruleId":"P4","level":"note","message":{"text":"No release approval gate: The release is automated and no gate that pauses it for a human is DECLARED IN THIS REPOSITORY\u0027S PIPELINE FILES. What was read: every file under \u0060.github/workflows/\u0060, \u0060.forgejo/workflows/\u0060, \u0060.gitea/workflows/\u0060, \u0060.azuredevops/\u0060 and \u0060.azure-pipelines/\u0060, plus \u0060.gitlab-ci*\u0060 and \u0060azure-pipelines*\u0060 \u2014 with comment text stripped, so documenting a gate is not declaring one. What would have counted: GitLab\u0027s \u0060when: manual\u0060, CircleCI\u0027s \u0060type: approval\u0060, an Azure \u0060ManualValidation@\u0060 task or an \u0060approvals:\u0060 block, a Jenkins \u0060input\u0060 step, a \u0060uses:\u0060 step naming an approval action, an \u0060environment:\u0060 paired with \u0060reviewers\u0060 / \u0060required_reviewers\u0060 / \u0060protection\u0060 / \u0060wait-timer\u0060 / \u0060deployment_branch_policy\u0060, a draft-release step, a \u0060workflow_dispatch\u0060 promotion, or a release-event gate. \u2605 What this cannot see, because none of it is a file: a GitHub environment whose required reviewers are configured in repo SETTINGS, a branch protection rule, or an organisation deployment policy \u2014 all of them real, enforced gates that live outside the repository. If yours is one of those, this row is wrong and nothing in the tree could have told us. Otherwise: whatever the release trigger points at is published to users unreviewed, so a mistagged or unverified commit ships and the only remedy is a follow-up release."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6c11e2dbd483b4b423b95ac61bfcc7af1d55351b28a20d2b1105b31cfe38cc60"}}],"taxonomies":[{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d","organization":"MITRE","informationUri":"https://cwe.mitre.org/","isComprehensive":false,"shortDescription":{"text":"The MITRE Common Weakness Enumeration (CWE)."},"taxa":[{"id":"CWE-1032","guid":"5f21e517-68aa-a650-9a25-5771ef024637","name":"OWASP Top Ten \u2014 Security Misconfiguration category","shortDescription":{"text":"OWASP Top Ten \u2014 Security Misconfiguration category"},"helpUri":"https://cwe.mitre.org/data/definitions/1032.html"},{"id":"CWE-1059","guid":"a2381a08-60f6-9554-a8b8-f3018cfaaca5","name":"Insufficient Technical Documentation","shortDescription":{"text":"Insufficient Technical Documentation"},"helpUri":"https://cwe.mitre.org/data/definitions/1059.html"},{"id":"CWE-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-16","guid":"659db3ea-affc-8453-8add-c1218fbfcb92","name":"Configuration","shortDescription":{"text":"Configuration"},"helpUri":"https://cwe.mitre.org/data/definitions/16.html"},{"id":"CWE-259","guid":"ae9ad959-fbb6-9d5e-892d-3dca66da0b69","name":"Use of Hard-coded Password","shortDescription":{"text":"Use of Hard-coded Password"},"helpUri":"https://cwe.mitre.org/data/definitions/259.html"},{"id":"CWE-353","guid":"09d7e902-d4ee-f05d-ae6c-0a1554d0c18f","name":"CWE-353","shortDescription":{"text":"CWE-353"},"helpUri":"https://cwe.mitre.org/data/definitions/353.html"},{"id":"CWE-494","guid":"b8a65e0d-e459-4a55-a931-fc1136482375","name":"Download of Code Without Integrity Check","shortDescription":{"text":"Download of Code Without Integrity Check"},"helpUri":"https://cwe.mitre.org/data/definitions/494.html"},{"id":"CWE-522","guid":"71fb233e-ce6a-ae57-9419-ef8373540b09","name":"CWE-522","shortDescription":{"text":"CWE-522"},"helpUri":"https://cwe.mitre.org/data/definitions/522.html"},{"id":"CWE-732","guid":"1da27e8f-b330-7650-ab63-bd61953eae5d","name":"Incorrect Permission Assignment for Critical Resource","shortDescription":{"text":"Incorrect Permission Assignment for Critical Resource"},"helpUri":"https://cwe.mitre.org/data/definitions/732.html"},{"id":"CWE-77","guid":"332c8ade-6612-9f56-a06b-d8d90b1a8750","name":"Command Injection","shortDescription":{"text":"Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/77.html"},{"id":"CWE-78","guid":"2e31ceaf-c7ae-2e5e-9661-cfb1362789cf","name":"OS Command Injection","shortDescription":{"text":"OS Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/78.html"},{"id":"CWE-79","guid":"fd45580b-e8c4-fc5e-8c2f-aa8fab0b4dbf","name":"Cross-site Scripting (XSS)","shortDescription":{"text":"Cross-site Scripting (XSS)"},"helpUri":"https://cwe.mitre.org/data/definitions/79.html"},{"id":"CWE-798","guid":"5e8f057d-fee3-995a-a0cb-9fc5b0d174d1","name":"Use of Hard-coded Credentials","shortDescription":{"text":"Use of Hard-coded Credentials"},"helpUri":"https://cwe.mitre.org/data/definitions/798.html"},{"id":"CWE-829","guid":"13c33925-97fb-5a5e-b40c-56d328b8a4d7","name":"CWE-829","shortDescription":{"text":"CWE-829"},"helpUri":"https://cwe.mitre.org/data/definitions/829.html"},{"id":"CWE-89","guid":"6d08fdad-37eb-c150-bbf0-d7d946863407","name":"SQL Injection","shortDescription":{"text":"SQL Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/89.html"},{"id":"CWE-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":109,"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."]}]}