{"$schema":"https://json.schemastore.org/sarif-2.1.0.json","version":"2.1.0","runs":[{"tool":{"driver":{"name":"codehealth","informationUri":"https://codehealth.canine.dev","rules":[{"id":"D1","name":"Cyclomatic Complexity","shortDescription":{"text":"Cyclomatic Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D1"},{"id":"D2","name":"Cognitive Complexity","shortDescription":{"text":"Cognitive Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D2"},{"id":"D3","name":"God Classes","shortDescription":{"text":"God Classes"},"helpUri":"https://codehealth.canine.dev/dimensions/D3"},{"id":"D4","name":"Code Duplication","shortDescription":{"text":"Code Duplication"},"helpUri":"https://codehealth.canine.dev/dimensions/D4"},{"id":"D5","name":"Coupling","shortDescription":{"text":"Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D5"},{"id":"D6","name":"Cohesion (LCOM4)","shortDescription":{"text":"Cohesion (LCOM4)"},"helpUri":"https://codehealth.canine.dev/dimensions/D6"},{"id":"D7","name":"Architectural Integrity","shortDescription":{"text":"Architectural Integrity"},"helpUri":"https://codehealth.canine.dev/dimensions/D7"},{"id":"D8","name":"Code Coverage","shortDescription":{"text":"Code Coverage"},"helpUri":"https://codehealth.canine.dev/dimensions/D8"},{"id":"D9","name":"Test Distribution","shortDescription":{"text":"Test Distribution"},"helpUri":"https://codehealth.canine.dev/dimensions/D9"},{"id":"D10","name":"Test Quality","shortDescription":{"text":"Test Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D10"},{"id":"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":"D19","name":"Documentation Quality","shortDescription":{"text":"Documentation Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D19"},{"id":"D20","name":"ADR Quality","shortDescription":{"text":"ADR Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D20"},{"id":"D21","name":"Naming Consistency","shortDescription":{"text":"Naming Consistency"},"helpUri":"https://codehealth.canine.dev/dimensions/D21"},{"id":"D22","name":"Internal API Consistency","shortDescription":{"text":"Internal API Consistency"},"helpUri":"https://codehealth.canine.dev/dimensions/D22"},{"id":"D26","name":"Project Cohesion","shortDescription":{"text":"Project Cohesion"},"helpUri":"https://codehealth.canine.dev/dimensions/D26"},{"id":"D28","name":"Secrets (history)","shortDescription":{"text":"Secrets (history)"},"helpUri":"https://codehealth.canine.dev/dimensions/D28","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D29","name":"Static Analysis (SAST)","shortDescription":{"text":"Static Analysis (SAST)"},"helpUri":"https://codehealth.canine.dev/dimensions/D29","relationships":[{"target":{"id":"CWE-79","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-89","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-94","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-77","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-79","CWE-89","CWE-78","CWE-94","CWE-77"]}},{"id":"D30","name":"Dependency Vulnerabilities","shortDescription":{"text":"Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D30","relationships":[{"target":{"id":"CWE-1395","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-937","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1395","CWE-937"]}},{"id":"D31","name":"IaC \u0026 Container Security","shortDescription":{"text":"IaC \u0026 Container Security"},"helpUri":"https://codehealth.canine.dev/dimensions/D31","relationships":[{"target":{"id":"CWE-1032","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-732","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-16","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1032","CWE-732","CWE-16"]}},{"id":"D34","name":"Knowledge Freshness","shortDescription":{"text":"Knowledge Freshness"},"helpUri":"https://codehealth.canine.dev/dimensions/D34"},{"id":"D35","name":"Change Coupling","shortDescription":{"text":"Change Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D35"},{"id":"D36","name":"Supply-chain Provenance \u0026 Signing","shortDescription":{"text":"Supply-chain Provenance \u0026 Signing"},"helpUri":"https://codehealth.canine.dev/dimensions/D36","relationships":[{"target":{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1357","CWE-494"]}},{"id":"D40","name":"Network Egress Confinement","shortDescription":{"text":"Network Egress Confinement"},"helpUri":"https://codehealth.canine.dev/dimensions/D40"},{"id":"D41","name":"Kernel \u0026 Syscall Confinement","shortDescription":{"text":"Kernel \u0026 Syscall Confinement"},"helpUri":"https://codehealth.canine.dev/dimensions/D41"},{"id":"D43","name":"Malicious Dependencies","shortDescription":{"text":"Malicious Dependencies"},"helpUri":"https://codehealth.canine.dev/dimensions/D43","relationships":[{"target":{"id":"CWE-506","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-506"]}},{"id":"D44","name":"Platform End-of-Life","shortDescription":{"text":"Platform End-of-Life"},"helpUri":"https://codehealth.canine.dev/dimensions/D44"},{"id":"AC1","name":"Text alternatives","shortDescription":{"text":"Text alternatives"},"helpUri":"https://codehealth.canine.dev/dimensions/AC1"},{"id":"AC2","name":"Forms \u0026 labels","shortDescription":{"text":"Forms \u0026 labels"},"helpUri":"https://codehealth.canine.dev/dimensions/AC2"},{"id":"AC3","name":"Page structure","shortDescription":{"text":"Page structure"},"helpUri":"https://codehealth.canine.dev/dimensions/AC3"},{"id":"AC4","name":"Keyboard semantics","shortDescription":{"text":"Keyboard semantics"},"helpUri":"https://codehealth.canine.dev/dimensions/AC4"},{"id":"AC5","name":"ARIA correctness","shortDescription":{"text":"ARIA correctness"},"helpUri":"https://codehealth.canine.dev/dimensions/AC5"},{"id":"AC6","name":"Visual \u0026 motion safety","shortDescription":{"text":"Visual \u0026 motion safety"},"helpUri":"https://codehealth.canine.dev/dimensions/AC6"},{"id":"AC7","name":"A11y enforcement","shortDescription":{"text":"A11y enforcement"},"helpUri":"https://codehealth.canine.dev/dimensions/AC7"},{"id":"AX10","name":"Code composition","shortDescription":{"text":"Code composition"},"helpUri":"https://codehealth.canine.dev/dimensions/AX10"},{"id":"AX3","name":"Project dependency cycles","shortDescription":{"text":"Project dependency cycles"},"helpUri":"https://codehealth.canine.dev/dimensions/AX3"},{"id":"AX5","name":"Architecture \u0026 structure","shortDescription":{"text":"Architecture \u0026 structure"},"helpUri":"https://codehealth.canine.dev/dimensions/AX5"},{"id":"AX7","name":"Slice cohesion","shortDescription":{"text":"Slice cohesion"},"helpUri":"https://codehealth.canine.dev/dimensions/AX7"},{"id":"AX8","name":"Test isolation","shortDescription":{"text":"Test isolation"},"helpUri":"https://codehealth.canine.dev/dimensions/AX8"},{"id":"AX9","name":"CQS / query purity","shortDescription":{"text":"CQS / query purity"},"helpUri":"https://codehealth.canine.dev/dimensions/AX9"},{"id":"AXB2","name":"Runtime readiness","shortDescription":{"text":"Runtime readiness"},"helpUri":"https://codehealth.canine.dev/dimensions/AXB2"},{"id":"ED1","name":"Handler temporal coupling","shortDescription":{"text":"Handler temporal coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/ED1"},{"id":"ES1","name":"Fold determinism","shortDescription":{"text":"Fold determinism"},"helpUri":"https://codehealth.canine.dev/dimensions/ES1"},{"id":"ES2","name":"Immutable events","shortDescription":{"text":"Immutable events"},"helpUri":"https://codehealth.canine.dev/dimensions/ES2"},{"id":"M1","name":"Documentation (README)","shortDescription":{"text":"Documentation (README)"},"helpUri":"https://codehealth.canine.dev/dimensions/M1"},{"id":"M2","name":"Architecture documentation","shortDescription":{"text":"Architecture documentation"},"helpUri":"https://codehealth.canine.dev/dimensions/M2"},{"id":"M3","name":"Folder \u0026 project structure","shortDescription":{"text":"Folder \u0026 project structure"},"helpUri":"https://codehealth.canine.dev/dimensions/M3"},{"id":"M4","name":"Documentation accuracy","shortDescription":{"text":"Documentation accuracy"},"helpUri":"https://codehealth.canine.dev/dimensions/M4"},{"id":"P1","name":"CI/CD gates","shortDescription":{"text":"CI/CD gates"},"helpUri":"https://codehealth.canine.dev/dimensions/P1"},{"id":"P10","name":"Library API \u0026 versioning","shortDescription":{"text":"Library API \u0026 versioning"},"helpUri":"https://codehealth.canine.dev/dimensions/P10"},{"id":"P12","name":"CI test-gate honesty","shortDescription":{"text":"CI test-gate honesty"},"helpUri":"https://codehealth.canine.dev/dimensions/P12"},{"id":"P2","name":"Observability","shortDescription":{"text":"Observability"},"helpUri":"https://codehealth.canine.dev/dimensions/P2"},{"id":"P3","name":"Security \u0026 performance tooling","shortDescription":{"text":"Security \u0026 performance tooling"},"helpUri":"https://codehealth.canine.dev/dimensions/P3"},{"id":"P4","name":"Deployment \u0026 Rollback","shortDescription":{"text":"Deployment \u0026 Rollback"},"helpUri":"https://codehealth.canine.dev/dimensions/P4"},{"id":"P5","name":"DR \u0026 Backup","shortDescription":{"text":"DR \u0026 Backup"},"helpUri":"https://codehealth.canine.dev/dimensions/P5"},{"id":"P6","name":"Release Hygiene","shortDescription":{"text":"Release Hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/P6"},{"id":"P7","name":"Outbound HTTP resilience","shortDescription":{"text":"Outbound HTTP resilience"},"helpUri":"https://codehealth.canine.dev/dimensions/P7"},{"id":"PF1","name":"Benchmark discipline","shortDescription":{"text":"Benchmark discipline"},"helpUri":"https://codehealth.canine.dev/dimensions/PF1"},{"id":"PF3","name":"Async \u0026 latency hygiene","shortDescription":{"text":"Async \u0026 latency hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/PF3"},{"id":"R1","name":"Type Safety","shortDescription":{"text":"Type Safety"},"helpUri":"https://codehealth.canine.dev/dimensions/R1"},{"id":"R10","name":"Code Duplication","shortDescription":{"text":"Code Duplication"},"helpUri":"https://codehealth.canine.dev/dimensions/R10"},{"id":"R2","name":"Cyclomatic Complexity","shortDescription":{"text":"Cyclomatic Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/R2"},{"id":"R3","name":"Large Files","shortDescription":{"text":"Large Files"},"helpUri":"https://codehealth.canine.dev/dimensions/R3"},{"id":"R4","name":"Test Coverage","shortDescription":{"text":"Test Coverage"},"helpUri":"https://codehealth.canine.dev/dimensions/R4"},{"id":"R5","name":"Dependency Freshness","shortDescription":{"text":"Dependency Freshness"},"helpUri":"https://codehealth.canine.dev/dimensions/R5"},{"id":"R6","name":"Tooling","shortDescription":{"text":"Tooling"},"helpUri":"https://codehealth.canine.dev/dimensions/R6"},{"id":"R7","name":"Dead Code","shortDescription":{"text":"Dead Code"},"helpUri":"https://codehealth.canine.dev/dimensions/R7"},{"id":"R8","name":"Dependency Hygiene","shortDescription":{"text":"Dependency Hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/R8"},{"id":"R9","name":"Circular Imports","shortDescription":{"text":"Circular Imports"},"helpUri":"https://codehealth.canine.dev/dimensions/R9"},{"id":"S1","name":"Web-Security Posture","shortDescription":{"text":"Web-Security Posture"},"helpUri":"https://codehealth.canine.dev/dimensions/S1"},{"id":"SC1","name":"Supply-chain hygiene","shortDescription":{"text":"Supply-chain hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/SC1"},{"id":"X10","name":"Duplicated predicate","shortDescription":{"text":"Duplicated predicate"},"helpUri":"https://codehealth.canine.dev/dimensions/X10"},{"id":"X6","name":"Hand-rolled structured-format parsing","shortDescription":{"text":"Hand-rolled structured-format parsing"},"helpUri":"https://codehealth.canine.dev/dimensions/X6"},{"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":"native.buildNativeFactory (cyclomatic 138): native.buildNativeFactory has cyclomatic complexity 138 (threshold 15). Of this number, 28 points are the body\u0027s own statements and 110 belong to 24 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/registry/native.ts"},"region":{"startLine":4033}}}],"partialFingerprints":{"codehealthFindingId/v1":"924d752d6ce93aafa1933a3792a876912d786d959a30a0b64c2eadadf2d4bcf8"}},{"ruleId":"D1","level":"warning","message":{"text":"traces.createTraces (cyclomatic 115): traces.createTraces has cyclomatic complexity 115 (threshold 15). Of this number, 110 points are the body\u0027s own statements and 5 belong to 3 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/traces/src/traces.ts"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"c52e9436f1ac00aad7ecd1edfb392350a4735cd6878696c3e5fb8b36bdd6ad27"}},{"ruleId":"D1","level":"warning","message":{"text":"logfmt_to_gantt.main (cyclomatic 100): logfmt_to_gantt.main has cyclomatic complexity 100 (threshold 15). Of this number, 89 points are the body\u0027s own statements and 11 belong to 4 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/debug/logfmt_to_gantt.ts"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a7478bb64a5f586f0d221217032e9e1aa2723673ca5a8fe22ccf7a9e4d35506"}},{"ruleId":"D1","level":"warning","message":{"text":"SubCommand::execute (cyclomatic 91): SubCommand::execute has cyclomatic complexity 91 (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":"engine/packages/engine/src/commands/udb/cli.rs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"237620f5ceb2a644a9525dc17aaa2e5861f863ca2b789d02482e1704b0f882ca"}},{"ruleId":"D1","level":"warning","message":{"text":"ProxyService::handle_websocket_upgrade (cyclomatic 75): ProxyService::handle_websocket_upgrade has cyclomatic complexity 75 (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":"engine/packages/guard-core/src/proxy_service.rs"},"region":{"startLine":1113}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0624f4e8464d9f6cf17d0a8d3a9860b483bd93725dd3b5900a2a97aa8dcb907"}},{"ruleId":"D1","level":"warning","message":{"text":"pegboard::workflows::actor::pegboard_actor (cyclomatic 70): pegboard::workflows::actor::pegboard_actor has cyclomatic complexity 70 (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":"engine/packages/pegboard/src/workflows/actor/mod.rs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fca6985f14caf01fc253600f6741742ff7411cd4ced6a3705c88b126687ff9d"}},{"ruleId":"D1","level":"warning","message":{"text":"Db::get_pages_with_options (cyclomatic 69): Db::get_pages_with_options has cyclomatic complexity 69 (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":"engine/packages/depot/src/conveyer/read.rs"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b38d69410f86b39ff2e14b545f9f11d31c0ebbd03ff81801c7b02023834f113"}},{"ruleId":"D1","level":"warning","message":{"text":"pegboard::workflows::actor2::process_signal (cyclomatic 51): pegboard::workflows::actor2::process_signal has cyclomatic complexity 51 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor2/mod.rs"},"region":{"startLine":635}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c84ea213f457f929f5d522198ee5304b4b45cab0ed113110581db05ef3d6a25"}},{"ruleId":"D1","level":"warning","message":{"text":"InFlightRequestHandle::send_message_admitted (cyclomatic 49): InFlightRequestHandle::send_message_admitted has cyclomatic complexity 49 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway3/src/shared_state.rs"},"region":{"startLine":821}}}],"partialFingerprints":{"codehealthFindingId/v1":"75d1c7a26580e81070a780d1c1d0957e1f23c0b873f9cc33b40901b58dbbd3c1"}},{"ruleId":"D1","level":"warning","message":{"text":"VfsContext::resolve_pages (cyclomatic 44): VfsContext::resolve_pages has cyclomatic complexity 44 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot-client/src/vfs.rs"},"region":{"startLine":1721}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6b938f1380c9df260c475d87fe5d509890b575eb1d1842ad3dcddc2795e6b66"}},{"ruleId":"D1","level":"warning","message":{"text":"rivet_engine::util::wf::print_history (cyclomatic 44): rivet_engine::util::wf::print_history has cyclomatic complexity 44 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/engine/src/util/wf/mod.rs"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea9450b0fb373abefdf580aaf9f8f3b190a481e68bef5306f067024e22f697f8"}},{"ruleId":"D1","level":"warning","message":{"text":"rivetkit_wasm::dispatch_event (cyclomatic 44): rivetkit_wasm::dispatch_event has cyclomatic complexity 44 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit-wasm/src/lib.rs"},"region":{"startLine":722}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7923937f23bb0ba1819c996b0d77b9597954e69e2454e7131b75e17d12a075f"}},{"ruleId":"D1","level":"warning","message":{"text":"WorkflowContextImpl.executeRace (cyclomatic 44): WorkflowContextImpl.executeRace has cyclomatic complexity 44 (threshold 15). Of this number, 30 points are the body\u0027s own statements and 14 belong to 2 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/workflow-engine/src/context.ts"},"region":{"startLine":2228}}}],"partialFingerprints":{"codehealthFindingId/v1":"dcf2ff47ae8cf294b607e71e07491a15e5b25f8c938699c31ba4d5e2aaeed869"}},{"ruleId":"D1","level":"warning","message":{"text":"RegistryDispatcher::handle_inspector_fetch (cyclomatic 42): RegistryDispatcher::handle_inspector_fetch has cyclomatic complexity 42 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/inspector.rs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"32f5b1bd929e06e94568f8abd1aad3099e9f2aeb38c5ac07bd2794ff6490bb9a"}},{"ruleId":"D1","level":"warning","message":{"text":"encoding.assertJsonCompatValue (cyclomatic 41): encoding.assertJsonCompatValue has cyclomatic complexity 41 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/encoding.ts"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b5964b6ff9ad07882a58e7da24dd68df390051030b470bea00f34d518092e6f"}},{"ruleId":"D1","level":"warning","message":{"text":"DatabaseKv::pull_workflows (cyclomatic 40): DatabaseKv::pull_workflows has cyclomatic complexity 40 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/mod.rs"},"region":{"startLine":1138}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf27e0059f08ff079fa2524f9864636680b0ade8ad6e36bd0dcb4333151c4eda"}},{"ruleId":"D1","level":"warning","message":{"text":"PegboardGateway2::handle_websocket_inner (cyclomatic 38): PegboardGateway2::handle_websocket_inner has cyclomatic complexity 38 (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":"engine/packages/pegboard-gateway2/src/lib.rs"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7c1b0d0b6ebab974cc3ab71292016425d3ad5928e21195abef857d04a6e903d"}},{"ruleId":"D1","level":"warning","message":{"text":"rivetkit_napi::napi_actor_events::dispatch_event (cyclomatic 38): rivetkit_napi::napi_actor_events::dispatch_event has cyclomatic complexity 38 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit-napi/src/napi_actor_events.rs"},"region":{"startLine":381}}}],"partialFingerprints":{"codehealthFindingId/v1":"e17a0b1ec7add144708cd57e26809a70be02308a707571a7302260cbb258c264"}},{"ruleId":"D1","level":"warning","message":{"text":"database-vfs.createDatabaseVfs (cyclomatic 38): database-vfs.createDatabaseVfs has cyclomatic complexity 38 (threshold 15). Of this number, 36 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. 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":"rivetkit-typescript/packages/rivetkit/src/agent-os/fs/database-vfs.ts"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"9eb8b14c9f284c110da50ad440ea926f90492e8371feb281aefc9cb1c25e7663"}},{"ruleId":"D1","level":"warning","message":{"text":"PegboardGateway3::handle_websocket_inner (cyclomatic 36): PegboardGateway3::handle_websocket_inner has cyclomatic complexity 36 (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":"engine/packages/pegboard-gateway3/src/lib.rs"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed8e5cf98012de140014c9bcdd547baf5f6c4d281eb2d225d20813a0bdedbadc"}},{"ruleId":"D1","level":"warning","message":{"text":"rivet_envoy_client::envoy::envoy_loop (cyclomatic 36): rivet_envoy_client::envoy::envoy_loop has cyclomatic complexity 36 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/envoy.rs"},"region":{"startLine":448}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca8158245ef97a9d6ecb47bc62aca029dd19b905f9a1325f9a3694a14fe07293"}},{"ruleId":"D1","level":"warning","message":{"text":"depot::workflows::db_hot_compactor::install_hot_chunk_tx (cyclomatic 35): depot::workflows::db_hot_compactor::install_hot_chunk_tx has cyclomatic complexity 35 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/workflows/db_hot_compactor.rs"},"region":{"startLine":912}}}],"partialFingerprints":{"codehealthFindingId/v1":"5774f1343f16b4fc47f096e07a5a33c158744950da0a99d3e11392c0898f43f5"}},{"ruleId":"D1","level":"warning","message":{"text":"rivet_envoy_client::actor::actor_inner (cyclomatic 35): rivet_envoy_client::actor::actor_inner has cyclomatic complexity 35 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/actor.rs"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"3209256b3db0a9e8a3960c73fd80a041177b898a2fa6815cc8ff94f142fbaf69"}},{"ruleId":"D1","level":"warning","message":{"text":"gen-api-reference.renderEndpoint (cyclomatic 34): gen-api-reference.renderEndpoint has cyclomatic complexity 34 (threshold 15). Of this number, 32 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/docs/gen-api-reference.mjs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"39be65bd75e4b0487948b3542003135582321c9ffa5494138b2ff70ec1287e90"}},{"ruleId":"D1","level":"warning","message":{"text":"index.main (cyclomatic 34): index.main has cyclomatic complexity 34 (threshold 15). Of this number, 32 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/skill-evals/src/index.ts"},"region":{"startLine":557}}}],"partialFingerprints":{"codehealthFindingId/v1":"658bc3d2d64ba64c6173ee77f2ee795b5a902d666090e18e7f7a13720f8e17a8"}},{"ruleId":"D1","level":"warning","message":{"text":"depot::compaction::shared::read_commit_delta_reclaim_window (cyclomatic 32): depot::compaction::shared::read_commit_delta_reclaim_window has cyclomatic complexity 32 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/compaction/shared.rs"},"region":{"startLine":972}}}],"partialFingerprints":{"codehealthFindingId/v1":"9cb5f5deec6ddf0867dd5b8309b5e5f6f4249392db004b717f5996c33c7c5667"}},{"ruleId":"D1","level":"warning","message":{"text":"depot::workflows::db_reclaimer::reclaim_fdb_job_tx (cyclomatic 32): depot::workflows::db_reclaimer::reclaim_fdb_job_tx has cyclomatic complexity 32 (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":"engine/packages/depot/src/workflows/db_reclaimer.rs"},"region":{"startLine":641}}}],"partialFingerprints":{"codehealthFindingId/v1":"da98dedf6c27c5367860f32a63fee35a86ef89b0535f72bf6d6f8ca558ac7e43"}},{"ruleId":"D1","level":"warning","message":{"text":"Runner.#openPegboardWebSocket (cyclomatic 30): Runner.#openPegboardWebSocket has cyclomatic complexity 30 (threshold 15). Most of this is not in the body itself: 5 of the 30 points are its own statements and the rest belongs to 5 function literals inside it that branch (lines 860, 982, 786, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/typescript/runner/src/mod.ts"},"region":{"startLine":756}}}],"partialFingerprints":{"codehealthFindingId/v1":"958361aeb4de4cc3ac0a0e50822b57794ff511d73c9449cf5ecd8bab037c66f6"}},{"ruleId":"D1","level":"warning","message":{"text":"pegboard_envoy::ws_to_tunnel_task::dispatch_message (cyclomatic 29): pegboard_envoy::ws_to_tunnel_task::dispatch_message has cyclomatic complexity 29 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs"},"region":{"startLine":685}}}],"partialFingerprints":{"codehealthFindingId/v1":"de73d672540a2415c6925d217624bade50ead2b323bf181a949cc284a07ce32a"}},{"ruleId":"D1","level":"warning","message":{"text":"RegistryDispatcher::handle_actor_connect_websocket (cyclomatic 29): RegistryDispatcher::handle_actor_connect_websocket has cyclomatic complexity 29 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/websocket.rs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"55f9443baaa6d4f469ef61f6bb67a432687c1856dac5489a1e4fd722cd31872d"}},{"ruleId":"D1","level":"warning","message":{"text":"Config::apply_dynamic (cyclomatic 28): Config::apply_dynamic has cyclomatic complexity 28 (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":"engine/packages/config/src/lib.rs"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"3580ddb516333fce53cb682ee3ad5e69910fc1dbbd0a25bfe8631ca45063776c"}},{"ruleId":"D1","level":"warning","message":{"text":"rivetkit_core::actor::actor_runtime_socket::serve_connection (cyclomatic 28): rivetkit_core::actor::actor_runtime_socket::serve_connection has cyclomatic complexity 28 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/actor_runtime_socket.rs"},"region":{"startLine":375}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac813306819371a1f9f55789e2708f65ae33759830487f5d28ef59664683e99e"}},{"ruleId":"D1","level":"warning","message":{"text":"WorkflowContextImpl.executeLoop (cyclomatic 28): WorkflowContextImpl.executeLoop has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/workflow-engine/src/context.ts"},"region":{"startLine":1150}}}],"partialFingerprints":{"codehealthFindingId/v1":"31f07f237986cd984914f3d8487558f028637817e6cc24fb7812187357573f20"}},{"ruleId":"D1","level":"warning","message":{"text":"version.bumpPackageJsons (cyclomatic 28): version.bumpPackageJsons has cyclomatic complexity 28 (threshold 15). Of this number, 26 points are the body\u0027s own statements and 2 belong to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/publish/src/lib/version.ts"},"region":{"startLine":187}}}],"partialFingerprints":{"codehealthFindingId/v1":"824c15c177bcc73816d4673faa3a35acb4da7457aeae9f5f2266eafac35d7d77"}},{"ruleId":"D1","level":"warning","message":{"text":"DatabaseKv::find_workflows (cyclomatic 27): DatabaseKv::find_workflows has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/debug.rs"},"region":{"startLine":301}}}],"partialFingerprints":{"codehealthFindingId/v1":"6acbb7c8357abde28913a57ecc3a970d10968c7cdc4231f388fb50a90ac760c6"}},{"ruleId":"D1","level":"warning","message":{"text":"rivet_guard_core::server::run_server (cyclomatic 27): rivet_guard_core::server::run_server has cyclomatic complexity 27 (threshold 15). Of this number, 24 points are the body\u0027s own statements and 3 belong to one function item inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/guard-core/src/server.rs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"361de50c1b5dd3955fb7f8024704f71906fe730bd0daf05f2c99f887b5e20fa4"}},{"ruleId":"D1","level":"warning","message":{"text":"pegboard_outbound::serverless_outbound_req (cyclomatic 27): pegboard_outbound::serverless_outbound_req has cyclomatic complexity 27 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-outbound/src/lib.rs"},"region":{"startLine":396}}}],"partialFingerprints":{"codehealthFindingId/v1":"55db899f49ab4f005f1107fa43141707281c3160abf16813969a8bb2ee5bd6ab"}},{"ruleId":"D1","level":"warning","message":{"text":"ProxyService::process (cyclomatic 26): ProxyService::process has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/guard-core/src/proxy_service.rs"},"region":{"startLine":376}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c7d71916eef2fa961ab640552ca18c1e13b33ddc861134eea14e28621889ccb"}},{"ruleId":"D1","level":"warning","message":{"text":"ResponseBody::poll_frame (cyclomatic 26): ResponseBody::poll_frame has cyclomatic complexity 26 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/guard-core/src/response_body.rs"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"85553eb2c2ab74bf3aa59365bf51122b85e9c34ab75375028595549276106385"}},{"ruleId":"D1","level":"warning","message":{"text":"PegboardGateway::handle_websocket_inner (cyclomatic 26): PegboardGateway::handle_websocket_inner has cyclomatic complexity 26 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/lib.rs"},"region":{"startLine":253}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fa12c9746e5cc3f1a7df87035ad8ef3a172403e6f591c6f9777295ce74f69dc"}},{"ruleId":"D1","level":"warning","message":{"text":"pegboard_runner::ws_to_tunnel_task::handle_message_mk2 (cyclomatic 26): pegboard_runner::ws_to_tunnel_task::handle_message_mk2 has cyclomatic complexity 26 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"47ec7b85f90ad421981c2a3effadbaedc2ea0018908ed3a0d95874ff17a1ff40"}},{"ruleId":"D1","level":"warning","message":{"text":"mod.db (cyclomatic 26): mod.db has cyclomatic complexity 26 (threshold 15). Most of this is not in the body itself: 1 of the 26 points is its own statement and the rest belongs to 8 function literals inside it that branch (lines 115, 191, 213, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/database/mod.ts"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b946e539d932027abba9c531fbe5ab408f0ffed562931c27b01cb0ebe794fd7"}},{"ruleId":"D1","level":"warning","message":{"text":"index.executeWorkflow (cyclomatic 26): index.executeWorkflow has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/workflow-engine/src/index.ts"},"region":{"startLine":953}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ca926dc707b92dc711e529cf2367ddf4e38898c52deb0e95f0a3745d20f2e08"}},{"ruleId":"D1","level":"warning","message":{"text":"depot::compaction::shared::read_hot_input_snapshot (cyclomatic 25): depot::compaction::shared::read_hot_input_snapshot has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/compaction/shared.rs"},"region":{"startLine":573}}}],"partialFingerprints":{"codehealthFindingId/v1":"21d64a3761b0f4504b163c5cb269c9be71b0fc335b41b9631c18244778109f82"}},{"ruleId":"D1","level":"warning","message":{"text":"rivet_engine::commands::wf::repair::execute (cyclomatic 25): rivet_engine::commands::wf::repair::execute has cyclomatic complexity 25 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/engine/src/commands/wf/repair.rs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cfd95287c14fb9f6f95fc34b19562ebb0a71b6efea10be14a9ec2441f1d4a76"}},{"ruleId":"D1","level":"warning","message":{"text":"pegboard::workflows::actor::handle_stopped (cyclomatic 25): pegboard::workflows::actor::handle_stopped has cyclomatic complexity 25 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/mod.rs"},"region":{"startLine":1047}}}],"partialFingerprints":{"codehealthFindingId/v1":"8762db803122a0f9bd516ed885ab75793a6256a7a716d7070e5a681c00160bae"}},{"ruleId":"D1","level":"warning","message":{"text":"pegboard::ops::runner_config::upsert::pegboard_runner_config_upsert (cyclomatic 25): pegboard::ops::runner_config::upsert::pegboard_runner_config_upsert has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/ops/runner_config/upsert.rs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"db89ac6bd831b64fae9f3d01666da9b098cf06195aeb9ee7a37a5896306e0b7f"}},{"ruleId":"D1","level":"warning","message":{"text":"WorkflowCtx::listen_n_until (cyclomatic 24): WorkflowCtx::listen_n_until has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/ctx/workflow.rs"},"region":{"startLine":929}}}],"partialFingerprints":{"codehealthFindingId/v1":"52841a8c61cab0e3fdabb37ba15dd3e944771b694b557017a1be2c83b73f412f"}},{"ruleId":"D1","level":"warning","message":{"text":"DatabaseKv::prune_workflow_history_inner (cyclomatic 24): DatabaseKv::prune_workflow_history_inner has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/debug.rs"},"region":{"startLine":1910}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5eb9dd19688d2daffc22e9b5befd6002aac7322e38a1e02b2b0a20396fd1368"}},{"ruleId":"D1","level":"warning","message":{"text":"rivet_service_manager::start (cyclomatic 24): rivet_service_manager::start has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/service-manager/src/lib.rs"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"604a61fcd08bcbd7736de433307b15d49bd74fa4e27467cd1ffd44303894e328"}},{"ruleId":"D1","level":"warning","message":{"text":"Runner.#openPegboardWebSocket (cyclomatic 24): Runner.#openPegboardWebSocket has cyclomatic complexity 24 (threshold 15). Most of this is not in the body itself: 5 of the 24 points are its own statements and the rest belongs to 5 function literals inside it that branch (lines 860, 947, 786, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/engine-runner/src/mod.ts"},"region":{"startLine":756}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d679ebe89188d58ee6d7fb889ce471ac5c8dcbb3b081e48ed081c14c1da39d4"}},{"ruleId":"D1","level":"warning","message":{"text":"encoding.encodeJsonCompatValue (cyclomatic 24): encoding.encodeJsonCompatValue has cyclomatic complexity 24 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/encoding.ts"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a46da383e17cef216776c78a3f06ddcd68934be972d7b93f4b4bb3e70e21a1e"}},{"ruleId":"D1","level":"warning","message":{"text":"WorkflowContextImpl.executeStep (cyclomatic 24): WorkflowContextImpl.executeStep has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/workflow-engine/src/context.ts"},"region":{"startLine":790}}}],"partialFingerprints":{"codehealthFindingId/v1":"8619bdcc6ef43a27fdc014bc30b1a39b4dd16ae98715acb00e0c5559ba9a3db8"}},{"ruleId":"D1","level":"warning","message":{"text":"WorkflowContextImpl.executeJoin (cyclomatic 24): WorkflowContextImpl.executeJoin has cyclomatic complexity 24 (threshold 15). Of this number, 12 points are the body\u0027s own statements and 12 belong to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/workflow-engine/src/context.ts"},"region":{"startLine":2016}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f66fa19020b5a69635e771eeaae625d5ec62daf3329d65d5dcbf553aa3474bb"}},{"ruleId":"D1","level":"warning","message":{"text":"depot::doctor::detect_unsupported (cyclomatic 23): depot::doctor::detect_unsupported has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/doctor.rs"},"region":{"startLine":1007}}}],"partialFingerprints":{"codehealthFindingId/v1":"98c8a0e2f746dbc03a948a6ac01c0746df8ca3b68f10d8ecd488e1d32971d796"}},{"ruleId":"D1","level":"warning","message":{"text":"DatabaseKv::prune_signals_inner (cyclomatic 23): DatabaseKv::prune_signals_inner has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/debug.rs"},"region":{"startLine":2094}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8ca6f566a2334a88494535d942f5b71acdf867cf1b925a65698dd1ed8f5dcc8"}},{"ruleId":"D1","level":"warning","message":{"text":"rivet_guard::routing::pegboard_gateway::handle_actor_v2 (cyclomatic 23): rivet_guard::routing::pegboard_gateway::handle_actor_v2 has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/guard/src/routing/pegboard_gateway/mod.rs"},"region":{"startLine":518}}}],"partialFingerprints":{"codehealthFindingId/v1":"d241c98b7c18c22f6aee7b01e096792f0a09dd0560640cb58fbf390d50add743"}},{"ruleId":"D1","level":"warning","message":{"text":"pegboard::actor_kv::preload::batch_preload (cyclomatic 23): pegboard::actor_kv::preload::batch_preload has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/actor_kv/preload.rs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a0f5e30652227c22fef460a2f307439efc33cc1a9628a0eecdcc06d5de8adb9"}},{"ruleId":"D1","level":"warning","message":{"text":"pegboard::workflows::runner::pegboard_runner (cyclomatic 23): pegboard::workflows::runner::pegboard_runner has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/runner.rs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d7a0742b6f338a05f37bb17f67dc3c5fcf3dda057bb148cbc7b2989b8c7e0d6"}},{"ruleId":"D1","level":"warning","message":{"text":"pegboard_gateway3::http_stream::response::drain_http_response_stream (cyclomatic 23): pegboard_gateway3::http_stream::response::drain_http_response_stream has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway3/src/http_stream/response.rs"},"region":{"startLine":222}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d0eeb96c07857d47c6b476eb0a1c0be83236018cc208a0a6477b647746cc756"}},{"ruleId":"D1","level":"warning","message":{"text":"rivet_envoy_client::actor::http::send_response (cyclomatic 23): rivet_envoy_client::actor::http::send_response has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/actor/http.rs"},"region":{"startLine":719}}}],"partialFingerprints":{"codehealthFindingId/v1":"da202f7e1a88f24077e7f2657cf72cc7ffd981d7307a9c3487fa1d8b370474b4"}},{"ruleId":"D1","level":"warning","message":{"text":"index.RegistryConfigSchema (cyclomatic 23): index.RegistryConfigSchema has cyclomatic complexity 23 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/registry/config/index.ts"},"region":{"startLine":309}}}],"partialFingerprints":{"codehealthFindingId/v1":"68a00f2b3e89c63a5df9ec271eb2a7e5242b5ad56dda02a65c73c413e221c753"}},{"ruleId":"D1","level":"warning","message":{"text":"Registry.handler (cyclomatic 23): Registry.handler has cyclomatic complexity 23 (threshold 15). Of this number, 12 points are the body\u0027s own statements and 11 belong to 3 function literals inside it that branch. 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":"rivetkit-typescript/packages/rivetkit/src/registry/index.ts"},"region":{"startLine":217}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f4aae7a2142ed36a76897d7bc8ed9269a2ff9cdd0d5cf3006c2749a5a059953"}},{"ruleId":"D1","level":"warning","message":{"text":"storage.flush (cyclomatic 23): storage.flush has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/workflow-engine/src/storage.ts"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ab7cc9dd10b8a88c2389a17ec5e81f545db503724bcca218540d560395faa99"}},{"ruleId":"D1","level":"warning","message":{"text":"gen-api-reference.exampleFor (cyclomatic 23): gen-api-reference.exampleFor has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/docs/gen-api-reference.mjs"},"region":{"startLine":741}}}],"partialFingerprints":{"codehealthFindingId/v1":"8609824bbce9fb1af56451e30a802f015e3df10f95dd76ad886f7ce39588794d"}},{"ruleId":"D1","level":"warning","message":{"text":"DatabaseKv::inspect_missing_init_state (cyclomatic 22): DatabaseKv::inspect_missing_init_state has cyclomatic complexity 22 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/repair.rs"},"region":{"startLine":1269}}}],"partialFingerprints":{"codehealthFindingId/v1":"2814106a1e5f3be44b36c7f17ad630818bb684d0e12c996ad4f0fa42037aa235"}},{"ruleId":"D1","level":"warning","message":{"text":"pegboard::workflows::actor::runtime::allocate_actor_v2 (cyclomatic 22): pegboard::workflows::actor::runtime::allocate_actor_v2 has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/runtime.rs"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c779daff651b89767dfe99ef628d18b952cb92b873b6164b9bc5549f912b9fa"}},{"ruleId":"D1","level":"warning","message":{"text":"pegboard::workflows::serverless::conn::outbound_req_inner (cyclomatic 22): pegboard::workflows::serverless::conn::outbound_req_inner has cyclomatic complexity 22 (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":"engine/packages/pegboard/src/workflows/serverless/conn.rs"},"region":{"startLine":198}}}],"partialFingerprints":{"codehealthFindingId/v1":"0290d9858f088eb7fb2ed8fbe3451c96fe0a7861a4e4edc7b714cde724cb0f2a"}},{"ruleId":"D1","level":"warning","message":{"text":"pegboard_runner::ws_to_tunnel_task::handle_message_mk1 (cyclomatic 22): pegboard_runner::ws_to_tunnel_task::handle_message_mk1 has cyclomatic complexity 22 (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":"engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs"},"region":{"startLine":501}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4fb69c5b39efa02fe83e710a1c8f5682526338fee516ed76a7981591b20d099"}},{"ruleId":"D1","level":"warning","message":{"text":"rivet_envoy_client::connection::wasm::imp::single_connection (cyclomatic 22): rivet_envoy_client::connection::wasm::imp::single_connection has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/connection/wasm.rs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc2edd5d691a84586662cbf8853598718b14c0802a8e9d247bd3bc24157ba85a"}},{"ruleId":"D1","level":"warning","message":{"text":"rivetkit::start::handle_actor_event (cyclomatic 22): rivetkit::start::handle_actor_event has cyclomatic complexity 22 (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":"rivetkit-rust/packages/rivetkit/src/start.rs"},"region":{"startLine":359}}}],"partialFingerprints":{"codehealthFindingId/v1":"983562228ee06fc6519070d97f50e2d88ae3c5c316430ab965a9b196db0086ca"}},{"ruleId":"D1","level":"warning","message":{"text":"packages.discoverPackages (cyclomatic 22): packages.discoverPackages has cyclomatic complexity 22 (threshold 15). Of this number, 14 points are the body\u0027s own statements and 8 belong to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/publish/src/lib/packages.ts"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"f02ff981be9999cbeaff7a7c9d9e717f9a6026c09033ac81523b3d2e80b74d57"}},{"ruleId":"D1","level":"warning","message":{"text":"SimpleTupleValue::write (cyclomatic 21): SimpleTupleValue::write has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/engine/src/util/udb.rs"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"090b89fc44f1a1d1719151a45d1d2909952c397b8d5a13408ce1240db026705a"}},{"ruleId":"D1","level":"warning","message":{"text":"epoxy::ops::kv::get::linearizable::read (cyclomatic 21): epoxy::ops::kv::get::linearizable::read has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/epoxy/src/ops/kv/get/linearizable.rs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf8ebfc5b29dc115362f136a2722292a530fc1d52030e5f0911eb2d50c7eb8ca"}},{"ruleId":"D1","level":"warning","message":{"text":"pegboard::workflows::actor2::runtime::handle_stopped (cyclomatic 21): pegboard::workflows::actor2::runtime::handle_stopped has cyclomatic complexity 21 (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":"engine/packages/pegboard/src/workflows/actor2/runtime.rs"},"region":{"startLine":558}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d54bc2738279f80c1984ac3b0d352077da4d3d381a5e63988ecfc20e56060c9"}},{"ruleId":"D1","level":"warning","message":{"text":"pegboard::workflows::actor::runtime::spawn_actor (cyclomatic 21): pegboard::workflows::actor::runtime::spawn_actor has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/runtime.rs"},"region":{"startLine":644}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c70d1a1ecfd876fc3d1690dfccee67c3bc811d5608439aa727d41570a13792a"}},{"ruleId":"D1","level":"warning","message":{"text":"ActorConfig::from_input (cyclomatic 21): ActorConfig::from_input has cyclomatic complexity 21 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/config.rs"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"2041ede993f59bdfe345d7e780e3fb7b949c5c8c0cf370e05f46a980fcde9f0e"}},{"ruleId":"D1","level":"warning","message":{"text":"mod.getOrCreateActor (cyclomatic 21): mod.getOrCreateActor has cyclomatic complexity 21 (threshold 15). Most of this is not in the body itself: 5 of the 21 points are its own statements and the rest belongs to 5 function literals inside it that branch (lines 276, 320, 300, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/framework-base/src/mod.ts"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1ecbf93f2c30327a5d79074fb9e6ebc6e8e4764f651b7c746558b72914bda2e"}},{"ruleId":"D1","level":"warning","message":{"text":"decode_fdb_tuple.decodeOne (cyclomatic 21): decode_fdb_tuple.decodeOne has cyclomatic complexity 21 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/debug/decode_fdb_tuple.js"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bd44c27ff6c998d743fa21e9a49d2f84c15b79b34da3466a91e882d9d518a41"}},{"ruleId":"D1","level":"warning","message":{"text":"index.convertExpr (cyclomatic 21): index.convertExpr has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/vbare-gen-converters/index.ts"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"820fdc1309d4ccc0c96e0a2d66735798d061b38a3e0ff025a582418136da9462"}},{"ruleId":"D1","level":"warning","message":{"text":"DatabaseKv::find_signals (cyclomatic 20): DatabaseKv::find_signals has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/debug.rs"},"region":{"startLine":1050}}}],"partialFingerprints":{"codehealthFindingId/v1":"520eab78b5fcf5cc7a508934b7a3e678b6ee1e07f6b510f87c89026e94342d4c"}},{"ruleId":"D1","level":"warning","message":{"text":"Cursor::compare_removed (cyclomatic 20): Cursor::compare_removed has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/history/cursor.rs"},"region":{"startLine":487}}}],"partialFingerprints":{"codehealthFindingId/v1":"e559a771d3c738e8c7e7148b24619319c65e9ee399e9922ee2b6dcbbba797c1a"}},{"ruleId":"D1","level":"warning","message":{"text":"pegboard::ops::actor::create::pegboard_actor_create (cyclomatic 20): pegboard::ops::actor::create::pegboard_actor_create has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/ops/actor/create.rs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a9422d4d4612ea4b730e5d3380c651782f436a1efee9e6b3263d63c234a073f"}},{"ruleId":"D1","level":"warning","message":{"text":"ActorTask::run_live (cyclomatic 20): ActorTask::run_live has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/task.rs"},"region":{"startLine":478}}}],"partialFingerprints":{"codehealthFindingId/v1":"df94bd3c9c91e98b5c3f0f779130a5123fdb6b091770e04a735fbd5287cd0d01"}},{"ruleId":"D1","level":"warning","message":{"text":"rivetkit_core::actor::migrate_kv_to_sqlite::import_core_state_if_needed_inner (cyclomatic 20): rivetkit_core::actor::migrate_kv_to_sqlite::import_core_state_if_needed_inner has cyclomatic complexity 20 (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":"rivetkit-rust/packages/rivetkit-core/src/actor/migrate_kv_to_sqlite/mod.rs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5a4e0c4453b3628d1693b2bc1d3d0e66467764e692ff5fc379cf3e7a4a1e5e2"}},{"ruleId":"D1","level":"warning","message":{"text":"drizzle.db (cyclomatic 20): drizzle.db has cyclomatic complexity 20 (threshold 15). Most of this is not in the body itself: 1 of the 20 points is its own statement and the rest belongs to 8 function literals inside it that branch (lines 235, 99, 129, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/db/drizzle.ts"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2f44224a5869e34c5c1bed43d2b20ab1ee21214d210f9e57ea4c5e841efd6d0"}},{"ruleId":"D1","level":"warning","message":{"text":"write-through-proxy.unwrapDeep (cyclomatic 20): write-through-proxy.unwrapDeep has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/registry/write-through-proxy.ts"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"24aebb66b2dbea09a02bef5010a8d0202e9087f5bd2810e8cc84979c9c32d6bd"}},{"ruleId":"D1","level":"warning","message":{"text":"depot::workflows::db_reclaimer::cleanup_repair_fdb_outputs_tx (cyclomatic 19): depot::workflows::db_reclaimer::cleanup_repair_fdb_outputs_tx has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/workflows/db_reclaimer.rs"},"region":{"startLine":1328}}}],"partialFingerprints":{"codehealthFindingId/v1":"662e9a9834224f4860cf232098c68f2fcd7989b9bcf0a6a98cd701c9124fb329"}},{"ruleId":"D1","level":"warning","message":{"text":"depot::doctor::doctor (cyclomatic 19): depot::doctor::doctor 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":"engine/packages/depot/src/doctor.rs"},"region":{"startLine":432}}}],"partialFingerprints":{"codehealthFindingId/v1":"075a38a1a273362de9fe48f5a06de261af29e766d22aebdc74c20a9ff60ee185"}},{"ruleId":"D1","level":"warning","message":{"text":"DatabaseKv::inspect_deallocate_set_error (cyclomatic 19): DatabaseKv::inspect_deallocate_set_error 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":"engine/packages/gasoline/src/db/kv/repair.rs"},"region":{"startLine":1552}}}],"partialFingerprints":{"codehealthFindingId/v1":"12073658f8527fa404486625bcbce634183d96d570d011f8ee1c49262e71dca6"}},{"ruleId":"D1","level":"warning","message":{"text":"ProxyService::handle_http_request (cyclomatic 19): ProxyService::handle_http_request has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/guard-core/src/proxy_service.rs"},"region":{"startLine":833}}}],"partialFingerprints":{"codehealthFindingId/v1":"56a917913fdb5a80f62ea6aceed0aee0e8a90fbf0aebd4eb1e34c101083ec492"}},{"ruleId":"D1","level":"warning","message":{"text":"PegboardEnvoyWs::handle_websocket (cyclomatic 19): PegboardEnvoyWs::handle_websocket has cyclomatic complexity 19 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-envoy/src/lib.rs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"396cad85a9bc7f0ab7df49b7cf5941bdd4637ba9b0f7ac54565c89ed9f1b87c1"}},{"ruleId":"D1","level":"warning","message":{"text":"ToServerMk2::v6_to_v7 (cyclomatic 19): ToServerMk2::v6_to_v7 has cyclomatic complexity 19 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This shape REPEATS in the file: one other method here (ToServerMk2::v7_to_v6) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/runner-protocol/src/versioned.rs"},"region":{"startLine":666}}}],"partialFingerprints":{"codehealthFindingId/v1":"7338d5d9f80970ff01fcaa04a626af6efb6208b3135166c5f8eec96166e69f1e"}},{"ruleId":"D1","level":"warning","message":{"text":"ToServerMk2::v7_to_v6 (cyclomatic 19): ToServerMk2::v7_to_v6 has cyclomatic complexity 19 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This shape REPEATS in the file: one other method here (ToServerMk2::v6_to_v7) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/runner-protocol/src/versioned.rs"},"region":{"startLine":833}}}],"partialFingerprints":{"codehealthFindingId/v1":"6dd664bb4e7fba079940fa48955df8a8beb75d3acbe5602a702de09aa7e3f5a4"}},{"ruleId":"D1","level":"warning","message":{"text":"TransactionOperations::get_key (cyclomatic 19): TransactionOperations::get_key has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universaldb/src/tx_ops.rs"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"f47bac7f357c4f5c5df1b64b656649631dd5d4b8ee2dbffffe890e1c24e81dda"}},{"ruleId":"D1","level":"warning","message":{"text":"universaldb::driver::postgres::resolver::drain_batch (cyclomatic 19): universaldb::driver::postgres::resolver::drain_batch has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universaldb/src/driver/postgres/resolver/mod.rs"},"region":{"startLine":419}}}],"partialFingerprints":{"codehealthFindingId/v1":"718bd937980c45b234c15e6728b6d550f3550ddd686e787e984efbebe171325c"}},{"ruleId":"D1","level":"warning","message":{"text":"rivet_envoy_client::tunnel::handle_tunnel_message (cyclomatic 19): rivet_envoy_client::tunnel::handle_tunnel_message has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/tunnel.rs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"e121764f493a7368f897b579f56d14b665344ff3fe8a6b5324f3b747552dd663"}},{"ruleId":"D1","level":"warning","message":{"text":"rivet_envoy_client::connection::native::single_connection (cyclomatic 19): rivet_envoy_client::connection::native::single_connection has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/connection/native.rs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"1cd1776fa12adf25084082f69bb520457839947c96eab9caaa91b2d5e04d0a44"}},{"ruleId":"D1","level":"warning","message":{"text":"ActorContext::teardown_sleep_state (cyclomatic 19): ActorContext::teardown_sleep_state has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/sleep.rs"},"region":{"startLine":775}}}],"partialFingerprints":{"codehealthFindingId/v1":"32049f6045b3433ac5df64d2a3341da981bff841ce74c994e593b2cceb3fe6c6"}},{"ruleId":"D1","level":"warning","message":{"text":"rivetkit_core::actor::actor_runtime_socket::execute_request (cyclomatic 19): rivetkit_core::actor::actor_runtime_socket::execute_request has cyclomatic complexity 19 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/actor_runtime_socket.rs"},"region":{"startLine":673}}}],"partialFingerprints":{"codehealthFindingId/v1":"e09190fa23b38b6875f98f96541f2be747d25221b1407a34f9a358148af1f9a4"}},{"ruleId":"D1","level":"warning","message":{"text":"ActorHandleRaw.#sendActionAttempts (cyclomatic 19): ActorHandleRaw.#sendActionAttempts has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/client/actor-handle.ts"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"06ff52a34f94d96608220f2b5ac74c708da26b4e65bf58abd4fc538602baafcf"}},{"ruleId":"D1","level":"warning","message":{"text":"useDraggable.useDraggable (cyclomatic 19): useDraggable.useDraggable has cyclomatic complexity 19 (threshold 15). Most of this is not in the body itself: 1 of the 19 points is its own statement and the rest belongs to 4 function literals inside it that branch (lines 57, 40, 24, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/devtools/src/hooks/useDraggable.ts"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"50e907a8d11ba3837af98a496f690c2c378d46a7b16d0bd9a208c296982d04e3"}},{"ruleId":"D1","level":"warning","message":{"text":"encoding.reviveJsonCompatValue (cyclomatic 19): encoding.reviveJsonCompatValue has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/encoding.ts"},"region":{"startLine":377}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2ffef79fc5b64c4b3c102d5d8f01239b88b3c8c5b8ca864257b8f7d25c496ab"}},{"ruleId":"D1","level":"warning","message":{"text":"native-database.wrapJsNativeDatabase (cyclomatic 19): native-database.wrapJsNativeDatabase has cyclomatic complexity 19 (threshold 15). Of this number, 13 points are the body\u0027s own statements and 6 belong to 4 function literals inside it that branch. 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":"rivetkit-typescript/packages/rivetkit/src/common/database/native-database.ts"},"region":{"startLine":326}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e94428c9512aeda5cb413bee003fc0b24aa5cdc4f06644c378611296758ddcb"}},{"ruleId":"D1","level":"warning","message":{"text":"gen-api-reference.renderProtocolPage (cyclomatic 19): gen-api-reference.renderProtocolPage has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/docs/gen-api-reference.mjs"},"region":{"startLine":330}}}],"partialFingerprints":{"codehealthFindingId/v1":"89c919edbc97dff8d347272c0fee596b66e7f63e2db53a3624839620f12f6c44"}},{"ruleId":"D1","level":"warning","message":{"text":"KeyRingCache::fetch_and_cache (cyclomatic 18): KeyRingCache::fetch_and_cache 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":"engine/packages/auth-jwt/src/key_ring_cache/refresh.rs"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"307e20adcf835255b9531898c1295179ff7dee49f40c6a12989f4b8f8fd4f424"}},{"ruleId":"D1","level":"warning","message":{"text":"rivet_cli::util::build_resources (cyclomatic 18): rivet_cli::util::build_resources has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/cli/src/util.rs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"deda9e26af0124b26dd055bc02efd357c0137a240c0588fc1ea8b693610d09f6"}},{"ruleId":"D1","level":"warning","message":{"text":"depot::doctor::load_storage_facts (cyclomatic 18): depot::doctor::load_storage_facts has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/doctor.rs"},"region":{"startLine":1252}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c90a41349146f477e4f563e0cf82ce527bf6d85eb79731f6ffb554ea702055b"}},{"ruleId":"D1","level":"warning","message":{"text":"DatabaseKv::backfill_dead_workflows (cyclomatic 18): DatabaseKv::backfill_dead_workflows has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/debug.rs"},"region":{"startLine":1328}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c2da933657e8125d5b6acbf66f5e202e62360f3611f266f377beec9885e5fb9"}},{"ruleId":"D1","level":"warning","message":{"text":"DatabaseKv::inspect_orphaned_sleep_state (cyclomatic 18): DatabaseKv::inspect_orphaned_sleep_state 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":"engine/packages/gasoline/src/db/kv/repair.rs"},"region":{"startLine":1782}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe93bd99d7a95eb5bb7ae4e548c5c46224da859a87c7182f978b65b4fbc1c4e1"}},{"ruleId":"D1","level":"warning","message":{"text":"DatabaseKv::verify_deallocate_set_error (cyclomatic 18): DatabaseKv::verify_deallocate_set_error 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":"engine/packages/gasoline/src/db/kv/repair.rs"},"region":{"startLine":2315}}}],"partialFingerprints":{"codehealthFindingId/v1":"439483075678bf10aa3f8dc0fd0d6a6911b7f6cef232f8b888264942fec796c2"}},{"ruleId":"D1","level":"warning","message":{"text":"pegboard::workflows::actor2::alloc_serverful::hash::allocate_with_rng (cyclomatic 18): pegboard::workflows::actor2::alloc_serverful::hash::allocate_with_rng has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor2/alloc_serverful/hash.rs"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"d630c0868aec9d532b1489e7deb443e0a6175ef3dadb0f0837527d74504dcc2b"}},{"ruleId":"D1","level":"warning","message":{"text":"pegboard::ops::serverless_metadata::fetch::pegboard_serverless_metadata_fetch (cyclomatic 18): pegboard::ops::serverless_metadata::fetch::pegboard_serverless_metadata_fetch 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":"engine/packages/pegboard/src/ops/serverless_metadata/fetch.rs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"07a288cf3bcb79440eaa324b44b4ad794d0442eb99f6efe0790cab35b1ce2424"}},{"ruleId":"D1","level":"warning","message":{"text":"pegboard::workflows::actor_migration_fix_backfill::backfill_chunk (cyclomatic 18): pegboard::workflows::actor_migration_fix_backfill::backfill_chunk has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor_migration_fix_backfill.rs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff9532a3325eabdc92980c8669cc34ca6efdf154cba6d80176bf0d8253d1adcf"}},{"ruleId":"D1","level":"warning","message":{"text":"pegboard_gateway3::http_stream::request::send_streaming_http_request_body_chunks (cyclomatic 18): pegboard_gateway3::http_stream::request::send_streaming_http_request_body_chunks has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway3/src/http_stream/request.rs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a46c7bede5e97da442ded7b4e58b022c8a93621fca2d5633aaa735711502a5e"}},{"ruleId":"D1","level":"warning","message":{"text":"ThrottleState::flush (cyclomatic 18): ThrottleState::flush has cyclomatic complexity 18 (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":"engine/packages/universaldb/src/throttle.rs"},"region":{"startLine":545}}}],"partialFingerprints":{"codehealthFindingId/v1":"df99d483d4c81c4f0fd0b57c828e419b279086cb32dae7fa4febf53f546cbc27"}},{"ruleId":"D1","level":"warning","message":{"text":"RegistryDispatcher::handle_inspector_websocket (cyclomatic 18): RegistryDispatcher::handle_inspector_websocket 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. This is NOT this file\u0027s highest cyclomatic complexity: rivetkit_core::registry::inspector_ws::server_message_kind (cyclomatic 20) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/inspector_ws.rs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f493daa976e6d3db7d7e9bf632c374dfba7046f5e6019f3277ee87c600000f7"}},{"ruleId":"D1","level":"warning","message":{"text":"CBORSupport.jsonValue (cyclomatic 18): CBORSupport.jsonValue 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":"rivetkit-swift/Sources/RivetKitClient/CBORSupport.swift"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"4cdc2cf45211351935fc1f08bc9eb6ef57dd4b4ab3ad7462b3813bd74cff5c83"}},{"ruleId":"D1","level":"warning","message":{"text":"lifecycle-errors.classifyActorError (cyclomatic 18): lifecycle-errors.classifyActorError has cyclomatic complexity 18 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/client/lifecycle-errors.ts"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"35060374b9f32c47e78892039d86ed940766a302931a3e6d37c1bea1c533d3ff"}},{"ruleId":"D1","level":"warning","message":{"text":"ActorConnRaw.#handleOnClose (cyclomatic 18): ActorConnRaw.#handleOnClose has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/client/actor-conn.ts"},"region":{"startLine":867}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0a39736bf8195e9b6e0834a761c7547ce328743949165dd5e520dad4b8529a0"}},{"ruleId":"D1","level":"warning","message":{"text":"ActorHandleRaw.#fetchWithResolvedActor (cyclomatic 18): ActorHandleRaw.#fetchWithResolvedActor has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/client/actor-handle.ts"},"region":{"startLine":704}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d527e274b48d380553c1396d57727189b02e19b7a5cf031a12dc692da40daf9"}},{"ruleId":"D1","level":"warning","message":{"text":"index.runWorkflow (cyclomatic 18): index.runWorkflow 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":"rivetkit-typescript/packages/workflow-engine/src/index.ts"},"region":{"startLine":632}}}],"partialFingerprints":{"codehealthFindingId/v1":"75c90323d7a8a5e666ab38042feb6fe85c1db0dd28ce51612b4263fa844e2908"}},{"ruleId":"D1","level":"warning","message":{"text":"gen-api-reference.typeLabel (cyclomatic 18): gen-api-reference.typeLabel 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":"scripts/docs/gen-api-reference.mjs"},"region":{"startLine":646}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbf985841537defb50c1032b145aba0909670090724e51c56dc73916e769aed6"}},{"ruleId":"D1","level":"warning","message":{"text":"index.renderUnion (cyclomatic 18): index.renderUnion has cyclomatic complexity 18 (threshold 15). Of this number, 14 points are the body\u0027s own statements and 4 belong to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/vbare-gen-converters/index.ts"},"region":{"startLine":339}}}],"partialFingerprints":{"codehealthFindingId/v1":"3348a0233eb428302905b6ea1fe005ea37961e1c7c3ad9724e85cc13d840205b"}},{"ruleId":"D1","level":"warning","message":{"text":"depot::conveyer::read::sqlite_page::overflow_head_pages (cyclomatic 17): depot::conveyer::read::sqlite_page::overflow_head_pages has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/conveyer/read/sqlite_page.rs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"db98e6c91a53a59ed14f769770c4f13b773033c098dd09771bb9ead9ca0b3923"}},{"ruleId":"D1","level":"warning","message":{"text":"DatabaseKv::publish_metrics (cyclomatic 17): DatabaseKv::publish_metrics has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/mod.rs"},"region":{"startLine":676}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3e593a311b1058b6e3cad8f2805900882ae71c7ad3cee1efd697fecf136b00e"}},{"ruleId":"D1","level":"warning","message":{"text":"DatabaseKv::inspect_loop_iteration_mismatch (cyclomatic 17): DatabaseKv::inspect_loop_iteration_mismatch 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":"engine/packages/gasoline/src/db/kv/repair.rs"},"region":{"startLine":817}}}],"partialFingerprints":{"codehealthFindingId/v1":"3910703aeee583b4ca314df3a6b9247913338cf91e8450b11cfb9853ccef3317"}},{"ruleId":"D1","level":"warning","message":{"text":"SqliteDb::release_transaction (cyclomatic 17): SqliteDb::release_transaction has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/tx.rs"},"region":{"startLine":861}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d3de3bf9e1d3671a7a34f344bb0636736da9bd01927a1b4607f11cb5e057e58"}},{"ruleId":"D1","level":"warning","message":{"text":"CBORWire.jsonValue (cyclomatic 17): CBORWire.jsonValue has cyclomatic complexity 17 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift"},"region":{"startLine":1051}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f1ce8a7f932e442df5bb8d4d2d9918bd0ac9e033aed8f7899da671ab5c6147c"}},{"ruleId":"D1","level":"warning","message":{"text":"ws-proxy.createWebSocketProxy (cyclomatic 17): ws-proxy.createWebSocketProxy has cyclomatic complexity 17 (threshold 15). Most of this is not in the body itself: 1 of the 17 points is its own statement and the rest belongs to 6 function literals inside it that branch (lines 111, 145, 78, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/engine-client/ws-proxy.ts"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"13e8e9570c6e4944598a645178d1670307c9681b2ce8ae0c5a148fd99bb6bd8b"}},{"ruleId":"D1","level":"warning","message":{"text":"docker-compose.generateDockerCompose (cyclomatic 17): docker-compose.generateDockerCompose has cyclomatic complexity 17 (threshold 15). Most of this is not in the body itself: 5 of the 17 points are its own statements and the rest belongs to one function literal inside it that branches (line 116). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"self-host/compose/template/src/docker-compose.ts"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"a39b0d56b503a0bcf46b13e615a43402fe2bd8a523cc794a192b877f83e27e62"}},{"ruleId":"D1","level":"warning","message":{"text":"VirtualWebSocket.#dispatch (cyclomatic 17): VirtualWebSocket.#dispatch has cyclomatic complexity 17 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"shared/typescript/virtual-websocket/src/virtual-websocket.ts"},"region":{"startLine":250}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d77def2c3ead167883ff672b6d46071912dbe44d6d95339ae86cb7756ee8fd1"}},{"ruleId":"D1","level":"warning","message":{"text":"depot::conveyer::read::scan_source_delta_history (cyclomatic 16): depot::conveyer::read::scan_source_delta_history 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":"engine/packages/depot/src/conveyer/read.rs"},"region":{"startLine":1575}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7cfee205bbb411a0bb0046f0f55fa5bb436d225483e039ffa0da2dd45c8ff3d"}},{"ruleId":"D1","level":"warning","message":{"text":"depot::recovery::scan_hot_shard_history_branch (cyclomatic 16): depot::recovery::scan_hot_shard_history_branch 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":"engine/packages/depot/src/recovery.rs"},"region":{"startLine":376}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5807765701055e8c46de780f4880d3fbad5fb3f4b625386f4cffa90c9ba4985"}},{"ruleId":"D1","level":"warning","message":{"text":"SimpleTupleValue::parse_str_with_type_hint (cyclomatic 16): SimpleTupleValue::parse_str_with_type_hint has cyclomatic complexity 16 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This is NOT this file\u0027s highest cyclomatic complexity: SimpleTupleValue::deserialize (cyclomatic 17) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/engine/src/util/udb.rs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"f802b496350008fcdf35bd4ce999b2b019d610ca9c2692684570fb731592708d"}},{"ruleId":"D1","level":"warning","message":{"text":"epoxy::ops::propose::epoxy_propose (cyclomatic 16): epoxy::ops::propose::epoxy_propose has cyclomatic complexity 16 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/epoxy/src/ops/propose.rs"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4ccd847a3dd9f17bad84106d94acafb04e7d85376633beb5fc56a97ec4077ca"}},{"ruleId":"D1","level":"warning","message":{"text":"SignalBuilder::send (cyclomatic 16): SignalBuilder::send 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":"engine/packages/gasoline/src/builder/workflow/signal.rs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"061151badc046e4661ae27dfa9932dcb8cad7689e5a918faeca078eae305bad2"}},{"ruleId":"D1","level":"warning","message":{"text":"Worker::start (cyclomatic 16): Worker::start 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":"engine/packages/gasoline/src/worker.rs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"16b881698a792da24a86c591e7de0a6b7abeb199f8a5f31049542d2ea3bd6d63"}},{"ruleId":"D1","level":"warning","message":{"text":"AddressClass::of_ipv4 (cyclomatic 16): AddressClass::of_ipv4 has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/outbound-guard/src/policy.rs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c68100eef7256ae3f9ecf9866bbb65e671098a2c78cde9bfbf8e41acfa269eb"}},{"ruleId":"D1","level":"warning","message":{"text":"pegboard::ops::actor::list_for_ns::pegboard_actor_list_for_ns (cyclomatic 16): pegboard::ops::actor::list_for_ns::pegboard_actor_list_for_ns 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":"engine/packages/pegboard/src/ops/actor/list_for_ns.rs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3ef7be796fcfa5c18eae34cb2e832aa746cd26835521e6fdf768314b066c83a"}},{"ruleId":"D1","level":"warning","message":{"text":"pegboard::ops::runner::list_for_ns::pegboard_runner_list_for_ns (cyclomatic 16): pegboard::ops::runner::list_for_ns::pegboard_runner_list_for_ns 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":"engine/packages/pegboard/src/ops/runner/list_for_ns.rs"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"754562eb97e69369e8989dea36d18be867c68f2c7fdf7d129a08ea0b712dbd2e"}},{"ruleId":"D1","level":"warning","message":{"text":"pegboard::workflows::actor2::listen_for_signals (cyclomatic 16): pegboard::workflows::actor2::listen_for_signals 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":"engine/packages/pegboard/src/workflows/actor2/mod.rs"},"region":{"startLine":469}}}],"partialFingerprints":{"codehealthFindingId/v1":"50fbc27c5b92d91b6640b690c71141d13487fbe21f359ece87817bb4248c3218"}},{"ruleId":"D1","level":"warning","message":{"text":"pegboard_envoy::conn::init_conn (cyclomatic 16): pegboard_envoy::conn::init_conn 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":"engine/packages/pegboard-envoy/src/conn.rs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c3aa783be35f5e64658c0842a4e08e5cb6f3fd8d17d4ef0cec7793d59def767"}},{"ruleId":"D1","level":"warning","message":{"text":"TransactionTask::handle_commit (cyclomatic 16): TransactionTask::handle_commit 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":"engine/packages/universaldb/src/driver/rocksdb/transaction_task.rs"},"region":{"startLine":270}}}],"partialFingerprints":{"codehealthFindingId/v1":"878f58d822af33d1ace3844c65b0056bdddec046201cc5a41243b3185f1b602f"}},{"ruleId":"D1","level":"warning","message":{"text":"universalpubsub::subject::subject_root_from_str (cyclomatic 16): universalpubsub::subject::subject_root_from_str has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universalpubsub/src/subject.rs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"9448e3c43ec02e985fd6cd09df35d28aabb034982b4addc75bd13d6be756e09e"}},{"ruleId":"D1","level":"warning","message":{"text":"rivet_envoy_client::actor::http::handle_req_chunk (cyclomatic 16): rivet_envoy_client::actor::http::handle_req_chunk 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":"engine/sdks/rust/envoy-client/src/actor/http.rs"},"region":{"startLine":446}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c26df8878d663b4b7a3039f420d64f26824f6ce2f3280777d5e7dcc748e02ab"}},{"ruleId":"D1","level":"warning","message":{"text":"ActorContext::apply_state_deltas_inner (cyclomatic 16): ActorContext::apply_state_deltas_inner has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/state.rs"},"region":{"startLine":585}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f27dde398ea08f0f5a509cd896bcdd89b78c21e5d566d29c4b995d9002a6480"}},{"ruleId":"D1","level":"warning","message":{"text":"Runner.shutdown (cyclomatic 16): Runner.shutdown has cyclomatic complexity 16 (threshold 15). Of this number, 15 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. 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":"engine/sdks/typescript/runner/src/mod.ts"},"region":{"startLine":513}}}],"partialFingerprints":{"codehealthFindingId/v1":"8879fb3d7518b7bf5cb784959095762310dbf31f979e712193916045aaf32ff7"}},{"ruleId":"D1","level":"warning","message":{"text":"run.startMockWorkflowApp (cyclomatic 16): run.startMockWorkflowApp has cyclomatic complexity 16 (threshold 15). Most of this is not in the body itself: 1 of the 16 points is its own statement and the rest belongs to 2 function literals inside it that branch (lines 302, 373). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"integrations/workflow-world/scripts/integration/run.ts"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"dcce036c2b6b1db985f79a5cd018912436869a5be9e2d4f0a2eed74d78372fe0"}},{"ruleId":"D1","level":"warning","message":{"text":"Runner.shutdown (cyclomatic 16): Runner.shutdown has cyclomatic complexity 16 (threshold 15). Of this number, 15 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. 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":"rivetkit-typescript/packages/engine-runner/src/mod.ts"},"region":{"startLine":513}}}],"partialFingerprints":{"codehealthFindingId/v1":"e81a70d5d5c254e2ce098cf30593e920617f7118a3dda63b73f2fee271040fc6"}},{"ruleId":"D1","level":"warning","message":{"text":"otlp.anyValueFromJs (cyclomatic 16): otlp.anyValueFromJs has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/traces/src/otlp.ts"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2323fc5a6b3f411d16da52c77fa3b2ae1ffb39a9a4ed6aa89c35803c5042bae"}},{"ruleId":"D1","level":"warning","message":{"text":"debug_mermaid.main (cyclomatic 16): debug_mermaid.main has cyclomatic complexity 16 (threshold 15). Of this number, 14 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/debug/debug_mermaid.ts"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"536c305f04a06c7a477d7e97b2d5deb509eea5f003cf5a9be689ee296905373c"}},{"ruleId":"D1","level":"warning","message":{"text":"gen-api-reference.stringExample (cyclomatic 16): gen-api-reference.stringExample has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/docs/gen-api-reference.mjs"},"region":{"startLine":793}}}],"partialFingerprints":{"codehealthFindingId/v1":"55f020db2ecc32101902068573aef0ee718f672289ce1d9c72f7909abed580f5"}},{"ruleId":"D1","level":"warning","message":{"text":"context.resolveContext (cyclomatic 16): context.resolveContext has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/publish/src/lib/context.ts"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab9d66ff6f6e012dc228acc5731bbba77452db23105d532a0c81a5fb7dfa82e7"}},{"ruleId":"D2","level":"warning","message":{"text":"SubCommand::execute (cognitive 247): SubCommand::execute has cognitive complexity 247 (threshold 15). Drivers by points: if/else 59 (168 pts), match/switch 18 (49 pts), loops 8 (27 pts), boolean chains 3 (nesting depth added 159). 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":"engine/packages/engine/src/commands/udb/cli.rs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"04d164b05c85f9730ecb8ca0b066a6be2c4c0816119798af8fa44aff0b5d36a3"}},{"ruleId":"D2","level":"warning","message":{"text":"logfmt_to_gantt.main (cognitive 185): logfmt_to_gantt.main has cognitive complexity 185 (threshold 15). Drivers by points: if/else 52 (103 pts), ternaries 12 (39 pts), boolean chains 27, loops 8 (16 pts) (nesting depth added 86). Of this number, 177 points are the body\u0027s own statements and 8 belong to 4 function literals inside it that branch. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/debug/logfmt_to_gantt.ts"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9d98c45294cefd5e8d9466c4e3f188616f97a5fa619adc7ad8af8890816ff9e"}},{"ruleId":"D2","level":"warning","message":{"text":"ProxyService::handle_websocket_upgrade (cognitive 181): ProxyService::handle_websocket_upgrade has cognitive complexity 181 (threshold 15). Drivers by points: match/switch 33 (103 pts), if/else 24 (68 pts), loops 4 (8 pts), boolean chains 2 (nesting depth added 118). 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":"engine/packages/guard-core/src/proxy_service.rs"},"region":{"startLine":1113}}}],"partialFingerprints":{"codehealthFindingId/v1":"f95e6fd28d5eff4fb3f84a361b570d467841cdd2e4e3f62fe12d72ec02387d2d"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard::workflows::actor::pegboard_actor (cognitive 175): pegboard::workflows::actor::pegboard_actor has cognitive complexity 175 (threshold 15). Drivers by points: if/else 43 (111 pts), match/switch 16 (59 pts), loops 2 (4 pts), boolean chains 1 (nesting depth added 113). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/mod.rs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"431b7f4d42676e6b643fbc3426d7a89c61be2b1ab1ded88aec97b77ef577f128"}},{"ruleId":"D2","level":"warning","message":{"text":"native.buildNativeFactory (cognitive 174): native.buildNativeFactory has cognitive complexity 174 (threshold 15). Drivers by points: if/else 51 (68 pts), ternaries 39 (56 pts), boolean chains 34, error handling 8 (14 pts), loops 1 (2 pts) (nesting depth added 41). Of this number, 25 points are the body\u0027s own statements and 149 belong to 24 function literals inside it that branch. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/registry/native.ts"},"region":{"startLine":4033}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0e9319cb4d8b732427697430e26df7ff177efc8f154a8b9fd5e546f411c3d30"}},{"ruleId":"D2","level":"warning","message":{"text":"traces.createTraces (cognitive 144): traces.createTraces has cognitive complexity 144 (threshold 15). Drivers by points: if/else 63 (89 pts), loops 20 (24 pts), ternaries 9 (12 pts), boolean chains 10, error handling 4 (7 pts), match/switch 2 (nesting depth added 36). Of this number, 140 points are the body\u0027s own statements and 4 belong to 3 function literals inside it that branch. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/traces/src/traces.ts"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5366f64244cfdf7c97ef60a836564ce97d1a23a62d8622a5a015c7d09da1588"}},{"ruleId":"D2","level":"warning","message":{"text":"Db::get_pages_with_options (cognitive 139): Db::get_pages_with_options has cognitive complexity 139 (threshold 15). Drivers by points: if/else 59 (115 pts), loops 10 (12 pts), match/switch 3 (7 pts), boolean chains 5 (nesting depth added 62). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/conveyer/read.rs"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"4759b46e01f70a9d09e8d02fc323d2771fc0e88c363f2b7c41c63e3c50b7e972"}},{"ruleId":"D2","level":"warning","message":{"text":"InFlightRequestHandle::send_message_admitted (cognitive 104): InFlightRequestHandle::send_message_admitted has cognitive complexity 104 (threshold 15). Drivers by points: if/else 38 (89 pts), boolean chains 12, match/switch 1 (2 pts), loops 1 (nesting depth added 52). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway3/src/shared_state.rs"},"region":{"startLine":821}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce26a5f9ea8cf446b3bb1aeea803b99a07ecacbbed718d7ebc08a45bc85b27da"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_engine::util::wf::print_history (cognitive 99): rivet_engine::util::wf::print_history has cognitive complexity 99 (threshold 15). Drivers by points: if/else 34 (86 pts), loops 3 (8 pts), match/switch 2 (5 pts) (nesting depth added 60). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/engine/src/util/wf/mod.rs"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"89f00c25d98a7f60f6127df8a09c9e3e0a7370296748e8c7d5ea09a1f3eed201"}},{"ruleId":"D2","level":"warning","message":{"text":"VfsContext::resolve_pages (cognitive 94): VfsContext::resolve_pages has cognitive complexity 94 (threshold 15). Drivers by points: if/else 35 (70 pts), loops 6 (13 pts), match/switch 3 (7 pts), boolean chains 4 (nesting depth added 46). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot-client/src/vfs.rs"},"region":{"startLine":1721}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c6a51ead385cd420c986e4dce9b192e09db0a3a5fcfb9de7f7af0a3db56a93b"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard::workflows::actor2::process_signal (cognitive 88): pegboard::workflows::actor2::process_signal has cognitive complexity 88 (threshold 15). Drivers by points: if/else 20 (58 pts), match/switch 11 (27 pts), loops 1 (2 pts), boolean chains 1 (nesting depth added 55). 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":"engine/packages/pegboard/src/workflows/actor2/mod.rs"},"region":{"startLine":635}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9ac5679e98ab6e83da2c7f0003bd60baa0846347e4e8de829ad1d61c02bac9b"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_service_manager::start (cognitive 80): rivet_service_manager::start has cognitive complexity 80 (threshold 15). Drivers by points: if/else 13 (42 pts), match/switch 6 (21 pts), loops 7 (17 pts) (nesting depth added 54). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/service-manager/src/lib.rs"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"cda6be4cec74ac6573bb2e73c74774bcb94422d2c514d51cffd95665b142b964"}},{"ruleId":"D2","level":"warning","message":{"text":"version.bumpPackageJsons (cognitive 70): version.bumpPackageJsons has cognitive complexity 70 (threshold 15). Drivers by points: if/else 13 (43 pts), loops 6 (19 pts), boolean chains 7, ternaries 1 (nesting depth added 43). Of this number, 68 points are the body\u0027s own statements and 2 belong to one function literal inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/publish/src/lib/version.ts"},"region":{"startLine":187}}}],"partialFingerprints":{"codehealthFindingId/v1":"1137590234f232ed2389722705896508203f58909a9f9c75d521c900cc2ed9b5"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_guard_core::server::run_server (cognitive 68): rivet_guard_core::server::run_server has cognitive complexity 68 (threshold 15). Drivers by points: if/else 16 (44 pts), match/switch 6 (20 pts), boolean chains 2, loops 2 (nesting depth added 42). Of this number, 65 points are the body\u0027s own statements and 3 belong to one function item inside it that branches. To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/guard-core/src/server.rs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"6117af40ba62c27ec377518037bbf0d3e2328df9a6ff8fdc28d44dad8e66cf74"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_envoy_client::envoy::envoy_loop (cognitive 67): rivet_envoy_client::envoy::envoy_loop has cognitive complexity 67 (threshold 15). Drivers by points: if/else 10 (37 pts), loops 7 (23 pts), match/switch 3 (7 pts) (nesting depth added 47). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/envoy.rs"},"region":{"startLine":448}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e9b2ef18df75188240c40346bf07b44f17c3ba9c8450f01e899fc3025ed5979"}},{"ruleId":"D2","level":"warning","message":{"text":"WorkflowContextImpl.executeRace (cognitive 64): WorkflowContextImpl.executeRace has cognitive complexity 64 (threshold 15). Drivers by points: if/else 28 (49 pts), boolean chains 11, loops 3 (4 pts) (nesting depth added 22). Of this number, 44 points are the body\u0027s own statements and 20 belong to 2 function literals inside it that branch. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/workflow-engine/src/context.ts"},"region":{"startLine":2228}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2c32eb9ed0ec1bdb889a0fe0aaf78db9c33c4ef1910d845cbbfa4a016611a47"}},{"ruleId":"D2","level":"warning","message":{"text":"rivetkit_wasm::dispatch_event (cognitive 63): rivetkit_wasm::dispatch_event has cognitive complexity 63 (threshold 15). Drivers by points: if/else 29 (55 pts), match/switch 3 (5 pts), boolean chains 3 (nesting depth added 28). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit-wasm/src/lib.rs"},"region":{"startLine":722}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbff458aad682b2b68f3926924f69b5fa55dd38842deac707ba1310476da7bb3"}},{"ruleId":"D2","level":"warning","message":{"text":"depot::compaction::shared::read_commit_delta_reclaim_window (cognitive 62): depot::compaction::shared::read_commit_delta_reclaim_window has cognitive complexity 62 (threshold 15). Drivers by points: if/else 17 (38 pts), loops 7 (14 pts), boolean chains 5, match/switch 2 (5 pts) (nesting depth added 31). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/compaction/shared.rs"},"region":{"startLine":972}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d828ee7fed053f69875010c80654350b13b0bf8a84c8c51862684525f5c408a"}},{"ruleId":"D2","level":"warning","message":{"text":"DatabaseKv::prune_signals_inner (cognitive 58): DatabaseKv::prune_signals_inner has cognitive complexity 58 (threshold 15). Drivers by points: if/else 16 (47 pts), loops 3 (6 pts), boolean chains 3, match/switch 1 (2 pts) (nesting depth added 35). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/debug.rs"},"region":{"startLine":2094}}}],"partialFingerprints":{"codehealthFindingId/v1":"01c14763bf720895ddb2a2f7579fc9f1a2cadf93dd1e97b012c180abc6fc9dd4"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard::actor_kv::preload::batch_preload (cognitive 58): pegboard::actor_kv::preload::batch_preload has cognitive complexity 58 (threshold 15). Drivers by points: if/else 23 (51 pts), loops 4 (6 pts), boolean chains 1 (nesting depth added 30). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/actor_kv/preload.rs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5e6d2fef6289ad1ac55d994da93d84542d00007ad4ec23ffbdc6a7b0e336729"}},{"ruleId":"D2","level":"warning","message":{"text":"DatabaseKv::pull_workflows (cognitive 57): DatabaseKv::pull_workflows has cognitive complexity 57 (threshold 15). Drivers by points: if/else 31 (43 pts), loops 9, boolean chains 5 (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":"engine/packages/gasoline/src/db/kv/mod.rs"},"region":{"startLine":1138}}}],"partialFingerprints":{"codehealthFindingId/v1":"375c4031b8e1a954a12b815958f9b64e5988c46704dd403ba7dd39e51fa726ef"}},{"ruleId":"D2","level":"warning","message":{"text":"gen-api-reference.renderEndpoint (cognitive 57): gen-api-reference.renderEndpoint has cognitive complexity 57 (threshold 15). Drivers by points: if/else 23 (40 pts), loops 3 (7 pts), ternaries 6 (7 pts), boolean chains 3 (nesting depth added 22). Of this number, 55 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/docs/gen-api-reference.mjs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c77ad2d7831cad3fa687f70c80ef413f50cf833fb1fdcffa173bfc293fced55"}},{"ruleId":"D2","level":"warning","message":{"text":"ProxyService::handle_http_request (cognitive 54): ProxyService::handle_http_request has cognitive complexity 54 (threshold 15). Drivers by points: if/else 10 (35 pts), match/switch 4 (11 pts), loops 3 (6 pts), boolean chains 2 (nesting depth added 35). 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":"engine/packages/guard-core/src/proxy_service.rs"},"region":{"startLine":833}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea9c5bb3cceb8a55303a7371e5e423c763f1575bfd785fc8bf2e5e839a4d2f65"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_envoy_client::actor::actor_inner (cognitive 54): rivet_envoy_client::actor::actor_inner has cognitive complexity 54 (threshold 15). Drivers by points: if/else 15 (40 pts), match/switch 4 (13 pts), loops 1 (nesting depth added 34). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/actor.rs"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"f49961eedc5f28fe13e79d8a66365cb37929062f03bcef2fc1f3f06266eac907"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard::workflows::actor::runtime::spawn_actor (cognitive 53): pegboard::workflows::actor::runtime::spawn_actor has cognitive complexity 53 (threshold 15). Drivers by points: if/else 21 (47 pts), match/switch 4 (6 pts) (nesting depth added 28). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/runtime.rs"},"region":{"startLine":644}}}],"partialFingerprints":{"codehealthFindingId/v1":"8140f04cf91ad6f85dcd59c54670d1d1e817849ba4c79490bcd8d4d39457dbcf"}},{"ruleId":"D2","level":"warning","message":{"text":"WorkflowContextImpl.executeLoop (cognitive 53): WorkflowContextImpl.executeLoop has cognitive complexity 53 (threshold 15). Drivers by points: if/else 21 (45 pts), boolean chains 5, ternaries 1 (2 pts), loops 1 (nesting depth added 25). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/workflow-engine/src/context.ts"},"region":{"startLine":1150}}}],"partialFingerprints":{"codehealthFindingId/v1":"da49f7b197f26ecd4b36c16205238ae38c446ed19a7235693c05525ed9f635b1"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard::ops::runner::list_for_ns::pegboard_runner_list_for_ns (cognitive 52): pegboard::ops::runner::list_for_ns::pegboard_runner_list_for_ns has cognitive complexity 52 (threshold 15). Drivers by points: if/else 18 (40 pts), loops 4 (12 pts) (nesting depth added 30). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/ops/runner/list_for_ns.rs"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"d735791608672fcbb45800a2419697d6006b8f6f8638a004ef7c0ad0f4536988"}},{"ruleId":"D2","level":"warning","message":{"text":"database-vfs.createDatabaseVfs (cognitive 49): database-vfs.createDatabaseVfs has cognitive complexity 49 (threshold 15). Drivers by points: if/else 32 (37 pts), ternaries 4 (6 pts), loops 2 (4 pts), boolean chains 2 (nesting depth added 9). Of this number, 47 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. 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":"rivetkit-typescript/packages/rivetkit/src/agent-os/fs/database-vfs.ts"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"15288cd00f06cc58b3bea416f0a3df95b778b94885188cd10584598454e2f92b"}},{"ruleId":"D2","level":"warning","message":{"text":"PegboardGateway2::handle_websocket_inner (cognitive 48): PegboardGateway2::handle_websocket_inner has cognitive complexity 48 (threshold 15). Drivers by points: if/else 17 (24 pts), match/switch 9 (20 pts), loops 2 (3 pts), boolean chains 1 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/lib.rs"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"04f93737f91401963664d0d4418dd995be48aab820fae13d257e32db5622de2d"}},{"ruleId":"D2","level":"warning","message":{"text":"rivetkit_napi::napi_actor_events::dispatch_event (cognitive 48): rivetkit_napi::napi_actor_events::dispatch_event has cognitive complexity 48 (threshold 15). Drivers by points: if/else 20 (39 pts), match/switch 5 (8 pts), boolean chains 1 (nesting depth added 22). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit-napi/src/napi_actor_events.rs"},"region":{"startLine":381}}}],"partialFingerprints":{"codehealthFindingId/v1":"28c99ad7fbe26151accb4b0ade6b82b47b66aea5d4f3be5450501dd8f7faa7a5"}},{"ruleId":"D2","level":"warning","message":{"text":"index.main (cognitive 48): index.main has cognitive complexity 48 (threshold 15). Drivers by points: error handling 10 (17 pts), if/else 12 (17 pts), ternaries 7 (9 pts), boolean chains 3, loops 2 (nesting depth added 14). Of this number, 46 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/skill-evals/src/index.ts"},"region":{"startLine":557}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b49d7d07ac03a76db490aff0c6099e5792ce2fa3addcb380abf2cd174626e0f"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard_outbound::serverless_outbound_req (cognitive 47): pegboard_outbound::serverless_outbound_req has cognitive complexity 47 (threshold 15). Drivers by points: match/switch 10 (28 pts), if/else 9 (16 pts), loops 2 (3 pts) (nesting depth added 26). 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":"engine/packages/pegboard-outbound/src/lib.rs"},"region":{"startLine":396}}}],"partialFingerprints":{"codehealthFindingId/v1":"31337620ef6ce57356f6209975bf382e02cd7b1cf1a2c6123f377db9652bdb99"}},{"ruleId":"D2","level":"warning","message":{"text":"epoxy::ops::kv::get::linearizable::read (cognitive 46): epoxy::ops::kv::get::linearizable::read has cognitive complexity 46 (threshold 15). Drivers by points: if/else 14 (37 pts), loops 3 (6 pts), match/switch 1 (2 pts), boolean chains 1 (nesting depth added 27). 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":"engine/packages/epoxy/src/ops/kv/get/linearizable.rs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c8cac2d6b13f3635024c38866ba8cbf1508c2417f736d3aeed054730613bf80"}},{"ruleId":"D2","level":"warning","message":{"text":"DatabaseKv::find_workflows (cognitive 46): DatabaseKv::find_workflows has cognitive complexity 46 (threshold 15). Drivers by points: if/else 13 (28 pts), match/switch 4 (12 pts), boolean chains 5, loops 1 (nesting depth added 23). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/debug.rs"},"region":{"startLine":301}}}],"partialFingerprints":{"codehealthFindingId/v1":"57fd5aad2636db914a6e4a3ee9e5242438d7cc212b70e5a9c8f97dafc8ddaccc"}},{"ruleId":"D2","level":"warning","message":{"text":"DatabaseKv::prune_workflow_history_inner (cognitive 46): DatabaseKv::prune_workflow_history_inner has cognitive complexity 46 (threshold 15). Drivers by points: if/else 17 (35 pts), loops 3 (6 pts), boolean chains 3, match/switch 1 (2 pts) (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/debug.rs"},"region":{"startLine":1910}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc13581daf155435b2c8df7fd7218945efb3c6f96ab40c1c216dae6e89921ad4"}},{"ruleId":"D2","level":"warning","message":{"text":"ProxyService::process (cognitive 46): ProxyService::process has cognitive complexity 46 (threshold 15). Drivers by points: if/else 22 (35 pts), match/switch 3 (8 pts), boolean chains 3 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/guard-core/src/proxy_service.rs"},"region":{"startLine":376}}}],"partialFingerprints":{"codehealthFindingId/v1":"60beebe961bf2d70ee1b5eefacaf4a70574d832f59ac0842b26aeb7f96118ee4"}},{"ruleId":"D2","level":"warning","message":{"text":"RegistryDispatcher::handle_actor_connect_websocket (cognitive 46): RegistryDispatcher::handle_actor_connect_websocket has cognitive complexity 46 (threshold 15). Drivers by points: if/else 16 (27 pts), match/switch 9 (15 pts), boolean chains 4 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/websocket.rs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b9d33b09365b1abec335cd4acec70667d3d7f1257b8f5d529dcd9b11b903af8"}},{"ruleId":"D2","level":"warning","message":{"text":"depot::workflows::db_hot_compactor::install_hot_chunk_tx (cognitive 44): depot::workflows::db_hot_compactor::install_hot_chunk_tx has cognitive complexity 44 (threshold 15). Drivers by points: if/else 23 (33 pts), loops 6, boolean chains 4, match/switch 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/workflows/db_hot_compactor.rs"},"region":{"startLine":912}}}],"partialFingerprints":{"codehealthFindingId/v1":"d99493cb0a081adf1b85a416062c040cc58fc9aaec7be665f4ca9d3485e6b5d7"}},{"ruleId":"D2","level":"warning","message":{"text":"depot::doctor::detect_unsupported (cognitive 44): depot::doctor::detect_unsupported has cognitive complexity 44 (threshold 15). Drivers by points: if/else 18 (35 pts), loops 3 (7 pts), boolean chains 2 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/doctor.rs"},"region":{"startLine":1007}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3f14d9a1a2e20f60c3b709fbdabae9cfcb4271375d479e9e0a8c1fe76b1babf"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_envoy_client::actor::http::send_response (cognitive 44): rivet_envoy_client::actor::http::send_response has cognitive complexity 44 (threshold 15). Drivers by points: if/else 17 (34 pts), match/switch 2 (5 pts), loops 2 (3 pts), boolean chains 2 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/actor/http.rs"},"region":{"startLine":719}}}],"partialFingerprints":{"codehealthFindingId/v1":"64bbfa799d066ffa77878898d502cc7f4b7de5f0c4ff4f5d88960657043f7119"}},{"ruleId":"D2","level":"warning","message":{"text":"depot::compaction::shared::read_hot_input_snapshot (cognitive 43): depot::compaction::shared::read_hot_input_snapshot has cognitive complexity 43 (threshold 15). Drivers by points: if/else 17 (34 pts), boolean chains 5, loops 3 (4 pts) (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/compaction/shared.rs"},"region":{"startLine":573}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac3fec25622fadcf3a0e6db7d8d94960f3a5170c3715216dfae50c24ba21853e"}},{"ruleId":"D2","level":"warning","message":{"text":"index.executeWorkflow (cognitive 43): index.executeWorkflow has cognitive complexity 43 (threshold 15). Drivers by points: if/else 17 (32 pts), error handling 3 (5 pts), boolean chains 3, ternaries 2 (3 pts) (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/workflow-engine/src/index.ts"},"region":{"startLine":953}}}],"partialFingerprints":{"codehealthFindingId/v1":"c60bc31c531e0a91f32c9334f1afaff1e88359b568b95536f32cf6b192622514"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard::ops::actor::create::pegboard_actor_create (cognitive 42): pegboard::ops::actor::create::pegboard_actor_create has cognitive complexity 42 (threshold 15). Drivers by points: if/else 10 (30 pts), match/switch 2 (6 pts), loops 2 (4 pts), boolean chains 2 (nesting depth added 26). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/ops/actor/create.rs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"90ccf5c5d016462d10f2ef3eb109c13eb8fa6567cee005019576c7c0fe23d302"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard::workflows::actor_migration_fix_backfill::backfill_chunk (cognitive 42): pegboard::workflows::actor_migration_fix_backfill::backfill_chunk has cognitive complexity 42 (threshold 15). Drivers by points: if/else 18 (41 pts), loops 1 (nesting depth added 23). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor_migration_fix_backfill.rs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"e56062a53438ee45f9689d863780bb520313eef3b898f9b7c5ac04d2ee1f85c1"}},{"ruleId":"D2","level":"warning","message":{"text":"RegistryDispatcher::handle_inspector_fetch (cognitive 42): RegistryDispatcher::handle_inspector_fetch has cognitive complexity 42 (threshold 15). Drivers by points: match/switch 16 (25 pts), if/else 11 (16 pts), boolean chains 1 (nesting depth added 14). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/inspector.rs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"c393a7462bc6089fb0bba20b3d52f22be98ae409f252fef0974c2e88de09cf73"}},{"ruleId":"D2","level":"warning","message":{"text":"rivetkit_core::actor::actor_runtime_socket::serve_connection (cognitive 41): rivetkit_core::actor::actor_runtime_socket::serve_connection has cognitive complexity 41 (threshold 15). Drivers by points: if/else 10 (16 pts), match/switch 8 (15 pts), loops 6 (10 pts) (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/actor_runtime_socket.rs"},"region":{"startLine":375}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcdb5da8ac2c31224d230f1e3b52bb99cc6d17dfe6119ac203c2e7b6789f7bb7"}},{"ruleId":"D2","level":"warning","message":{"text":"depot::workflows::db_reclaimer::reclaim_fdb_job_tx (cognitive 40): depot::workflows::db_reclaimer::reclaim_fdb_job_tx has cognitive complexity 40 (threshold 15). Drivers by points: if/else 23 (29 pts), loops 6 (7 pts), boolean chains 2, match/switch 1 (2 pts) (nesting depth added 8). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/workflows/db_reclaimer.rs"},"region":{"startLine":641}}}],"partialFingerprints":{"codehealthFindingId/v1":"3cfd3a94e690ed192129f60cab2054478dd1230e011d98b2888a2984b799ba0b"}},{"ruleId":"D2","level":"warning","message":{"text":"WorkflowCtx::listen_n_until (cognitive 40): WorkflowCtx::listen_n_until has cognitive complexity 40 (threshold 15). Drivers by points: if/else 14 (21 pts), match/switch 5 (15 pts), loops 2 (4 pts) (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/ctx/workflow.rs"},"region":{"startLine":929}}}],"partialFingerprints":{"codehealthFindingId/v1":"92b48cd92f752d10883440a83d3e05213003ca5a8638060405cbc61b425ba56c"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard::workflows::runner::pegboard_runner (cognitive 40): pegboard::workflows::runner::pegboard_runner has cognitive complexity 40 (threshold 15). Drivers by points: if/else 10 (27 pts), loops 4 (9 pts), match/switch 2 (3 pts), boolean chains 1 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/runner.rs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"da76a0cc3ef43a81927409ad781676aa38632b5fa4baff1293c4c076542ee36f"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard::workflows::actor2::listen_for_signals (cognitive 40): pegboard::workflows::actor2::listen_for_signals has cognitive complexity 40 (threshold 15). Drivers by points: if/else 21 (39 pts), match/switch 1 (nesting depth added 18). 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":"engine/packages/pegboard/src/workflows/actor2/mod.rs"},"region":{"startLine":469}}}],"partialFingerprints":{"codehealthFindingId/v1":"4abdf693805aa24899d78906a89cead9da380841ca395162ff7f80045b8b782c"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard_gateway3::http_stream::response::drain_http_response_stream (cognitive 40): pegboard_gateway3::http_stream::response::drain_http_response_stream has cognitive complexity 40 (threshold 15). Drivers by points: if/else 9 (29 pts), match/switch 4 (10 pts), loops 1 (nesting depth added 26). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway3/src/http_stream/response.rs"},"region":{"startLine":222}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e80d0e69cba873a6f5f10b5e6735eedd8a0653549b0cbf7d90b5fb877dcb1e1"}},{"ruleId":"D2","level":"warning","message":{"text":"Runner.#openPegboardWebSocket (cognitive 40): Runner.#openPegboardWebSocket has cognitive complexity 40 (threshold 15). Drivers by points: if/else 28 (32 pts), boolean chains 4, error handling 3 (4 pts) (nesting depth added 5). Most of this is not in the body itself: 4 of the 40 points are its own statements and the rest belongs to 5 function literals inside it that branch (lines 860, 982, 786, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/typescript/runner/src/mod.ts"},"region":{"startLine":756}}}],"partialFingerprints":{"codehealthFindingId/v1":"0886ad74665753c28adfa084d2c66537162a2da8f43e564fda3d4888cbde7c76"}},{"ruleId":"D2","level":"warning","message":{"text":"SimpleTupleValue::write (cognitive 39): SimpleTupleValue::write has cognitive complexity 39 (threshold 15). Drivers by points: if/else 19 (35 pts), loops 1 (3 pts), match/switch 1 (nesting depth added 18). 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":"engine/packages/engine/src/util/udb.rs"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc8070af66b526978e85241d77be2b2421087b50af6cd295b1be1db6eb8f7c48"}},{"ruleId":"D2","level":"warning","message":{"text":"WorkflowCtx::run (cognitive 39): WorkflowCtx::run has cognitive complexity 39 (threshold 15). Drivers by points: if/else 14 (33 pts), loops 2 (4 pts), boolean chains 1, match/switch 1 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/ctx/workflow.rs"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a7bb2d3d70602a568bcc51d492221b64357e8398b3838ffd0b12bd0ab557be9"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard::ops::runner_config::upsert::pegboard_runner_config_upsert (cognitive 39): pegboard::ops::runner_config::upsert::pegboard_runner_config_upsert has cognitive complexity 39 (threshold 15). Drivers by points: if/else 20 (31 pts), match/switch 3 (5 pts), loops 1 (2 pts), boolean chains 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/ops/runner_config/upsert.rs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"be4ec7abefeb16a676f00388d09eeae5cfca149812e22f27ed5b48f59c8617ef"}},{"ruleId":"D2","level":"warning","message":{"text":"PegboardGateway3::handle_websocket_inner (cognitive 39): PegboardGateway3::handle_websocket_inner has cognitive complexity 39 (threshold 15). Drivers by points: if/else 14 (19 pts), match/switch 9 (17 pts), loops 2, boolean chains 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway3/src/lib.rs"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"706b6e62faab6c2f37008b26e06b6bb9bc1436c58b275d0dab7f46e71eb5d238"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_guard::routing::pegboard_gateway::handle_actor_v2 (cognitive 38): rivet_guard::routing::pegboard_gateway::handle_actor_v2 has cognitive complexity 38 (threshold 15). Drivers by points: if/else 16 (29 pts), match/switch 2 (5 pts), boolean chains 2, loops 1 (2 pts) (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/guard/src/routing/pegboard_gateway/mod.rs"},"region":{"startLine":518}}}],"partialFingerprints":{"codehealthFindingId/v1":"507960b0498a3e18a2c8f7f244ea6a4e1889ebe6a95e4f05dc6d0389fa3297f0"}},{"ruleId":"D2","level":"warning","message":{"text":"ActorContext::teardown_sleep_state (cognitive 38): ActorContext::teardown_sleep_state has cognitive complexity 38 (threshold 15). Drivers by points: if/else 9 (24 pts), loops 6 (11 pts), boolean chains 3 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/sleep.rs"},"region":{"startLine":775}}}],"partialFingerprints":{"codehealthFindingId/v1":"52dc0afcb090c5086e993f1be92442630ef1401266ee4b4a2b9436dc3ebe1c4d"}},{"ruleId":"D2","level":"warning","message":{"text":"encoding.assertJsonCompatValue (cognitive 38): encoding.assertJsonCompatValue has cognitive complexity 38 (threshold 15). Drivers by points: boolean chains 14, if/else 12, loops 4 (8 pts), ternaries 2 (4 pts) (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/encoding.ts"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"5774c92f980a6e91496df9e678122fd4665f367dfdac99085b6944e082ba4eae"}},{"ruleId":"D2","level":"warning","message":{"text":"depot::workflows::db_reclaimer::cleanup_repair_fdb_outputs_tx (cognitive 37): depot::workflows::db_reclaimer::cleanup_repair_fdb_outputs_tx has cognitive complexity 37 (threshold 15). Drivers by points: if/else 12 (26 pts), loops 4 (8 pts), boolean chains 3 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/workflows/db_reclaimer.rs"},"region":{"startLine":1328}}}],"partialFingerprints":{"codehealthFindingId/v1":"9cdc2e6f00b9a6ca1576b161843f21a12c1a71b412b47ecb0c58a09a51e770ba"}},{"ruleId":"D2","level":"warning","message":{"text":"DatabaseKv::find_signals (cognitive 37): DatabaseKv::find_signals has cognitive complexity 37 (threshold 15). Drivers by points: if/else 11 (26 pts), match/switch 2 (6 pts), boolean chains 4, loops 1 (nesting depth added 19). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/debug.rs"},"region":{"startLine":1050}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc235ce55f5fb7f032d8ee8e0a1ea94c3d5133ad392d3a63b1487a789a4f8370"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard_gateway3::http_stream::request::send_streaming_http_request_body_chunks (cognitive 37): pegboard_gateway3::http_stream::request::send_streaming_http_request_body_chunks has cognitive complexity 37 (threshold 15). Drivers by points: if/else 10 (24 pts), match/switch 4 (10 pts), loops 2 (3 pts) (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway3/src/http_stream/request.rs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"073911d29e12a667830d1fc661f89255f9065a0f2d05e25683ef04c43ebc52ac"}},{"ruleId":"D2","level":"warning","message":{"text":"ActorConnRaw.#handleOnClose (cognitive 37): ActorConnRaw.#handleOnClose has cognitive complexity 37 (threshold 15). Drivers by points: if/else 14 (29 pts), boolean chains 4, error handling 1 (4 pts) (nesting depth added 18). 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":"rivetkit-typescript/packages/rivetkit/src/client/actor-conn.ts"},"region":{"startLine":867}}}],"partialFingerprints":{"codehealthFindingId/v1":"b552dc39b6b8686d3e5cf1309cc6ff3d07e320f7f6008f65911d5406b395a1d7"}},{"ruleId":"D2","level":"warning","message":{"text":"WorkflowContextImpl.executeStep (cognitive 37): WorkflowContextImpl.executeStep has cognitive complexity 37 (threshold 15). Drivers by points: if/else 15 (25 pts), ternaries 4 (8 pts), boolean chains 3, error handling 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/workflow-engine/src/context.ts"},"region":{"startLine":790}}}],"partialFingerprints":{"codehealthFindingId/v1":"e457e99a8e59c51138aa3e5346a1d4e138260d0c13ac16937b5846905d72f59d"}},{"ruleId":"D2","level":"warning","message":{"text":"Config::apply_dynamic (cognitive 36): Config::apply_dynamic has cognitive complexity 36 (threshold 15). Drivers by points: if/else 21, match/switch 4 (11 pts), loops 2 (4 pts) (nesting depth added 9). 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":"engine/packages/config/src/lib.rs"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f3f4da571a2a309ee4c739eaa05f765c90fed5db367fa4f91664e5b770dfb51"}},{"ruleId":"D2","level":"warning","message":{"text":"depot::doctor::build_mirrored_resolver_image (cognitive 36): depot::doctor::build_mirrored_resolver_image has cognitive complexity 36 (threshold 15). Drivers by points: if/else 13 (30 pts), match/switch 1 (3 pts), loops 2, boolean chains 1 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/doctor.rs"},"region":{"startLine":1929}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f47a805982f85ad68ad5515643d56851a5c10379a0d95e4f2967f9252d3e5e3"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_engine::commands::udb::cli::render_list_entry (cognitive 36): rivet_engine::commands::udb::cli::render_list_entry has cognitive complexity 36 (threshold 15). Drivers by points: if/else 11 (25 pts), match/switch 3 (10 pts), boolean chains 1 (nesting depth added 21). 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":"engine/packages/engine/src/commands/udb/cli.rs"},"region":{"startLine":1134}}}],"partialFingerprints":{"codehealthFindingId/v1":"e15ca3c7e202e8673c48d54cdad7bf67fa9e444103e276a64e1da3c7c8dd408b"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard::ops::actor::list_for_ns::pegboard_actor_list_for_ns (cognitive 36): pegboard::ops::actor::list_for_ns::pegboard_actor_list_for_ns has cognitive complexity 36 (threshold 15). Drivers by points: if/else 14 (28 pts), loops 3 (6 pts), boolean chains 2 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/ops/actor/list_for_ns.rs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"c35c8f69415813d151226a781678e8263c05d523a8caff0140d0f9dbda55eaa0"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard::workflows::actor::runtime::allocate_actor_v2 (cognitive 36): pegboard::workflows::actor::runtime::allocate_actor_v2 has cognitive complexity 36 (threshold 15). Drivers by points: if/else 15 (31 pts), match/switch 3, loops 1 (2 pts) (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/runtime.rs"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2796298d6715c8100311aa995fccedb3beedc2d44dbbcf7f50c5e889dd90634"}},{"ruleId":"D2","level":"warning","message":{"text":"DatabaseKv::publish_metrics (cognitive 35): DatabaseKv::publish_metrics has cognitive complexity 35 (threshold 15). Drivers by points: if/else 12 (24 pts), loops 3 (6 pts), match/switch 2 (5 pts) (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/mod.rs"},"region":{"startLine":676}}}],"partialFingerprints":{"codehealthFindingId/v1":"d92e94ec129aea9ad684281365bb7f7ff8ddc84edee496bdeb476138f5cf9353"}},{"ruleId":"D2","level":"warning","message":{"text":"write-through-proxy.unwrapDeep (cognitive 35): write-through-proxy.unwrapDeep has cognitive complexity 35 (threshold 15). Drivers by points: if/else 11 (21 pts), loops 6 (12 pts), boolean chains 2 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/registry/write-through-proxy.ts"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b5f0ad0b5fbc71db549d5bdcab8e5bed08ceee4b9e07f3949692e4ad9a4ac94"}},{"ruleId":"D2","level":"warning","message":{"text":"index.executeLiveWorkflow (cognitive 35): index.executeLiveWorkflow has cognitive complexity 35 (threshold 15). Drivers by points: if/else 9 (24 pts), error handling 3 (9 pts), boolean chains 1, loops 1 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/workflow-engine/src/index.ts"},"region":{"startLine":511}}}],"partialFingerprints":{"codehealthFindingId/v1":"8147eab35cb6d50cfda5df88ef456023d509c741fe1c2fd727ee27e48c3bdc9e"}},{"ruleId":"D2","level":"warning","message":{"text":"depot::conveyer::read::scan_source_delta_history (cognitive 34): depot::conveyer::read::scan_source_delta_history has cognitive complexity 34 (threshold 15). Drivers by points: if/else 13 (29 pts), loops 2 (3 pts), match/switch 1 (2 pts) (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/conveyer/read.rs"},"region":{"startLine":1575}}}],"partialFingerprints":{"codehealthFindingId/v1":"45a17b54784644bf886e1216bc3de7b5c498bff5bca8a2206e9616f7a0423bf2"}},{"ruleId":"D2","level":"warning","message":{"text":"PegboardGateway::handle_websocket_inner (cognitive 34): PegboardGateway::handle_websocket_inner has cognitive complexity 34 (threshold 15). Drivers by points: if/else 13 (19 pts), match/switch 5 (12 pts), loops 2 (3 pts) (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/lib.rs"},"region":{"startLine":253}}}],"partialFingerprints":{"codehealthFindingId/v1":"e937b87edb8f0e2b45b1c46b4b77e0c107623f4bccf8301d3a69598a825346cc"}},{"ruleId":"D2","level":"warning","message":{"text":"universaldb::driver::postgres::resolver::drain_batch (cognitive 34): universaldb::driver::postgres::resolver::drain_batch has cognitive complexity 34 (threshold 15). Drivers by points: if/else 15 (27 pts), loops 3, match/switch 2 (3 pts), boolean chains 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universaldb/src/driver/postgres/resolver/mod.rs"},"region":{"startLine":419}}}],"partialFingerprints":{"codehealthFindingId/v1":"8de86fb9ec20dfb5826738625aa4c1688e2471e525f074d3f4aac6e84a9a32bc"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_envoy_client::actor::handle_hws_restore (cognitive 34): rivet_envoy_client::actor::handle_hws_restore has cognitive complexity 34 (threshold 15). Drivers by points: if/else 8 (27 pts), match/switch 1 (3 pts), boolean chains 2, loops 2 (nesting depth added 21). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/actor.rs"},"region":{"startLine":904}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb9feebcac645b8e424a6d3c6d744fda3c114fb3c2557bb711fe0bf28929a113"}},{"ruleId":"D2","level":"warning","message":{"text":"WorkflowCtx::activity (cognitive 33): WorkflowCtx::activity has cognitive complexity 33 (threshold 15). Drivers by points: if/else 11 (26 pts), match/switch 2 (7 pts) (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/ctx/workflow.rs"},"region":{"startLine":564}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d11159031d125544cc516831074ea9c8062059f922427f91f7b5566ccb1b0c1"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard::ops::envoy::evict_actors::pegboard_envoy_evict_actors (cognitive 33): pegboard::ops::envoy::evict_actors::pegboard_envoy_evict_actors has cognitive complexity 33 (threshold 15). Drivers by points: if/else 14 (29 pts), loops 2 (4 pts) (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/ops/envoy/evict_actors.rs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"1580a9d1c36c40166aaca0bee3d43d9665e398089e5ab6aad1ae802ce8417016"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard::workflows::serverless::conn::outbound_req_inner (cognitive 33): pegboard::workflows::serverless::conn::outbound_req_inner has cognitive complexity 33 (threshold 15). Drivers by points: match/switch 8 (19 pts), if/else 10 (13 pts), loops 1 (nesting depth added 14). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/serverless/conn.rs"},"region":{"startLine":198}}}],"partialFingerprints":{"codehealthFindingId/v1":"a006fd8fb6208517ed2aab91c4cf1016d828b091bb06ba4a1facb44d17629df5"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_envoy_client::connection::native::single_connection (cognitive 33): rivet_envoy_client::connection::native::single_connection has cognitive complexity 33 (threshold 15). Drivers by points: if/else 9 (23 pts), match/switch 4 (8 pts), loops 2 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/connection/native.rs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"a992cb75830ea000d244f476f1b0aa328ea22ccedc3c6e6395451c199618055e"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_envoy_client::connection::wasm::imp::single_connection (cognitive 33): rivet_envoy_client::connection::wasm::imp::single_connection has cognitive complexity 33 (threshold 15). Drivers by points: if/else 7 (19 pts), match/switch 5 (8 pts), loops 3 (6 pts) (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/connection/wasm.rs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2f8a53e426b54e79900e43baa450ac473399f35bc722f55e8b3e8b0de448d0a"}},{"ruleId":"D2","level":"warning","message":{"text":"gen-api-reference.renderProtocolPage (cognitive 33): gen-api-reference.renderProtocolPage has cognitive complexity 33 (threshold 15). Drivers by points: if/else 12 (22 pts), loops 6 (11 pts) (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/docs/gen-api-reference.mjs"},"region":{"startLine":330}}}],"partialFingerprints":{"codehealthFindingId/v1":"70a09aca084fa3097ac8924e61ef2457ea88151e4b0e7ae2b1082b2c4f514b03"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_api_peer::actors::get_or_create::extract_duplicate_key_error (cognitive 32): rivet_api_peer::actors::get_or_create::extract_duplicate_key_error has cognitive complexity 32 (threshold 15). Drivers by points: if/else 10 (30 pts), boolean chains 2 (nesting depth added 20). 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":"engine/packages/api-peer/src/actors/get_or_create.rs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"9798b34270743cd5cfd8d585b05445957bc71d63be79f9890f82d6e4d07a0985"}},{"ruleId":"D2","level":"warning","message":{"text":"depot::doctor::build_sequential_replay (cognitive 32): depot::doctor::build_sequential_replay has cognitive complexity 32 (threshold 15). Drivers by points: if/else 9 (23 pts), loops 4 (9 pts) (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/doctor.rs"},"region":{"startLine":1662}}}],"partialFingerprints":{"codehealthFindingId/v1":"f03224b7d2e044a69e83caa019961f6d9268e7c5946145572ca3a3abd8cee1ef"}},{"ruleId":"D2","level":"warning","message":{"text":"rivetkit_client::drivers::ws::start (cognitive 32): rivetkit_client::drivers::ws::start has cognitive complexity 32 (threshold 15). Drivers by points: if/else 5 (19 pts), match/switch 4 (12 pts), loops 1 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/client/src/drivers/ws.rs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1ab23151dc8e48914426be79ee16b042d42cb056c30f7017f7324b1d1e8ebf6"}},{"ruleId":"D2","level":"warning","message":{"text":"ActorTask::run_live (cognitive 32): ActorTask::run_live has cognitive complexity 32 (threshold 15). Drivers by points: if/else 7 (20 pts), match/switch 4 (11 pts), loops 1 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/task.rs"},"region":{"startLine":478}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc895d653fbcae3ba70d7e49c34f95d78f895b50c1a63c7f6575ede384b96784"}},{"ruleId":"D2","level":"warning","message":{"text":"Runner.#openPegboardWebSocket (cognitive 32): Runner.#openPegboardWebSocket has cognitive complexity 32 (threshold 15). Drivers by points: if/else 25 (28 pts), boolean chains 3, error handling 1 (nesting depth added 3). Most of this is not in the body itself: 4 of the 32 points are its own statements and the rest belongs to 5 function literals inside it that branch (lines 860, 947, 786, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/engine-runner/src/mod.ts"},"region":{"startLine":756}}}],"partialFingerprints":{"codehealthFindingId/v1":"4eeb4a7d096050d0bd3b50796a09278fd2cf64067be85bd7bc504af8b148cc0e"}},{"ruleId":"D2","level":"warning","message":{"text":"encoding.reviveJsonCompatValue (cognitive 32): encoding.reviveJsonCompatValue has cognitive complexity 32 (threshold 15). Drivers by points: if/else 12 (26 pts), loops 2 (4 pts), boolean chains 2 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/encoding.ts"},"region":{"startLine":377}}}],"partialFingerprints":{"codehealthFindingId/v1":"0207f6177fbbda06bc7441764bb55a1089a261c2bb10af5e1a0557ff961dd5e6"}},{"ruleId":"D2","level":"warning","message":{"text":"index.renderUnion (cognitive 32): index.renderUnion has cognitive complexity 32 (threshold 15). Drivers by points: if/else 9 (18 pts), ternaries 3 (9 pts), boolean chains 3, loops 2 (nesting depth added 15). Of this number, 27 points are the body\u0027s own statements and 5 belong to one function literal inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/vbare-gen-converters/index.ts"},"region":{"startLine":339}}}],"partialFingerprints":{"codehealthFindingId/v1":"0356f108e691146cd867cf3d4175b880751842d59e4aca2756e3ab1105f32c1c"}},{"ruleId":"D2","level":"warning","message":{"text":"RequestConfig::fetch_all_convert (cognitive 31): RequestConfig::fetch_all_convert has cognitive complexity 31 (threshold 15). Drivers by points: if/else 6 (14 pts), match/switch 4 (12 pts), loops 2 (5 pts) (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/cache/src/req_config.rs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"006afcb06a331187902d6a56bbad9913e6fe14701b7e459a7caba1747d7c7fd7"}},{"ruleId":"D2","level":"warning","message":{"text":"PrefetchPredictor::multi_predict (cognitive 31): PrefetchPredictor::multi_predict has cognitive complexity 31 (threshold 15). Drivers by points: if/else 9 (24 pts), loops 2 (5 pts), boolean chains 2 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot-client/src/vfs.rs"},"region":{"startLine":860}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa8b84b33b9fe10d9dd0aac4663527007ba1cb6f4dacae295321364006ba1dbb"}},{"ruleId":"D2","level":"warning","message":{"text":"SharedState::receiver (cognitive 31): SharedState::receiver has cognitive complexity 31 (threshold 15). Drivers by points: if/else 4 (16 pts), match/switch 4 (12 pts), loops 2 (3 pts) (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/shared_state.rs"},"region":{"startLine":404}}}],"partialFingerprints":{"codehealthFindingId/v1":"656b1c82663f4f835e88670952908d92a8d38bd5016ef0af04c93c95f88a28d8"}},{"ruleId":"D2","level":"warning","message":{"text":"TransactionOperations::get_key (cognitive 31): TransactionOperations::get_key has cognitive complexity 31 (threshold 15). Drivers by points: if/else 15 (23 pts), loops 2 (4 pts), match/switch 2 (3 pts), boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universaldb/src/tx_ops.rs"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"57dbfc14aa596ef51521016e3ac29a151c25f438ba970c6c27eb474de7a54f82"}},{"ruleId":"D2","level":"warning","message":{"text":"ActorHandleRaw.#sendActionAttempts (cognitive 31): ActorHandleRaw.#sendActionAttempts has cognitive complexity 31 (threshold 15). Drivers by points: if/else 7 (20 pts), boolean chains 6, error handling 1 (2 pts), ternaries 1 (2 pts), loops 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/client/actor-handle.ts"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"937fb090a18fc2834edcc7ed7d54095e40957dfaeb9423d64e4840c0efb845c0"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_engine::commands::wf::repair::execute (cognitive 30): rivet_engine::commands::wf::repair::execute has cognitive complexity 30 (threshold 15). Drivers by points: if/else 11 (15 pts), boolean chains 7, loops 4 (5 pts), match/switch 3 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/engine/src/commands/wf/repair.rs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd9c9e53e395f6e363da458ef8c236d39caa904b783faa87a26e16256cac3626"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard::workflows::actor::handle_stopped (cognitive 30): pegboard::workflows::actor::handle_stopped has cognitive complexity 30 (threshold 15). Drivers by points: if/else 12 (17 pts), match/switch 5 (10 pts), loops 1 (2 pts), boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/mod.rs"},"region":{"startLine":1047}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecf89520c27321d0519225f46f6fd31dede1ff5103781499df24b78873d2726e"}},{"ruleId":"D2","level":"warning","message":{"text":"TransactionTask::handle_commit (cognitive 30): TransactionTask::handle_commit has cognitive complexity 30 (threshold 15). Drivers by points: if/else 9 (19 pts), loops 3 (7 pts), match/switch 2 (3 pts), boolean chains 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universaldb/src/driver/rocksdb/transaction_task.rs"},"region":{"startLine":270}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5dae06bc30528ec0c892b3e1057181b1c7e46a596866c55e7929174d0fbe104"}},{"ruleId":"D2","level":"warning","message":{"text":"Root::validate_and_set_defaults (cognitive 29): Root::validate_and_set_defaults has cognitive complexity 29 (threshold 15). Drivers by points: if/else 8 (17 pts), loops 4 (9 pts), match/switch 1 (2 pts), boolean chains 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/config/src/config/mod.rs"},"region":{"startLine":260}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d79e45e9c927bad16d65876644fa11cec2c40c8854235d209a181d886d63fc9"}},{"ruleId":"D2","level":"warning","message":{"text":"depot::doctor::load_storage_facts (cognitive 29): depot::doctor::load_storage_facts has cognitive complexity 29 (threshold 15). Drivers by points: if/else 8 (16 pts), loops 7, match/switch 2 (5 pts), boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/doctor.rs"},"region":{"startLine":1252}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ff8f3a520bcf952f1edb202cf1f572961f33e1b22d3de24542c28a3de26e189"}},{"ruleId":"D2","level":"warning","message":{"text":"DatabaseKv::backfill_dead_workflows (cognitive 29): DatabaseKv::backfill_dead_workflows has cognitive complexity 29 (threshold 15). Drivers by points: if/else 14 (25 pts), boolean chains 2, loops 1, match/switch 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/debug.rs"},"region":{"startLine":1328}}}],"partialFingerprints":{"codehealthFindingId/v1":"0584980cc6aa769d94e07a0f71486faa8eae0e0cf15de815bb2ee95c6b812365"}},{"ruleId":"D2","level":"warning","message":{"text":"gasoline_macros::parse_trait_fn (cognitive 29): gasoline_macros::parse_trait_fn has cognitive complexity 29 (threshold 15). Drivers by points: if/else 10 (17 pts), match/switch 4 (10 pts), boolean chains 1, 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":"engine/packages/gasoline-macros/src/lib.rs"},"region":{"startLine":268}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3d4d4b1ba2b2f8490e5fd90994feb1d7710dc57212e28f9d0173b2ed1e760d7"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_envoy_client::actor::http::handle_req_chunk (cognitive 29): rivet_envoy_client::actor::http::handle_req_chunk has cognitive complexity 29 (threshold 15). Drivers by points: if/else 10 (22 pts), match/switch 2 (5 pts), boolean chains 2 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/actor/http.rs"},"region":{"startLine":446}}}],"partialFingerprints":{"codehealthFindingId/v1":"648b996af255eec5914dcacc2bd8c8044c45b76cb9ac426ac5317eef177535b9"}},{"ruleId":"D2","level":"warning","message":{"text":"storage.flush (cognitive 29): storage.flush has cognitive complexity 29 (threshold 15). Drivers by points: if/else 12 (17 pts), loops 6 (8 pts), boolean chains 4 (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":"rivetkit-typescript/packages/workflow-engine/src/storage.ts"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c39058c787f0dafee74814ed7799ff4cc9dad1196ffffff364c050d6a333be6"}},{"ruleId":"D2","level":"warning","message":{"text":"Db::expand_overflow_pages (cognitive 28): Db::expand_overflow_pages has cognitive complexity 28 (threshold 15). Drivers by points: if/else 7 (21 pts), loops 4 (6 pts), boolean chains 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/conveyer/read.rs"},"region":{"startLine":1136}}}],"partialFingerprints":{"codehealthFindingId/v1":"574093484f1ca8c68d106a0c61c75f64f3116f4b6687459cbab5821862d35417"}},{"ruleId":"D2","level":"warning","message":{"text":"depot::recovery::scan_hot_shard_history_branch (cognitive 28): depot::recovery::scan_hot_shard_history_branch has cognitive complexity 28 (threshold 15). Drivers by points: if/else 19 (27 pts), loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/recovery.rs"},"region":{"startLine":376}}}],"partialFingerprints":{"codehealthFindingId/v1":"04fa9ff0f79e33f42ff8f2850bab30477e18ab6fdd4762bee09f6a2e652b262b"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard_gateway::tunnel_to_ws_task::task (cognitive 28): pegboard_gateway::tunnel_to_ws_task::task has cognitive complexity 28 (threshold 15). Drivers by points: if/else 8 (20 pts), match/switch 2 (6 pts), boolean chains 1, loops 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/tunnel_to_ws_task.rs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"48c0fff63688c10087db74ada7333b2c3bca02cd5c8f10a0292e07dfe8a08ee1"}},{"ruleId":"D2","level":"warning","message":{"text":"SharedState::receiver (cognitive 28): SharedState::receiver has cognitive complexity 28 (threshold 15). Drivers by points: match/switch 5 (14 pts), if/else 4 (11 pts), loops 2 (3 pts) (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":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":237}}}],"partialFingerprints":{"codehealthFindingId/v1":"30b667fccb9573a690d7178568429ba10f8509f44de321c7884c8c181f150c31"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard_gateway2::tunnel_to_ws_task::task (cognitive 28): pegboard_gateway2::tunnel_to_ws_task::task has cognitive complexity 28 (threshold 15). Drivers by points: if/else 8 (20 pts), match/switch 2 (6 pts), boolean chains 1, loops 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/tunnel_to_ws_task.rs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"1cb87cb35c277eba4961de40232429f27001dea9f8b50b1befcfb87c74de9c62"}},{"ruleId":"D2","level":"warning","message":{"text":"SharedState::receiver (cognitive 28): SharedState::receiver has cognitive complexity 28 (threshold 15). Drivers by points: match/switch 5 (14 pts), if/else 4 (11 pts), loops 2 (3 pts) (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":"engine/packages/pegboard-gateway3/src/shared_state.rs"},"region":{"startLine":250}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5f61a4c0d0789f64f8154f50c62a3e4b1a4319e2f4c9e8ca05d68f15ea4bc3e"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard_gateway3::tunnel_to_ws_task::task (cognitive 28): pegboard_gateway3::tunnel_to_ws_task::task has cognitive complexity 28 (threshold 15). Drivers by points: if/else 8 (20 pts), match/switch 2 (6 pts), boolean chains 1, loops 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway3/src/tunnel_to_ws_task.rs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac205b3e7c6d4e46dbe68e797b44cb0d2a19ee9cd01e2b8f78329823c89472ce"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard_runner::ws_to_tunnel_task::handle_message_mk2 (cognitive 28): pegboard_runner::ws_to_tunnel_task::handle_message_mk2 has cognitive complexity 28 (threshold 15). Drivers by points: match/switch 11 (19 pts), if/else 4 (7 pts), loops 1 (2 pts) (nesting depth added 12). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"be7f9318b26814b209df291b43cba2ab52258986e8133e4dddf2c1fb9d0d8d2e"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard_runner::ws_to_tunnel_task::handle_message_mk1 (cognitive 28): pegboard_runner::ws_to_tunnel_task::handle_message_mk1 has cognitive complexity 28 (threshold 15). Drivers by points: match/switch 11 (20 pts), if/else 5 (8 pts) (nesting depth added 12). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs"},"region":{"startLine":501}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bcdaa9208412e10a3c6bc52c074c1ff7d3c14f391d42c373c7e7236bafb60db"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_runtime::build_tokio_runtime_builder (cognitive 28): rivet_runtime::build_tokio_runtime_builder has cognitive complexity 28 (threshold 15). Drivers by points: if/else 10 (16 pts), loops 3 (12 pts) (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/runtime/src/lib.rs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"1209f5fc2bd9b0b7345ebcce4385568acbfe1a4035aee12c1f5814764fb80c15"}},{"ruleId":"D2","level":"warning","message":{"text":"ActorConnRaw.#sendMessage (cognitive 28): ActorConnRaw.#sendMessage has cognitive complexity 28 (threshold 15). Drivers by points: if/else 11 (15 pts), ternaries 3 (9 pts), error handling 1 (3 pts), boolean chains 1 (nesting depth added 12). Of this number, 24 points are the body\u0027s own statements and 4 belong to one function literal inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/client/actor-conn.ts"},"region":{"startLine":1245}}}],"partialFingerprints":{"codehealthFindingId/v1":"f205085c278f305d2a46bc1cb74dbe7ef55dfb8526da09b3dfcb1e3e4bfe73e9"}},{"ruleId":"D2","level":"warning","message":{"text":"ActorHandleRaw.#fetchWithResolvedActor (cognitive 28): ActorHandleRaw.#fetchWithResolvedActor has cognitive complexity 28 (threshold 15). Drivers by points: if/else 6 (18 pts), boolean chains 4, ternaries 2 (3 pts), error handling 1 (2 pts), loops 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/client/actor-handle.ts"},"region":{"startLine":704}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e5d701825026eafee4f2403a3cc2ca4687f7acc4a52911bef8d743d3af661ed"}},{"ruleId":"D2","level":"warning","message":{"text":"packages.discoverPackages (cognitive 28): packages.discoverPackages has cognitive complexity 28 (threshold 15). Drivers by points: if/else 12 (17 pts), loops 5 (8 pts), boolean chains 3 (nesting depth added 8). Of this number, 20 points are the body\u0027s own statements and 8 belong to one function literal inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/publish/src/lib/packages.ts"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"ddae74b5c7754275e8d1fbeb5ba17aed7242af3eb9e45b890819729c4378e32b"}},{"ruleId":"D2","level":"warning","message":{"text":"VirtualWebSocket.#dispatch (cognitive 28): VirtualWebSocket.#dispatch has cognitive complexity 28 (threshold 15). Drivers by points: error handling 5 (15 pts), if/else 5 (9 pts), loops 1 (2 pts), boolean chains 1, match/switch 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"shared/typescript/virtual-websocket/src/virtual-websocket.ts"},"region":{"startLine":250}}}],"partialFingerprints":{"codehealthFindingId/v1":"141b1dbd07691cc894ed5d97ee1d0bae0250acf29b71eec9603cc49cfc60e786"}},{"ruleId":"D2","level":"warning","message":{"text":"Cursor::compare_removed (cognitive 27): Cursor::compare_removed has cognitive complexity 27 (threshold 15). Drivers by points: if/else 15 (24 pts), match/switch 1 (2 pts), boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/history/cursor.rs"},"region":{"startLine":487}}}],"partialFingerprints":{"codehealthFindingId/v1":"b02798e469a9ea32a0ca2065f8230fe595a9485dfc01c08a58eda15561168578"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard::workflows::runner::allocate_pending_actors (cognitive 27): pegboard::workflows::runner::allocate_pending_actors has cognitive complexity 27 (threshold 15). Drivers by points: if/else 9 (24 pts), loops 2 (3 pts) (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/runner.rs"},"region":{"startLine":976}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e4cf73469922f2c06e1795a3e9cc88838eae14ac96e8470e26706e998b5ec17"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard_envoy::ws_to_tunnel_task::dispatch_message (cognitive 27): pegboard_envoy::ws_to_tunnel_task::dispatch_message has cognitive complexity 27 (threshold 15). Drivers by points: if/else 14 (24 pts), loops 1 (2 pts), match/switch 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs"},"region":{"startLine":685}}}],"partialFingerprints":{"codehealthFindingId/v1":"1807109e629631589a0760f537ed6d38651f122b9422643d1b73669bc188dd80"}},{"ruleId":"D2","level":"warning","message":{"text":"DatabaseKv::verify_deallocate_set_error (cognitive 26): DatabaseKv::verify_deallocate_set_error has cognitive complexity 26 (threshold 15). Drivers by points: if/else 16 (19 pts), boolean chains 7 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/repair.rs"},"region":{"startLine":2315}}}],"partialFingerprints":{"codehealthFindingId/v1":"d28771c6a220a2597f72de846608c97f12c66e1b0983b51ef2ba49660f3e001e"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard::workflows::actor2::alloc_serverful::hash::allocate_with_rng (cognitive 26): pegboard::workflows::actor2::alloc_serverful::hash::allocate_with_rng has cognitive complexity 26 (threshold 15). Drivers by points: if/else 15 (24 pts), boolean chains 1, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor2/alloc_serverful/hash.rs"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"90a19b23d56d59a8902c9decb3619f8013fbb33d0e290c0ee9bcd8a9618834a8"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard_envoy::ws_to_tunnel_task::task_inner (cognitive 26): pegboard_envoy::ws_to_tunnel_task::task_inner has cognitive complexity 26 (threshold 15). Drivers by points: if/else 5 (16 pts), match/switch 3 (9 pts), loops 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs"},"region":{"startLine":464}}}],"partialFingerprints":{"codehealthFindingId/v1":"26a2ad913838929ac18d09c9c905cefecdad83c7517fbf97f629fa52a54275c8"}},{"ruleId":"D2","level":"warning","message":{"text":"PostgresDatabaseDriver::run (cognitive 26): PostgresDatabaseDriver::run has cognitive complexity 26 (threshold 15). Drivers by points: if/else 8 (20 pts), match/switch 2 (5 pts), loops 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universaldb/src/driver/postgres/database.rs"},"region":{"startLine":330}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0a62d3809c2698635a5e4f10eff21d89d85fa9cb95ef0fef8f022dd622876af"}},{"ruleId":"D2","level":"warning","message":{"text":"RocksDbDatabaseDriver::run (cognitive 26): RocksDbDatabaseDriver::run has cognitive complexity 26 (threshold 15). Drivers by points: if/else 8 (20 pts), match/switch 2 (5 pts), loops 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universaldb/src/driver/rocksdb/database.rs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"4430c3cb1daa6e335f4d26575e20df1978072e8fd74f2e828d6ab68a13bbc698"}},{"ruleId":"D2","level":"warning","message":{"text":"ThrottleState::flush (cognitive 26): ThrottleState::flush has cognitive complexity 26 (threshold 15). Drivers by points: loops 10 (13 pts), if/else 7 (12 pts), match/switch 1 (nesting depth added 8). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universaldb/src/throttle.rs"},"region":{"startLine":545}}}],"partialFingerprints":{"codehealthFindingId/v1":"95def3bee5935f6f1d50fd0a38e70f7cd3c4a49cd3cf077937738f32759b0207"}},{"ruleId":"D2","level":"warning","message":{"text":"ActorConnRaw.#handleOnMessage (cognitive 26): ActorConnRaw.#handleOnMessage has cognitive complexity 26 (threshold 15). Drivers by points: if/else 11 (21 pts), loops 1 (3 pts), boolean chains 1, ternaries 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":"rivetkit-typescript/packages/rivetkit/src/client/actor-conn.ts"},"region":{"startLine":724}}}],"partialFingerprints":{"codehealthFindingId/v1":"e85c8af8c24b531b5436099286333d84d179d9da8abd82e42c3dbb2291e0171c"}},{"ruleId":"D2","level":"warning","message":{"text":"WorkflowContextImpl.executeJoin (cognitive 26): WorkflowContextImpl.executeJoin has cognitive complexity 26 (threshold 15). Drivers by points: if/else 15 (21 pts), boolean chains 3, error handling 1, loops 1 (nesting depth added 6). Of this number, 16 points are the body\u0027s own statements and 10 belong to one function literal inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/workflow-engine/src/context.ts"},"region":{"startLine":2016}}}],"partialFingerprints":{"codehealthFindingId/v1":"48d43c663d12f8e94a9d760a6617830111cd6a7218d9b9f20ce57d7cc4ea0341"}},{"ruleId":"D2","level":"warning","message":{"text":"index.executeRollback (cognitive 26): index.executeRollback has cognitive complexity 26 (threshold 15). Drivers by points: if/else 10 (21 pts), error handling 2 (3 pts), boolean chains 1, 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":"rivetkit-typescript/packages/workflow-engine/src/index.ts"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c9769a43f166e847e348a97384f177ba59c26d658180ae3d409d370ebef4a84"}},{"ruleId":"D2","level":"warning","message":{"text":"gen-api-reference.exampleFor (cognitive 26): gen-api-reference.exampleFor has cognitive complexity 26 (threshold 15). Drivers by points: ternaries 6 (13 pts), if/else 9 (11 pts), boolean chains 1, match/switch 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/docs/gen-api-reference.mjs"},"region":{"startLine":741}}}],"partialFingerprints":{"codehealthFindingId/v1":"01eb3cf1d5bad117f70a7d0504d44976e3661c16d47269283b70bd11c92af704"}},{"ruleId":"D2","level":"warning","message":{"text":"index.convertExpr (cognitive 26): index.convertExpr has cognitive complexity 26 (threshold 15). Drivers by points: if/else 8 (16 pts), ternaries 2 (6 pts), boolean chains 3, match/switch 1 (nesting depth added 12). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/vbare-gen-converters/index.ts"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"c61815f81bd358fd028b65d102f98fc25c69f1d7374c590012010827fafd313d"}},{"ruleId":"D2","level":"warning","message":{"text":"depot::conveyer::commit::truncate::collect_truncate_cleanup (cognitive 25): depot::conveyer::commit::truncate::collect_truncate_cleanup has cognitive complexity 25 (threshold 15). Drivers by points: if/else 7 (13 pts), loops 7 (12 pts) (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/conveyer/commit/truncate.rs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"da87ed3de5c1806119f154849be85e9ad41f930e35bc8dd997f23f8503b5117c"}},{"ruleId":"D2","level":"warning","message":{"text":"depot::conveyer::debug::load_pages_from_hot_tier (cognitive 25): depot::conveyer::debug::load_pages_from_hot_tier has cognitive complexity 25 (threshold 15). Drivers by points: if/else 6 (18 pts), loops 4 (7 pts) (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/conveyer/debug.rs"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb2d5e742063992ae26628f31b6d860f8c97d2f1a94749ba943b8921e46580ea"}},{"ruleId":"D2","level":"warning","message":{"text":"depot::doctor::doctor (cognitive 25): depot::doctor::doctor has cognitive complexity 25 (threshold 15). Drivers by points: if/else 18 (20 pts), boolean chains 3, match/switch 2 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/doctor.rs"},"region":{"startLine":432}}}],"partialFingerprints":{"codehealthFindingId/v1":"e82dcc48be721a1a3cb3860f196906435049c566fda040b6ed221bf1f202b8cf"}},{"ruleId":"D2","level":"warning","message":{"text":"epoxy::ops::propose::send_prepare_round (cognitive 25): epoxy::ops::propose::send_prepare_round has cognitive complexity 25 (threshold 15). Drivers by points: if/else 9 (19 pts), match/switch 2 (5 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":"engine/packages/epoxy/src/ops/propose.rs"},"region":{"startLine":781}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e0682135848002391f1c2b509b540e0b436f6add2003bd00739e835095ace51"}},{"ruleId":"D2","level":"warning","message":{"text":"DatabaseKv::inspect_missing_init_state (cognitive 25): DatabaseKv::inspect_missing_init_state has cognitive complexity 25 (threshold 15). Drivers by points: if/else 18 (21 pts), boolean chains 3, match/switch 1 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/repair.rs"},"region":{"startLine":1269}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa1466471de958b12f3de5eb298bbf6e207b527153df37fbb013d756ce909646"}},{"ruleId":"D2","level":"warning","message":{"text":"SystemInfo::fetch_cpu_usage (cognitive 25): SystemInfo::fetch_cpu_usage has cognitive complexity 25 (threshold 15). Drivers by points: if/else 15 (25 pts) (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/system.rs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"e05749735c08d067ce8e56c598979811b42429b7f6962c1a1910b202ec31b298"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard::workflows::runner2::allocate_pending_actors (cognitive 25): pegboard::workflows::runner2::allocate_pending_actors has cognitive complexity 25 (threshold 15). Drivers by points: if/else 12 (22 pts), loops 2, match/switch 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/runner2.rs"},"region":{"startLine":686}}}],"partialFingerprints":{"codehealthFindingId/v1":"c85c01b65d263e5fe40e277c91239249c747dd2816610c41abfdb92f3dddceb0"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard_envoy::conn::init_conn (cognitive 25): pegboard_envoy::conn::init_conn has cognitive complexity 25 (threshold 15). Drivers by points: if/else 11 (17 pts), loops 2 (4 pts), match/switch 3 (4 pts) (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-envoy/src/conn.rs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6e4e2828076d92138853dd8c739d1f487506a63a79b7b4b9f68d884f5c61238"}},{"ruleId":"D2","level":"warning","message":{"text":"TransactionConflictTracker::check_and_insert (cognitive 25): TransactionConflictTracker::check_and_insert has cognitive complexity 25 (threshold 15). Drivers by points: if/else 4 (10 pts), loops 4 (9 pts), match/switch 2 (5 pts), boolean chains 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universaldb/src/conflict_tracker.rs"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"b94d774fa018af23f99f86fa41c544b309d4805c41998f88d0a88ad013a34aa1"}},{"ruleId":"D2","level":"warning","message":{"text":"mod.db (cognitive 25): mod.db has cognitive complexity 25 (threshold 15). Drivers by points: if/else 12 (13 pts), boolean chains 5, ternaries 3 (4 pts), error handling 2 (3 pts) (nesting depth added 3). Most of this is not in the body itself: 0 of the 25 points are its own statements and the rest belongs to 8 function literals inside it that branch (lines 191, 115, 213, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/database/mod.ts"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"072b792c3122b13aa844bedf6043ab410abc5381747205903bf582be5ad15c95"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_cli::util::build_resources (cognitive 24): rivet_cli::util::build_resources has cognitive complexity 24 (threshold 15). Drivers by points: if/else 13 (20 pts), boolean chains 4 (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":"engine/packages/cli/src/util.rs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d5e72d77d931c2422c737f33ba339ae1c56c14b617af26399418cb0b4873376"}},{"ruleId":"D2","level":"warning","message":{"text":"depot::compaction::shared::resolve_bucket_catalog_forks (cognitive 24): depot::compaction::shared::resolve_bucket_catalog_forks has cognitive complexity 24 (threshold 15). Drivers by points: if/else 8 (20 pts), loops 2 (3 pts), boolean chains 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/compaction/shared.rs"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"82cf520aa9b31c107f8e44e8039705e9178ca1d61c8e589350fa8632ae93a0a2"}},{"ruleId":"D2","level":"warning","message":{"text":"depot::conveyer::read::point_read_pidx_owners (cognitive 24): depot::conveyer::read::point_read_pidx_owners has cognitive complexity 24 (threshold 15). Drivers by points: if/else 5 (15 pts), match/switch 2 (5 pts), loops 2 (3 pts), boolean chains 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/conveyer/read.rs"},"region":{"startLine":1411}}}],"partialFingerprints":{"codehealthFindingId/v1":"96fdc7a6c62a76c63d572bb4f8a242102941d4f18bfd495bf936dc3f5842aa1b"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_depot_client::query::exec_statements (cognitive 24): rivet_depot_client::query::exec_statements has cognitive complexity 24 (threshold 15). Drivers by points: if/else 7 (17 pts), loops 3 (6 pts), boolean chains 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: one other method here (rivet_depot_client::query::exec_statements_profiled) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot-client/src/query.rs"},"region":{"startLine":308}}}],"partialFingerprints":{"codehealthFindingId/v1":"74b104a3074b74e1c3012df6e023a4b4bb9fd076d2c6e27638b3741326db2b1c"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_depot_client::query::exec_statements_profiled (cognitive 24): rivet_depot_client::query::exec_statements_profiled has cognitive complexity 24 (threshold 15). Drivers by points: if/else 7 (17 pts), loops 3 (6 pts), boolean chains 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: one other method here (rivet_depot_client::query::exec_statements) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot-client/src/query.rs"},"region":{"startLine":382}}}],"partialFingerprints":{"codehealthFindingId/v1":"348a0169a88cbff32f739c313f8237e28b07a617170180014029b0d7da4ebc1c"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_profiling::pyroscope::start (cognitive 24): rivet_profiling::pyroscope::start has cognitive complexity 24 (threshold 15). Drivers by points: if/else 5 (13 pts), match/switch 3 (10 pts), loops 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/profiling/src/pyroscope.rs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d49ca54edd0687874f6a24f2b2a01eeb19bfba0c63a8437f46f20265046bb74"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_envoy_client::tunnel::handle_tunnel_message (cognitive 24): rivet_envoy_client::tunnel::handle_tunnel_message has cognitive complexity 24 (threshold 15). Drivers by points: if/else 12 (18 pts), boolean chains 3, 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":"engine/sdks/rust/envoy-client/src/tunnel.rs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"876d355f144558cc46e1fe5c091a8fc32ee1236fec08ef5b3ec43942ce695c2c"}},{"ruleId":"D2","level":"warning","message":{"text":"index.transitiveSharedTypes (cognitive 24): index.transitiveSharedTypes has cognitive complexity 24 (threshold 15). Drivers by points: if/else 8 (17 pts), loops 4 (6 pts), boolean chains 1 (nesting depth added 11). Of this number, 13 points are the body\u0027s own statements and 11 belong to one function literal inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/vbare-gen-converters/index.ts"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"72df5e2d0779fd53d0a54c691ccddacedb12db3d4897039a42abdc0e4b7af681"}},{"ruleId":"D2","level":"warning","message":{"text":"depot::compaction::shared::read_stale_pidx_chunk (cognitive 23): depot::compaction::shared::read_stale_pidx_chunk has cognitive complexity 23 (threshold 15). Drivers by points: if/else 7 (14 pts), match/switch 3 (5 pts), boolean chains 3, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/compaction/shared.rs"},"region":{"startLine":1766}}}],"partialFingerprints":{"codehealthFindingId/v1":"145ed1b1261245a1c42a538a86a7a21fa6b5b31acb3f4c6709596c2a8e763107"}},{"ruleId":"D2","level":"warning","message":{"text":"depot::compaction::shared::write_staged_hot_shards (cognitive 23): depot::compaction::shared::write_staged_hot_shards has cognitive complexity 23 (threshold 15). Drivers by points: if/else 5 (12 pts), loops 3 (7 pts), match/switch 1 (3 pts), boolean chains 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/compaction/shared.rs"},"region":{"startLine":2775}}}],"partialFingerprints":{"codehealthFindingId/v1":"468bf4dfae82d4ee8f9ad2b6a280fddfc8bd6d3f27ecdb14eb34135a073b5bf7"}},{"ruleId":"D2","level":"warning","message":{"text":"depot::conveyer::read::sqlite_page::overflow_head_pages (cognitive 23): depot::conveyer::read::sqlite_page::overflow_head_pages has cognitive complexity 23 (threshold 15). Drivers by points: if/else 10 (19 pts), boolean chains 2, loops 1, match/switch 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/conveyer/read/sqlite_page.rs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bad288a932f3fba9b9ad3be7b0600ca85b02ef98bfd51d77370666cbba4f365"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_guard::routing::pegboard_gateway::handle_actor_v1 (cognitive 23): rivet_guard::routing::pegboard_gateway::handle_actor_v1 has cognitive complexity 23 (threshold 15). Drivers by points: if/else 7 (17 pts), match/switch 1 (3 pts), loops 1 (2 pts), boolean chains 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/guard/src/routing/pegboard_gateway/mod.rs"},"region":{"startLine":809}}}],"partialFingerprints":{"codehealthFindingId/v1":"58c8e2447858ca01ed02349ad5dc12c9b7d0f34b1b5619bac018842ffa79cf03"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard::workflows::actor_runner_name_selector_backfill::backfill_batch (cognitive 23): pegboard::workflows::actor_runner_name_selector_backfill::backfill_batch has cognitive complexity 23 (threshold 15). Drivers by points: if/else 10 (17 pts), loops 3 (4 pts), match/switch 1 (2 pts) (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor_runner_name_selector_backfill.rs"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"32e5f6f891e0735861f5bd33115754a00c6f17a5f0d84a738613169359a525cb"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard::ops::serverless_metadata::fetch::pegboard_serverless_metadata_fetch (cognitive 23): pegboard::ops::serverless_metadata::fetch::pegboard_serverless_metadata_fetch has cognitive complexity 23 (threshold 15). Drivers by points: if/else 10 (13 pts), match/switch 5 (7 pts), boolean chains 2, loops 1 (nesting depth added 5). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/ops/serverless_metadata/fetch.rs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ebec8c7194fb26b7c5e86d0b3aa5fc653420e9a5bab989ee2e8e8df81dc3ff7"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard_gateway2::hibernation_task::task (cognitive 23): pegboard_gateway2::hibernation_task::task has cognitive complexity 23 (threshold 15). Drivers by points: if/else 6 (13 pts), match/switch 3 (9 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":"engine/packages/pegboard-gateway2/src/hibernation_task.rs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd2ad737b8ca50a95fe31c62276ecf2984d7cf0567afef3294637e7cb0551f9c"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard_gateway3::hibernation_task::task (cognitive 23): pegboard_gateway3::hibernation_task::task has cognitive complexity 23 (threshold 15). Drivers by points: if/else 6 (13 pts), match/switch 3 (9 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":"engine/packages/pegboard-gateway3/src/hibernation_task.rs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"86ab66cd22ad55254c660aa8855db81c698f925baf03326e38c94118479485db"}},{"ruleId":"D2","level":"warning","message":{"text":"ToServerMk2::v6_to_v7 (cognitive 23): ToServerMk2::v6_to_v7 has cognitive complexity 23 (threshold 15). Drivers by points: match/switch 6 (21 pts), if/else 2 (nesting depth added 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident. This shape REPEATS in the file: one other method here (ToServerMk2::v7_to_v6) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/runner-protocol/src/versioned.rs"},"region":{"startLine":666}}}],"partialFingerprints":{"codehealthFindingId/v1":"af282aff4762a052a95eab509edacfc1f222fda3cc158a20f7b6cdf63f7b7f65"}},{"ruleId":"D2","level":"warning","message":{"text":"ToServerMk2::v7_to_v6 (cognitive 23): ToServerMk2::v7_to_v6 has cognitive complexity 23 (threshold 15). Drivers by points: match/switch 6 (21 pts), if/else 2 (nesting depth added 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident. This shape REPEATS in the file: one other method here (ToServerMk2::v6_to_v7) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/runner-protocol/src/versioned.rs"},"region":{"startLine":833}}}],"partialFingerprints":{"codehealthFindingId/v1":"570192ad9be17e7845d5db0395004d8895890e8be670289670b248c0928f2877"}},{"ruleId":"D2","level":"warning","message":{"text":"TransactionOperations::get_range (cognitive 23): TransactionOperations::get_range has cognitive complexity 23 (threshold 15). Drivers by points: if/else 9 (16 pts), loops 3 (5 pts), match/switch 1 (2 pts) (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universaldb/src/tx_ops.rs"},"region":{"startLine":452}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e4cec6d43dcbae6bcc1407e6a9590e54b4ac0d85adb1759b92b3eb413a71b40"}},{"ruleId":"D2","level":"warning","message":{"text":"SqliteDb::release_transaction (cognitive 23): SqliteDb::release_transaction has cognitive complexity 23 (threshold 15). Drivers by points: if/else 10 (17 pts), boolean chains 3, match/switch 1 (3 pts) (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/tx.rs"},"region":{"startLine":861}}}],"partialFingerprints":{"codehealthFindingId/v1":"762a6c932972c8e8d69ddd430e040d27728b211d8f2bcc6a1d4492b6a35ecd20"}},{"ruleId":"D2","level":"warning","message":{"text":"rivetkit_core::actor::actor_runtime_socket::execute_request (cognitive 23): rivetkit_core::actor::actor_runtime_socket::execute_request has cognitive complexity 23 (threshold 15). Drivers by points: match/switch 9 (15 pts), if/else 3 (7 pts), boolean chains 1 (nesting depth added 10). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/actor_runtime_socket.rs"},"region":{"startLine":673}}}],"partialFingerprints":{"codehealthFindingId/v1":"e17fbed4c3c88b9ba3b1552223b3514f7005781d02145f018e7f3453b7e2e559"}},{"ruleId":"D2","level":"warning","message":{"text":"rivetkit_core::actor::migrate_kv_to_sqlite::import_core_state_if_needed_inner (cognitive 23): rivetkit_core::actor::migrate_kv_to_sqlite::import_core_state_if_needed_inner has cognitive complexity 23 (threshold 15). Drivers by points: loops 8 (12 pts), if/else 6 (8 pts), boolean chains 2, match/switch 1 (nesting depth added 6). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/migrate_kv_to_sqlite/mod.rs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1b32695c4e8efe14c5542f6454f702b6a7a67c05d101cec9844b4f5fe2dfc6f"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.sendHttpRequest (cognitive 23): utils.sendHttpRequest has cognitive complexity 23 (threshold 15). Drivers by points: if/else 6 (10 pts), ternaries 4 (8 pts), error handling 3 (4 pts), boolean chains 1 (nesting depth added 9). Of this number, 17 points are the body\u0027s own statements and 6 belong to 2 function literals inside it that branch. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/client/utils.ts"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"7519b10c4bba210cfa1c7d7bca73cf385438c71d45ca3dd1f45c71bef6204694"}},{"ruleId":"D2","level":"warning","message":{"text":"logging.extractMessage (cognitive 23): logging.extractMessage has cognitive complexity 23 (threshold 15). Drivers by points: if/else 11 (21 pts), loops 1, ternaries 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":"rivetkit-typescript/packages/effect/src/internal/logging.ts"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9f64699bb889a1612372ee50a643610b29dee2f49d001c511d6cccd40b329ba"}},{"ruleId":"D2","level":"warning","message":{"text":"encoding.encodeJsonCompatValue (cognitive 23): encoding.encodeJsonCompatValue has cognitive complexity 23 (threshold 15). Drivers by points: if/else 13 (14 pts), boolean chains 4, loops 2 (4 pts), ternaries 1 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/encoding.ts"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"e82db6b8752d7a34f54d6625ec604c801cff3689c2cd8178de3d87783d805229"}},{"ruleId":"D2","level":"warning","message":{"text":"native-database.wrapJsNativeDatabase (cognitive 23): native-database.wrapJsNativeDatabase has cognitive complexity 23 (threshold 15). Drivers by points: if/else 8 (10 pts), error handling 6 (8 pts), loops 3 (4 pts), ternaries 1 (nesting depth added 5). Of this number, 16 points are the body\u0027s own statements and 7 belong to 4 function literals inside it that branch. To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/database/native-database.ts"},"region":{"startLine":326}}}],"partialFingerprints":{"codehealthFindingId/v1":"337ddfb5d4fe7036a2e415a6c2a4499abf4fd144f257f666050d1ad3727ef513"}},{"ruleId":"D2","level":"warning","message":{"text":"KeyRingCache::fetch_and_cache (cognitive 22): KeyRingCache::fetch_and_cache has cognitive complexity 22 (threshold 15). Drivers by points: if/else 14 (16 pts), boolean chains 4, match/switch 1 (2 pts) (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, 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":"engine/packages/auth-jwt/src/key_ring_cache/refresh.rs"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"3099870520bf13c4fa5768b6165fa9a4a3e4ca40ca10777be28662a52b0bc8c3"}},{"ruleId":"D2","level":"warning","message":{"text":"epoxy::workflows::backfill::backfill_chunk (cognitive 22): epoxy::workflows::backfill::backfill_chunk has cognitive complexity 22 (threshold 15). Drivers by points: if/else 8 (17 pts), boolean chains 2, 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":"engine/packages/epoxy/src/workflows/backfill.rs"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"961f72429925d5542507ad612e0d4facf11e9672b4018c4867cd2bd9fd8d83a9"}},{"ruleId":"D2","level":"warning","message":{"text":"DatabaseKv::inspect_deallocate_set_error (cognitive 22): DatabaseKv::inspect_deallocate_set_error has cognitive complexity 22 (threshold 15). Drivers by points: if/else 14 (18 pts), boolean chains 3, match/switch 1 (nesting depth added 4). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/repair.rs"},"region":{"startLine":1552}}}],"partialFingerprints":{"codehealthFindingId/v1":"715a5c3bc11a9107e63bad6f21bd9248055d72e9385f28782a597870a23acdd6"}},{"ruleId":"D2","level":"warning","message":{"text":"Worker::start (cognitive 22): Worker::start has cognitive complexity 22 (threshold 15). Drivers by points: if/else 8 (16 pts), match/switch 2 (5 pts), loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/worker.rs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ce8a438d52e05b080db6c2a99625d71daad3ef8a9dd6153fefc43d9e3639c78"}},{"ruleId":"D2","level":"warning","message":{"text":"ResponseBody::poll_frame (cognitive 22): ResponseBody::poll_frame has cognitive complexity 22 (threshold 15). Drivers by points: match/switch 6 (11 pts), if/else 5 (10 pts), boolean chains 1 (nesting depth added 10). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/guard-core/src/response_body.rs"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"f54029e08336eb67b0bdacf5f6694f1436e8e91d521054cb77907be1c205b409"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard::workflows::actor::metrics::record_kv_metrics (cognitive 22): pegboard::workflows::actor::metrics::record_kv_metrics has cognitive complexity 22 (threshold 15). Drivers by points: if/else 7 (17 pts), loops 2 (3 pts), match/switch 1 (2 pts) (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/metrics.rs"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8da3d598927dfe76923296241cbaa56e4dd5b2359c40175ac682367652eda16"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard::workflows::actor2::metrics::record_kv_metrics (cognitive 22): pegboard::workflows::actor2::metrics::record_kv_metrics has cognitive complexity 22 (threshold 15). Drivers by points: if/else 7 (17 pts), loops 2 (3 pts), match/switch 1 (2 pts) (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor2/metrics.rs"},"region":{"startLine":202}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebec63fe8ec8975a3b092a9a74c036ad50908447dfb313f2fceea12781b32c63"}},{"ruleId":"D2","level":"warning","message":{"text":"InFlightRequest::recv_message (cognitive 22): InFlightRequest::recv_message has cognitive complexity 22 (threshold 15). Drivers by points: if/else 5 (14 pts), match/switch 5 (8 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":"engine/packages/pegboard-gateway3/src/shared_state.rs"},"region":{"startLine":2102}}}],"partialFingerprints":{"codehealthFindingId/v1":"f96ef4f59a81e17e2b86275d176a1baf8ba2af5a5515192bf906e005295eb0c0"}},{"ruleId":"D2","level":"warning","message":{"text":"Subscriber::next (cognitive 22): Subscriber::next has cognitive complexity 22 (threshold 15). Drivers by points: if/else 6 (12 pts), match/switch 3 (9 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":"engine/packages/universalpubsub/src/pubsub.rs"},"region":{"startLine":431}}}],"partialFingerprints":{"codehealthFindingId/v1":"544eb72bf7063b1cb526c5f6a701e0ec1128586dd1a3c4b03455a41913b5ad83"}},{"ruleId":"D2","level":"warning","message":{"text":"RegistryDispatcher::handle_inspector_websocket (cognitive 22): RegistryDispatcher::handle_inspector_websocket has cognitive complexity 22 (threshold 15). Drivers by points: if/else 7 (12 pts), match/switch 5 (8 pts), boolean chains 1, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/inspector_ws.rs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbefdf50ce5f14364323f1a58a1f55981267590acf96796c7576ac6e4d8dceca"}},{"ruleId":"D2","level":"warning","message":{"text":"Runner.shutdown (cognitive 22): Runner.shutdown has cognitive complexity 22 (threshold 15). Drivers by points: if/else 12 (15 pts), boolean chains 3, error handling 1 (3 pts), loops 1 (nesting depth added 5). Of this number, 19 points are the body\u0027s own statements and 3 belong to one function literal inside it that branches. To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/typescript/runner/src/mod.ts"},"region":{"startLine":513}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c61b4aee6457752f0933d48948d60fe9f52d66fa6383b229e3164d172a59e13"}},{"ruleId":"D2","level":"warning","message":{"text":"ActorHandleRaw.#sendQueueMessage (cognitive 22): ActorHandleRaw.#sendQueueMessage has cognitive complexity 22 (threshold 15). Drivers by points: if/else 5 (16 pts), boolean chains 3, error handling 1 (2 pts), loops 1 (nesting depth added 12). Most of this is not in the body itself: 0 of the 22 points are its own statements and the rest belongs to one function literal inside it that branches (line 160). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/client/actor-handle.ts"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2a5891a9bb40e4cbc3abbb561702e9e18310b82bf62d00bdcb6d5e17e30a798"}},{"ruleId":"D2","level":"warning","message":{"text":"Runner.shutdown (cognitive 22): Runner.shutdown has cognitive complexity 22 (threshold 15). Drivers by points: if/else 12 (15 pts), boolean chains 3, error handling 1 (3 pts), loops 1 (nesting depth added 5). Of this number, 19 points are the body\u0027s own statements and 3 belong to one function literal inside it that branches. To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/engine-runner/src/mod.ts"},"region":{"startLine":513}}}],"partialFingerprints":{"codehealthFindingId/v1":"a139a3e301d9bf7caa0b02d649b1100ee8495ed564cf202b76d8ca75328e6a92"}},{"ruleId":"D2","level":"warning","message":{"text":"VacuumRepairOpts::execute (cognitive 21): VacuumRepairOpts::execute has cognitive complexity 21 (threshold 15). Drivers by points: loops 5 (8 pts), if/else 5 (7 pts), match/switch 3 (6 pts) (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/engine/src/commands/depot.rs"},"region":{"startLine":467}}}],"partialFingerprints":{"codehealthFindingId/v1":"93f9c6ac6791f7fe48f1e8ebe4d1dcd66535ca49cb3087799a611a56842108b2"}},{"ruleId":"D2","level":"warning","message":{"text":"epoxy::replica::messages::accept::accept (cognitive 21): epoxy::replica::messages::accept::accept has cognitive complexity 21 (threshold 15). Drivers by points: if/else 10 (18 pts), boolean chains 3 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/epoxy/src/replica/messages/accept.rs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d486c67fbb3fa54a8e47f2210d7c938f744011818825947ba87beffdb419abb"}},{"ruleId":"D2","level":"warning","message":{"text":"SignalBuilder::send (cognitive 21): SignalBuilder::send has cognitive complexity 21 (threshold 15). Drivers by points: if/else 7 (12 pts), match/switch 3 (8 pts), boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/builder/workflow/signal.rs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed0bd8dbed25174779e0ad97297b954aa157badeda2b8bea7b804dc8a5152a07"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard::workflows::actor2::runtime::handle_stopped (cognitive 21): pegboard::workflows::actor2::runtime::handle_stopped has cognitive complexity 21 (threshold 15). Drivers by points: match/switch 7 (11 pts), if/else 6 (10 pts) (nesting depth added 8). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor2/runtime.rs"},"region":{"startLine":558}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb46ef82c6c984def10c8a6422d02fbaf818f3f0bb8c6d2af6042cc39a8dbbea"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard_gateway3::http_stream::response::send_http_response_body_bytes (cognitive 21): pegboard_gateway3::http_stream::response::send_http_response_body_bytes has cognitive complexity 21 (threshold 15). Drivers by points: if/else 7 (15 pts), match/switch 2 (5 pts), loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway3/src/http_stream/response.rs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"335c4a7c411259079101874577ac746805679694db3544d29817209a63924f44"}},{"ruleId":"D2","level":"warning","message":{"text":"TransactionTask::handle_get_range (cognitive 21): TransactionTask::handle_get_range has cognitive complexity 21 (threshold 15). Drivers by points: if/else 7 (17 pts), loops 2 (4 pts) (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universaldb/src/driver/rocksdb/transaction_task.rs"},"region":{"startLine":399}}}],"partialFingerprints":{"codehealthFindingId/v1":"76e40d878124a31102fbe5eef8d25ab83556349a3abd3cfe2b8ca8799c37581f"}},{"ruleId":"D2","level":"warning","message":{"text":"universaldb::driver::postgres::nats::run_commit_subscriber (cognitive 21): universaldb::driver::postgres::nats::run_commit_subscriber has cognitive complexity 21 (threshold 15). Drivers by points: if/else 5 (15 pts), match/switch 2 (5 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":"engine/packages/universaldb/src/driver/postgres/nats.rs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e6671eae97c6f5a099aea56c9fa44327aef6932e91e5fa10a62f6de7444339c"}},{"ruleId":"D2","level":"warning","message":{"text":"LegacyPrefixScan::next_page (cognitive 21): LegacyPrefixScan::next_page has cognitive complexity 21 (threshold 15). Drivers by points: if/else 5 (14 pts), match/switch 2 (4 pts), loops 2 (3 pts) (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/migrate_kv_to_sqlite/mod.rs"},"region":{"startLine":391}}}],"partialFingerprints":{"codehealthFindingId/v1":"097c25070201fef7f5921ee29b0eecd667a2f7e7717076da1fe6dae1aab9233a"}},{"ruleId":"D2","level":"warning","message":{"text":"rivetkit_core::actor::internal_storage::clear_table_bounded (cognitive 21): rivetkit_core::actor::internal_storage::clear_table_bounded has cognitive complexity 21 (threshold 15). Drivers by points: if/else 4 (10 pts), match/switch 2 (6 pts), loops 2 (3 pts), boolean chains 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/internal_storage/mod.rs"},"region":{"startLine":1227}}}],"partialFingerprints":{"codehealthFindingId/v1":"5415e33f78d9f26b01ce8d3dd55204f5b4f112f95b07765c94a9d95805d308a0"}},{"ruleId":"D2","level":"warning","message":{"text":"ActorConnection.handleClose (cognitive 21): ActorConnection.handleClose has cognitive complexity 21 (threshold 15). Drivers by points: if/else 9 (15 pts), boolean chains 4, loops 1 (2 pts) (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift"},"region":{"startLine":742}}}],"partialFingerprints":{"codehealthFindingId/v1":"9bf09c425aeae8ebcf52f7572684207e2f1293917072e3a0a3b8296d31760d28"}},{"ruleId":"D2","level":"warning","message":{"text":"dispatcher.drainDispatchQueue (cognitive 21): dispatcher.drainDispatchQueue has cognitive complexity 21 (threshold 15). Drivers by points: if/else 5 (13 pts), ternaries 2 (7 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":"integrations/workflow-world/src/actors/dispatcher.ts"},"region":{"startLine":576}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ca1db72ac1df45ef02a245a8f7445e5510feca1287042a102de93d98ad62464"}},{"ruleId":"D2","level":"warning","message":{"text":"native-http.buildNativeHttpRequest (cognitive 21): native-http.buildNativeHttpRequest has cognitive complexity 21 (threshold 15). Drivers by points: if/else 3 (7 pts), ternaries 4 (7 pts), boolean chains 4, error handling 1 (3 pts) (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/registry/native-http.ts"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ac64f83a4e18235fedfa5968bd8e3299fb58172e701972e388b18e924808e3a"}},{"ruleId":"D2","level":"warning","message":{"text":"cut-release.main (cognitive 21): cut-release.main has cognitive complexity 21 (threshold 15). Drivers by points: if/else 11 (12 pts), ternaries 2 (4 pts), error handling 1 (2 pts), loops 1 (2 pts), boolean chains 1 (nesting depth added 5). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/publish/src/local/cut-release.ts"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"46732cf2044108cfae6ede377102c47304f5109f653e5efc1a4c5c19362fc863"}},{"ruleId":"D2","level":"warning","message":{"text":"depot::compaction::shared::read_dead_shard_versions_chunk (cognitive 20): depot::compaction::shared::read_dead_shard_versions_chunk has cognitive complexity 20 (threshold 15). Drivers by points: if/else 4 (12 pts), loops 3 (5 pts), match/switch 2, boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/compaction/shared.rs"},"region":{"startLine":1984}}}],"partialFingerprints":{"codehealthFindingId/v1":"620d4ed70bae37b57ceb588c62633c58a5ff30385ef0582e4151cc7de93f9cac"}},{"ruleId":"D2","level":"warning","message":{"text":"depot::workflows::db_reclaimer::sweep_commit_delta_chunk_tx (cognitive 20): depot::workflows::db_reclaimer::sweep_commit_delta_chunk_tx has cognitive complexity 20 (threshold 15). Drivers by points: if/else 10 (15 pts), loops 3, match/switch 1 (2 pts) (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/workflows/db_reclaimer.rs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e0bdefd93c75902c7950f2162bc74e4ad34893013db3d87ac16a61f09245fd3"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_engine::util::wf::print_workflows (cognitive 20): rivet_engine::util::wf::print_workflows has cognitive complexity 20 (threshold 15). Drivers by points: if/else 9 (18 pts), loops 1 (2 pts) (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/engine/src/util/wf/mod.rs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"3915736d4c3ce493106c397c3377906f17d6cfe0af0e1567d661ec5836b2704e"}},{"ruleId":"D2","level":"warning","message":{"text":"epoxy::ops::propose::epoxy_propose (cognitive 20): epoxy::ops::propose::epoxy_propose has cognitive complexity 20 (threshold 15). Drivers by points: match/switch 6 (16 pts), if/else 2 (3 pts), loops 1 (nesting depth added 11). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/epoxy/src/ops/propose.rs"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"603d0ea665ec437b3ac2d9a60376f44036bf289e341d9414bdfbcc6e1b9b8ea8"}},{"ruleId":"D2","level":"warning","message":{"text":"DatabaseKv::silence_workflows (cognitive 20): DatabaseKv::silence_workflows has cognitive complexity 20 (threshold 15). Drivers by points: if/else 7 (13 pts), loops 4 (7 pts) (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/debug.rs"},"region":{"startLine":430}}}],"partialFingerprints":{"codehealthFindingId/v1":"06a38b71d883ba5e8cf744bba8c31fcc9eaa9e4e995d618900c47bdea35f3358"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_guard::routing::create_routing_function (cognitive 20): rivet_guard::routing::create_routing_function has cognitive complexity 20 (threshold 15). Drivers by points: if/else 14 (20 pts) (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/guard/src/routing/mod.rs"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"af323b0fcd87fc3a3cf4630b6cbcf469c62c7acde780af64f0a68d3d5726eacd"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard::workflows::actor2::runtime::allocate (cognitive 20): pegboard::workflows::actor2::runtime::allocate has cognitive complexity 20 (threshold 15). Drivers by points: if/else 15 (19 pts), match/switch 1 (nesting depth added 4). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor2/runtime.rs"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"910ed9ec96b6dcaf1e3106b9c8f1a29ac9e2c7b246df4420c8b632c3797cb896"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard::workflows::actor::metrics::pegboard_actor_metrics (cognitive 20): pegboard::workflows::actor::metrics::pegboard_actor_metrics has cognitive complexity 20 (threshold 15). Drivers by points: if/else 10 (17 pts), match/switch 1 (2 pts), loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/metrics.rs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ef05334b8612ab6d6f09cf5aeb4b6844b9414a4cdf94d38362d6e1035cb212e"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard::ops::actor::util::build_actors_from_workflows (cognitive 20): pegboard::ops::actor::util::build_actors_from_workflows has cognitive complexity 20 (threshold 15). Drivers by points: match/switch 4 (10 pts), if/else 6 (8 pts), loops 2 (nesting depth added 8). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/ops/actor/util.rs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"bde06a1744a461ce65651e985447e3cb040c9a0226594b64ad64d524e735626b"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard::actor_kv::list (cognitive 20): pegboard::actor_kv::list has cognitive complexity 20 (threshold 15). Drivers by points: if/else 10 (19 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/actor_kv/mod.rs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"417fb17ece9f7fb585f10a78748807ad928e7e3995ed7ef8723d79258b1a31fb"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard::workflows::actor2::metrics::pegboard_actor2_metrics (cognitive 20): pegboard::workflows::actor2::metrics::pegboard_actor2_metrics has cognitive complexity 20 (threshold 15). Drivers by points: if/else 10 (17 pts), match/switch 1 (2 pts), loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor2/metrics.rs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"99aa26358698a3b3522d84e7ce6c0f6befe86d43a1d16214773eeb267dd142c5"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard::workflows::runner_pool::pegboard_runner_pool2 (cognitive 20): pegboard::workflows::runner_pool::pegboard_runner_pool2 has cognitive complexity 20 (threshold 15). Drivers by points: loops 6 (11 pts), if/else 5 (7 pts), match/switch 1 (2 pts) (nesting depth added 8). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/runner_pool.rs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"40b8ed61741d8653b13b2b8d7bf9f53e250c5b9c49e330eea61f88dffd13c745"}},{"ruleId":"D2","level":"warning","message":{"text":"InFlightRequestHandle::send_message (cognitive 20): InFlightRequestHandle::send_message has cognitive complexity 20 (threshold 15). Drivers by points: if/else 10 (18 pts), boolean chains 1, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":596}}}],"partialFingerprints":{"codehealthFindingId/v1":"3422e68e35361f4ef7b8479a9996d88726312d7a6c99e5c136c62ab5d542d4f8"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_envoy_client::events::handle_send_events (cognitive 20): rivet_envoy_client::events::handle_send_events has cognitive complexity 20 (threshold 15). Drivers by points: if/else 6 (18 pts), loops 2 (nesting depth added 12). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/events.rs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"95c00e3da7678015eecca63074e63425910563fb6c5a22913b2a5dd06ed2fad2"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_envoy_client::connection::native::connection_loop (cognitive 20): rivet_envoy_client::connection::native::connection_loop has cognitive complexity 20 (threshold 15). Drivers by points: if/else 6 (16 pts), match/switch 1 (2 pts), boolean chains 1, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/connection/native.rs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"99948c427c5a541d0656f6ab9c32ad2c20f4619128e98fa0346242a126bb1b14"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_envoy_client::connection::wasm::imp::connection_loop (cognitive 20): rivet_envoy_client::connection::wasm::imp::connection_loop has cognitive complexity 20 (threshold 15). Drivers by points: if/else 6 (16 pts), match/switch 1 (2 pts), boolean chains 1, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/connection/wasm.rs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0a4265a83f761f119cea43ec92eda8df111c0fb2ebc8b4a2aba7d22a1bdfde5"}},{"ruleId":"D2","level":"warning","message":{"text":"ActorConfig::from_input (cognitive 20): ActorConfig::from_input has cognitive complexity 20 (threshold 15). Drivers by points: if/else 20. 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":"rivetkit-rust/packages/rivetkit-core/src/actor/config.rs"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"861037f411ea82660602f7a348c25d33a4b381c79712afa404acb3d38ad21fd8"}},{"ruleId":"D2","level":"warning","message":{"text":"ActorContext::prepare_state_deltas (cognitive 20): ActorContext::prepare_state_deltas has cognitive complexity 20 (threshold 15). Drivers by points: if/else 4 (8 pts), match/switch 3 (6 pts), loops 4, boolean chains 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/context.rs"},"region":{"startLine":1347}}}],"partialFingerprints":{"codehealthFindingId/v1":"89aede9245b210fe6de5360a62cf24843ca5788314cfcc6f4146e789c214a076"}},{"ruleId":"D2","level":"warning","message":{"text":"ActorContext::take_due_schedule_dispatches (cognitive 20): ActorContext::take_due_schedule_dispatches has cognitive complexity 20 (threshold 15). Drivers by points: if/else 9 (15 pts), loops 2, match/switch 1 (2 pts), boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/schedule.rs"},"region":{"startLine":593}}}],"partialFingerprints":{"codehealthFindingId/v1":"be70be4934401c3a83193376f398780d6123fc264ad02300effa563af38190bf"}},{"ruleId":"D2","level":"warning","message":{"text":"ActorContext::apply_state_deltas_inner (cognitive 20): ActorContext::apply_state_deltas_inner has cognitive complexity 20 (threshold 15). Drivers by points: if/else 10 (12 pts), loops 2 (3 pts), match/switch 1 (3 pts), boolean chains 2 (nesting depth added 5). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/state.rs"},"region":{"startLine":585}}}],"partialFingerprints":{"codehealthFindingId/v1":"831734145e26141755f1bd82ef108f530ba891608b5723bbbf946f6b8023a410"}},{"ruleId":"D2","level":"warning","message":{"text":"rivetkit_core::actor::actor_runtime_socket::serve_listener (cognitive 20): rivetkit_core::actor::actor_runtime_socket::serve_listener has cognitive complexity 20 (threshold 15). Drivers by points: if/else 5 (11 pts), match/switch 2 (5 pts), loops 3 (4 pts) (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/actor_runtime_socket.rs"},"region":{"startLine":293}}}],"partialFingerprints":{"codehealthFindingId/v1":"21a599ac0fe3028760cd81aaceec55aef2744fa2edfe7c22eeb64156c1b181b5"}},{"ruleId":"D2","level":"warning","message":{"text":"rivetkit_core::registry::envoy_callbacks::deserialize_actor_key_from_protocol (cognitive 20): rivetkit_core::registry::envoy_callbacks::deserialize_actor_key_from_protocol has cognitive complexity 20 (threshold 15). Drivers by points: if/else 12 (17 pts), boolean chains 2, loops 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/envoy_callbacks.rs"},"region":{"startLine":322}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffe05daafab88825f939b1df988c389cf6c98e2226a724a5631c091c1062a021"}},{"ruleId":"D2","level":"warning","message":{"text":"rivetkit_wasm::start_wasm_serverless_request (cognitive 20): rivetkit_wasm::start_wasm_serverless_request has cognitive complexity 20 (threshold 15). Drivers by points: if/else 5 (11 pts), match/switch 5 (8 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit-wasm/src/lib.rs"},"region":{"startLine":2826}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ca50313bcf91cd0d93b704b0077a2cd650fc31145952e96f03f6d0dc41e6f10"}},{"ruleId":"D2","level":"warning","message":{"text":"compaction_backlog.print_report (cognitive 20): compaction_backlog.print_report has cognitive complexity 20 (threshold 15). Drivers by points: if/else 12, ternaries 2 (4 pts), boolean chains 2, loops 1 (2 pts) (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, 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":"engine/packages/depot/scripts/compaction_backlog.py"},"region":{"startLine":682}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b4131146a3b4fe411621c83733b72a7d6bed4df7235024011527e0cce43e5d1"}},{"ruleId":"D2","level":"warning","message":{"text":"ActorObservable.attachConnectionHandlers (cognitive 20): ActorObservable.attachConnectionHandlers has cognitive complexity 20 (threshold 15). Drivers by points: if/else 7 (13 pts), boolean chains 5, loops 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-swift/Sources/RivetKitSwiftUI/ActorObservable.swift"},"region":{"startLine":515}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d7d3d3ce2382c3028de7c29942c7b55984d49293bb8e7b56a022bd48568d8d8"}},{"ruleId":"D2","level":"warning","message":{"text":"RivetAgentCoordinator.reconcileSubmissions (cognitive 20): RivetAgentCoordinator.reconcileSubmissions has cognitive complexity 20 (threshold 15). Drivers by points: if/else 7 (11 pts), error handling 2 (4 pts), loops 4, boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"integrations/flue-runtime/src/agent-coordinator.ts"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"231faec1d0081e81da35ffb07674c69d7e76db96bb548975db32509993b659e8"}},{"ruleId":"D2","level":"warning","message":{"text":"keys.deserializeActorKey (cognitive 20): keys.deserializeActorKey has cognitive complexity 20 (threshold 15). Drivers by points: if/else 12 (17 pts), boolean chains 2, loops 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/actor/keys.ts"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"046389bc9e6d57edb13e9eaf8c4ed1e35fc1f80d806be549b93ede97c6ae6520"}},{"ruleId":"D2","level":"warning","message":{"text":"otlp.anyValueFromJs (cognitive 20): otlp.anyValueFromJs has cognitive complexity 20 (threshold 15). Drivers by points: if/else 11 (14 pts), loops 2 (4 pts), boolean chains 2 (nesting depth added 5). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/traces/src/otlp.ts"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"5967c50a480c61450199c74b6597dd69cd3d8e5dbb2625d6bc8a204a3841917d"}},{"ruleId":"D2","level":"warning","message":{"text":"index.runWorkflow (cognitive 20): index.runWorkflow has cognitive complexity 20 (threshold 15). Drivers by points: if/else 9 (12 pts), boolean chains 4, ternaries 3, loops 1 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/workflow-engine/src/index.ts"},"region":{"startLine":632}}}],"partialFingerprints":{"codehealthFindingId/v1":"4921f542e7cb06abc903c5cd131e52d9280ff3f2f9c562525e463bed38aa8435"}},{"ruleId":"D2","level":"warning","message":{"text":"depot::metrics::record_hot_stage (cognitive 19): depot::metrics::record_hot_stage has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10 (15 pts), match/switch 2 (3 pts), boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/metrics.rs"},"region":{"startLine":783}}}],"partialFingerprints":{"codehealthFindingId/v1":"89bba5fa7f3bf02f013599e1a0074ba35e60ac37f3844488643f03f1dedae3e8"}},{"ruleId":"D2","level":"warning","message":{"text":"DatabaseKv::inspect_orphaned_sleep_state (cognitive 19): DatabaseKv::inspect_orphaned_sleep_state has cognitive complexity 19 (threshold 15). Drivers by points: if/else 14 (15 pts), match/switch 2 (3 pts), boolean chains 1 (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/repair.rs"},"region":{"startLine":1782}}}],"partialFingerprints":{"codehealthFindingId/v1":"660087fb434d46834a82124754276688849e64d55ccbddfff1bfe554fa9fd2d4"}},{"ruleId":"D2","level":"warning","message":{"text":"SqliteDb::finish_transaction_inner (cognitive 19): SqliteDb::finish_transaction_inner has cognitive complexity 19 (threshold 15). Drivers by points: if/else 12 (17 pts), boolean chains 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/tx.rs"},"region":{"startLine":632}}}],"partialFingerprints":{"codehealthFindingId/v1":"134c431e4f270c3b1901103a4a4c457455c5af1e773c7d76ab2b349e2e80ec81"}},{"ruleId":"D2","level":"warning","message":{"text":"rivetkit_core::registry::actor_connect::encode_actor_connect_message_cbor_manual (cognitive 19): rivetkit_core::registry::actor_connect::encode_actor_connect_message_cbor_manual has cognitive complexity 19 (threshold 15). Drivers by points: if/else 9 (18 pts), match/switch 1 (nesting depth added 9). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/actor_connect.rs"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f5501efd5a4461887ad96e0ddda5e723caa5979ac6297a5819eeeaab7cf8295"}},{"ruleId":"D2","level":"warning","message":{"text":"rivetkit_wasm::run_preamble (cognitive 19): rivetkit_wasm::run_preamble has cognitive complexity 19 (threshold 15). Drivers by points: if/else 12 (19 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":"rivetkit-typescript/packages/rivetkit-wasm/src/lib.rs"},"region":{"startLine":654}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b45fcd39388f38988aff9e6093cd5793997ac3254ef57e64a4afc18ef96cb7f"}},{"ruleId":"D2","level":"warning","message":{"text":"mod.getOrCreateActor (cognitive 19): mod.getOrCreateActor has cognitive complexity 19 (threshold 15). Drivers by points: if/else 12 (14 pts), boolean chains 5 (nesting depth added 2). Most of this is not in the body itself: 4 of the 19 points are its own statements and the rest belongs to 5 function literals inside it that branch (lines 320, 276, 300, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/framework-base/src/mod.ts"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"009e8d920b454e7e29f7a60b3398817c49186bc290321c92223bbcd90332f726"}},{"ruleId":"D2","level":"warning","message":{"text":"index.RegistryConfigSchema (cognitive 19): index.RegistryConfigSchema has cognitive complexity 19 (threshold 15). Drivers by points: boolean chains 9, ternaries 5 (6 pts), if/else 4 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/registry/config/index.ts"},"region":{"startLine":309}}}],"partialFingerprints":{"codehealthFindingId/v1":"7dfe36b6f001089a5dec5f9bd530a1342599554386afd042f91372c6f36b24b8"}},{"ruleId":"D2","level":"warning","message":{"text":"actor-websocket-client.buildActorQueryGatewayUrl (cognitive 19): actor-websocket-client.buildActorQueryGatewayUrl has cognitive complexity 19 (threshold 15). Drivers by points: if/else 14 (18 pts), boolean chains 1 (nesting depth added 4). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/engine-client/actor-websocket-client.ts"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"11cbb8af32fac3ccca1911fd652c322f28b51e111c29ffe5576b7e0055b0b2cd"}},{"ruleId":"D2","level":"warning","message":{"text":"decode_fdb_tuple.decodeOne (cognitive 19): decode_fdb_tuple.decodeOne has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (12 pts), boolean chains 4, loops 1 (2 pts), match/switch 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/debug/decode_fdb_tuple.js"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"994e7a2b2ca5dcb92562f70b399185a2e578a5fb51cd2ca61792d695129d91a7"}},{"ruleId":"D2","level":"warning","message":{"text":"logfmt_to_gantt.parseLogfmt (cognitive 19): logfmt_to_gantt.parseLogfmt has cognitive complexity 19 (threshold 15). Drivers by points: if/else 9 (15 pts), ternaries 1 (2 pts), boolean chains 1, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/debug/logfmt_to_gantt.ts"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"367c83c5ca3dd193ed71657493e5e25f952b04734a1e92240c8bff7146bbc1d6"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_api_public::actors::list::list_inner (cognitive 18): rivet_api_public::actors::list::list_inner has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9 (11 pts), boolean chains 5, match/switch 1 (2 pts) (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, 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":"engine/packages/api-public/src/actors/list.rs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"3010656544ec05e93174730eb461e743288b004ae82d29ac2d5be0efc8a41f70"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_auth_jwt::planner::reconcile_issuer (cognitive 18): rivet_auth_jwt::planner::reconcile_issuer has cognitive complexity 18 (threshold 15). Drivers by points: if/else 8 (13 pts), boolean chains 3, loops 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/auth-jwt/src/planner.rs"},"region":{"startLine":306}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7bdfa11568598e2073c4386e14d1f740278c32ce5aa5fdbaf4f92ab2aeebc2c"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_config::add_source (cognitive 18): rivet_config::add_source has cognitive complexity 18 (threshold 15). Drivers by points: if/else 7 (16 pts), loops 1 (2 pts) (nesting depth added 10). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/config/src/lib.rs"},"region":{"startLine":360}}}],"partialFingerprints":{"codehealthFindingId/v1":"448033fbaad6360d34ef84410b10ef889c598817da13280f37496352737ac30a"}},{"ruleId":"D2","level":"warning","message":{"text":"DatabaseKv::get_workflows_inner (cognitive 18): DatabaseKv::get_workflows_inner has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12 (17 pts), loops 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/debug.rs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"6beffa8f047a82a18e813f923e65e7298f53988cf79d1f574b6b37b887dfdf6f"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard::ops::envoy::list::pegboard_envoy_list (cognitive 18): pegboard::ops::envoy::list::pegboard_envoy_list has cognitive complexity 18 (threshold 15). Drivers by points: if/else 8 (14 pts), loops 2 (4 pts) (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/ops/envoy/list.rs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"7997e9424475c576eb2aa35f2c8b5b7a6ed12159d7d021aac830afc951e3c94f"}},{"ruleId":"D2","level":"warning","message":{"text":"PegboardGateway2::handle_request_inner (cognitive 18): PegboardGateway2::handle_request_inner has cognitive complexity 18 (threshold 15). Drivers by points: if/else 7 (9 pts), match/switch 3 (7 pts), loops 2 (nesting depth added 6). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/lib.rs"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"41325ec616ebbb9022b1230165ddb08a8985042c0260d6b88f1e793a68b97ab7"}},{"ruleId":"D2","level":"warning","message":{"text":"InFlightRequest::recv_message (cognitive 18): InFlightRequest::recv_message has cognitive complexity 18 (threshold 15). Drivers by points: if/else 4 (13 pts), match/switch 3 (5 pts) (nesting depth added 11). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":1192}}}],"partialFingerprints":{"codehealthFindingId/v1":"72dcf62b746c8505e0b1750f4202424dce46e7a50129546a7c4d8c6701696e14"}},{"ruleId":"D2","level":"warning","message":{"text":"universaldb::driver::postgres::transaction_task::handle_get_range (cognitive 18): universaldb::driver::postgres::transaction_task::handle_get_range has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11 (14 pts), boolean chains 2, loops 1, match/switch 1 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universaldb/src/driver/postgres/transaction_task.rs"},"region":{"startLine":264}}}],"partialFingerprints":{"codehealthFindingId/v1":"c14d00670ea4b37e12db6deb01e73ccbd64db42a9f6000ae3bf834f939b61f04"}},{"ruleId":"D2","level":"warning","message":{"text":"rivetkit::start::handle_actor_event (cognitive 18): rivetkit::start::handle_actor_event has cognitive complexity 18 (threshold 15). Drivers by points: match/switch 5 (10 pts), if/else 4 (8 pts) (nesting depth added 9). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit/src/start.rs"},"region":{"startLine":359}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7a4693a11b4321db9f6cc599e01a40b3fa8b55b63c1bab913c658abf0eb4624"}},{"ruleId":"D2","level":"warning","message":{"text":"RegistryDispatcher::active_actor (cognitive 18): RegistryDispatcher::active_actor has cognitive complexity 18 (threshold 15). Drivers by points: if/else 6 (13 pts), match/switch 2 (5 pts) (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/mod.rs"},"region":{"startLine":1050}}}],"partialFingerprints":{"codehealthFindingId/v1":"75f456fff25ca838b3e3b011e851b3821dd449c905e68e1bd15e50f24e665861"}},{"ruleId":"D2","level":"warning","message":{"text":"CoreRegistry::health (cognitive 18): CoreRegistry::health has cognitive complexity 18 (threshold 15). Drivers by points: if/else 8 (14 pts), match/switch 3 (4 pts) (nesting depth added 7). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit-napi/src/registry.rs"},"region":{"startLine":353}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0d03a43b790582ff9b7886f48e516d3895bf801ee6de404b444775f343c654c"}},{"ruleId":"D2","level":"warning","message":{"text":"ActorConnRaw.#setConnStatus (cognitive 18): ActorConnRaw.#setConnStatus has cognitive complexity 18 (threshold 15). Drivers by points: error handling 3 (8 pts), loops 3 (5 pts), if/else 3, boolean chains 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/client/actor-conn.ts"},"region":{"startLine":400}}}],"partialFingerprints":{"codehealthFindingId/v1":"ded26826f7080dfe21c8d31dbec2006ca63889acbf9fb6d02da771b34d1de7e5"}},{"ruleId":"D2","level":"warning","message":{"text":"useDraggable.useDraggable (cognitive 18): useDraggable.useDraggable has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11, boolean chains 6, error handling 1. Most of this is not in the body itself: 0 of the 18 points are its own statements and the rest belongs to 4 function literals inside it that branch (lines 57, 40, 24, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/devtools/src/hooks/useDraggable.ts"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"63e1860544cb72367120d72160d8535244dea79615e5692484b25678232e4ad9"}},{"ruleId":"D2","level":"warning","message":{"text":"ws-proxy.createWebSocketProxy (cognitive 18): ws-proxy.createWebSocketProxy has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11 (13 pts), boolean chains 4, error handling 1 (nesting depth added 2). Most of this is not in the body itself: 0 of the 18 points are its own statements and the rest belongs to 6 function literals inside it that branch (lines 111, 145, 167, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/engine-client/ws-proxy.ts"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"9795d83c504ef9dc68534e8259402fb9bb81f504cdf2d7ef19013b29f27d163a"}},{"ruleId":"D2","level":"warning","message":{"text":"Registry.handler (cognitive 18): Registry.handler has cognitive complexity 18 (threshold 15). Drivers by points: if/else 7, boolean chains 5, error handling 3 (5 pts), loops 1 (nesting depth added 2). Of this number, 14 points are the body\u0027s own statements and 4 belong to 3 function literals inside it that branch. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/registry/index.ts"},"region":{"startLine":217}}}],"partialFingerprints":{"codehealthFindingId/v1":"67a7b73b252eaeccbbd0dbdc1d573dfafafe0a0f6980963b59e5026a05efdfe3"}},{"ruleId":"D2","level":"warning","message":{"text":"WorkflowContextImpl.executeTry (cognitive 18): WorkflowContextImpl.executeTry has cognitive complexity 18 (threshold 15). Drivers by points: if/else 7 (17 pts), error handling 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":"rivetkit-typescript/packages/workflow-engine/src/context.ts"},"region":{"startLine":715}}}],"partialFingerprints":{"codehealthFindingId/v1":"29c0f407095740ea58feb47205db3355533723764d03673ac8f90679d0e463b6"}},{"ruleId":"D2","level":"warning","message":{"text":"WorkflowContextImpl.executeQueueNextBatch (cognitive 18): WorkflowContextImpl.executeQueueNextBatch has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10 (13 pts), boolean chains 5 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/workflow-engine/src/context.ts"},"region":{"startLine":1617}}}],"partialFingerprints":{"codehealthFindingId/v1":"084207d25a732e94482fb97bec0a7822d8c1dfafec70b8c62e183beadc671e67"}},{"ruleId":"D2","level":"warning","message":{"text":"gen-api-reference.typeLabel (cognitive 18): gen-api-reference.typeLabel has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10 (11 pts), ternaries 2 (4 pts), boolean chains 3 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/docs/gen-api-reference.mjs"},"region":{"startLine":646}}}],"partialFingerprints":{"codehealthFindingId/v1":"aced08aacf81cda858ff0fccb5b1a1fc94b80a23930e49da7b20e0ca55e3afb7"}},{"ruleId":"D2","level":"warning","message":{"text":"context.resolveContext (cognitive 18): context.resolveContext has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10 (12 pts), boolean chains 5, ternaries 1 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/publish/src/lib/context.ts"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d79614ed9e85d4f8effe1f5d2ab05855360532885458f293b6d31f4695874d9"}},{"ruleId":"D2","level":"warning","message":{"text":"depot::workflows::db_manager::manager_effects_after_refresh (cognitive 17): depot::workflows::db_manager::manager_effects_after_refresh has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (10 pts), boolean chains 7 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/workflows/db_manager.rs"},"region":{"startLine":748}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ba250947538637aa7ed5302a6aea5ce70c7d5f276f10eada3c078139e9b0d07"}},{"ruleId":"D2","level":"warning","message":{"text":"depot::recovery::scan_range_bounded (cognitive 17): depot::recovery::scan_range_bounded has cognitive complexity 17 (threshold 15). Drivers by points: if/else 4 (11 pts), boolean chains 3, loops 2 (3 pts) (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/recovery.rs"},"region":{"startLine":707}}}],"partialFingerprints":{"codehealthFindingId/v1":"90ad64c9fb86eb8835cd4b69d4a2239a78181c3cd7ac2287aaae013cb65e2b4b"}},{"ruleId":"D2","level":"warning","message":{"text":"NativeDatabase::drop (cognitive 17): NativeDatabase::drop has cognitive complexity 17 (threshold 15). Drivers by points: if/else 5 (9 pts), match/switch 2 (7 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":"engine/packages/depot-client/src/vfs.rs"},"region":{"startLine":3973}}}],"partialFingerprints":{"codehealthFindingId/v1":"5cb7128b5d27c193935f316d4a8308c4bfe061d5d8dc15a3ec69553265b41a22"}},{"ruleId":"D2","level":"warning","message":{"text":"SqliteWorkerHandle::close_with_timeout (cognitive 17): SqliteWorkerHandle::close_with_timeout has cognitive complexity 17 (threshold 15). Drivers by points: if/else 5 (9 pts), match/switch 4 (7 pts), loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot-client/src/worker.rs"},"region":{"startLine":257}}}],"partialFingerprints":{"codehealthFindingId/v1":"df43bad7d03ee1f4ba3619a2aec345ef9bc07e6cd2e5cf2d4708fbb48b90d3e3"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_depot_client::worker::run_command (cognitive 17): rivet_depot_client::worker::run_command has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8 (16 pts), match/switch 1 (nesting depth added 8). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot-client/src/worker.rs"},"region":{"startLine":546}}}],"partialFingerprints":{"codehealthFindingId/v1":"35c80eee1661e78e4afd37363e3bfa94f8eed9a745be5a8d2f92a87433ac0e25"}},{"ruleId":"D2","level":"warning","message":{"text":"DatabaseKv::prune_workflows (cognitive 17): DatabaseKv::prune_workflows has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9 (14 pts), match/switch 1 (2 pts), loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/debug.rs"},"region":{"startLine":1464}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a5c7ffb72bdc1d5a06e56e98cd4ba88e47df56dda11cd65e4f002da03c3e2cb"}},{"ruleId":"D2","level":"warning","message":{"text":"DatabaseKv::inspect_loop_iteration_mismatch (cognitive 17): DatabaseKv::inspect_loop_iteration_mismatch has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, boolean chains 4, match/switch 1. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/repair.rs"},"region":{"startLine":817}}}],"partialFingerprints":{"codehealthFindingId/v1":"b45a64cdf688559d16a3b4149a96a2acf363a708167ff12d40df38416d3b0ad2"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard::ops::runner::update_alloc_idx::pegboard_runner_update_alloc_idx (cognitive 17): pegboard::ops::runner::update_alloc_idx::pegboard_runner_update_alloc_idx has cognitive complexity 17 (threshold 15). Drivers by points: if/else 4 (11 pts), match/switch 2 (5 pts), loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/ops/runner/update_alloc_idx.rs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"240da109aa99e6192257bb49de0c3d9b134f3cdc6d1dd3f7f3c04d19871f3437"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard::workflows::metrics_aggregator::aggregate_serverless_desired_slots (cognitive 17): pegboard::workflows::metrics_aggregator::aggregate_serverless_desired_slots has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (14 pts), loops 2 (3 pts) (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/metrics_aggregator.rs"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"61ad69f8e78d14dd9fcf5ff5d54f4473c3c05531afe435d36acedcd773df1fd2"}},{"ruleId":"D2","level":"warning","message":{"text":"PubSub::publish_inner (cognitive 17): PubSub::publish_inner has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (9 pts), loops 2 (4 pts), match/switch 1 (4 pts) (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universalpubsub/src/pubsub.rs"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"696f9db21edae347d05e1d14cc99a7344651dfa10db680b583931e9692ef7205"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_envoy_client::actor::handle_ws_open (cognitive 17): rivet_envoy_client::actor::handle_ws_open has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8 (14 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":"engine/sdks/rust/envoy-client/src/actor.rs"},"region":{"startLine":615}}}],"partialFingerprints":{"codehealthFindingId/v1":"184718233c1a83e61c8f22cfefdd811ac464f714861022b7297876a772926225"}},{"ruleId":"D2","level":"warning","message":{"text":"ActorTask::handle_dispatch (cognitive 17): ActorTask::handle_dispatch has cognitive complexity 17 (threshold 15). Drivers by points: match/switch 8 (16 pts), if/else 1 (nesting depth added 8). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/task.rs"},"region":{"startLine":895}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ca44615edd653cc51b43762b8b181780ff7836ccd4c374e20253c217a9828aa"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.stringifyError (cognitive 17): utils.stringifyError has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (7 pts), error handling 2 (5 pts), ternaries 1 (3 pts), boolean chains 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/utils.ts"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6044fc4384dbe050a640cf3386dc8b90a11437d665d9a1b99e2ba2bd169c193"}},{"ruleId":"D2","level":"warning","message":{"text":"mod.workflow (cognitive 17): mod.workflow has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8 (11 pts), boolean chains 3, error handling 2, ternaries 1 (nesting depth added 3). Of this number, 10 points are the body\u0027s own statements and 7 belong to 2 function literals inside it that branch. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/workflow/mod.ts"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"b66ba49755145f861ca22b2bcb7fe3734351956ce00d86802b524881513cac98"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_container_runner::proxy::ws_proxy (cognitive 16): rivet_container_runner::proxy::ws_proxy has cognitive complexity 16 (threshold 15). Drivers by points: match/switch 5 (11 pts), if/else 1 (3 pts), loops 2 (nesting depth added 8). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"container-runner/src/proxy.rs"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"58d1221360651edbca8ff647d52e62e8ad77760d9e838b4551179cf9cc511bd1"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_container_runner::async_main (cognitive 16): rivet_container_runner::async_main has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (12 pts), match/switch 2 (3 pts), boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"container-runner/src/main.rs"},"region":{"startLine":383}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b67edd9803bbbb3a2c01a5e0c6c64b88dbee69212cd8727e849e5395775a6ce"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_api_peer::runner_configs::list (cognitive 16): rivet_api_peer::runner_configs::list has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10 (16 pts) (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-peer/src/runner_configs.rs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"b40c64e92d4166ecc3f99ff7911054501783074f96237fea08ff07936a8de3ce"}},{"ruleId":"D2","level":"warning","message":{"text":"depot::conveyer::branch::catalog::list_databases_in_bucket_branch (cognitive 16): depot::conveyer::branch::catalog::list_databases_in_bucket_branch has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (10 pts), loops 3 (5 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":"engine/packages/depot/src/conveyer/branch/catalog.rs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"1988eba0df3e2c6f59d677f50cdabee99838109923b74dc3a24e4261b09155d8"}},{"ruleId":"D2","level":"warning","message":{"text":"depot::compaction::companion::run_reclaim_job (cognitive 16): depot::compaction::companion::run_reclaim_job has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6 (7 pts), match/switch 3 (5 pts), boolean chains 4 (nesting depth added 3). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/compaction/companion.rs"},"region":{"startLine":485}}}],"partialFingerprints":{"codehealthFindingId/v1":"41e5a30645f8c9f121fa1b051b7516f2ff01d970ef0b0ab464dda015f5da0914"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_error_macros::derive_enum_error (cognitive 16): rivet_error_macros::derive_enum_error has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (10 pts), match/switch 3 (5 pts), loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/error-macros/src/lib.rs"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0a0daf19ce07aae2eaa040521fa6049e206c8081c762663a7a8ecec72fe8463"}},{"ruleId":"D2","level":"warning","message":{"text":"LoopBuilder::run (cognitive 16): LoopBuilder::run has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6 (11 pts), match/switch 1 (3 pts), loops 1 (2 pts) (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/builder/workflow/lupe.rs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2f224f57e61b4fd49340a1b837fc78677cd71025c0256b36d8d1571cc264c04"}},{"ruleId":"D2","level":"warning","message":{"text":"DatabaseKv::pull_next_signals (cognitive 16): DatabaseKv::pull_next_signals has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6 (13 pts), match/switch 1 (2 pts), loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/mod.rs"},"region":{"startLine":2490}}}],"partialFingerprints":{"codehealthFindingId/v1":"c04f174ca3c52d16b2742ec1e32e33ebb0f67d006e999e9e41b985d8381b9e36"}},{"ruleId":"D2","level":"warning","message":{"text":"Worker::shutdown (cognitive 16): Worker::shutdown has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (8 pts), loops 4 (6 pts), match/switch 1 (2 pts) (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/worker.rs"},"region":{"startLine":395}}}],"partialFingerprints":{"codehealthFindingId/v1":"48473fc1197d5f11fb92ed222725e80a14996574d01be0e552d693e0ba5f4e7c"}},{"ruleId":"D2","level":"warning","message":{"text":"pegboard::workflows::serverless::conn::finish_non_critical_draining (cognitive 16): pegboard::workflows::serverless::conn::finish_non_critical_draining has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (9 pts), match/switch 3 (6 pts), loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/serverless/conn.rs"},"region":{"startLine":544}}}],"partialFingerprints":{"codehealthFindingId/v1":"d44806574fcb9eca5ebd30353fd8d1ec32943f89e0719e377ccb6b76947f0d83"}},{"ruleId":"D2","level":"warning","message":{"text":"PegboardEnvoyWs::handle_websocket (cognitive 16): PegboardEnvoyWs::handle_websocket has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (9 pts), match/switch 6 (7 pts) (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-envoy/src/lib.rs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9cbf6785c624f468264593f955fc4ac7a3e127a3c2ab29082e1c55ca1c5f8ef"}},{"ruleId":"D2","level":"warning","message":{"text":"TransactionTask::handle_get_key (cognitive 16): TransactionTask::handle_get_key has cognitive complexity 16 (threshold 15). Drivers by points: if/else 3 (9 pts), loops 3 (6 pts), match/switch 1 (nesting depth added 9). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universaldb/src/driver/rocksdb/transaction_task.rs"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbf63886655f71afca0309c887fd5921af97d034085acd02c8c19e3a963b832c"}},{"ruleId":"D2","level":"warning","message":{"text":"universalpubsub::subject::subject_root_from_str (cognitive 16): universalpubsub::subject::subject_root_from_str has cognitive complexity 16 (threshold 15). Drivers by points: if/else 16. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universalpubsub/src/subject.rs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ddd1ef51c902ef103da2c31c377dff8b5c0730a42b251ef765e17db6850ab59"}},{"ruleId":"D2","level":"warning","message":{"text":"rivet_envoy_client::tunnel::handle_request_start (cognitive 16): rivet_envoy_client::tunnel::handle_request_start has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11 (15 pts), boolean chains 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/tunnel.rs"},"region":{"startLine":330}}}],"partialFingerprints":{"codehealthFindingId/v1":"e784b99a83e062ccd2002aea944293ad102d83f28320a16f31a5ef6e47b8d4d1"}},{"ruleId":"D2","level":"warning","message":{"text":"rivetkit_napi::napi_actor_events::run_event_loop (cognitive 16): rivetkit_napi::napi_actor_events::run_event_loop has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (13 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":"rivetkit-typescript/packages/rivetkit-napi/src/napi_actor_events.rs"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a0bf4a648e584b37723b7db4411a73253c538fefddd59fff850aad9a64becc4"}},{"ruleId":"D2","level":"warning","message":{"text":"rivetkit_napi::napi_actor_events::run_preamble (cognitive 16): rivetkit_napi::napi_actor_events::run_preamble has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12 (14 pts), loops 1 (2 pts) (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, 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":"rivetkit-typescript/packages/rivetkit-napi/src/napi_actor_events.rs"},"region":{"startLine":233}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc1f6e5ccc5ee350dfd77c775759b97a922c38af9a72b46efeb16c0bcdf172be"}},{"ruleId":"D2","level":"warning","message":{"text":"run.startMockWorkflowApp (cognitive 16): run.startMockWorkflowApp has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (8 pts), boolean chains 4, ternaries 3, loops 1 (nesting depth added 1). Most of this is not in the body itself: 0 of the 16 points are its own statements and the rest belongs to 2 function literals inside it that branch (lines 302, 373). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"integrations/workflow-world/scripts/integration/run.ts"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a6c728178068dfe22c7a1b942de7e81373fb7da83691792cad9ab47c1668a55"}},{"ruleId":"D2","level":"warning","message":{"text":"index.getEnginePath (cognitive 16): index.getEnginePath has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (12 pts), boolean chains 3, error handling 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/engine-cli/index.js"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"01685e33071edf831d853df4a24efcf2750558c52563fea42c814bddc00c50ae"}},{"ruleId":"D2","level":"warning","message":{"text":"gen-api-reference.buildErrorRegistry (cognitive 16): gen-api-reference.buildErrorRegistry has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (13 pts), loops 3 (nesting depth added 6). Of this number, 11 points are the body\u0027s own statements and 5 belong to one function literal inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/docs/gen-api-reference.mjs"},"region":{"startLine":438}}}],"partialFingerprints":{"codehealthFindingId/v1":"7493e13bad4f6df8172f8e7a92e49a82f01a3c2639ea43b3c4b2e018e408454e"}},{"ruleId":"D2","level":"warning","message":{"text":"gen-api-reference.renderCurl (cognitive 16): gen-api-reference.renderCurl has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6 (8 pts), loops 4 (5 pts), ternaries 2, boolean chains 1 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/docs/gen-api-reference.mjs"},"region":{"startLine":544}}}],"partialFingerprints":{"codehealthFindingId/v1":"491a234cb7dd33d78f9218674262b161ed4809e46757e9eee95c1851971c1b93"}},{"ruleId":"D2","level":"warning","message":{"text":"gen-api-reference.flattenSchema (cognitive 16): gen-api-reference.flattenSchema has cognitive complexity 16 (threshold 15). Drivers by points: boolean chains 7, if/else 5 (6 pts), ternaries 1 (2 pts), loops 1 (nesting depth added 2). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/docs/gen-api-reference.mjs"},"region":{"startLine":698}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cd5f4f46b14882d1b2530cd9f46a922e4bed3ab457541bd9e8681b2d234968e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ActorContext: TooManyMethods \u2014 352 methods, declared across 6 files: actor/context.rs (151), actor/state.rs (57), actor/schedule.rs (44), actor/sleep.rs (43), \u002B2 more file(s). The bar is 30 methods; this is 322 over it, 11.73\u00D7 the bar. That list is where to read them, not a suggestion to split the file: the members belong to the type wherever they are declared, so moving them between files leaves the count unchanged. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/context.rs"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea98df95f114cc9e638fe5af5f39d6f5febb206a07eb1fd82a4f6f836f400c3c"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: native.buildNativeFactory: FunctionTooLong \u2014 buildNativeFactory runs 1167 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 1067 over it, 11.67\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/registry/native.ts"},"region":{"startLine":4033}}}],"partialFingerprints":{"codehealthFindingId/v1":"2aefee601b47abc3e373f23a4296ab6f62bea1f550600b5b0f6d6447b01940a2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: registry/native.ts: FileTooLong \u2014 4022 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 3522 over it, 8.04\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/registry/native.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f381944689a8bf2e3c851768025ed0b0cca710c6f01296d6be990f920e82ad16"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: traces.createTraces: FunctionTooLong \u2014 createTraces runs 803 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 703 over it, 8.03\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/traces/src/traces.ts"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"c55e1488da59c68f033938b3da696fe797eba7982c94936381ddd095a98c496a"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Db.get_pages_with_options: MethodTooLong \u2014 get_pages_with_options runs 788 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 688 over it, 7.88\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/conveyer/read.rs"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"97ccd64137f1a8dfaf02073b5323f4d2047e747c2b3703e892219199c12781a1"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: SubCommand.execute: MethodTooLong \u2014 execute runs 631 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 531 over it, 6.31\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/engine/src/commands/udb/cli.rs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd84846046db6d724268ab9b93e0f3c68250192109c290e83b3773fd54b5de2c"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: DatabaseKv.pull_workflows: MethodTooLong \u2014 pull_workflows runs 604 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 504 over it, 6.04\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/mod.rs"},"region":{"startLine":1138}}}],"partialFingerprints":{"codehealthFindingId/v1":"d984253a841b4f2cae891981f9cfa0aa7bd6f82dda02e9cd7ada4362d747b2d6"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ProxyService.handle_websocket_upgrade: MethodTooLong \u2014 handle_websocket_upgrade runs 591 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 491 over it, 5.91\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/guard-core/src/proxy_service.rs"},"region":{"startLine":1113}}}],"partialFingerprints":{"codehealthFindingId/v1":"7679cc153037c6badaccd48a86d034f6f7468c0a04bfb83ec48e5fab7fe39ab4"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: DatabaseKv: ClassTooLong \u2014 2330 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 37 methods, 4 blocks, lines 52-3483. The bar is 400 significant lines; this is 1930 over it, 5.83\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":"engine/packages/gasoline/src/db/kv/mod.rs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"28384030a76d20937f464353b4c2ea54c0f96f85bdd63a3b100a1c334ec85891"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/versioned.rs: FileTooLong \u2014 2896 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 88 free functions. The bar is 500 significant lines; this is 2396 over it, 5.79\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/runner-protocol/src/versioned.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"546738a5edf7b86bd156f315d40e1866f7980976e6ce6198d0404896321547b4"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard::workflows::actor::pegboard_actor: FunctionTooLong \u2014 pegboard::workflows::actor::pegboard_actor runs 570 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 470 over it, 5.70\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/mod.rs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"0776b08c9e8024a665e961e280e195b5861e22ad1b7c8c6b817ba953c13b49c1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/doctor.rs: FileTooLong \u2014 2705 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 61 free functions. The bar is 500 significant lines; this is 2205 over it, 5.41\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/doctor.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"85aa00abb562389e32ece69b4ca909ee22905a7cbaf10244e1d39aaa074bb969"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: kv/mod.rs: FileTooLong \u2014 2633 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 88% of them inside a single declaration: DatabaseKv (4 blocks, 52-3483). The bar is 500 significant lines; this is 2133 over it, 5.27\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":"engine/packages/gasoline/src/db/kv/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9accb9da9c07739f0d626d0e3e91eeefabcd9bb891ee4978e7db20ce7483651e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/vfs.rs: FileTooLong \u2014 2632 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 52 free functions. The bar is 500 significant lines; this is 2132 over it, 5.26\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot-client/src/vfs.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"520459532e754d9f2d2ce2068cafc6985be5a2effdaba656c41793a6426749e2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 2414 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 71 free functions. The bar is 500 significant lines; this is 1914 over it, 4.83\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit-wasm/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b595dfe7853a8d377b17f98c9b6441147041ca9165c6403ad7f04abe1cdf623b"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ActorMetricCollectors.new: MethodTooLong \u2014 new runs 474 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 374 over it, 4.74\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs"},"region":{"startLine":986}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e30cd6e6e69b258187211e7bf401cab640f3b592bf8afc2268be4db9e128cad"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: actor/metrics.rs: FileTooLong \u2014 2334 significant 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 1834 over it, 4.67\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"81bf9866dec082374e90763e5bbb9eb45239f465223702832657c6a1ea73f0f0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: compaction/shared.rs: FileTooLong \u2014 2329 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 73 free functions. The bar is 500 significant lines; this is 1829 over it, 4.66\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/compaction/shared.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e6ab1f9ceb0d0e108b885e91b4f2b3011b12b8ef514b95c1676952481adf14d"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: PegboardGateway2.handle_websocket_inner: MethodTooLong \u2014 handle_websocket_inner runs 427 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 327 over it, 4.27\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/lib.rs"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e24be9e9e87542abf264f36b5d42b13f087f9f46352d623120d06ab4b43e83b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: NapiCoreRuntime: TooManyMethods \u2014 126 methods. The bar is 30 methods; this is 96 over it, 4.20\u00D7 the bar. Most of these members implement runtime.CoreRuntime (120 of 126 members), so moving them onto a smaller type would remove them from that contract rather than reduce it. To reduce it, split the contract instead: give each cohesive group of operations its own smaller interface and its own implementing type. Where the contract has to stay whole, move the work behind these members into collaborator types, so what is left here is a forward per member rather than a responsibility per member."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/registry/napi-runtime.ts"},"region":{"startLine":266}}}],"partialFingerprints":{"codehealthFindingId/v1":"47ee9c6d3ecf058aa431df1053e5b85dd63e3efce92b4c293c6f0e6c34de101a"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: PegboardGateway3.handle_websocket_inner: MethodTooLong \u2014 handle_websocket_inner runs 413 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 313 over it, 4.13\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway3/src/lib.rs"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"c66ba71437c9d3670acc5dc7ce443d031d8a159f29f94a7a43de7ea7dba4d6ae"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: kv/repair.rs: FileTooLong \u2014 2045 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 87% of them inside a single declaration: DatabaseKv (284-2960). The bar is 500 significant lines; this is 1545 over it, 4.09\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/repair.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"184cb00a1781d9ac989613ec7e94087ffe390c9fdbba9e0320411118942f7d70"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: WasmCoreRuntime: TooManyMethods \u2014 118 methods. The bar is 30 methods; this is 88 over it, 3.93\u00D7 the bar. Most of these members implement runtime.CoreRuntime (116 of 118 members), so moving them onto a smaller type would remove them from that contract rather than reduce it. To reduce it, split the contract instead: give each cohesive group of operations its own smaller interface and its own implementing type. Where the contract has to stay whole, move the work behind these members into collaborator types, so what is left here is a forward per member rather than a responsibility per member."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/registry/wasm-runtime.ts"},"region":{"startLine":260}}}],"partialFingerprints":{"codehealthFindingId/v1":"d093cc90af35dd53e548715d50bb038b665fc3cb78a8c6bb0c444bfce0f2c813"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/ws_to_tunnel_task.rs: FileTooLong \u2014 1950 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 76 free functions. The bar is 500 significant lines; this is 1450 over it, 3.90\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":"engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"942cbd72f80672a4b21afd33831de96f4fe35dd79c869b9a6d86fe046b55aada"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: actor/config.ts: FileTooLong \u2014 1888 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 1388 over it, 3.78\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/actor/config.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1cf6d2c41b28671912ce1487be33cf48ecf9eeaf25db5781e49360cad82646d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: kv/debug.rs: FileTooLong \u2014 1826 significant 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 83% of them inside a single declaration: DatabaseKv (3 blocks, 43-2261). The bar is 500 significant lines; this is 1326 over it, 3.65\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/debug.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0569b43637dbcd1f0113a5d55299fe7d7ca683d4d0571b742d0e74eaf54bc4d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/context.ts: FileTooLong \u2014 1739 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 1239 over it, 3.48\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/workflow-engine/src/context.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"16c82f5f30ca4f1d8001726f5ceed8f2ead69121a0dbcb238f7ff813a65c3158"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: database-vfs.createDatabaseVfs: FunctionTooLong \u2014 createDatabaseVfs runs 347 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 247 over it, 3.47\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/agent-os/fs/database-vfs.ts"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"8727f1fbd43003d86a6b87c07df506ace1b8b6da359c090220d2fa3c7e71815d"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: InFlightRequestHandle.send_message_admitted: MethodTooLong \u2014 send_message_admitted runs 343 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 243 over it, 3.43\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway3/src/shared_state.rs"},"region":{"startLine":821}}}],"partialFingerprints":{"codehealthFindingId/v1":"e70a3b2bc652a4f58aff755d499a158c4c3df4cb339bacb20becfafcbee61052"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: ActorTask: ClassTooLong \u2014 1337 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 59 methods, 2 blocks, lines 332-2336. The bar is 400 significant lines; this is 937 over it, 3.34\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":"rivetkit-rust/packages/rivetkit-core/src/actor/task.rs"},"region":{"startLine":332}}}],"partialFingerprints":{"codehealthFindingId/v1":"a081e07f529a33bc0aedf0b50b3198728fd6510ed9af8672c4227d46dc038b17"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard::workflows::actor2::process_signal: FunctionTooLong \u2014 pegboard::workflows::actor2::process_signal runs 333 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 233 over it, 3.33\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor2/mod.rs"},"region":{"startLine":635}}}],"partialFingerprints":{"codehealthFindingId/v1":"97a48d8e16219b589022dbddc924b1cf02db9c88e2604cdc7b2dc8b23982bfca"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: keys/history.rs: FileTooLong \u2014 1580 significant 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 1080 over it, 3.16\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/keys/history.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"afd3de74564fac82390cf33c7cd7ff52ee3d1999dc28d06af6eb622dcbee233d"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: docker-compose.generateDockerCompose: FunctionTooLong \u2014 generateDockerCompose runs 315 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 215 over it, 3.15\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"self-host/compose/template/src/docker-compose.ts"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"cff1c166e3f09fa9a309138e73ae6bf96cc8e417d6e18a8887eb1bc1b91d8658"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: depot::doctor::doctor: FunctionTooLong \u2014 depot::doctor::doctor runs 307 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 207 over it, 3.07\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/doctor.rs"},"region":{"startLine":432}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7d26968398550266306b620cff538498a954284975275b831793cce76b560e8"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: actor/task.rs: FileTooLong \u2014 1528 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 88% of them inside a single declaration: ActorTask (2 blocks, 332-2336). The bar is 500 significant lines; this is 1028 over it, 3.06\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":"rivetkit-rust/packages/rivetkit-core/src/actor/task.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"210b8ed1172c7e7d8da687cb6712ec96181917ebeba39716d5a465a35f60e969"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: RegistryDispatcher.handle_actor_connect_websocket: MethodTooLong \u2014 handle_actor_connect_websocket runs 302 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 202 over it, 3.02\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/websocket.rs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"673add7a61d80c0ced5994ceb7419975bd507d221e9e58d93cd4216563f34c51"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/shared_state.rs: FileTooLong \u2014 1502 significant 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 1002 over it, 3.00\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":"engine/packages/pegboard-gateway3/src/shared_state.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fc472be789fa97e452a661884f897d1be030626d766f65dec5456b39567647b"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: rivetkit_napi::napi_actor_events::dispatch_event: FunctionTooLong \u2014 rivetkit_napi::napi_actor_events::dispatch_event runs 300 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 200 over it, 3.00\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit-napi/src/napi_actor_events.rs"},"region":{"startLine":381}}}],"partialFingerprints":{"codehealthFindingId/v1":"3947615b0784cd45b4476fee7cf6f958de402347d6c3204a89db55a8ab26c2e2"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: logfmt_to_gantt.main: FunctionTooLong \u2014 main runs 299 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 199 over it, 2.99\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/debug/logfmt_to_gantt.ts"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"e703f8471465bbccc43d05ed68d27a3c5f5f71b58897315f2e1e84ca48091170"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Db.commit_with_options: MethodTooLong \u2014 commit_with_options runs 295 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 195 over it, 2.95\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/conveyer/commit/apply.rs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e9fd0219ca0a5cc1248282fef3c9449bd31b8767ea26b1b24480452da451d7e"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard::workflows::actor::runtime::spawn_actor: FunctionTooLong \u2014 pegboard::workflows::actor::runtime::spawn_actor runs 292 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 192 over it, 2.92\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/runtime.rs"},"region":{"startLine":644}}}],"partialFingerprints":{"codehealthFindingId/v1":"aacc7fd52b40f14a1f48eacea1c622d4c44257d89e17adf7be026ac579fac670"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: ActorContextInner: TooManyFields \u2014 86 stored fields. The bar is 30 stored fields; this is 56 over it, 2.87\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/context.rs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"150fcf91a01142499a744ad7649aea40393577a150f02e450e9d7fdc575f553c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SqliteDb: TooManyMethods \u2014 85 methods, declared across 2 files: sqlite/mod.rs (62), sqlite/tx.rs (23). The bar is 30 methods; this is 55 over it, 2.83\u00D7 the bar. That list is where to read them, not a suggestion to split the file: the members belong to the type wherever they are declared, so moving them between files leaves the count unchanged. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/mod.rs"},"region":{"startLine":231}}}],"partialFingerprints":{"codehealthFindingId/v1":"73f238c41084b1197d28ff204f3290badb127d42fba2c3e7c0079869e4396a41"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: PegboardEnvoyWs.handle_websocket: MethodTooLong \u2014 handle_websocket runs 280 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 180 over it, 2.80\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-envoy/src/lib.rs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"071a4858c044a9de44dc7084997846fa3b39880a4825e987f599263867beb8b8"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: rivetkit_wasm::dispatch_event: FunctionTooLong \u2014 rivetkit_wasm::dispatch_event runs 277 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 177 over it, 2.77\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit-wasm/src/lib.rs"},"region":{"startLine":722}}}],"partialFingerprints":{"codehealthFindingId/v1":"38a03960ce88a7cab2a470c501c2ad01da7f98446473607408b0c4ef5a7646f4"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: ProxyService: ClassTooLong \u2014 1088 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 6 methods, 3 blocks, lines 353-2060. The bar is 400 significant lines; this is 688 over it, 2.72\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":"engine/packages/guard-core/src/proxy_service.rs"},"region":{"startLine":353}}}],"partialFingerprints":{"codehealthFindingId/v1":"01658a2b17db28270af3eb2845d6a195a264821f4ed60e9074b4494a9de0f1bc"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: rivet_engine::util::wf::print_history: FunctionTooLong \u2014 rivet_engine::util::wf::print_history runs 271 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 171 over it, 2.71\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/engine/src/util/wf/mod.rs"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9acc35df3f5b8e3dd08ba7045d3e9664020c42f3a993bf142bdeb8eead38b17"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/proxy_service.rs: FileTooLong \u2014 1336 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 81% of them inside a single declaration: ProxyService (3 blocks, 353-2060). The bar is 500 significant lines; this is 836 over it, 2.67\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":"engine/packages/guard-core/src/proxy_service.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f627dfeaf6b523a8b69f00dc42c5fde1b44f360d97a8239284da62b05c8a1dfb"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: keys/ns.rs: FileTooLong \u2014 1330 significant 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 830 over it, 2.66\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/keys/ns.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2089e953f3162eb359f253c80a18f05fff7dab44a7e02ba486fbeeb3fe4efd9c"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: depot::workflows::db_hot_compactor::install_hot_chunk_tx: FunctionTooLong \u2014 depot::workflows::db_hot_compactor::install_hot_chunk_tx runs 260 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 160 over it, 2.60\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/workflows/db_hot_compactor.rs"},"region":{"startLine":912}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fcb546f7d09fdaac4e9aeff51b9094a46da411dca81f9759ba45cbcc54e4405"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: actor/context.rs: FileTooLong \u2014 1299 significant 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 799 over it, 2.60\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/context.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"79c0ada215da2838c20f3c306b365d9ebf82569b0175a48f81eb4947058d4534"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: PegboardGateway.handle_websocket_inner: MethodTooLong \u2014 handle_websocket_inner runs 259 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 159 over it, 2.59\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/lib.rs"},"region":{"startLine":253}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f20a8a483db431ca21ff956bfbb64490cea5000d1be1742f91a3d5cb106b221"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Runner: ClassTooLong \u2014 1019 significant lines (blank, comment-only and punctuation-only lines excluded), 51 methods. The bar is 400 significant lines; this is 619 over it, 2.55\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":"engine/sdks/typescript/runner/src/mod.ts"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b82cebf619383f3aabd7a87d78815e76ebebcfef427960e69d79f1be5ed8041"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: conveyer/read.rs: FileTooLong \u2014 1260 significant 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 67% of them inside a single declaration: Db (58-1214). The bar is 500 significant lines; this is 760 over it, 2.52\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":"engine/packages/depot/src/conveyer/read.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"922d5b49e472fe3e8d9450906257c963a8f6ef6afdcb57b2ae6f5ce131620fd0"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Runner: ClassTooLong \u2014 993 significant lines (blank, comment-only and punctuation-only lines excluded), 51 methods. The bar is 400 significant lines; this is 593 over it, 2.48\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":"rivetkit-typescript/packages/engine-runner/src/mod.ts"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"78f6b5545e8f07004d4dc47f9d813709875c0d188ac16f49661c03643e473074"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: depot::doctor::load_storage_facts: FunctionTooLong \u2014 depot::doctor::load_storage_facts runs 248 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 148 over it, 2.48\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/doctor.rs"},"region":{"startLine":1252}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e8e23df9267868abb6b5b2b2e1f31762a5119ca72992deeefc3533194096aa8"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ActorContext: TooManyMethods \u2014 74 methods. The bar is 30 methods; this is 44 over it, 2.47\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit-napi/src/actor_context.rs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"daed92e49ebd199702bb94cdbad8572aec6e6dcd845d06dfe9238467a47c1778"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: sqlite/mod.rs: FileTooLong \u2014 1211 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 73% of them inside a single declaration: SqliteDb (5 blocks, 104-1527). The bar is 500 significant lines; this is 711 over it, 2.42\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":"rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a2f2fcf500bc368df3660059cf3b1a9ab2977936b7ab1a9b2f825329ecd486f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: compaction/types.rs: FileTooLong \u2014 1207 significant 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 707 over it, 2.41\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/compaction/types.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ac2e2af3aa27a82be78fc37323f42661c258e0dc52762503e5c04bb41188250"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard_runner::ws_to_tunnel_task::handle_message_mk2: FunctionTooLong \u2014 pegboard_runner::ws_to_tunnel_task::handle_message_mk2 runs 237 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 137 over it, 2.37\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"5bc88d12aa323606cb4ac7ed3aad49accbfbd2e6d400f29de8d0b5828c749207"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: actors/workflow-run.ts: FileTooLong \u2014 1173 significant lines (blank, comment-only and punctuation-only lines excluded), about 65% of them inside a single declaration: workflowRun (539-1479). The bar is 500 significant lines; this is 673 over it, 2.35\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"integrations/workflow-world/src/actors/workflow-run.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd8fe41086c6be8bad9e536fc6e37237f66c864674d1bb6f04beaa7b859af4cf"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ProxyService.process: MethodTooLong \u2014 process runs 233 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 133 over it, 2.33\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/guard-core/src/proxy_service.rs"},"region":{"startLine":376}}}],"partialFingerprints":{"codehealthFindingId/v1":"945a3bef80bf19d5187cb9fd454c802fd15766b36fd6ddcadfe7880e109e42d8"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: actor/schedule.rs: FileTooLong \u2014 1142 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 64% of them inside a single declaration: ActorContext (172-1150). The bar is 500 significant lines; this is 642 over it, 2.28\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/schedule.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f635e7f2809f844d0948f4d77fd508389c1b13f4e2291d3f83fad257f19f2a5f"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: ActorMetrics: ClassTooLong \u2014 902 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 49 methods, 6 blocks, lines 117-2884. The bar is 400 significant lines; this is 502 over it, 2.26\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":"rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"b810ed5eb20cbeaa33127ef83d32741b866b4cd9c4d7b35e1e4726f750c33196"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: rivet_guard::routing::pegboard_gateway::handle_actor_v2: FunctionTooLong \u2014 rivet_guard::routing::pegboard_gateway::handle_actor_v2 runs 224 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 124 over it, 2.24\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/guard/src/routing/pegboard_gateway/mod.rs"},"region":{"startLine":518}}}],"partialFingerprints":{"codehealthFindingId/v1":"718d49ee87bc034c4ef1743c026e152d68028305dd43539f8197963aa57fd441"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: universaldb::driver::postgres::resolver::drain_batch: FunctionTooLong \u2014 universaldb::driver::postgres::resolver::drain_batch runs 222 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 122 over it, 2.22\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universaldb/src/driver/postgres/resolver/mod.rs"},"region":{"startLine":419}}}],"partialFingerprints":{"codehealthFindingId/v1":"07d4d29a625e8e879429d5ee16e2ffb803d5b944e235f94aaea976336f5ca885"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: SqliteDb: ClassTooLong \u2014 885 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 85 methods, 5 blocks, lines 104-1527. The bar is 400 significant lines; this is 485 over it, 2.21\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":"rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/mod.rs"},"region":{"startLine":231}}}],"partialFingerprints":{"codehealthFindingId/v1":"5594acec0222224e3c7b18788262d7c49ed76da28d13a627228a4a44c41f5021"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/mod.ts: FileTooLong \u2014 1103 significant lines (blank, comment-only and punctuation-only lines excluded), about 92% of them inside a single declaration: Runner (203-1977). The bar is 500 significant lines; this is 603 over it, 2.21\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":"engine/sdks/typescript/runner/src/mod.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6db2531d5c51c1a2f30ca031e8bb525ff83d085ef78f87df13bfc02a769a15b2"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: rivetkit_core::actor::migrate_kv_to_sqlite::import_core_state_if_needed_inner: FunctionTooLong \u2014 rivetkit_core::actor::migrate_kv_to_sqlite::import_core_state_if_needed_inner runs 220 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 120 over it, 2.20\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/migrate_kv_to_sqlite/mod.rs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"62391246ea2e4a32644075ca038cebf5ff0d9a01287c1c44e1f45c1b417cef75"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/mod.ts: FileTooLong \u2014 1077 significant lines (blank, comment-only and punctuation-only lines excluded), about 92% of them inside a single declaration: Runner (203-1939). The bar is 500 significant lines; this is 577 over it, 2.15\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/engine-runner/src/mod.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4cc81391a0f3558c6171a8f3ec0fd477cea1ea99fc39065708dc51e4936f1090"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: conveyer/keys.rs: FileTooLong \u2014 1073 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 157 free functions. The bar is 500 significant lines; this is 573 over it, 2.15\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/conveyer/keys.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"53aa79456ba2ae3fa51e01f5cb9a178e469d1d3241fcc891962bd904ef402fbb"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: ActorConnRaw: ClassTooLong \u2014 857 significant lines (blank, comment-only and punctuation-only lines excluded), 36 methods. The bar is 400 significant lines; this is 457 over it, 2.14\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/client/actor-conn.ts"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb3c32d9a99fcf6ef70a39cfbcd1a17bf3e3a1aa4515d572a686e5fce6f1cff3"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: workflows/db_reclaimer.rs: FileTooLong \u2014 1065 significant 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 565 over it, 2.13\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/workflows/db_reclaimer.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a6f407a51269b30d13c6be9020b9da2789fd5f7688fb1ca17f4cde89f1abff1"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard_outbound::serverless_outbound_req: FunctionTooLong \u2014 pegboard_outbound::serverless_outbound_req runs 213 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 113 over it, 2.13\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-outbound/src/lib.rs"},"region":{"startLine":396}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf7233deef7ee2bb66a948ab5f48025a5f137991e0ca2435a08cc13980b8900c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/shared_state.rs: FileTooLong \u2014 1064 significant 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 564 over it, 2.13\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f046051e29a9138c6d0fba8b4179ea33bfa33fdf4e6842faa5a6248c65f724af"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: PegboardGateway2: ClassTooLong \u2014 838 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 3 methods, 4 blocks, lines 73-1246. The bar is 400 significant lines; this is 438 over it, 2.10\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/lib.rs"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"60b7a872854adc269fc705210e6de90ad2f35fc6a2dc1f52a391d5dadea45c9d"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: depot::compaction::shared::read_commit_delta_reclaim_window: FunctionTooLong \u2014 depot::compaction::shared::read_commit_delta_reclaim_window runs 209 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 109 over it, 2.09\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/compaction/shared.rs"},"region":{"startLine":972}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e6e202a0e81dad55daecb0a233e5abbd6e963fe04215456556dc679fdb05f94"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: depot::workflows::db_reclaimer::reclaim_fdb_job_tx: FunctionTooLong \u2014 depot::workflows::db_reclaimer::reclaim_fdb_job_tx runs 209 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 109 over it, 2.09\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/workflows/db_reclaimer.rs"},"region":{"startLine":641}}}],"partialFingerprints":{"codehealthFindingId/v1":"2267c0a36b555d081ad7a31ca70d6f156b4e05f159f95849df42d2cd30e524a3"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard_runner::ws_to_tunnel_task::handle_message_mk1: FunctionTooLong \u2014 pegboard_runner::ws_to_tunnel_task::handle_message_mk1 runs 209 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 109 over it, 2.09\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs"},"region":{"startLine":501}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b3e03df819410df009427e7b73767cb5480bb33e3534f9f92332b296292eace"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard::workflows::runner::pegboard_runner: FunctionTooLong \u2014 pegboard::workflows::runner::pegboard_runner runs 209 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 109 over it, 2.09\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/runner.rs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ef65db654d9137fd54e6037422e782e3a154beba516069b969ace8a95befc1b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/inspect.rs: FileTooLong \u2014 1033 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 39 free functions. The bar is 500 significant lines; this is 533 over it, 2.07\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":"engine/packages/depot/src/inspect.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c1511c771d9bf2d4d8ff108b3a271305bb945fa82ad8e56709b6a608a6e9943"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/napi_actor_events.rs: FileTooLong \u2014 1032 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 46 free functions. The bar is 500 significant lines; this is 532 over it, 2.06\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit-napi/src/napi_actor_events.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8dde45a3ce881390934d83b6857f9a3750525e082fb8015c0acc6f370e57789a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: internal_storage/mod.rs: FileTooLong \u2014 1015 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 69 free functions. The bar is 500 significant lines; this is 515 over it, 2.03\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/internal_storage/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3aacd25bfca2f315811f5eb650819b4092e2b8d80b53d3b5c9581d0a07d90ecd"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 1014 significant 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 83% of them inside a single declaration: PegboardGateway2 (4 blocks, 73-1246). The bar is 500 significant lines; this is 514 over it, 2.03\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5b5088b619e136160193a61f7473c835723598076ed8005de6ebf6a25465bb6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: keys/workflow.rs: FileTooLong \u2014 1012 significant 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 512 over it, 2.02\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":"engine/packages/gasoline/src/db/kv/keys/workflow.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab19ad4b5f750f053bf25dd72809b6d24c8b42d3af357f18948a03d9048ad32f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: WorkflowContextImpl: TooManyMethods \u2014 60 methods. The bar is 30 methods; this is 30 over it, 2.00\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/workflow-engine/src/context.ts"},"region":{"startLine":343}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e8df5f688dd96d0b056d4ac7a5d16b31af05e992abdbb6b64076205b50465ed"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: depot::conveyer::commit::publish::publish_commit: FunctionTooLong \u2014 depot::conveyer::commit::publish::publish_commit runs 200 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 100 over it, 2.00\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/conveyer/commit/publish.rs"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"28a1ce0bfe0824481e5604e399868929cb526bf4f1dea8875545bd495250858c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: actor/runtime.rs: FileTooLong \u2014 998 significant 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 498 over it, 2.00\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":"engine/packages/pegboard/src/workflows/actor/runtime.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"051b996817af99e933a29ae874fb876a0f4ed34b4480ea5a2635c6ea66b8d4f0"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: RegistryDispatcher.handle_inspector_fetch: MethodTooLong \u2014 handle_inspector_fetch runs 199 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 99 over it, 1.99\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/inspector.rs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"935d0a34014f63aa8cfdd0334661528b594ee2d6e52bc7c1cd675d9ed690ddb9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: sqlite/tx.rs: FileTooLong \u2014 984 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 62% of them inside a single declaration: SqliteDb (180-1018). The bar is 500 significant lines; this is 484 over it, 1.97\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":"rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/tx.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"23f1b10ccb4309c72abf19f8f324036df17bc6eef6f2478d59464bdb478835d4"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ActorTask: TooManyMethods \u2014 59 methods. The bar is 30 methods; this is 29 over it, 1.97\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/task.rs"},"region":{"startLine":332}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bb3ea2daad0d9d3849eb43d4d978a6fcb2ddef112e144ca30747c9597f13f74"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: workflows/db_hot_compactor.rs: FileTooLong \u2014 972 significant 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 472 over it, 1.94\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/workflows/db_hot_compactor.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"683b930e8c282573810973202ff0b5e1ed8afddc2a720dda19d2c77008d89967"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: workflows/db_manager.rs: FileTooLong \u2014 972 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 36 free functions. The bar is 500 significant lines; this is 472 over it, 1.94\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/workflows/db_manager.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9aef230e08db4da284cecb3dd16916bd9a37243be31593c00564111c7405dfd"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard::workflows::serverless::conn::outbound_req_inner: FunctionTooLong \u2014 pegboard::workflows::serverless::conn::outbound_req_inner runs 192 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 92 over it, 1.92\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/serverless/conn.rs"},"region":{"startLine":198}}}],"partialFingerprints":{"codehealthFindingId/v1":"c180b36c950d1b2fcd2310b4be8765fe997c5dacd76d81e3349800733606a9d3"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: client/actor-conn.ts: FileTooLong \u2014 955 significant lines (blank, comment-only and punctuation-only lines excluded), about 90% of them inside a single declaration: ActorConnRaw (140-1566). The bar is 500 significant lines; this is 455 over it, 1.91\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":"rivetkit-typescript/packages/rivetkit/src/client/actor-conn.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b05e227d00f9212ddf6fb473542c9c58102396f8e008a66dfdffff0c033ec49"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: RegistryDispatcher.handle_inspector_websocket: MethodTooLong \u2014 handle_inspector_websocket runs 191 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 91 over it, 1.91\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/inspector_ws.rs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f97045bc3f11538fd71d1bd2caf3192b561c69e7a0a0ce3be795b1bd666f4e8"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard_gateway3::http_stream::response::drain_http_response_stream: FunctionTooLong \u2014 pegboard_gateway3::http_stream::response::drain_http_response_stream runs 190 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 90 over it, 1.90\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway3/src/http_stream/response.rs"},"region":{"startLine":222}}}],"partialFingerprints":{"codehealthFindingId/v1":"54f8da6b3c07c4d36aa7201305f9b5822721a955f59c52623d50f8481deceb14"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: actor/mod.rs: FileTooLong \u2014 949 significant 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 449 over it, 1.90\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":"engine/packages/pegboard/src/workflows/actor/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d88c25d4eacbab4f9117896d2a231b1449de872fe6db1942070d683923ef6193"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: keys/envoy.rs: FileTooLong \u2014 946 significant 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 446 over it, 1.89\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/keys/envoy.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ca679cbd1447dbba066bd65b5828f8f0ca0c5bfcd63dbcfc483b664fd7a6541"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: rivet_guard_core::server::run_server: FunctionTooLong \u2014 rivet_guard_core::server::run_server runs 189 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 89 over it, 1.89\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/guard-core/src/server.rs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"69b44aa8c2b2a9890c8a9e56bf981f14456f64a770c5f10fe2e7405739968caf"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard::workflows::actor::runtime::allocate_actor_v2: FunctionTooLong \u2014 pegboard::workflows::actor::runtime::allocate_actor_v2 runs 189 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 89 over it, 1.89\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/runtime.rs"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"00a3ce6c2ea2b484accc3afe01ef0f89b6db8902122f0d1853343e1cb314a350"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard::workflows::actor::handle_stopped: FunctionTooLong \u2014 pegboard::workflows::actor::handle_stopped runs 188 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 88 over it, 1.88\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/mod.rs"},"region":{"startLine":1047}}}],"partialFingerprints":{"codehealthFindingId/v1":"2897eb2db6e20173a48c13390ab1e9cb9885353999207a5261972d5214944034"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: rivet_envoy_client::actor::actor_inner: FunctionTooLong \u2014 rivet_envoy_client::actor::actor_inner runs 188 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 88 over it, 1.88\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/actor.rs"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e5bda043aa160dc08f0518b8e54e07f57cd39f7e3483e7b4c67d2a7ca18fe12"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: workflow/context.ts: FileTooLong \u2014 937 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 437 over it, 1.87\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/workflow/context.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9ae052cc39d20b6677a2653009ff91be72bd3d92c467f59453a7b9d3528c23e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: registry/mod.rs: FileTooLong \u2014 936 significant 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 436 over it, 1.87\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a2ccad742c2c2a3ccb1847af65287fd1884b1c27d90786280134dbe903e4b8b"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: DatabaseKv.get_workflow_history: MethodTooLong \u2014 get_workflow_history runs 187 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 87 over it, 1.87\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/debug.rs"},"region":{"startLine":772}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d01394ccfaaa7bb27ab588085fae3768414d69af958fca794d2291ff4f5240b"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: InFlightRequestHandle.send_message: MethodTooLong \u2014 send_message runs 186 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 86 over it, 1.86\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":596}}}],"partialFingerprints":{"codehealthFindingId/v1":"01f739c2d3d33f7e6adcaabce4d28961cbf46616fc932c805cd456363a9cf6a8"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: SqliteProfileCollectors.new: MethodTooLong \u2014 new runs 186 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 86 over it, 1.86\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs"},"region":{"startLine":752}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f9a4abac56c31fc021afcb1dfc92c97d597ce2b53f8f39ec361f66453d30232"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: WorkflowCtx: ClassTooLong \u2014 743 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 47 methods, 5 blocks, lines 50-1299. The bar is 400 significant lines; this is 343 over it, 1.86\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/ctx/workflow.rs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"bca6040fd4df42ffafe663f080ea32ff6ff5692102e6725d23dff4c43a95630a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: registry/napi-runtime.ts: FileTooLong \u2014 921 significant lines (blank, comment-only and punctuation-only lines excluded), about 77% of them inside a single declaration: NapiCoreRuntime (266-1278). The bar is 500 significant lines; this is 421 over it, 1.84\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":"rivetkit-typescript/packages/rivetkit/src/registry/napi-runtime.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7861016b55eae2892c8f5a5f21e61a4e75c3188d26ad5ee58d0db6075201522"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: versioned/v7_to_v8.rs: FileTooLong \u2014 920 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 122 free functions. The bar is 500 significant lines; this is 420 over it, 1.84\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v8.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9181196e17ac06240345b80d08ebff38cdd0d0a551ace91f1d966b1288eb036a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: registry/wasm-runtime.ts: FileTooLong \u2014 920 significant lines (blank, comment-only and punctuation-only lines excluded), about 79% of them inside a single declaration: WasmCoreRuntime (260-1307). The bar is 500 significant lines; this is 420 over it, 1.84\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":"rivetkit-typescript/packages/rivetkit/src/registry/wasm-runtime.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"be9a32d094bd7ff2658ed9276fc2bb80ab30dd3b794d7066d8f1c6068164a703"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: versioned/v8_to_v7.rs: FileTooLong \u2014 917 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 122 free functions. The bar is 500 significant lines; this is 417 over it, 1.83\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-protocol/src/versioned/v8_to_v7.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c24da0d956894634e1617387e847e99e7c3a080dbc08a4f919af096f9ed75e42"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/traces.ts: FileTooLong \u2014 916 significant lines (blank, comment-only and punctuation-only lines excluded), about 88% of them inside a single declaration: createTraces (141-1224). The bar is 500 significant lines; this is 416 over it, 1.83\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/traces/src/traces.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"afb8e5073d4632695026ab6f6801ac9117b0226dbdcfa90d2af99af3b358bd15"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: DatabaseKv.inspect_loop_iteration_mismatch: MethodTooLong \u2014 inspect_loop_iteration_mismatch runs 183 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 83 over it, 1.83\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/repair.rs"},"region":{"startLine":817}}}],"partialFingerprints":{"codehealthFindingId/v1":"33ecaae3437f84a84aa820c58311cad6396327a585ae7fce2be3b0aa2477f644"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: DatabaseKv.inspect_missing_init_state: MethodTooLong \u2014 inspect_missing_init_state runs 183 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 83 over it, 1.83\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/repair.rs"},"region":{"startLine":1269}}}],"partialFingerprints":{"codehealthFindingId/v1":"31c99bc9e2484c940bed127c5a1cb8ba3a25af013f8e76c815d6e6b6b992ee4b"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: WasmCoreRuntime: ClassTooLong \u2014 726 significant lines (blank, comment-only and punctuation-only lines excluded), 118 methods. The bar is 400 significant lines; this is 326 over it, 1.82\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":"rivetkit-typescript/packages/rivetkit/src/registry/wasm-runtime.ts"},"region":{"startLine":260}}}],"partialFingerprints":{"codehealthFindingId/v1":"d59aef6ce26cdb23fbf4a6dd7f9dc45dc30a560884336b9e7e4bd28df5258eee"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ProxyService.handle_http_request: MethodTooLong \u2014 handle_http_request runs 181 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 81 over it, 1.81\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/guard-core/src/proxy_service.rs"},"region":{"startLine":833}}}],"partialFingerprints":{"codehealthFindingId/v1":"692893651e7dd35c3c94913573f3d23dd6166fa696cfe995e51dfc3c09d6cd94"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: actor2/mod.rs: FileTooLong \u2014 901 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 401 over it, 1.80\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor2/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fe305fe5014b5bf917f34d6e53b75e19c1867ed79371a1ac8f738b483c606b4"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: DatabaseKv.inspect_orphaned_sleep_state: MethodTooLong \u2014 inspect_orphaned_sleep_state runs 180 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 80 over it, 1.80\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/repair.rs"},"region":{"startLine":1782}}}],"partialFingerprints":{"codehealthFindingId/v1":"2cef301fb2d771b738009bf31abee80128cdc34b1b8e627363b193a794b3aa49"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/versioned.rs: FileTooLong \u2014 894 significant 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 394 over it, 1.79\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/inspector-protocol/src/versioned.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6330aa4dd07cd7cbedaa597342ac77e911f74167889336c1878fa6603e1f37a8"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: RivetKitClient/ActorConnection.swift: FileTooLong \u2014 887 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 387 over it, 1.77\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":"rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"92f53b935858d31f886f33f1856e4310cccd9b84be51ab5c441026ba5803a3fb"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: NapiCoreRuntime: ClassTooLong \u2014 707 significant lines (blank, comment-only and punctuation-only lines excluded), 126 methods. The bar is 400 significant lines; this is 307 over it, 1.77\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":"rivetkit-typescript/packages/rivetkit/src/registry/napi-runtime.ts"},"region":{"startLine":266}}}],"partialFingerprints":{"codehealthFindingId/v1":"30c161069e36c97c0a98bcc581b799310fea534efb9367ea3138aa58725c5c26"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: EnvoyHandle: TooManyMethods \u2014 53 methods. The bar is 30 methods; this is 23 over it, 1.77\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":"engine/sdks/rust/envoy-client/src/handle.rs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd6e39272bb90eef59cd9a779da46b50b412727f515a6840e657cdeade920e4c"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard_envoy::ws_to_tunnel_task::dispatch_message: FunctionTooLong \u2014 pegboard_envoy::ws_to_tunnel_task::dispatch_message runs 176 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 76 over it, 1.76\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs"},"region":{"startLine":685}}}],"partialFingerprints":{"codehealthFindingId/v1":"1bb0fd6dfd22af389088c405bb92156a3e2e439a9e903d7e511b2bcd52c20d74"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Ctx: TooManyMethods \u2014 52 methods. The bar is 30 methods; this is 22 over it, 1.73\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":"rivetkit-rust/packages/rivetkit/src/context.rs"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ffb7708838cab9bbf36b3cd8600c3d6b58157d031bb5c9c8f5855b335b61e31"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: ops/propose.rs: FileTooLong \u2014 865 significant 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 365 over it, 1.73\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/epoxy/src/ops/propose.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d310e963c3459c89122dc1108d9c4806e25bbc633c7092001e25924f54684841"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/actor.rs: FileTooLong \u2014 860 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 360 over it, 1.72\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/actor.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1205349f8116e006209bec5ee995613e6e85a120fabc513f950baf132b29ba2a"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: rivet_service_manager::start: FunctionTooLong \u2014 rivet_service_manager::start runs 172 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 72 over it, 1.72\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/service-manager/src/lib.rs"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"b361c8c4fcd50f33d05741b9f9e683624bb6789151414cfe59bc8b41fb72dbab"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: SubCommand: ClassTooLong \u2014 685 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 1 methods, 2 blocks, lines 22-1085. The bar is 400 significant lines; this is 285 over it, 1.71\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/engine/src/commands/udb/cli.rs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2df4859626da3316ab820d1d0b2dcf94968e2988732bd018fe9786c11891eb5"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard::ops::runner_config::upsert::pegboard_runner_config_upsert: FunctionTooLong \u2014 pegboard::ops::runner_config::upsert::pegboard_runner_config_upsert runs 171 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 71 over it, 1.71\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/ops/runner_config/upsert.rs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7260bb287b07c1f1f0c45464d5b2f05a59060479a211a418aa38549d050e88a"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: index.main: FunctionTooLong \u2014 main runs 171 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 71 over it, 1.71\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/skill-evals/src/index.ts"},"region":{"startLine":557}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fa19c5747846dfa3d083d10d0bc75edd396d65cee7dfd2a9086554433fd4520"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Tunnel: ClassTooLong \u2014 682 significant lines (blank, comment-only and punctuation-only lines excluded), 23 methods. The bar is 400 significant lines; this is 282 over it, 1.71\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/typescript/runner/src/tunnel.ts"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"81d1b5c49918d1b51679262cb992346f976498bbc49b64a01e2bd0237aa77f72"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Runner: TooManyMethods \u2014 51 methods. The bar is 30 methods; this is 21 over it, 1.70\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/typescript/runner/src/mod.ts"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"71d5965a7cb485d334af0019f9472582e2887272cca48cda5a39ce008066815b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Runner: TooManyMethods \u2014 51 methods. The bar is 30 methods; this is 21 over it, 1.70\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/engine-runner/src/mod.ts"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa72cb510df5791d9b3a9f52e3c082c1b5e476bb71d6f1b428e3279bdcbdef19"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Db.commit_finalize: MethodTooLong \u2014 commit_finalize runs 170 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 70 over it, 1.70\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/conveyer/commit/stage.rs"},"region":{"startLine":387}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ed3941dfa78c5c613e47ee97618eebe4e322a463605d42376a72532caf84a1e"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Runner.#openPegboardWebSocket: MethodTooLong \u2014 #openPegboardWebSocket runs 170 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 70 over it, 1.70\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/typescript/runner/src/mod.ts"},"region":{"startLine":756}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d37da34853c7ee51fb724d5aa2a039d28678faff2598ad14e53cdac09ce2ac3"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Tunnel: ClassTooLong \u2014 677 significant lines (blank, comment-only and punctuation-only lines excluded), 23 methods. The bar is 400 significant lines; this is 277 over it, 1.69\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/engine-runner/src/tunnel.ts"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"18e5e9f2f3910c78e849bb11b7e686a3f6dc185760d48163d362d3c2ad254c53"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/actor_factory.rs: FileTooLong \u2014 845 significant 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 345 over it, 1.69\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":"rivetkit-typescript/packages/rivetkit-napi/src/actor_factory.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"68f9c721e58ef9bcc5b0029dd6163de1b29462ac7c0e63adf919ccd60ca3969e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/actor_context.rs: FileTooLong \u2014 844 significant 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 344 over it, 1.69\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":"rivetkit-typescript/packages/rivetkit-napi/src/actor_context.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0241adecafea3baaaef6050f5e6c36f703e86a12bad58b640b8a744b7eccc59"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/index.ts: FileTooLong \u2014 844 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 344 over it, 1.69\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":"rivetkit-typescript/packages/workflow-engine/src/index.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"66ef3492c254b2325e063bdbb6bf92caf16bcc45d9fad6e272a7cf88c72b14b6"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: ActorHandleRaw: ClassTooLong \u2014 674 significant lines (blank, comment-only and punctuation-only lines excluded), 28 methods. The bar is 400 significant lines; this is 274 over it, 1.69\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/client/actor-handle.ts"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"637c60c8e3b4712d04a17c4a9a6918cfd58fd398213c264e15b4408d0ae892f1"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: rivet_error_macros::derive_enum_error: FunctionTooLong \u2014 rivet_error_macros::derive_enum_error runs 168 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 68 over it, 1.68\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/error-macros/src/lib.rs"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c769bc25a705f116fd2a5ca0bd9589949bccd3c74d60fda3e1a543761feb89f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: registry/http.rs: FileTooLong \u2014 824 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 37 free functions. The bar is 500 significant lines; this is 324 over it, 1.65\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":"rivetkit-rust/packages/rivetkit-core/src/registry/http.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0eea007fea22b0041a5262339a7a4968847686cf5a4b7c7e9db3820f1d546a8c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: udb/cli.rs: FileTooLong \u2014 823 significant 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 83% of them inside a single declaration: SubCommand (2 blocks, 22-1085). The bar is 500 significant lines; this is 323 over it, 1.65\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/engine/src/commands/udb/cli.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ddf47faced9053850fa62ce8e76749a7ff67782124a2df28fa3aec8aa8c099e5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ActorMetrics: TooManyMethods \u2014 49 methods. The bar is 30 methods; this is 19 over it, 1.63\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"12b6a84201d4db105af715e46b1f97ba07e60b214428e9d9b31052265ec0e77b"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: DatabaseKv.silence_workflows: MethodTooLong \u2014 silence_workflows runs 163 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 63 over it, 1.63\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/debug.rs"},"region":{"startLine":430}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e93df8826056b89138f5ed357662feef95bdca76b4058ca9656728e0828e012"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: rivet_envoy_client::actor::handle_hws_restore: FunctionTooLong \u2014 rivet_envoy_client::actor::handle_hws_restore runs 162 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 62 over it, 1.62\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/actor.rs"},"region":{"startLine":904}}}],"partialFingerprints":{"codehealthFindingId/v1":"337df784c201862202d7a0c5e756b87bd9eac87a150a659122b9d73c20f7443c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: commands/depot_transfer.rs: FileTooLong \u2014 809 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 309 over it, 1.62\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/engine/src/commands/depot_transfer.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa953aeecadb3ef7e16fda18a18ef21d2248a9adde792ea4fcccce89e37c36b7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: pegboard_gateway/mod.rs: FileTooLong \u2014 807 significant 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 307 over it, 1.61\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/guard/src/routing/pegboard_gateway/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"812aa5144225d88c9fdbfa1d10c17d3e2172f7edb61be92366d9acacec34d48b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: actor/state.rs: FileTooLong \u2014 798 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 73% of them inside a single declaration: ActorContext (302-1219). The bar is 500 significant lines; this is 298 over it, 1.60\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/state.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"79a3855f5e276e5e0b061c995f1e868301f7bdd543976252e437bcb5c4f6c1e0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: versioned/v7_to_v6.rs: FileTooLong \u2014 793 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 107 free functions. The bar is 500 significant lines; this is 293 over it, 1.59\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v6.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d6b7ff4166cb1d5da121d43fcd9ccde7adc102588d9bf2975f3cf46f204f454"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: PegboardGateway2.handle_request_inner: MethodTooLong \u2014 handle_request_inner runs 158 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 58 over it, 1.58\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/lib.rs"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fcbee8ca6fe43de61feb69209933e3554b6e0f2f75877a00965e27717c125af"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: versioned/mod.rs: FileTooLong \u2014 785 significant 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 285 over it, 1.57\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":"engine/sdks/rust/envoy-protocol/src/versioned/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dae9d0ea05f15eb47adb3a1fe1075b6436eef1460c09eb034e62ea0cd3a3b622"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard::actor_kv::preload::batch_preload: FunctionTooLong \u2014 pegboard::actor_kv::preload::batch_preload runs 157 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 57 over it, 1.57\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/actor_kv/preload.rs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"3086735936d0e9d4b36f6ed2eb93b69222d5c24741b3b48547d131cd6bbf54fa"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: actor2/runtime.rs: FileTooLong \u2014 784 significant 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 284 over it, 1.57\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":"engine/packages/pegboard/src/workflows/actor2/runtime.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"da204cae457bea00feb6e4262687129ffc8b45e6f3fd72b355375ec1687acab5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: WorkflowCtx: TooManyMethods \u2014 47 methods. The bar is 30 methods; this is 17 over it, 1.57\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/ctx/workflow.rs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e8a81dce3e802c02bef207c73cfdeb65bbd9611883279473abe20eee17e7725"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: ctx/workflow.rs: FileTooLong \u2014 782 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 95% of them inside a single declaration: WorkflowCtx (5 blocks, 50-1299). The bar is 500 significant lines; this is 282 over it, 1.56\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":"engine/packages/gasoline/src/ctx/workflow.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2be9ad00858bdf8e68c4eb5a574f0683837babbefef8216abb16fc3fa1bb9a2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: versioned/v6_to_v7.rs: FileTooLong \u2014 781 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 107 free functions. The bar is 500 significant lines; this is 281 over it, 1.56\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f1ecc89743d120a7afbf9e35317b9f563509ff84cbaed9cdbc7582ce53f3f4e"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: LoopBuilder.run: MethodTooLong \u2014 run runs 156 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 56 over it, 1.56\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/builder/workflow/lupe.rs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"c76f7445293f7c630977f4174304c438a87fe8ac7056fe4163e1c87346940ebd"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: PegboardGateway3: ClassTooLong \u2014 622 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 5 methods, 4 blocks, lines 71-927. The bar is 400 significant lines; this is 222 over it, 1.56\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway3/src/lib.rs"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"474918bb199a0aee74c3291d4b9ae22eeffa156bd72cde654b1f7dcfc57ab3c0"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: SignalBuilder.send: MethodTooLong \u2014 send runs 155 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 55 over it, 1.55\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/builder/workflow/signal.rs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"2737dc32c8ebff2e82575f07b225b14018ffb6513803ca5ecfc31b123a141fd1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: workflows/runner.rs: FileTooLong \u2014 773 significant 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 273 over it, 1.55\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/runner.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"55ae78c4805c07baff197996baf06612c83617be1f3eb6214c076bf5181896d1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/RivetError.ts: FileTooLong \u2014 768 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 268 over it, 1.54\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/effect/src/RivetError.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5fac94bcaa71f5b58625462091ec8ed4b9a82d4c73001f2681aa08fe61a00a8"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: ActorMetricCollectors: TooManyFields \u2014 46 stored fields beside 1 method. The bar is 30 stored fields; this is 16 over it, 1.53\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba482b3d1367ef082cbc5e30cfc5a506e00ea96d0db5f51f66547149c22a4290"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: depot::workflows::db_reclaimer::cleanup_repair_fdb_outputs_tx: FunctionTooLong \u2014 depot::workflows::db_reclaimer::cleanup_repair_fdb_outputs_tx runs 153 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 53 over it, 1.53\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/workflows/db_reclaimer.rs"},"region":{"startLine":1328}}}],"partialFingerprints":{"codehealthFindingId/v1":"79b63b2ae9ab6347bee33ef7624ade0934eb756e8b3bc76a860c6e92cd79c8dc"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ActorTask.handle_dispatch: MethodTooLong \u2014 handle_dispatch runs 153 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 53 over it, 1.53\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/task.rs"},"region":{"startLine":895}}}],"partialFingerprints":{"codehealthFindingId/v1":"69b07bf56ba25468db7e31e5b7e9077a8c588d77e1bc5fa5c5872ccde8f37bf2"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: RegistryDispatcher.handle_raw_websocket: MethodTooLong \u2014 handle_raw_websocket runs 153 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 53 over it, 1.53\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/websocket.rs"},"region":{"startLine":506}}}],"partialFingerprints":{"codehealthFindingId/v1":"e144c8b41cd11c56c546acf31d56e33ec6e92112643aa9df2338b34e3e1cfea8"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 764 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 72% of them inside a single declaration: PegboardGateway (5 blocks, 64-869). The bar is 500 significant lines; this is 264 over it, 1.53\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4eae10fc233a0025855eafd888b62ac679edc63c507b5d29c1adee820925c02c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: actor/queue.rs: FileTooLong \u2014 764 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 62% of them inside a single declaration: ActorContext (251-929). The bar is 500 significant lines; this is 264 over it, 1.53\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/queue.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"225f503e63033ca69f0814db4b7ba231dd7b007aa8aef6b4f8ae39de659fdd95"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: DatabaseKv.pull_next_signals: MethodTooLong \u2014 pull_next_signals runs 152 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 52 over it, 1.52\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/mod.rs"},"region":{"startLine":2490}}}],"partialFingerprints":{"codehealthFindingId/v1":"205738f67ec9165d8cf4821dc6347a6883a4f12eab481592c1883e67dd24a6fc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: client/actor-handle.ts: FileTooLong \u2014 757 significant lines (blank, comment-only and punctuation-only lines excluded), about 89% of them inside a single declaration: ActorHandleRaw (83-1052). The bar is 500 significant lines; this is 257 over it, 1.51\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/client/actor-handle.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5354b1bc13934cd1752696667499bb7bba9f49b30a7fffac63cc48a412b0975"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: index.executeWorkflow: FunctionTooLong \u2014 executeWorkflow runs 151 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 51 over it, 1.51\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/workflow-engine/src/index.ts"},"region":{"startLine":953}}}],"partialFingerprints":{"codehealthFindingId/v1":"8afd601f05122eb50f1b1a76ddd53ba00d4170a918e82a25e53adf6da5ad8ab9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: registry/runtime.ts: FileTooLong \u2014 753 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 253 over it, 1.51\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":"rivetkit-typescript/packages/rivetkit/src/registry/runtime.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c04072c1fd0398acc683011d51bd6aa61f3c5d676a1eb618ff3312b07edcf8a"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: InFlightRequestHandle: ClassTooLong \u2014 601 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 16 methods, 2 blocks, lines 773-1581. The bar is 400 significant lines; this is 201 over it, 1.50\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway3/src/shared_state.rs"},"region":{"startLine":773}}}],"partialFingerprints":{"codehealthFindingId/v1":"73e7b51f7dae198d5698c3ca6735546c165c8b13ddf514d1ba7d05e93ee9549f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ActorConnection: TooManyMethods \u2014 45 methods. The bar is 30 methods; this is 15 over it, 1.50\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"d74f85de618e4fd738751ccb392704b53c1356067114008f8139959e7539b711"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Transaction: TooManyMethods \u2014 45 methods. The bar is 30 methods; this is 15 over it, 1.50\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universaldb/src/transaction.rs"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"26493636af22279ca7903f2b779a6cc6e84a2749536410c7006dff977163fb64"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard::ops::actor::create::pegboard_actor_create: FunctionTooLong \u2014 pegboard::ops::actor::create::pegboard_actor_create runs 150 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 50 over it, 1.50\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/ops/actor/create.rs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"53e9ba27d58678ea58fce6b71bc4b89fc8bf800b7a2a6ac70d9e595b8b0da23b"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: EnvoyClientMetrics.new: MethodTooLong \u2014 new runs 150 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 50 over it, 1.50\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/metrics.rs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c038555791e27d121f401b9dcd9d20344ff3a7f5dd9439c23f78b804f7056e8"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: registry/inspector.rs: FileTooLong \u2014 748 significant 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 248 over it, 1.50\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":"rivetkit-rust/packages/rivetkit-core/src/registry/inspector.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d95a1de2ffe2bef5d3781c4c3e139b1ec60ae5fe1a33dc4ea8b981442047fe3f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: actor/actor_runtime_socket.rs: FileTooLong \u2014 745 significant 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 245 over it, 1.49\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/actor_runtime_socket.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"45e9bf72b8048c870990935d1a02b2eac8a39764e29177e5697f2a1f2bb56e2e"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: depot::recovery::scan_hot_shard_history_branch: FunctionTooLong \u2014 depot::recovery::scan_hot_shard_history_branch runs 149 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 49 over it, 1.49\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/recovery.rs"},"region":{"startLine":376}}}],"partialFingerprints":{"codehealthFindingId/v1":"992b654dbda40900953f0ec5178856ff9fa15f49b4586c4cd0b16c933062eef3"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: epoxy::ops::propose::epoxy_propose: FunctionTooLong \u2014 epoxy::ops::propose::epoxy_propose runs 149 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 49 over it, 1.49\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/epoxy/src/ops/propose.rs"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d1f53214c85e44dae25fb572d392c691b4ce9bffcca8f2e5c1d7cb06bd9cb14"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: rivet_envoy_client::connection::native::single_connection: FunctionTooLong \u2014 rivet_envoy_client::connection::native::single_connection runs 149 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 49 over it, 1.49\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/connection/native.rs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b39d9e92ea60572a8e382560568540608ae858b9591d377531d710972bb75e6"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: depot::workflows::db_reclaimer::sweep_commit_delta_chunk_tx: FunctionTooLong \u2014 depot::workflows::db_reclaimer::sweep_commit_delta_chunk_tx runs 148 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 48 over it, 1.48\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/workflows/db_reclaimer.rs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"8912fd145db38e7462db58128dbb787f46b3462197f65c88dcb5a3a714b24b7c"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: UpdateSubCommand.execute: MethodTooLong \u2014 execute runs 148 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 48 over it, 1.48\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/engine/src/commands/config.rs"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"1813f2a602548163ad7a66f135be77e613b5f881b220cfbf6f3503609eeec68f"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: rivet_error_macros::derive_struct_error: FunctionTooLong \u2014 rivet_error_macros::derive_struct_error runs 148 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 48 over it, 1.48\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/error-macros/src/lib.rs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"f32d3f0f099ce14711f5efae73d01532541ef8ca5bb44357a6ef1ad8f5fa4ecb"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: dump-asyncapi.main: FunctionTooLong \u2014 main runs 148 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 48 over it, 1.48\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/scripts/dump-asyncapi.ts"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b0ee86a3ec861f7f02ee6e157fcb6c1a6696330553c9bf7563962ccdf4f937b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: versioned/v6_to_v5.rs: FileTooLong \u2014 733 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 101 free functions. The bar is 500 significant lines; this is 233 over it, 1.47\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a01c12388b0dc323c962e26f393f937df76ec3c6e9f1b01393f33be2dd9bb04d"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: ActorContextHandleAdapter: ClassTooLong \u2014 585 significant lines (blank, comment-only and punctuation-only lines excluded), 37 methods. The bar is 400 significant lines; this is 185 over it, 1.46\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/registry/native.ts"},"region":{"startLine":2718}}}],"partialFingerprints":{"codehealthFindingId/v1":"2cb31b1e87a26419de88c8ac34d1395927d222c413d9da93d2405f8714c08e6e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/tunnel.ts: FileTooLong \u2014 730 significant lines (blank, comment-only and punctuation-only lines excluded), about 93% of them inside a single declaration: Tunnel (41-1147). The bar is 500 significant lines; this is 230 over it, 1.46\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":"engine/sdks/typescript/runner/src/tunnel.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"69e26fe83e971c40069a373e3e3e9fcb9b44248d2c354db734e1489682462ae3"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: DatabaseKv.complete_workflow: MethodTooLong \u2014 complete_workflow runs 146 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 46 over it, 1.46\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/mod.rs"},"region":{"startLine":2059}}}],"partialFingerprints":{"codehealthFindingId/v1":"984e231ea28c7c82d1b95ed387cc39b3e7905e568d1dc857638a2001b00b40ee"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: rivet_guard::routing::pegboard_gateway::route_request_inner: FunctionTooLong \u2014 rivet_guard::routing::pegboard_gateway::route_request_inner runs 146 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 46 over it, 1.46\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/guard/src/routing/pegboard_gateway/mod.rs"},"region":{"startLine":325}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd01a65c0707db764ee270e8fbb4b616aaa22ed1173a085eddccefa657b333e9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/tunnel.ts: FileTooLong \u2014 725 significant lines (blank, comment-only and punctuation-only lines excluded), about 93% of them inside a single declaration: Tunnel (41-1141). The bar is 500 significant lines; this is 225 over it, 1.45\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/engine-runner/src/tunnel.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"95459b196308f43e1fbe67b5efb01bf743d1f5c1536580f005db9dd43256d156"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: mod.db: FunctionTooLong \u2014 db runs 145 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 45 over it, 1.45\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/database/mod.ts"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"589bd84a3629113c031d3448c0582a62130ef6005eefd63cd88313550bbb930c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/ws_to_tunnel_task.rs: FileTooLong \u2014 724 significant 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 224 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":"engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b9ef3a5d446c7aa8106bfa67938ecbb1a93e0ed0f04622f5177dc4c792f32fe"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: EnvoyHandle: ClassTooLong \u2014 579 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 53 methods, 3 blocks, lines 16-905. The bar is 400 significant lines; this is 179 over it, 1.45\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/handle.rs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"212487f72e47ebfa0126651f3fad581eb9d537e2961bf30fc702c4ca69ac51be"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: versioned/v5_to_v6.rs: FileTooLong \u2014 720 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 101 free functions. The bar is 500 significant lines; this is 220 over it, 1.44\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a30e2d2c17f8fda6558af0dca1901eca7206f22f94e3f6b1294426e5b6be0af8"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: DatabaseKv.inspect_deallocate_set_error: MethodTooLong \u2014 inspect_deallocate_set_error runs 144 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 44 over it, 1.44\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/repair.rs"},"region":{"startLine":1552}}}],"partialFingerprints":{"codehealthFindingId/v1":"685cd6aa0d92018d272710199c0b68da6d5830cf11c8f047acff566fa13872a1"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Runner.#openPegboardWebSocket: MethodTooLong \u2014 #openPegboardWebSocket runs 144 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 44 over it, 1.44\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/engine-runner/src/mod.ts"},"region":{"startLine":756}}}],"partialFingerprints":{"codehealthFindingId/v1":"226fed189cd9247a153690760f7c2d515f5c5de060c65d3702162ff0c2ee3c39"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: WasmActorContext: TooManyMethods \u2014 43 methods. The bar is 30 methods; this is 13 over it, 1.43\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit-wasm/src/lib.rs"},"region":{"startLine":1187}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1e304ad6e4c8152c57e7bee0ebf388990c74e7684d3978e39f575c8338d063b"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: rivet_envoy_client::envoy::envoy_loop: FunctionTooLong \u2014 rivet_envoy_client::envoy::envoy_loop runs 142 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 42 over it, 1.42\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/envoy.rs"},"region":{"startLine":448}}}],"partialFingerprints":{"codehealthFindingId/v1":"491f3c08cfd084b955e5dabc61a0cf5dbe37359c91ee1e6ae84629414a4cb5bb"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/telemetry.rs: FileTooLong \u2014 707 significant 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 207 over it, 1.41\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/telemetry.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1dfe743d52bfa87032e0fc5dd894e771b06b06894e87fef7004b1bb1bcc359e4"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: integration/run.ts: FileTooLong \u2014 706 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 206 over it, 1.41\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"integrations/workflow-world/scripts/integration/run.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd89ba96d58be56c2d14aca9cf588d8fbd20f22c68dc4d700cbfc5f39360b2e0"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard::workflows::runner2::allocate_pending_actors: FunctionTooLong \u2014 pegboard::workflows::runner2::allocate_pending_actors runs 141 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 41 over it, 1.41\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/runner2.rs"},"region":{"startLine":686}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e4fccf9515a27857bad646ab7c234b152bee0a6e4cca435ee5062fd10334593"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: actor/connection.rs: FileTooLong \u2014 703 significant 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 203 over it, 1.41\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/connection.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3322169e7ff65c722784ed881c1007c8cc3954b30d8946e4bf4a71e6a5a4050d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: GetPagesDebug: TooManyFields \u2014 42 stored fields beside 3 methods. The bar is 30 stored fields; this is 12 over it, 1.40\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/conveyer/read.rs"},"region":{"startLine":1245}}}],"partialFingerprints":{"codehealthFindingId/v1":"125f799f848558106ba3549c6d9b9c78cbb05d95ea5d194128fc29264f4d2693"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: rivet_envoy_client::connection::wasm::imp::single_connection: FunctionTooLong \u2014 rivet_envoy_client::connection::wasm::imp::single_connection runs 140 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 40 over it, 1.40\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/connection/wasm.rs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"e742961f1311e3c63a641abe385334e6902ea8bdfadbc014a013482562c00317"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: registry/websocket.rs: FileTooLong \u2014 699 significant 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 75% of them inside a single declaration: RegistryDispatcher (10-697). The bar is 500 significant lines; this is 199 over it, 1.40\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/websocket.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b28bd7dab3a4de8a787c7f3d7c9758a1018e4b0ad4742447f6d576d06af17f0b"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Config.apply_dynamic: MethodTooLong \u2014 apply_dynamic runs 138 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 38 over it, 1.38\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/config/src/lib.rs"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"afaa06d9dee48e6c478cb14072ad7873ddbb52ff4b62d7a0b37442ae4d983aa9"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: PegboardGateway: ClassTooLong \u2014 549 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 4 methods, 5 blocks, lines 64-869. The bar is 400 significant lines; this is 149 over it, 1.37\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/lib.rs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"c10b8209fdd4b65e8b4a409807e413a61418cc8231035bb950571e4bf367e988"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: rivet_envoy_client::actor::handle_ws_open: FunctionTooLong \u2014 rivet_envoy_client::actor::handle_ws_open runs 137 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 37 over it, 1.37\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/actor.rs"},"region":{"startLine":615}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b661e8ea84a9b608817a4968c2ab8668492941bc1ebea44b0bb405b48c81aba"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: ActorMetricCollectors: ClassTooLong \u2014 547 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 1 methods, 2 blocks, lines 170-1583. The bar is 400 significant lines; this is 147 over it, 1.37\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"74f013b6e5731aac5ebebeba0a8655d03dd690e897032acf7868f5557251b220"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: RegistryDispatcher: TooManyMethods \u2014 41 methods, declared across 5 files: registry/inspector.rs (13), registry/mod.rs (11), registry/inspector_ws.rs (9), registry/http.rs (5), \u002B1 more file(s). The bar is 30 methods; this is 11 over it, 1.37\u00D7 the bar. That list is where to read them, not a suggestion to split the file: the members belong to the type wherever they are declared, so moving them between files leaves the count unchanged. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/mod.rs"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"e865c0239f4c3d344a686f52ba859ab13094dc8d1b935391aa212319a3073181"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: WorkflowContext: ClassTooLong \u2014 545 significant lines (blank, comment-only and punctuation-only lines excluded), 24 methods. The bar is 400 significant lines; this is 145 over it, 1.36\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/workflow/context.ts"},"region":{"startLine":451}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8eb397210957dce6916a102150d174b511a28534c2e910d3816cdc6a8af0e85"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: rivet_api_builder::middleware::http_logging_middleware: FunctionTooLong \u2014 rivet_api_builder::middleware::http_logging_middleware runs 136 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 36 over it, 1.36\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-builder/src/middleware.rs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"5675e2678d53b114697ed6a164db57114227675991232fcfed6b2058997b474e"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard::workflows::actor2::alloc_serverful::hash::allocate_with_rng: FunctionTooLong \u2014 pegboard::workflows::actor2::alloc_serverful::hash::allocate_with_rng runs 136 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 36 over it, 1.36\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor2/alloc_serverful/hash.rs"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"da6a9af8ad2aa05a0c947ef6895a32ba63ee41ebfce62e79432a3aea1c8b5bfd"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: RegistryDispatcher.start_actor: MethodTooLong \u2014 start_actor runs 136 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 36 over it, 1.36\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/mod.rs"},"region":{"startLine":805}}}],"partialFingerprints":{"codehealthFindingId/v1":"224ab70a73c94a1dcbf3bfda27a8c76f7df5e1db47adc146e5ecd59dbef17cac"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/metrics.rs: FileTooLong \u2014 679 significant 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 179 over it, 1.36\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/metrics.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"95dfdbaadb74c38d190bd9f070c17576ba83b6fe03411e186ee35722f7748097"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 678 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 92% of them inside a single declaration: PegboardGateway3 (4 blocks, 71-927). The bar is 500 significant lines; this is 178 over it, 1.36\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":"engine/packages/pegboard-gateway3/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c0fa4f97560882b366c9e81c5fd1277dbda759b28456eec88182a0061e7f9b1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: keys/runner.rs: FileTooLong \u2014 664 significant 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 164 over it, 1.33\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/keys/runner.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cbcc5c3ab409f138e81f97e5a1578ce192bf74de2694b38ecfd1c67c81e1679"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: PegboardGateway2.handle_websocket_hibernation: MethodTooLong \u2014 handle_websocket_hibernation runs 132 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 32 over it, 1.32\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/lib.rs"},"region":{"startLine":1051}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae68db8c8553360af2f0e53d1198f9697a1bb2fbcb892d8adaa4986a3d0fe853"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: PegboardRunnerWsCustomServe.handle_websocket: MethodTooLong \u2014 handle_websocket runs 131 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 31 over it, 1.31\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-runner/src/lib.rs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"945a524ce19a9ab21dec77c7b5f074b75396f7bdefa30621a0548f8711f5d188"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Registry.handler: MethodTooLong \u2014 handler runs 131 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 31 over it, 1.31\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/registry/index.ts"},"region":{"startLine":217}}}],"partialFingerprints":{"codehealthFindingId/v1":"df90f4bbc416a4feca8a38e5585086ff64c210dedfadfebbfcc9eaa2641b8c70"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: SubCommand.execute: MethodTooLong \u2014 execute runs 130 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 30 over it, 1.30\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/engine/src/commands/epoxy.rs"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"84007412678eda571e3ed7f826662bc62b1b6a8b5b43a5399515b8df3c3c09fc"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Registry: ClassTooLong \u2014 519 significant lines (blank, comment-only and punctuation-only lines excluded), 21 methods. The bar is 400 significant lines; this is 119 over it, 1.30\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/registry/index.ts"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4703eb7de95ba58b8a417b07e55aec75010a7e4cb4828e6a5c91cc81bc9b9e0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: registry/index.ts: FileTooLong \u2014 646 significant lines (blank, comment-only and punctuation-only lines excluded), about 80% of them inside a single declaration: Registry (143-1030). The bar is 500 significant lines; this is 146 over it, 1.29\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":"rivetkit-typescript/packages/rivetkit/src/registry/index.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"007b6a9b6e0c22464a78c38beb8d15ccc8568ce7c081e795a6cf0bdb3cc27f82"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: workflows/runner2.rs: FileTooLong \u2014 645 significant 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 145 over it, 1.29\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/runner2.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff964de6593be22629209425b32e6e6b8f2f4bb1ae3445c20bf5f4600b985d3d"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: epoxy::ops::kv::get::linearizable::read: FunctionTooLong \u2014 epoxy::ops::kv::get::linearizable::read runs 128 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 28 over it, 1.28\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/epoxy/src/ops/kv/get/linearizable.rs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa0886e2cfdace04d6689b42f150cbec69ad92ad65edac3e89076e7ee51dfbd3"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: rivetkit::start::handle_actor_event: FunctionTooLong \u2014 rivetkit::start::handle_actor_event runs 128 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 28 over it, 1.28\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit/src/start.rs"},"region":{"startLine":359}}}],"partialFingerprints":{"codehealthFindingId/v1":"615b2ba2c066272701edbeb90fe011b54071b3a9239a65f1d20513c415c10c04"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/handle.rs: FileTooLong \u2014 639 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 91% of them inside a single declaration: EnvoyHandle (3 blocks, 16-905). The bar is 500 significant lines; this is 139 over it, 1.28\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/handle.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf5943de1cd9db1a1c4b54654552e10d3a7c7cfa498ac06779298ee407ff1ecc"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: RemoteManager: ClassTooLong \u2014 508 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 26 methods, 2 blocks, lines 34-837. The bar is 400 significant lines; this is 108 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":"rivetkit-rust/packages/client/src/remote_manager.rs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"c30d894e94d18f20fbbd1eb713e1ed41d0ab20979c9a76b4b03052f9296b29bb"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: actor/http.rs: FileTooLong \u2014 635 significant 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 135 over it, 1.27\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/actor/http.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"650e52e85d857029a655e2cae854f72bb87f514c3be31609e9c17ff42f6dc873"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: depot::compaction::shared::read_hot_input_snapshot: FunctionTooLong \u2014 depot::compaction::shared::read_hot_input_snapshot runs 127 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 27 over it, 1.27\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/compaction/shared.rs"},"region":{"startLine":573}}}],"partialFingerprints":{"codehealthFindingId/v1":"95fe599f789133c82f46cf4fa9a6b2e140a2a575bf21a3cd4d272ea0d21d1f17"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: rivet_engine::commands::depot_vacuum::preflight: FunctionTooLong \u2014 rivet_engine::commands::depot_vacuum::preflight runs 127 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 27 over it, 1.27\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/engine/src/commands/depot_vacuum.rs"},"region":{"startLine":237}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bff98a73ccc2d98ea6f908d8d6bbf0be56beaca50f5a05ce446d58420d8c2ec"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard_envoy::tunnel_to_ws_task::handle_message: FunctionTooLong \u2014 pegboard_envoy::tunnel_to_ws_task::handle_message runs 127 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 27 over it, 1.27\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-envoy/src/tunnel_to_ws_task.rs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"e64d16efdbf2ea5245b27811764305f21e9f27bdfb845ed97e9bb781159a2d7f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 632 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 34 free functions. The bar is 500 significant lines; this is 132 over it, 1.26\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/engine-process/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"25c9f5c366cea8a2aa7ea03f69fff8d69f3f06a0154cd2ff6ca122b415c1c6c5"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: depot::workflows::db_hot_compactor::stage_hot_slice_inner: FunctionTooLong \u2014 depot::workflows::db_hot_compactor::stage_hot_slice_inner runs 126 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 26 over it, 1.26\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/workflows/db_hot_compactor.rs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"fab6108cd7f4700ebcaaec9789d627e2ff9a26a8acd9e3a5d72e718b372bff65"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard::ops::runner::update_alloc_idx::pegboard_runner_update_alloc_idx: FunctionTooLong \u2014 pegboard::ops::runner::update_alloc_idx::pegboard_runner_update_alloc_idx runs 126 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 26 over it, 1.26\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/ops/runner/update_alloc_idx.rs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"25cbd233e8f7bccfdd1ee2035c0dce3bd88929d42a67f35572fd265bfe12158a"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: native-database.wrapJsNativeDatabase: FunctionTooLong \u2014 wrapJsNativeDatabase runs 126 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 26 over it, 1.26\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/database/native-database.ts"},"region":{"startLine":326}}}],"partialFingerprints":{"codehealthFindingId/v1":"0344bc1b4d99be1568309ec19ce0581cfe2a704e89b584301be8152e573e6f89"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: registry/inspector_ws.rs: FileTooLong \u2014 626 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 80% of them inside a single declaration: RegistryDispatcher (165-853). The bar is 500 significant lines; this is 126 over it, 1.25\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/inspector_ws.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"05c037720cd685092fd2d3bde938170c81662458a7a897cb739febdb92e1ef40"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/remote_manager.rs: FileTooLong \u2014 622 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 82% of them inside a single declaration: RemoteManager (2 blocks, 34-837). The bar is 500 significant lines; this is 122 over it, 1.24\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":"rivetkit-rust/packages/client/src/remote_manager.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb65737fa6389206ec5bbaec5dbf999d8fb96692a57c40d638a0041e63aca9d9"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: rivet_guard::routing::pegboard_gateway::handle_actor_v1: FunctionTooLong \u2014 rivet_guard::routing::pegboard_gateway::handle_actor_v1 runs 124 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 24 over it, 1.24\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/guard/src/routing/pegboard_gateway/mod.rs"},"region":{"startLine":809}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2fbce85d8736a9a49c39ccf0abfa6a71fba23f9cafcf66cde05cd4a85387c48"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard::workflows::actor2::runtime::handle_stopped: FunctionTooLong \u2014 pegboard::workflows::actor2::runtime::handle_stopped runs 124 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 24 over it, 1.24\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor2/runtime.rs"},"region":{"startLine":558}}}],"partialFingerprints":{"codehealthFindingId/v1":"e69005cff43cd558bf04752d0d5959ee10879076646b1eb3880286f294631543"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: RegistryDispatcher.process_inspector_websocket_message: MethodTooLong \u2014 process_inspector_websocket_message runs 124 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 24 over it, 1.24\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/inspector_ws.rs"},"region":{"startLine":514}}}],"partialFingerprints":{"codehealthFindingId/v1":"a709b4ab86c9c7963e70d3796211f4002e332e52399b9d50032a814430c36d41"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DatabaseKv: TooManyMethods \u2014 37 methods, declared across 3 files: kv/repair.rs (23), kv/mod.rs (8), kv/debug.rs (6). The bar is 30 methods; this is 7 over it, 1.23\u00D7 the bar. That list is where to read them, not a suggestion to split the file: the members belong to the type wherever they are declared, so moving them between files leaves the count unchanged. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/mod.rs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"1584a8b6edc22335b792ba77165cf0b168cd242d1b9f7c8215fbf4e408dd1fe2"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ActorContextHandleAdapter: TooManyMethods \u2014 37 methods. The bar is 30 methods; this is 7 over it, 1.23\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/registry/native.ts"},"region":{"startLine":2718}}}],"partialFingerprints":{"codehealthFindingId/v1":"796ae3249179ae9091acb2ac20b6b86367e800b75f5ceb340169c0ae61fe1343"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/tunnel.rs: FileTooLong \u2014 615 significant 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 115 over it, 1.23\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/tunnel.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f54bc4c92a56b3b6b81515486c8afb6d273879c0d21a2ffaddbb7a8ee018017f"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: WorkflowCtx.listen_n_until: MethodTooLong \u2014 listen_n_until 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":"engine/packages/gasoline/src/ctx/workflow.rs"},"region":{"startLine":929}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc62cb48ff8860129d88cbcd6cf990314c614f5972e796eb208cdcb1d68a6257"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/registry.rs: FileTooLong \u2014 612 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 61% of them inside a single declaration: CoreRegistry (2 blocks, 128-699). The bar is 500 significant lines; this is 112 over it, 1.22\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":"rivetkit-typescript/packages/rivetkit-napi/src/registry.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"db3b2acf5c925e5a3bf116953d95ee97b375be76c75ecfaeeca70dd80e32d155"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/recovery.rs: FileTooLong \u2014 611 significant 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 111 over it, 1.22\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/recovery.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"34042fbe70dd912b5a66a888d6e160dc5fb6ffc3c68c90ec77c2bf195832c294"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: VacuumRepairOpts.execute: MethodTooLong \u2014 execute runs 122 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 22 over it, 1.22\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/engine/src/commands/depot.rs"},"region":{"startLine":467}}}],"partialFingerprints":{"codehealthFindingId/v1":"48c12765d30dffc2ccbd38e30996af73ca9589c763e874b6c727476c7fecd6d2"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: rivet_engine::commands::depot_transfer::collect_layout: FunctionTooLong \u2014 rivet_engine::commands::depot_transfer::collect_layout runs 122 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 22 over it, 1.22\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/engine/src/commands/depot_transfer.rs"},"region":{"startLine":482}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd4e3eacf14dd4bc7a87662579ece9d30b6f516ede56ea1dd6e9eb246952f375"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: DatabaseKv.apply_plan: MethodTooLong \u2014 apply_plan runs 122 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 22 over it, 1.22\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/repair.rs"},"region":{"startLine":2130}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8456d88ff0643020190fdd924e60d16a18fc215a2a1311eb769683bc67ea91f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/worker.rs: FileTooLong \u2014 606 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 106 over it, 1.21\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot-client/src/worker.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0560bad89f84541a5f792ddff8a118975225e90347f271e8f87400a2587567f1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: transport/v1.ts: FileTooLong \u2014 601 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 101 over it, 1.20\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/bare/transport/v1.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2039416e3d6215aedb0694247ec28c8f3b7fa4895aa768dbce0483654f96ac4e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ActorConnRaw: TooManyMethods \u2014 36 methods. The bar is 30 methods; this is 6 over it, 1.20\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":"rivetkit-typescript/packages/rivetkit/src/client/actor-conn.ts"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"501df451f542a26b44dda36180919820259224493807ea0c1ecd72c93508fdd0"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Db.commit_stage_segment: MethodTooLong \u2014 commit_stage_segment runs 120 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 20 over it, 1.20\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/conveyer/commit/stage.rs"},"region":{"startLine":209}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ab297e81a66abc259053a4a0eba394b18e9efa9c09c9fcf6c771d6bdd69a8ab"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: depot::doctor::build_sequential_replay: FunctionTooLong \u2014 depot::doctor::build_sequential_replay runs 119 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 19 over it, 1.19\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/doctor.rs"},"region":{"startLine":1662}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6e005544a9c513ec60d54e42237e37ebdae211d20f3b50a953588bab63db78f"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: DatabaseKv.prune_workflow_history_inner: MethodTooLong \u2014 prune_workflow_history_inner runs 119 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 19 over it, 1.19\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/debug.rs"},"region":{"startLine":1910}}}],"partialFingerprints":{"codehealthFindingId/v1":"478c1949ae4d68b6f1adf8f22ccafb49bdab6e420b5f0da298448a6567285b49"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: PegboardGateway3.handle_websocket_hibernation: MethodTooLong \u2014 handle_websocket_hibernation runs 119 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 19 over it, 1.19\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway3/src/lib.rs"},"region":{"startLine":751}}}],"partialFingerprints":{"codehealthFindingId/v1":"cdff23b0ef25f6d87d46333471a8ffa51efbc909c24376dfe48818f2ae6cc3a2"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ActorContext.take_due_schedule_dispatches: MethodTooLong \u2014 take_due_schedule_dispatches runs 119 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 19 over it, 1.19\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/schedule.rs"},"region":{"startLine":593}}}],"partialFingerprints":{"codehealthFindingId/v1":"40b351a5c565fc7dff18a0a67153dacf927a0b7a41894bf7d13ac0eea947376d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: actors/dispatcher.ts: FileTooLong \u2014 591 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 91 over it, 1.18\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"integrations/workflow-world/src/actors/dispatcher.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d700bda67cbb51f621be412231720d5d4fe296b84f6b5ab3b2bfd3b6ee2cad05"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: WorkflowCtx.run_activity: MethodTooLong \u2014 run_activity runs 118 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 18 over it, 1.18\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/ctx/workflow.rs"},"region":{"startLine":295}}}],"partialFingerprints":{"codehealthFindingId/v1":"80e1523f8675d3524e8ad38e4ef0c1ab071a67f07e168169b96b0ff172b4eb01"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard::ops::runner::list_for_ns::pegboard_runner_list_for_ns: FunctionTooLong \u2014 pegboard::ops::runner::list_for_ns::pegboard_runner_list_for_ns runs 118 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 18 over it, 1.18\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/ops/runner/list_for_ns.rs"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc4e613c9954be7af56519150dbd23bb823d117310b4f5f319073a192fb860c4"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: depot::compaction::shared::read_stale_pidx_chunk: FunctionTooLong \u2014 depot::compaction::shared::read_stale_pidx_chunk runs 117 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 17 over it, 1.17\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/compaction/shared.rs"},"region":{"startLine":1766}}}],"partialFingerprints":{"codehealthFindingId/v1":"652fe2885f14147e12536aa65b45baa35b0eaeab54326adc4913c07144fea0f7"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: depot::doctor::build_mirrored_resolver_image: FunctionTooLong \u2014 depot::doctor::build_mirrored_resolver_image runs 117 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 17 over it, 1.17\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/doctor.rs"},"region":{"startLine":1929}}}],"partialFingerprints":{"codehealthFindingId/v1":"f085ab0522b5fd5dcc545021f8e51be855795e85d89811ff8b8e481c4323ed87"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard::ops::envoy::expire::expire_with_pools: FunctionTooLong \u2014 pegboard::ops::envoy::expire::expire_with_pools runs 117 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 17 over it, 1.17\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/ops/envoy/expire.rs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"96f8965974fa7857ed0c0bff98682dc503083b9e58f7287d3ca4b106787a4dbc"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard::workflows::runner2::init: FunctionTooLong \u2014 pegboard::workflows::runner2::init runs 117 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 17 over it, 1.17\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/runner2.rs"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5c5a3b1a0ace7c8a7e95c853844902d052308c97e24c90a53b214e712f398cd"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Tunnel.restoreHibernatingRequests: MethodTooLong \u2014 restoreHibernatingRequests runs 117 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 17 over it, 1.17\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/engine-runner/src/tunnel.ts"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f8b520ecf4871b4b12576ef1c3024e38cf9a06f35353c7945e969be713b5c70"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/event.rs: FileTooLong \u2014 582 significant 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 82 over it, 1.16\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit/src/event.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbfb00a1ec3c82eecccc60e16ef2ba9bfc4d1badecf4fe14e2262dca6acdf6a2"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: DatabaseKv.publish_metrics: MethodTooLong \u2014 publish_metrics runs 116 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 16 over it, 1.16\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/mod.rs"},"region":{"startLine":676}}}],"partialFingerprints":{"codehealthFindingId/v1":"799d2012446a58daa1090d1eab8d8836234cb1a90139ee1e9f7f17fa0e2b41b4"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard_envoy::conn::claim_registration: FunctionTooLong \u2014 pegboard_envoy::conn::claim_registration runs 116 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 16 over it, 1.16\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-envoy/src/conn.rs"},"region":{"startLine":364}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac81287f6f407d08ec8d96d376738886eb6f9da1368360baf0d4abc805c41c6e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: scripts/compaction_backlog.py: FileTooLong \u2014 577 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 77 over it, 1.15\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/scripts/compaction_backlog.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"16dac29db29983db92a2b30137eba857df6917ff7612f77b6f716c11bb79ced8"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: depot::compaction::companion::run_reclaim_job: FunctionTooLong \u2014 depot::compaction::companion::run_reclaim_job runs 115 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 15 over it, 1.15\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/compaction/companion.rs"},"region":{"startLine":485}}}],"partialFingerprints":{"codehealthFindingId/v1":"90eb12181d6e0c450b35a4adb40cb4f462d35a6a245bc969fa03f1e607148c39"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: epoxy::replica::message_request::message_request_inner: FunctionTooLong \u2014 epoxy::replica::message_request::message_request_inner runs 115 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 15 over it, 1.15\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/epoxy/src/replica/message_request.rs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fe446ff48de3387138dbaaee37ab7c4b537e9aa73d86c19f418a9b11fbad5ef"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard_envoy::ws_to_tunnel_task::handle_kv_request: FunctionTooLong \u2014 pegboard_envoy::ws_to_tunnel_task::handle_kv_request runs 115 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 15 over it, 1.15\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs"},"region":{"startLine":938}}}],"partialFingerprints":{"codehealthFindingId/v1":"9499f0bd8110edeee81ce3099c210b3eff30e0ba747344ba61ecfcdc1e5d2e84"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Tunnel.restoreHibernatingRequests: MethodTooLong \u2014 restoreHibernatingRequests runs 115 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 15 over it, 1.15\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/typescript/runner/src/tunnel.ts"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc269c22f69b0ce45e0f440304f0eaaebbc3759a8f9924f851f9598f16c850c3"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/serverless.rs: FileTooLong \u2014 571 significant 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 71 over it, 1.14\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/serverless.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"95221b5cff9a02e9f0b08cb467abc824ff5592957ac28e09b6ea3608af2aed88"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: DatabaseKv.get_workflows_inner: MethodTooLong \u2014 get_workflows_inner runs 114 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 14 over it, 1.14\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/debug.rs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"c663025328f08532c3aa86b548b69051d94149e73eaae4f7aac0ded1ed0330ec"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: DatabaseKv.upsert_workflow_loop_event: MethodTooLong \u2014 upsert_workflow_loop_event runs 114 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 14 over it, 1.14\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/mod.rs"},"region":{"startLine":3129}}}],"partialFingerprints":{"codehealthFindingId/v1":"96b8e2386725cff741b5dad509fcdc1e8fb73741d95111e15b7d1f327b2cb391"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard::ops::actor::list_for_ns::pegboard_actor_list_for_ns: FunctionTooLong \u2014 pegboard::ops::actor::list_for_ns::pegboard_actor_list_for_ns runs 114 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 14 over it, 1.14\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/ops/actor/list_for_ns.rs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1ef8130ee168126aa624f21f2bb50247a2b27772440ce9a09d8b20ddfa59b8c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/envoy.rs: FileTooLong \u2014 569 significant 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 69 over it, 1.14\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/envoy.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f22c0bad97d6237f4f0c2cf0ced9c574b144435ce949ec827957a6ef328232fc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/convert.rs: FileTooLong \u2014 569 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 80 free functions. The bar is 500 significant lines; this is 69 over it, 1.14\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/epoxy-protocol/src/convert.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a0da3985a93cfa566caaa361b984d30138d0ed1cdb9158b6cac422cea004af8"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: docs/gen-api-reference.mjs: FileTooLong \u2014 567 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 67 over it, 1.13\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/docs/gen-api-reference.mjs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"33233baaa76560888860e5c28f18201c136b86b202d101d565b84d8e83f97308"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Opts.execute: MethodTooLong \u2014 execute runs 113 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 13 over it, 1.13\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/cli/src/commands/deploy.rs"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"d648df345473b3e5536f7ed8df6163cba2327ef49f46b0e3676660ce279b57e2"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: rivet_guard::routing::create_routing_function: FunctionTooLong \u2014 rivet_guard::routing::create_routing_function runs 113 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 13 over it, 1.13\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/guard/src/routing/mod.rs"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf86f5b9a4352dc2c20a79a3d46f4c8a19fb9029459cab56de476251f77df57a"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: PegboardGateway.handle_request_inner: MethodTooLong \u2014 handle_request_inner runs 113 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 13 over it, 1.13\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/lib.rs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba8de1b6e70b52774f95f059642c89256675201fdd2dd10c789b6d81d7009323"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: rivet_envoy_client::tunnel::handle_request_start: FunctionTooLong \u2014 rivet_envoy_client::tunnel::handle_request_start runs 113 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 13 over it, 1.13\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/tunnel.rs"},"region":{"startLine":330}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6279ae2b9e7bc974ed14259bb803bbd9ff395edd5862de9a8acf926cf8624c9"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: rivet_engine::commands::wf::repair::execute: FunctionTooLong \u2014 rivet_engine::commands::wf::repair::execute runs 112 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 12 over it, 1.12\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/engine/src/commands/wf/repair.rs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac8840fea73943fc2345d1e935ff51b3520f9c5037eed7f2446c4d7648917e04"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard_envoy::ws_to_tunnel_task::handle_tunnel_message: FunctionTooLong \u2014 pegboard_envoy::ws_to_tunnel_task::handle_tunnel_message runs 112 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 12 over it, 1.12\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs"},"region":{"startLine":1418}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c27c6ca860d8633d915ac7c7454158ac1c5008c44eb503305436bfd190226f1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/index.ts: FileTooLong \u2014 557 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 57 over it, 1.11\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/skill-evals/src/index.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"50341b2ad23ae692bc4a2ee017bac834fa0e9a29b81693c9cc3e1b4186f465db"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/index.ts: FileTooLong \u2014 555 significant lines (blank, comment-only and punctuation-only lines excluded), about 68% of them inside a single declaration: RivetClientWorld (251-779). The bar is 500 significant lines; this is 55 over it, 1.11\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"integrations/workflow-world/src/index.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2a179ad64d3ac8b7189ae5a4402fd78c63d189ecf8a7566bd15945fd3441b91"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: depot::doctor::detect_unsupported: FunctionTooLong \u2014 depot::doctor::detect_unsupported runs 111 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 11 over it, 1.11\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/doctor.rs"},"region":{"startLine":1007}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d910d7dfcddaaf9dd43da092f0b427ce3ba257b8ddf11ac86a8516b0cf94483"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard_outbound::handle: FunctionTooLong \u2014 pegboard_outbound::handle runs 111 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 11 over it, 1.11\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-outbound/src/lib.rs"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0ad03c6c9331a92711056c87666bcb39c24e3fb054976d75fb6ad47cc1c12b9"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: mod.getOrCreateActor: FunctionTooLong \u2014 getOrCreateActor runs 111 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 11 over it, 1.11\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/framework-base/src/mod.ts"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"73fa966e0e1c63e9b58b77099be713f66215ffb8a1423600efe4ca4bd2c9e180"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: depot::workflows::db_manager::refresh_manager: FunctionTooLong \u2014 depot::workflows::db_manager::refresh_manager runs 110 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 10 over it, 1.10\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/workflows/db_manager.rs"},"region":{"startLine":928}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9c65ed93dcb33c094fbb5936ee34544be734dc01e00d0d4e08347627a0f5e0c"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: depot::workflows::db_reclaimer::plan_reclaim_slice_tx: FunctionTooLong \u2014 depot::workflows::db_reclaimer::plan_reclaim_slice_tx runs 110 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 10 over it, 1.10\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/workflows/db_reclaimer.rs"},"region":{"startLine":413}}}],"partialFingerprints":{"codehealthFindingId/v1":"ceba496cc628713f8fe986c9e29286c4ae4fe8209ff5998103bcab15ef04b776"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard::workflows::runner_pool::pegboard_runner_pool2: FunctionTooLong \u2014 pegboard::workflows::runner_pool::pegboard_runner_pool2 runs 110 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 10 over it, 1.10\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/runner_pool.rs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"2dae3ab703abea0c612c0dcc8b70d961fced3fdcce5eafef55f3b9b3d568c747"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ActorContext.apply_state_deltas_inner: MethodTooLong \u2014 apply_state_deltas_inner runs 110 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 10 over it, 1.10\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/state.rs"},"region":{"startLine":585}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7559a07e69a44ca5cc0bcccfb39ace68d1ae96f9eafb73cea26a44db4a1737c"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: DevButton.DevButton: FunctionTooLong \u2014 DevButton runs 110 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 10 over it, 1.10\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/devtools/src/components/DevButton.tsx"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"955b0e6498e05adf279db5827c7b0c90ac301b7413e7a4c1671c9afc798fd7d7"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: JsActorConfig: TooManyFields \u2014 33 stored fields. The bar is 30 stored fields; this is 3 over it, 1.10\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit-napi/src/actor_factory.rs"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"43884e748cf1d5adf7fcfcb51516cdcc392c8f9ccfc39de3a917e7762495d12b"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: SubCommand.execute: MethodTooLong \u2014 execute runs 108 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 8 over it, 1.08\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/engine/src/commands/wf/mod.rs"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1e680bc0c5448f79e0fb22d478c7abd7ac6cdd7c176b2bdf7fdd7b9165ea43d"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: DatabaseKv.commit_workflow: MethodTooLong \u2014 commit_workflow runs 108 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 8 over it, 1.08\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/mod.rs"},"region":{"startLine":2305}}}],"partialFingerprints":{"codehealthFindingId/v1":"71e60be760ad3b909daff3a5b4dbed1f5d993d1e5bee2f56e20464215be584a7"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ToServerMk2.v6_to_v7: MethodTooLong \u2014 v6_to_v7 runs 108 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 8 over it, 1.08\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/runner-protocol/src/versioned.rs"},"region":{"startLine":666}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f2546bbe37f64cdb208b16f2d84c7f200a21be0e931e51974297624f470f954"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ToServerMk2.v7_to_v6: MethodTooLong \u2014 v7_to_v6 runs 108 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 8 over it, 1.08\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/runner-protocol/src/versioned.rs"},"region":{"startLine":833}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5d0b3847be41489eb5768a7fc294abdb8c214226ee9a9d8d3cf8934265a1cc9"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ActorTask.start_actor: MethodTooLong \u2014 start_actor runs 108 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 8 over it, 1.08\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/task.rs"},"region":{"startLine":1177}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d5047856f99f374a4acc490e7cc6bd9970ccee481d146671a476abb4959ed0c"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: rivet_api_public::actors::list::list_inner: FunctionTooLong \u2014 rivet_api_public::actors::list::list_inner runs 107 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 7 over it, 1.07\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-public/src/actors/list.rs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"b873fb0239e1e6bc1c48c47aa322e047ca9c075333b18fc539fabb6815c60964"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: rivet_envoy_client::actor::http::handle_req_start: FunctionTooLong \u2014 rivet_envoy_client::actor::http::handle_req_start runs 107 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 7 over it, 1.07\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/actor/http.rs"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"3172bfc5306c4634b2387017ef3284da74eddcbb025ecae34a0fffba252cc0cb"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: SqliteDb.begin_transaction_profiled_inner: MethodTooLong \u2014 begin_transaction_profiled_inner runs 107 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 7 over it, 1.07\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/tx.rs"},"region":{"startLine":314}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1e7516ee1dffcabd7bb524bd949fa8b0671272b3e3d834d73563fb7f4d98271"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: ws-proxy.createWebSocketProxy: FunctionTooLong \u2014 createWebSocketProxy runs 107 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 7 over it, 1.07\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/engine-client/ws-proxy.ts"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a17e1597a976059fa56307b52b9b3c269f63ae983f95b27b6f181f787fad2a3"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ConnHandle: TooManyMethods \u2014 32 methods. The bar is 30 methods; this is 2 over it, 1.07\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/connection.rs"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"19b2e4e7d70fd3f9d25b3892e810ab213a88485f17903f631fba869ade26389e"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: depot::compaction::shared::read_manager_fdb_snapshot: FunctionTooLong \u2014 depot::compaction::shared::read_manager_fdb_snapshot runs 106 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 6 over it, 1.06\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/compaction/shared.rs"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"17c022e218440d9db73aa2ba30d7c602fb1483f79689ef438be60268c47eb733"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: depot::workflows::db_hot_compactor::plan_hot_slice_tx_inner: FunctionTooLong \u2014 depot::workflows::db_hot_compactor::plan_hot_slice_tx_inner runs 105 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 5 over it, 1.05\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/workflows/db_hot_compactor.rs"},"region":{"startLine":299}}}],"partialFingerprints":{"codehealthFindingId/v1":"d856e20c485714891e1ba5a27186f5e8fcb15d775e8d0bca0e3dc02dc761156a"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: SharedState.receiver: MethodTooLong \u2014 receiver runs 105 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 5 over it, 1.05\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":237}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fcbdd0fe1c0584abb0701db8ad316601c8299078c8e3ea5d46bed520c0483a9"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: SharedState.receiver: MethodTooLong \u2014 receiver runs 105 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 5 over it, 1.05\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway3/src/shared_state.rs"},"region":{"startLine":250}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f493691b3d06ee4adbc0eb45951e8f8725f74e5055087739bdcb97bf9ce0634"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard::workflows::actor2::runtime::allocate: FunctionTooLong \u2014 pegboard::workflows::actor2::runtime::allocate runs 105 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 5 over it, 1.05\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor2/runtime.rs"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"496b825cc937bf35017b9b93feacc445183eb8914221f86ba6c856b0a36644e4"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: EngineProcessManager.start_resolved: MethodTooLong \u2014 start_resolved runs 105 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 5 over it, 1.05\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/engine-process/src/lib.rs"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"4244b1e2c5ebe5a9ca2824e1f919b10c2be2781d38dbd016db2b6f39dd77893c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 523 significant 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 23 over it, 1.05\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-outbound/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d83994bff46a6634fb6835c3cd26d8c988c98a646a1eae72111016770827cc1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: actor/sleep.rs: FileTooLong \u2014 523 significant 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 23 over it, 1.05\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/sleep.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e15a01b4c595bbf3700cb9811f2e2bde3c57c6355797bb8032e935536f542d65"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: compaction/companion.rs: FileTooLong \u2014 520 significant 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 20 over it, 1.04\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/compaction/companion.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac8cd39c5b58e73477fcc5f776fd71aed2d76c0678a4bc33affdd5af80dc1810"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: DatabaseKv.prune_workflows: MethodTooLong \u2014 prune_workflows runs 104 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 4 over it, 1.04\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/debug.rs"},"region":{"startLine":1464}}}],"partialFingerprints":{"codehealthFindingId/v1":"98f3bb0c9472e4de934af7ed8c4d4046c486bb0415a09efa965eee495c922bf7"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: DatabaseKv.prune_signals_inner: MethodTooLong \u2014 prune_signals_inner runs 104 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 4 over it, 1.04\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/debug.rs"},"region":{"startLine":2094}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe7860674b44d262d96bed8a7ad4382937ca6f65403ab37fc373e628115d9b1d"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard::ops::serverless_metadata::fetch::pegboard_serverless_metadata_fetch: FunctionTooLong \u2014 pegboard::ops::serverless_metadata::fetch::pegboard_serverless_metadata_fetch runs 104 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 4 over it, 1.04\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/ops/serverless_metadata/fetch.rs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bfa5a3e6fc4a518e2dfcd2577c5fc3a05dbb47a6851fd48e7ecbdfaafcc8d03"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard::workflows::actor2::listen_for_signals: FunctionTooLong \u2014 pegboard::workflows::actor2::listen_for_signals runs 104 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 4 over it, 1.04\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor2/mod.rs"},"region":{"startLine":469}}}],"partialFingerprints":{"codehealthFindingId/v1":"80ae5445eecfe8b40cfd04f21b0d0b88c756dab09aba4120d5f401e6cb79e141"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: RegistryDispatcher.handle_queue_fetch: MethodTooLong \u2014 handle_queue_fetch runs 104 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 4 over it, 1.04\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/http.rs"},"region":{"startLine":295}}}],"partialFingerprints":{"codehealthFindingId/v1":"72f3759b2991c03cdb2ca1b6dd80656a54b83b0f79351da4b913b112a9135bda"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ActorObservable: TooManyMethods \u2014 31 methods. The bar is 30 methods; this is 1 over it, 1.03\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-swift/Sources/RivetKitSwiftUI/ActorObservable.swift"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"86a5887961b29fb46593c9698e371fc773e6ddf503e921e8e121f531dc40f5df"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: WasmActorConfig: TooManyFields \u2014 31 stored fields. The bar is 30 stored fields; this is 1 over it, 1.03\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit-wasm/src/lib.rs"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"68a739383f25de5bd4e6311d78b2569ef6cdbc5fba1431afb5f9e056ee3ad26f"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: useDraggable.useDraggable: FunctionTooLong \u2014 useDraggable runs 103 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 3 over it, 1.03\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/devtools/src/hooks/useDraggable.ts"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9cd9645d9dca06e2565f10e26ff3d7a71701947712d758ba55aed365cfaa77d"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: cut-release.main: FunctionTooLong \u2014 main runs 103 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 3 over it, 1.03\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/publish/src/local/cut-release.ts"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"26f529b2198de4b9fb7603655038976a8e9b477641020db05af8e48c060c96ea"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: ActorObservable: ClassTooLong \u2014 408 significant lines (blank, comment-only and punctuation-only lines excluded), 31 methods. The bar is 400 significant lines; this is 8 over it, 1.02\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":"rivetkit-swift/Sources/RivetKitSwiftUI/ActorObservable.swift"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"09d55ec8479f6d6ead446f06a4ba5e0481772de5fd653a1ea366d2a86fbef592"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: depot::doctor::build_resolver_image: FunctionTooLong \u2014 depot::doctor::build_resolver_image runs 102 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 2 over it, 1.02\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/doctor.rs"},"region":{"startLine":1806}}}],"partialFingerprints":{"codehealthFindingId/v1":"86f792d39dcf27139fc7e3f81d5d30fb2bfaa08a98804310947dd76179566199"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: depot::recovery::scan_hot_shard_history_corruption: FunctionTooLong \u2014 depot::recovery::scan_hot_shard_history_corruption runs 102 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 2 over it, 1.02\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/recovery.rs"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"5509a486aad64ae4c19970e769daadf42902465a1033a958325df4d4a49992ba"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: depot::workflows::db_hot_compactor::install_hot_job_inner: FunctionTooLong \u2014 depot::workflows::db_hot_compactor::install_hot_job_inner runs 102 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 2 over it, 1.02\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/workflows/db_hot_compactor.rs"},"region":{"startLine":737}}}],"partialFingerprints":{"codehealthFindingId/v1":"4747ed72a2e3934ec4b30db2e4fd364ece055b0b185885e0f1ef5c5b2d11656f"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard::workflows::runner::allocate_pending_actors: FunctionTooLong \u2014 pegboard::workflows::runner::allocate_pending_actors runs 102 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 2 over it, 1.02\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/runner.rs"},"region":{"startLine":976}}}],"partialFingerprints":{"codehealthFindingId/v1":"511783e81ab3b8cf4082630ec79a203c199e13f045fb4dd60e471281cb22591f"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: process.buildProcessActions: FunctionTooLong \u2014 buildProcessActions runs 102 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 2 over it, 1.02\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/agent-os/actor/process.ts"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"dac1eab854d34a9acd0f67b3d47dc85b4c307a6d7d4083822029970f41abf0bd"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/index.ts: FileTooLong \u2014 507 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 7 over it, 1.01\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/mcp-hub/src/index.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f42457f5e1c3bb5779ff12464c1dbd49e518c1376ce1d3df1f57bfecf7707a5c"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: pegboard::workflows::runner::insert_db: FunctionTooLong \u2014 pegboard::workflows::runner::insert_db 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":"engine/packages/pegboard/src/workflows/runner.rs"},"region":{"startLine":512}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1b9b64eeee517004fc0b5ea8c8e8c1c63fb2c20aea8da8017e8b90f908ae6ff"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: RegistryDispatcher: ClassTooLong \u2014 401 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 41 methods, 4 blocks, lines 180-1329. The bar is 400 significant lines; this is 1 over it, 1.00\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/mod.rs"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"a706d4d09f8d79cc0ea68a4e067b373009863f632b44019ce3772c3e0e6d595d"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member family (6 members, 25 shared lines): rivetkit-swift/Sources/RivetKitSwiftUI/ActorObservable.swift:214-241 | rivetkit-swift/Sources/RivetKitSwiftUI/ActorObservable.swift:272-302 | rivetkit-swift/Sources/RivetKitSwiftUI/ActorObservable.swift:304-334 | rivetkit-swift/Sources/RivetKitSwiftUI/ActorObservable.swift:336-371 | rivetkit-swift/Sources/RivetKitSwiftUI/ActorObservable.swift:373-409 | rivetkit-swift/Sources/RivetKitSwiftUI/ActorObservable.swift:412-439 \u2014 These 6 members are variants of one another: a block of 25 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 6 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 6 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-swift/Sources/RivetKitSwiftUI/ActorObservable.swift"},"region":{"startLine":214}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae9b468702d170311838cacc28aa3ff2237113219436d796d85279ef29dfbd70"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member family (6 members, 9 shared lines): engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:150-161 | engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:316-327 | engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:482-493 | engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:648-659 | engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:814-825 | engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:980-991 \u2014 These 6 members are variants of one another: a block of 9 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 6 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 6 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-protocol/src/versioned/mod.rs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"470a4505f800d3b9fdc33402b70a3887b9e19d884d45c68fff326cc9c573fb92"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member family (4 members, 31 shared lines): rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/mod.rs:555-601 | rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/mod.rs:617-670 | rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/mod.rs:686-738 | rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/mod.rs:754-801 \u2014 These 4 members are variants of one another: a block of 31 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":"rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/mod.rs"},"region":{"startLine":555}}}],"partialFingerprints":{"codehealthFindingId/v1":"391d0774eb5866eabff384e63b873ae590184ba91f8e6647381c089d00b8ea18"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member family (3 members, 172 shared lines): engine/packages/pegboard-gateway/src/lib.rs:259-632 | engine/packages/pegboard-gateway2/src/lib.rs:353-935 | engine/packages/pegboard-gateway3/src/lib.rs:125-684 \u2014 These 3 members are variants of one another: a block of 172 lines reported below appears in every one of them, and the pairwise near-duplicate rows they would otherwise produce are collapsed into this row. Read them as one construct written 3 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/lib.rs"},"region":{"startLine":259}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a0756a051af26588f3dff17238a5fbc4f1cc14b71a67c4d538d72c25bf5b8c1"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (201 shared lines): engine/packages/pegboard-gateway2/src/shared_state.rs:600-837 | engine/packages/pegboard-gateway3/src/shared_state.rs:826-1266 \u2014 These two members are variants of one another: 201 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":600}}}],"partialFingerprints":{"codehealthFindingId/v1":"38523e84c14e9f5c889ea042a66f4303113f05daa63642310eb96d8974dc86fd"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (141 shared lines): engine/packages/pegboard-gateway2/src/lib.rs:1055-1245 | engine/packages/pegboard-gateway3/src/lib.rs:755-926 \u2014 These two members are variants of one another: 141 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/lib.rs"},"region":{"startLine":1055}}}],"partialFingerprints":{"codehealthFindingId/v1":"6138b09beb721b36a9a54434c1ab243ef87295fdc82e17d693b94639177263d7"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (83 shared lines): engine/packages/depot/src/workflows/db_reclaimer.rs:155-357 | engine/packages/depot/src/workflows/db_reclaimer.rs:647-947 \u2014 These two members are variants of one another: 83 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/workflows/db_reclaimer.rs"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"dce975cb5904585e746521492ad772252415e271021c36003072e447072054c1"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (83 shared lines): rivetkit-rust/packages/rivetkit-core/src/registry/http.rs:179-293 | rivetkit-rust/packages/rivetkit-core/src/registry/http.rs:300-436 \u2014 These two members are variants of one another: 83 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/http.rs"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"0eaf2c2488f44a63be05e7eba36975fbd9091df2103e8c37150c69c45a4dfde1"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (78 shared lines): engine/packages/pegboard-envoy/src/lib.rs:79-471 | engine/packages/pegboard-runner/src/lib.rs:69-264 \u2014 These two members are variants of one another: 78 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-envoy/src/lib.rs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bf957ed6005b5cdb98469c1f61ea26bee7b8c6c188543640e41404caa2c3bc7"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (70 shared lines): engine/packages/depot-client/src/vfs.rs:2146-2258 | engine/packages/depot-client/src/vfs.rs:2272-2386 \u2014 These two members are variants of one another: 70 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot-client/src/vfs.rs"},"region":{"startLine":2146}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b1938000c87f0758b3da5d6ede5a6dc3bb42c78e53e7c1636d71eb7b8ae4953"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (57 shared lines): engine/packages/pegboard/src/workflows/actor/metrics.rs:211-328 | engine/packages/pegboard/src/workflows/actor2/metrics.rs:202-323 \u2014 These two members are variants of one another: 57 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/metrics.rs"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"01010d7383435360417b480c70fd12afeb00460aca141208994ac3b4fb2139eb"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (56 shared lines): engine/packages/gasoline/src/builder/common/signal.rs:120-236 | engine/packages/gasoline/src/builder/workflow/signal.rs:108-341 \u2014 These two members are variants of one another: 56 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/builder/common/signal.rs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"80b55c275fa1695ed55218ac353119a368a29869bcde38a4f71c0d7f7a23c360"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (31 shared lines): engine/sdks/rust/envoy-client/src/handle.rs:831-864 | engine/sdks/rust/envoy-client/src/handle.rs:870-904 \u2014 These two members are variants of one another: 31 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/handle.rs"},"region":{"startLine":831}}}],"partialFingerprints":{"codehealthFindingId/v1":"adbfa0353d1bd153150f5544a80ab77c910db712cb8555c1bf5093ac8130adac"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (53 corresponding lines): engine/packages/pegboard-gateway2/src/shared_state.rs:513-565 | engine/packages/pegboard-gateway3/src/shared_state.rs:570-622 \u2014 These two members are one piece of code written twice and then edited apart: 53 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":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":513}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f35648dd140c4087385bc7fe9200721ee7427c1c36369ac943cb0c60a476291"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (34 corresponding lines): engine/packages/universaldb/src/driver/postgres/transaction.rs:157-199 | engine/packages/universaldb/src/driver/rocksdb/transaction.rs:181-223 \u2014 These two members are one piece of code written twice and then edited apart: 34 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":"engine/packages/universaldb/src/driver/postgres/transaction.rs"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b978699aa9bf797819ab5ec42f6be60f3dda95c9c0c94cee6752ac46575a57f"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (17 corresponding lines): engine/packages/runner-protocol/src/versioned.rs:1404-1486 | engine/packages/runner-protocol/src/versioned.rs:1746-1823 \u2014 These two members are one piece of code written twice and then edited apart: 17 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":"engine/packages/runner-protocol/src/versioned.rs"},"region":{"startLine":1404}}}],"partialFingerprints":{"codehealthFindingId/v1":"185f8cdfc63e49a76d6cd1ecade5b6c2e5307e9dfc3df80ee034dd2d7d621e37"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (15 corresponding lines): engine/packages/error-macros/src/lib.rs:549-573 | engine/packages/error-macros/src/lib.rs:507-539 \u2014 These two members are one piece of code written twice and then edited apart: 15 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":"engine/packages/error-macros/src/lib.rs"},"region":{"startLine":549}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ee57b421031e2389e35aa14d3fc4e1d3b95d32347ce1d05817bdd8a7b938726"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (12 members, 50\u002B identical tokens): engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:136-148 | engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:302-314 | engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:468-480 | engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:634-646 | engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:800-812 | engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:966-978 | rivetkit-rust/packages/actor-persist/src/versioned.rs:28-38 | rivetkit-rust/packages/client-protocol/src/versioned.rs:27-35 | rivetkit-rust/packages/client-protocol/src/versioned.rs:413-565 | rivetkit-rust/packages/client-protocol/src/versioned.rs:620-628 | rivetkit-rust/packages/inspector-protocol/src/versioned.rs:36-46 | rivetkit-rust/packages/inspector-protocol/src/versioned.rs:323-333 \u2014 These 12 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 12 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 12 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-protocol/src/versioned/mod.rs"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b8c97a0468a0c179312b916dc326caa80bc0e9d7cdffe062f3ca4be4a0c6d2a"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (11 members, 50\u002B identical tokens): engine/packages/depot/src/compaction/shared.rs:3541-3565 | engine/packages/depot/src/compaction/shared.rs:3572-3594 | engine/packages/depot/src/compaction/shared.rs:3636-3659 | engine/packages/depot/src/conveyer/branch/shared.rs:66-84 | engine/packages/depot/src/conveyer/commit/helpers.rs:31-50 | engine/packages/depot/src/conveyer/debug.rs:321-339 | engine/packages/depot/src/conveyer/history_pin.rs:149-167 | engine/packages/depot/src/conveyer/pitr_interval.rs:134-152 | engine/packages/depot/src/conveyer/read/tx.rs:14-34 | engine/packages/depot/src/conveyer/read/tx.rs:52-72 | engine/packages/depot/src/gc/mod.rs:335-353 \u2014 These 11 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 11 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 11 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/compaction/shared.rs"},"region":{"startLine":3541}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdff335f33bdae5a59a051c93edc11e061524c38759aaff64500b384eae1c8cb"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (7 members, 50\u002B identical tokens): engine/packages/gasoline/src/db/kv/keys/history.rs:636-645 | engine/packages/gasoline/src/db/kv/keys/history.rs:752-761 | engine/packages/gasoline/src/db/kv/keys/history.rs:1478-1487 | engine/packages/gasoline/src/db/kv/keys/signal.rs:37-46 | engine/packages/gasoline/src/db/kv/keys/workflow.rs:181-190 | engine/packages/gasoline/src/db/kv/keys/workflow.rs:268-277 | engine/packages/gasoline/src/db/kv/keys/workflow.rs:355-364 \u2014 These 7 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 7 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 7 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/keys/history.rs"},"region":{"startLine":636}}}],"partialFingerprints":{"codehealthFindingId/v1":"773117e7a2596d3775c6b886f6d0f50bdb849a2d7074c2dd48413046aecacf8e"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (7 members, 50\u002B identical tokens): engine/packages/gasoline/src/db/kv/keys/history.rs:1809-1832 | engine/packages/gasoline/src/db/kv/keys/history.rs:1846-1886 | engine/packages/gasoline/src/db/kv/keys/history.rs:1900-1952 | engine/packages/gasoline/src/db/kv/keys/history.rs:1965-2015 | engine/packages/gasoline/src/db/kv/keys/history.rs:2028-2070 | engine/packages/gasoline/src/db/kv/keys/history.rs:2083-2122 | engine/packages/gasoline/src/db/kv/keys/history.rs:2133-2167 \u2014 These 7 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 7 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 7 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/keys/history.rs"},"region":{"startLine":1809}}}],"partialFingerprints":{"codehealthFindingId/v1":"03f0e850282e40a7688dae5370fa6e9ef690206f849649e10e0cc7ca9c2873b2"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (6 members, 50\u002B identical tokens): rivetkit-rust/packages/actor-persist/src/versioned.rs:40-48 | rivetkit-rust/packages/client-protocol/src/versioned.rs:37-45 | rivetkit-rust/packages/client-protocol/src/versioned.rs:426-565 | rivetkit-rust/packages/client-protocol/src/versioned.rs:630-640 | rivetkit-rust/packages/inspector-protocol/src/versioned.rs:48-58 | rivetkit-rust/packages/inspector-protocol/src/versioned.rs:335-345 \u2014 These 6 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 6 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 6 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/actor-persist/src/versioned.rs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"3cba3c14f9bdf0616ffd257c3ed35b9708d732a0496692acbf3d9000b6496925"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (5 members, 50\u002B identical tokens): engine/packages/pegboard-gateway/src/tunnel_to_ws_task.rs:29-107 | engine/packages/pegboard-gateway2/src/hibernation_task.rs:33-128 | engine/packages/pegboard-gateway2/src/tunnel_to_ws_task.rs:31-120 | engine/packages/pegboard-gateway3/src/hibernation_task.rs:33-128 | engine/packages/pegboard-gateway3/src/tunnel_to_ws_task.rs:31-120 \u2014 These 5 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 5 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 5 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/tunnel_to_ws_task.rs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"f24b424375a2ae4dc4658e3875f7e500c5f8fd5af65797262ed404e96e7c9de6"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (5 members, 50\u002B identical tokens): rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift:124-144 | rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift:170-193 | rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift:196-219 | rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift:222-250 | rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift:253-282 \u2014 These 5 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 5 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 5 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a65332374695b687d170ae4544b93d2a7b7945d09b44a958c46d4702eae45ac"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): engine/packages/depot/src/workflows/compaction_backfill.rs:272-291 | engine/packages/epoxy/src/workflows/backfill.rs:192-211 | engine/packages/gasoline-runtime/src/workflows/dead_wf_backfill.rs:90-109 | engine/packages/pegboard/src/workflows/actor_runner_name_selector_backfill.rs:87-106 \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":"engine/packages/depot/src/workflows/compaction_backfill.rs"},"region":{"startLine":272}}}],"partialFingerprints":{"codehealthFindingId/v1":"99de6fddd4d4c33c3f4d0fda8502cdc3bb73ae2b96c1d6bb290396c36ad06991"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): engine/packages/epoxy/src/replica/commit_kv.rs:31-98 | engine/packages/epoxy/src/replica/messages/accept.rs:15-115 | engine/packages/epoxy/src/replica/messages/prepare.rs:15-108 | engine/packages/epoxy/src/replica/messages/read_state.rs:12-77 \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":"engine/packages/epoxy/src/replica/commit_kv.rs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8f76b29e2984f898e9b02f3ddcefa745480322aedefaa457ef90e0c595bdcc0"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): engine/packages/gasoline/src/db/kv/debug.rs:2416-2438 | engine/packages/gasoline/src/db/kv/debug.rs:2444-2468 | engine/packages/gasoline/src/db/kv/debug.rs:2474-2500 | engine/packages/gasoline/src/db/kv/debug.rs:2506-2535 \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":"engine/packages/gasoline/src/db/kv/debug.rs"},"region":{"startLine":2416}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c67f03cec213cc8317654ed0f92abc8332592ca336b30ed2f19f14781848ea1"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): engine/packages/gasoline/src/history/cursor.rs:179-219 | engine/packages/gasoline/src/history/cursor.rs:225-265 | engine/packages/gasoline/src/history/cursor.rs:271-311 | engine/packages/gasoline/src/history/cursor.rs:317-357 \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":"engine/packages/gasoline/src/history/cursor.rs"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bdce112ccfc381d7024e4f382764a734bb3fe1f34bf3e812eb54c16b2a924ed"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): engine/packages/gasoline/src/history/cursor.rs:359-388 | engine/packages/gasoline/src/history/cursor.rs:390-419 | engine/packages/gasoline/src/history/cursor.rs:422-451 | engine/packages/gasoline/src/history/cursor.rs:572-601 \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":"engine/packages/gasoline/src/history/cursor.rs"},"region":{"startLine":359}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f471c55c588ab766ccfafdff1a20c0a46c0e7b3f0be34d49c26c77d7c88a842"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): engine/packages/logs/src/unix.rs:64-91 | engine/packages/logs/src/unix.rs:151-177 | engine/packages/logs/src/windows.rs:74-115 | engine/packages/logs/src/windows.rs:175-216 \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":"engine/packages/logs/src/unix.rs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6ffe028e76af6c3fd3d5ead2ec2ee68a8a519b0b4e547895a1427026bc1eeaa"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): engine/packages/universaldb/src/driver/postgres/transaction.rs:223-251 | engine/packages/universaldb/src/driver/postgres/transaction.rs:315-344 | engine/packages/universaldb/src/driver/rocksdb/transaction.rs:247-276 | engine/packages/universaldb/src/driver/rocksdb/transaction.rs:339-369 \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":"engine/packages/universaldb/src/driver/postgres/transaction.rs"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"00e9f5c15aa3a931ca11a2fb9cec327519ad778b6b2e61fb7bae8ff845b5aa64"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift:630-645 | rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift:647-663 | rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift:665-682 | rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift:684-702 \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":"rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift"},"region":{"startLine":630}}}],"partialFingerprints":{"codehealthFindingId/v1":"e69731bccb87d56cc5135099441ad837955585dc636526c28bfe0d86a6f13d6f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (141 lines \u00D7 2): engine/packages/pegboard-gateway2/src/shared_state.rs:239-379 | engine/packages/pegboard-gateway3/src/shared_state.rs:252-392 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebdac6eee042646c49171fb4459ee05e47b20f8620175e24e4df3443f9bead3f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (113 lines \u00D7 2): engine/packages/pegboard-gateway/src/lib.rs:987-1099 | engine/packages/pegboard-gateway2/src/lib.rs:1291-1403 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 19 separate duplicated blocks between them, totalling at least 440 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/lib.rs"},"region":{"startLine":987}}}],"partialFingerprints":{"codehealthFindingId/v1":"91a21bc15ea15e46a4f4b7cf641056e4c0fc5583bb4b72a629c656fdd95ffcd1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (86\u201387 lines \u00D7 2): engine/packages/pegboard-gateway2/src/lib.rs:1132-1218 | engine/packages/pegboard-gateway3/src/lib.rs:834-919 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 34 separate duplicated blocks between them, totalling at least 700 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/lib.rs"},"region":{"startLine":1132}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6461d6a8ca7806805e92768c8ce9f99b50d4c0480d56c2fcbf2435f37b60fc3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (83 lines \u00D7 2): engine/packages/pegboard-gateway2/src/ws_to_tunnel_task.rs:25-107 | engine/packages/pegboard-gateway3/src/ws_to_tunnel_task.rs:25-107 \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":"engine/packages/pegboard-gateway2/src/ws_to_tunnel_task.rs"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8161074ae50d946295aae0e1b9c3f7c52e391e61dd9cc8b9a40d2efee681534"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (70 lines \u00D7 2): engine/packages/pegboard-gateway2/src/tunnel_to_ws_task.rs:37-106 | engine/packages/pegboard-gateway3/src/tunnel_to_ws_task.rs:37-106 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/tunnel_to_ws_task.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/tunnel_to_ws_task.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 111 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/tunnel_to_ws_task.rs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"1044a5412796514e791e5ad41a7e56c8ab5f86832c502927eb02fdf1dad1e113"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (70 lines \u00D7 2): engine/packages/pegboard-gateway2/src/hibernation_task.rs:59-128 | engine/packages/pegboard-gateway3/src/hibernation_task.rs:59-128 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/hibernation_task.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/hibernation_task.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 139 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/hibernation_task.rs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"53378e29ba38ddeb6ca970ae20c2d0d67bae25f1406ec2c494363dac1a6fb51e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (3\u201361 lines \u00D7 3): engine/packages/pegboard-gateway/src/lib.rs:598-600 | engine/packages/pegboard-gateway2/src/lib.rs:875-935 | engine/packages/pegboard-gateway3/src/lib.rs:624-684 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 19 separate duplicated blocks between them, totalling at least 440 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/lib.rs"},"region":{"startLine":598}}}],"partialFingerprints":{"codehealthFindingId/v1":"a987ed658fd645ab71a993814366bf55d1c570c1f80f26d911978c679410bc21"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (49 lines \u00D7 2): engine/packages/pegboard-gateway2/src/lib.rs:672-720 | engine/packages/pegboard-gateway3/src/lib.rs:417-465 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 34 separate duplicated blocks between them, totalling at least 700 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/lib.rs"},"region":{"startLine":672}}}],"partialFingerprints":{"codehealthFindingId/v1":"1538328035477afb5f2a299dcf9c12cea886037c3e5d04591922b02a202e3e4b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (47 lines \u00D7 2): engine/packages/gasoline/src/builder/workflow/signal.rs:195-241 | engine/packages/gasoline/src/builder/workflow/signal.rs:248-294 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/builder/workflow/signal.rs"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"2109cbb915e725b555e5095f0cf6c06f38435a7e1829408ec998bc35f3a9e1b2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (46 lines \u00D7 2): engine/packages/pegboard/src/ops/actor/create.rs:121-166 | engine/packages/pegboard/src/ops/actor/create.rs:189-234 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/ops/actor/create.rs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"d958ed213b749916d3f2be05a593cf6c2531f3e9c67a7b88d7e14ada52b80f43"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (46 lines \u00D7 2): engine/packages/pegboard/src/workflows/runner.rs:386-431 | engine/packages/pegboard/src/workflows/runner2.rs:233-278 \u2014 before extracting anything, compare \u0060engine/packages/pegboard/src/workflows/runner.rs\u0060 and \u0060engine/packages/pegboard/src/workflows/runner2.rs\u0060 as WHOLE FILES: this scan already matched 11 separate duplicated blocks between them, totalling at least 164 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":"engine/packages/pegboard/src/workflows/runner.rs"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"633eceb024603c40484395083e066aebb04c8b2d72c640796ec4b9db2b54b4ff"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (44 lines \u00D7 2): engine/packages/pegboard-gateway2/src/lib.rs:589-632 | engine/packages/pegboard-gateway3/src/lib.rs:335-378 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 34 separate duplicated blocks between them, totalling at least 700 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/lib.rs"},"region":{"startLine":589}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fde2146793cb21abff909811cf6bb8d7960030f594cc1faa109d367fba41194"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (39\u201343 lines \u00D7 2): engine/packages/pegboard/src/ops/envoy/get.rs:81-119 | engine/packages/pegboard/src/ops/runner/get.rs:82-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":"engine/packages/pegboard/src/ops/envoy/get.rs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bb50fe1851a5a32daf7f201664c84add78cd2307f6fd804c08c9ad5c541ff1e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (43 lines \u00D7 2): engine/packages/pegboard-gateway2/src/shared_state.rs:656-698 | engine/packages/pegboard-gateway3/src/shared_state.rs:906-948 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":656}}}],"partialFingerprints":{"codehealthFindingId/v1":"26c61ff7beba9e3071a36033595d1fdc1d256cdd7c303ef9b0d82047dd5b85b5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (39\u201342 lines \u00D7 2): engine/packages/depot-client/src/vfs.rs:2163-2204 | engine/packages/depot-client/src/vfs.rs:2292-2330 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot-client/src/vfs.rs"},"region":{"startLine":2163}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b591c885224e2915d121127500307a57b8be82baae768c50819f51591b37a65"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (42 lines \u00D7 2): engine/packages/pegboard-gateway2/src/shared_state.rs:1395-1436 | engine/packages/pegboard-gateway3/src/shared_state.rs:2346-2387 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":1395}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b770e9306bd34a3af2d6f01c35e8a5396a3d7f3661f087a22ea5f9364fe4285"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (40 lines \u00D7 2): engine/packages/pegboard-gateway2/src/shared_state.rs:864-903 | engine/packages/pegboard-gateway3/src/shared_state.rs:1330-1369 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":864}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1c7aa0f9adac8a2f53b16e080774d98cd3b5a6f819d68189ed3f68589395215"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (40 lines \u00D7 2): engine/packages/pegboard-gateway2/src/shared_state.rs:1193-1232 | engine/packages/pegboard-gateway3/src/shared_state.rs:2112-2151 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":1193}}}],"partialFingerprints":{"codehealthFindingId/v1":"1666a4dbb05e07e6194c96b663f9762867aef14dd6faae5155a4d1adddcfc603"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (38 lines \u00D7 2): engine/packages/pegboard-gateway2/src/shared_state.rs:797-834 | engine/packages/pegboard-gateway3/src/shared_state.rs:1216-1253 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":797}}}],"partialFingerprints":{"codehealthFindingId/v1":"63d7c79da13a6428cd607bf29f0fd8d6b9592a59194701a0554fc0531688e0e2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (36 lines \u00D7 2): engine/packages/pegboard-gateway2/src/lib.rs:724-759 | engine/packages/pegboard-gateway3/src/lib.rs:473-508 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 34 separate duplicated blocks between them, totalling at least 700 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/lib.rs"},"region":{"startLine":724}}}],"partialFingerprints":{"codehealthFindingId/v1":"70db671b5e833a2d2d9260f1e6a4c97e68051242bc6e3064e45b109dfc95f2d6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (34\u201335 lines \u00D7 2): engine/packages/gasoline/src/builder/common/signal.rs:192-225 | engine/packages/gasoline/src/builder/workflow/signal.rs:288-322 \u2014 \u0060engine/packages/gasoline/src/builder/common/signal.rs\u0060 and \u0060engine/packages/gasoline/src/builder/workflow/signal.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 5 separate duplicated blocks between them, totalling at least 89 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/builder/common/signal.rs"},"region":{"startLine":192}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fa776627e3534047f6fff6a0addf9aaa4c6aed426ef5e27a3aa28e5c46bf3a7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (34 lines \u00D7 3): engine/packages/pegboard-gateway/src/keepalive_task.rs:23-56 | engine/packages/pegboard-gateway2/src/keepalive_task.rs:24-57 | engine/packages/pegboard-gateway3/src/keepalive_task.rs:24-57 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/keepalive_task.rs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ca465f4d26fd9b226f36af00f171b5279ac5ebb6e178d9c5afdc8ec99282099"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (34 lines \u00D7 2): engine/packages/pegboard-gateway/src/metrics_task.rs:17-50 | engine/packages/pegboard-gateway2/src/metrics_task.rs:18-51 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway/src/metrics_task.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/metrics_task.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 58 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/metrics_task.rs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c56cc5a00e9d646c010a46001022b9f3e85f3044653b022f7a23afbd1893f3c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (31\u201333 lines \u00D7 2): engine/packages/pegboard-gateway2/src/shared_state.rs:714-744 | engine/packages/pegboard-gateway3/src/shared_state.rs:977-1009 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":714}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ac077f22be4ff048778bd8f0e4e4e33467780f389e41ee00d54f8d8e9c788a5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (31 lines \u00D7 2): engine/packages/logs/src/windows.rs:82-112 | engine/packages/logs/src/windows.rs:183-213 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/logs/src/windows.rs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"b949bf16bb098deb1c5a6ac45f03961bf9c0a94a7dd0c62fc12a7610ed198b06"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (31 lines \u00D7 2): engine/packages/pegboard-gateway2/src/shared_state.rs:933-963 | engine/packages/pegboard-gateway3/src/shared_state.rs:1400-1430 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":933}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6c42e12b16c9e80cce30572d22177e5b619bc3c12710379b4c1d4717946a566"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27\u201329 lines \u00D7 2): engine/packages/gasoline/src/db/kv/repair.rs:1140-1168 | engine/packages/gasoline/src/db/kv/repair.rs:1280-1306 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/repair.rs"},"region":{"startLine":1140}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a02b5b702242ea96864260fbc19caa9a372765de2e1424be0b6c9ee47762661"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16\u201329 lines \u00D7 2): engine/packages/pegboard-outbound/src/lib.rs:425-453 | engine/packages/pegboard/src/workflows/serverless/conn.rs:295-310 \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":"engine/packages/pegboard-outbound/src/lib.rs"},"region":{"startLine":425}}}],"partialFingerprints":{"codehealthFindingId/v1":"7923ba9637111f97b9261478056d11e99ef0bce8353f0ef6c4fa2763d79a1478"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (29 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/actor/queue.rs:446-474 | rivetkit-rust/packages/rivetkit-core/src/actor/queue.rs:497-525 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/queue.rs"},"region":{"startLine":446}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8e805f8f2ac77d52e8a44a5a1f3745e6da849f107b0b3112560a6c9676e3894"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (28 lines \u00D7 3): engine/packages/pegboard-gateway/src/lib.rs:500-527 | engine/packages/pegboard-gateway2/src/lib.rs:772-799 | engine/packages/pegboard-gateway3/src/lib.rs:521-548 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 19 separate duplicated blocks between them, totalling at least 440 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/lib.rs"},"region":{"startLine":500}}}],"partialFingerprints":{"codehealthFindingId/v1":"f22e2d44f5c2f2a90561da1cab8d5bc17c8d6e3e398ca74e35e5722a03382776"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (28 lines \u00D7 2): engine/packages/epoxy/src/ops/propose.rs:399-426 | engine/packages/epoxy/src/ops/propose.rs:459-486 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/epoxy/src/ops/propose.rs"},"region":{"startLine":399}}}],"partialFingerprints":{"codehealthFindingId/v1":"1216b97fc9dbce9437d63c7b65f5509a48a526c646e28ec3308831d27d3cd2a4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (28 lines \u00D7 2): engine/packages/pegboard-gateway2/src/shared_state.rs:967-994 | engine/packages/pegboard-gateway3/src/shared_state.rs:1434-1461 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":967}}}],"partialFingerprints":{"codehealthFindingId/v1":"b29c4a72520aa430d00e24193239719f06034994cbfd82d5383827768d120e6e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (28 lines \u00D7 2): engine/packages/pegboard-gateway2/src/shared_state.rs:1053-1080 | engine/packages/pegboard-gateway3/src/shared_state.rs:1520-1547 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":1053}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbf72ea9f122883fdcba49feaa973433574f7595eeaa36a1dd1968bfb840901c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor/metrics.rs:286-312 | engine/packages/pegboard/src/workflows/actor2/metrics.rs:279-305 \u2014 \u0060engine/packages/pegboard/src/workflows/actor/metrics.rs\u0060 and \u0060engine/packages/pegboard/src/workflows/actor2/metrics.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 8 separate duplicated blocks between them, totalling at least 128 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/metrics.rs"},"region":{"startLine":286}}}],"partialFingerprints":{"codehealthFindingId/v1":"c42f4bccab1f379bc42ec96caeba9423f0c355aa1e4b61b294b82c6e05b50a8d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 2): engine/packages/pegboard-gateway/src/lib.rs:643-669 | engine/packages/pegboard-gateway2/src/lib.rs:952-978 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 19 separate duplicated blocks between them, totalling at least 440 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/lib.rs"},"region":{"startLine":643}}}],"partialFingerprints":{"codehealthFindingId/v1":"508a51882b93f008df219c21fda069987820802f27a6e7e2ec41d154a7839def"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 2): engine/packages/pegboard-gateway2/src/shared_state.rs:627-653 | engine/packages/pegboard-gateway3/src/shared_state.rs:876-902 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":627}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2ac07739c68cec5ba14437b0143b87cfe831c18b096e8d7d20383bca0dcb488"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 2): engine/packages/pegboard-gateway2/src/shared_state.rs:1084-1110 | engine/packages/pegboard-gateway3/src/shared_state.rs:1554-1580 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":1084}}}],"partialFingerprints":{"codehealthFindingId/v1":"78b75fcc8cef51b07839ea5d90e5efb6f8ca25b4038c1fbf17609684f3d24c01"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 2): engine/sdks/rust/envoy-client/src/connection/native.rs:41-67 | engine/sdks/rust/envoy-client/src/connection/wasm.rs:47-73 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/connection/native.rs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"96d586e1b33a61c57a26e0baabed50c10c4303dcabd1f29dc35c0d0fda6d391e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15\u201326 lines \u00D7 2): engine/packages/pegboard-outbound/src/lib.rs:415-440 | engine/packages/pegboard/src/workflows/serverless/conn.rs:259-273 \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":"engine/packages/pegboard-outbound/src/lib.rs"},"region":{"startLine":415}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d4f49f7c1afab14ce4b3e3ab3c234e78cb94a8cee15c68bb237fb9f02017118"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/actor/state.rs:624-649 | rivetkit-rust/packages/rivetkit-core/src/actor/state.rs:747-772 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/state.rs"},"region":{"startLine":624}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc0f734ea0f16bc43329e47a388c7009a5e8cd654ccf3a33994e1610caf75618"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24\u201325 lines \u00D7 3): engine/packages/pegboard-gateway/src/shared_state.rs:420-444 | engine/packages/pegboard-gateway2/src/shared_state.rs:262-285 | engine/packages/pegboard-gateway3/src/shared_state.rs:275-298 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 105 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/shared_state.rs"},"region":{"startLine":420}}}],"partialFingerprints":{"codehealthFindingId/v1":"63a2a1a72f36b0e50707b4f69698dbc07a3b85d034ba23b007ba73cd0d703510"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): engine/packages/engine/src/util/wf/mod.rs:350-374 | engine/packages/engine/src/util/wf/mod.rs:390-414 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/engine/src/util/wf/mod.rs"},"region":{"startLine":350}}}],"partialFingerprints":{"codehealthFindingId/v1":"12e11cc2a7ceae7eb1716441788ac1e145f75e2d8e68f2daa0e785bcb5a2225c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): engine/packages/logs/src/unix.rs:38-62 | engine/packages/logs/src/windows.rs:48-72 \u2014 before extracting anything, compare \u0060engine/packages/logs/src/unix.rs\u0060 and \u0060engine/packages/logs/src/windows.rs\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 126 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":"engine/packages/logs/src/unix.rs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d0968df269abebce3170e221d0fc179e2a6861157d9582bae2d535e035cbb42"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): engine/packages/pegboard-gateway2/src/shared_state.rs:772-796 | engine/packages/pegboard-gateway3/src/shared_state.rs:1173-1197 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":772}}}],"partialFingerprints":{"codehealthFindingId/v1":"084adc8f8212d4016b43432028d9a58b02bd6d1e754c90edf1631d20ba97fd01"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): engine/packages/util/src/throttle.rs:190-214 | engine/packages/util/src/throttle.rs:250-274 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/util/src/throttle.rs"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb59f4d170ff45ba80263aa234eaae8eb2cebb869955c6901e96bee0a605f5af"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): rivetkit-typescript/packages/rivetkit-napi/src/lib.rs:81-105 | rivetkit-typescript/packages/rivetkit-wasm/src/lib.rs:3213-3237 \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":"rivetkit-typescript/packages/rivetkit-napi/src/lib.rs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"ada366399fe5c6f15e0fd9959a246293601ad3e9bd7d83a8d82845be5f23f27a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 3): engine/packages/api-peer/src/actors/kv_get.rs:24-47 | engine/packages/api-peer/src/actors/reschedule.rs:14-37 | engine/packages/api-peer/src/actors/sleep.rs:14-37 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from all 3 call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-peer/src/actors/kv_get.rs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"07bb680d2af5ebe2720c5be4fba070796ae2b60875f782a7ac1d101482404d87"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): engine/packages/depot-client/src/query.rs:143-166 | engine/packages/depot-client/src/query.rs:224-247 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot-client/src/query.rs"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"9dedf21a64a6ac1782fb417f2fdd6bc7ab9b24c99231859ce32b07477c666629"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): engine/packages/pegboard/src/ops/actor/get.rs:46-69 | engine/packages/pegboard/src/ops/actor/list_for_ns.rs:193-216 \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":"engine/packages/pegboard/src/ops/actor/get.rs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"22b40734a417586a06baefcc7b100a439ce4f0d75aff3e13919aea0b38fb6221"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor/metrics.rs:105-128 | engine/packages/pegboard/src/workflows/actor2/metrics.rs:104-127 \u2014 \u0060engine/packages/pegboard/src/workflows/actor/metrics.rs\u0060 and \u0060engine/packages/pegboard/src/workflows/actor2/metrics.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 8 separate duplicated blocks between them, totalling at least 128 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/metrics.rs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"42bedfc54d4541ec64b40a01bdc055c1f1644b5f155e0f76f77434ff263706fd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): engine/packages/pegboard-gateway2/src/hibernation_task.rs:34-57 | engine/packages/pegboard-gateway3/src/hibernation_task.rs:34-57 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/hibernation_task.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/hibernation_task.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 139 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/hibernation_task.rs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba6da305a0225d1b1adf0a4833b80fa814bf52b61ff8ac1461967345aaaff331"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23\u201324 lines \u00D7 2): engine/packages/pegboard-runner/src/tunnel_to_ws_task.rs:103-125 | engine/packages/pegboard-runner/src/tunnel_to_ws_task.rs:199-222 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-runner/src/tunnel_to_ws_task.rs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"331af0636a3e466fab7049275f0447601fb210aeff0e10158cdb8019cf00e384"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/registry/http.rs:180-203 | rivetkit-rust/packages/rivetkit-core/src/registry/http.rs:301-324 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/http.rs"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"82b002041acaa7ec00e28c0fd42971fd9a75dac697a049f48c07ec1e1ae2cde5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 3): engine/packages/pegboard-gateway/src/lib.rs:525-547 | engine/packages/pegboard-gateway2/src/lib.rs:814-836 | engine/packages/pegboard-gateway3/src/lib.rs:563-585 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 19 separate duplicated blocks between them, totalling at least 440 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/lib.rs"},"region":{"startLine":525}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a553bc0f36bc4616ba4d23a0d20085c82c9a70d3f7c8067f8bdb48967a9ca92"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): engine/packages/api-public/src/actors/create.rs:58-80 | engine/packages/api-public/src/actors/get_or_create.rs:66-88 \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":"engine/packages/api-public/src/actors/create.rs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d4420442bb47a91734ded3018458847c9406466628df27b93446ee379f42aed"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): engine/packages/depot/src/workflows/db_reclaimer.rs:311-333 | engine/packages/depot/src/workflows/db_reclaimer.rs:870-892 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/workflows/db_reclaimer.rs"},"region":{"startLine":311}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6ff275405c25cbd8fa6fa6fbee6881155cfd6a5869415cd7b4065f6bc93bff8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): engine/packages/logs/src/unix.rs:127-149 | engine/packages/logs/src/windows.rs:151-173 \u2014 before extracting anything, compare \u0060engine/packages/logs/src/unix.rs\u0060 and \u0060engine/packages/logs/src/windows.rs\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 126 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":"engine/packages/logs/src/unix.rs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc3152a5a15ce470580b158bd816034aa7faf24c92a22fcf1bf3c5a7b2814c58"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor/keys.rs:236-258 | engine/packages/pegboard/src/workflows/actor2/keys.rs:214-236 \u2014 \u0060engine/packages/pegboard/src/workflows/actor/keys.rs\u0060 and \u0060engine/packages/pegboard/src/workflows/actor2/keys.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 5 separate duplicated blocks between them, totalling at least 70 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/keys.rs"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"59a7d87fc5b719bc10654daeb3f8a1d729463f2bc63500723f2d1363eeee825b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22\u201323 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor/runtime.rs:865-887 | engine/packages/pegboard/src/workflows/actor/runtime.rs:1000-1021 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/runtime.rs"},"region":{"startLine":865}}}],"partialFingerprints":{"codehealthFindingId/v1":"777b73dc86b13016b0a01f8bf67a7653a98f5ae89f2fc782b9d44ed70fcfeb45"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22\u201323 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor2/mod.rs:988-1010 | engine/packages/pegboard/src/workflows/actor2/mod.rs:1064-1085 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor2/mod.rs"},"region":{"startLine":988}}}],"partialFingerprints":{"codehealthFindingId/v1":"3aaef5602fddeffefd4a5a52324184f4e9927370fc656fa31e52ce147889a28e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): engine/packages/pegboard-envoy/src/lib.rs:277-299 | engine/packages/pegboard-runner/src/lib.rs:187-209 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-envoy/src/lib.rs\u0060 and \u0060engine/packages/pegboard-runner/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 118 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-envoy/src/lib.rs"},"region":{"startLine":277}}}],"partialFingerprints":{"codehealthFindingId/v1":"5cfb505e7bf0adde9eaecb6de45a88c00ee56eb443960f8db888c833f1447dc0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20\u201323 lines \u00D7 2): rivetkit-python/client/src/events/sync/handle.rs:26-45 | rivetkit-python/client/src/simple/sync/handle.rs:48-70 \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":"rivetkit-python/client/src/events/sync/handle.rs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"d630b51919966810118cacd31ef816a30048dd0852770283eb49dda5705d37a0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): rivetkit-typescript/packages/rivetkit-napi/src/actor_factory.rs:1026-1048 | rivetkit-typescript/packages/rivetkit-wasm/src/lib.rs:243-265 \u2014 before extracting anything, compare \u0060rivetkit-typescript/packages/rivetkit-napi/src/actor_factory.rs\u0060 and \u0060rivetkit-typescript/packages/rivetkit-wasm/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 56 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit-napi/src/actor_factory.rs"},"region":{"startLine":1026}}}],"partialFingerprints":{"codehealthFindingId/v1":"17fea51b0a4b18e1520ebfc6221f2339ab634f7512794ff755eda721da18dd9e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): engine/packages/depot-client/src/query.rs:317-338 | engine/packages/depot-client/src/query.rs:395-416 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot-client/src/query.rs"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"13cafd180bb7cfd10cc1bbe6f03cb161df026d1ac2104570155bfcd8661e6930"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20\u201322 lines \u00D7 2): engine/packages/pegboard-gateway2/src/lib.rs:1085-1104 | engine/packages/pegboard-gateway3/src/lib.rs:791-812 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 34 separate duplicated blocks between them, totalling at least 700 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/lib.rs"},"region":{"startLine":1085}}}],"partialFingerprints":{"codehealthFindingId/v1":"9805d891be8fa2ed5e7bdf43362a1d8549bb38a7e3818cc3904fb0f29f7694a7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): engine/packages/pegboard-gateway2/src/shared_state.rs:841-862 | engine/packages/pegboard-gateway3/src/shared_state.rs:1308-1329 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":841}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1f2f7d40f25a79dded83a5c0740f2907c2d48df77a1d6af3a26a1a5dfce68ad"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 3): engine/packages/pegboard-gateway/src/lib.rs:368-388 | engine/packages/pegboard-gateway2/src/lib.rs:594-614 | engine/packages/pegboard-gateway3/src/lib.rs:340-360 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 19 separate duplicated blocks between them, totalling at least 440 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/lib.rs"},"region":{"startLine":368}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1c943436363d748d9c1eff655cd366ec596c87600902bae840ff7c55733bdfe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20\u201321 lines \u00D7 2): engine/packages/pegboard-gateway/src/lib.rs:229-248 | engine/packages/pegboard-gateway2/src/lib.rs:312-332 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 19 separate duplicated blocks between them, totalling at least 440 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/lib.rs"},"region":{"startLine":229}}}],"partialFingerprints":{"codehealthFindingId/v1":"87316697d7d727876ee49afd0137a8543f85f2290e0126f62ebf39ed82092d55"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): engine/packages/pegboard-gateway2/src/shared_state.rs:998-1018 | engine/packages/pegboard-gateway3/src/shared_state.rs:1465-1485 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":998}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8e41ac8e3bb9d2cbcbd5de2a868513c3bdd2920a6964b112cb0ebc24f3352ed"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20\u201321 lines \u00D7 2): engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs:190-210 | engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs:558-577 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"30d945f31aaa0a924f73e3df68babcf654c5763e91dd4cdd754ef32072adb024"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20\u201321 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs:1385-1404 | rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs:1468-1488 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs"},"region":{"startLine":1385}}}],"partialFingerprints":{"codehealthFindingId/v1":"431a150a7f6681fc2f27b14ae31516dedc16c93b32333724f6569da866133615"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19\u201320 lines \u00D7 3): engine/packages/gasoline/src/builder/workflow/signal.rs:171-189 | engine/packages/gasoline/src/builder/workflow/signal.rs:217-236 | engine/packages/gasoline/src/builder/workflow/signal.rs:270-289 \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":"engine/packages/gasoline/src/builder/workflow/signal.rs"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"0896d3821f89e51d12318f37096670e03e213795533f831018717357bd8ec8a0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): engine/packages/api-public/src/envoys.rs:49-68 | engine/packages/api-public/src/runners.rs:50-69 \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":"engine/packages/api-public/src/envoys.rs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"796372b1adbc59ce92f36c541d09fdbd9ca57bd2f33fff525664eed550159a1f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): engine/packages/config/src/lib.rs:294-313 | engine/packages/config/src/lib.rs:319-338 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/config/src/lib.rs"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"e265ec29828185fc36baa5bbcd7eff71aec7ced41c77b5b434faeff4caba4d7d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): engine/packages/depot/src/conveyer/restore_point/resolve.rs:322-341 | engine/packages/depot/src/conveyer/restore_point/resolve.rs:381-400 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/conveyer/restore_point/resolve.rs"},"region":{"startLine":322}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a65b65b771dba89b18c7bcd52b12235a966793a1656da1cab529d9bfeeb7864"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): engine/packages/gasoline/src/db/kv/repair.rs:1559-1578 | engine/packages/gasoline/src/db/kv/repair.rs:1790-1809 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/repair.rs"},"region":{"startLine":1559}}}],"partialFingerprints":{"codehealthFindingId/v1":"e59197d818de7bf5f153e4fc41ab8769c20ed1978da25858d8499283f6f20d7d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17\u201320 lines \u00D7 2): engine/packages/guard-core/src/proxy_service.rs:901-920 | engine/packages/guard-core/src/proxy_service.rs:975-991 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/guard-core/src/proxy_service.rs"},"region":{"startLine":901}}}],"partialFingerprints":{"codehealthFindingId/v1":"947b083d22a67a276fda4068850481b163d9737c3cdb674c30284081dcf38485"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): engine/packages/logs/src/unix.rs:181-200 | engine/packages/logs/src/windows.rs:220-239 \u2014 before extracting anything, compare \u0060engine/packages/logs/src/unix.rs\u0060 and \u0060engine/packages/logs/src/windows.rs\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 126 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":"engine/packages/logs/src/unix.rs"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7862fa9b5525cb016f69c73ac263dd514255b24c9d61882305d68499fcc0045"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17\u201320 lines \u00D7 2): engine/packages/pegboard-envoy/src/lib.rs:251-270 | engine/packages/pegboard-runner/src/lib.rs:167-183 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-envoy/src/lib.rs\u0060 and \u0060engine/packages/pegboard-runner/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 118 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-envoy/src/lib.rs"},"region":{"startLine":251}}}],"partialFingerprints":{"codehealthFindingId/v1":"706442440d2e4cce88c42e4ba466bc409dcc9d571e28b2fb7b38e9bb9b713887"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): engine/packages/pegboard-gateway2/src/lib.rs:1107-1126 | engine/packages/pegboard-gateway3/src/lib.rs:813-832 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 34 separate duplicated blocks between them, totalling at least 700 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/lib.rs"},"region":{"startLine":1107}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ad728760b344ad6e624772e8f3e43cb9cdef490182349bbc9b98d62a66be03c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): engine/packages/pegboard-gateway2/src/shared_state.rs:601-620 | engine/packages/pegboard-gateway3/src/shared_state.rs:827-846 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":601}}}],"partialFingerprints":{"codehealthFindingId/v1":"84c43cdd0a320c638dbac2a0cf2b9e26f2ebd3a33993d852f22cc6701710b8a4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19\u201320 lines \u00D7 2): engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs:374-392 | engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs:402-421 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs"},"region":{"startLine":374}}}],"partialFingerprints":{"codehealthFindingId/v1":"c84c1ede3c1725c5e30c0a55ab137da7b0051c1eb051ef75d7527f048aa5c1ee"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): engine/packages/engine/src/util/wf/mod.rs:239-257 | engine/packages/engine/src/util/wf/mod.rs:438-456 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/engine/src/util/wf/mod.rs"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"0024dba1d6966f0e7868f4b823dfb2ec5e4297680ac4b95a9e4a1daaccaebf4a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): engine/packages/gasoline/src/db/kv/keys/history.rs:2104-2122 | engine/packages/gasoline/src/db/kv/keys/history.rs:2149-2167 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/keys/history.rs"},"region":{"startLine":2104}}}],"partialFingerprints":{"codehealthFindingId/v1":"74650853bcb7e66ca9ba1ad9616207166fca129c61acb610b3a6d00c6bc6e5bf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): engine/packages/logs/src/unix.rs:95-113 | engine/packages/logs/src/windows.rs:119-137 \u2014 before extracting anything, compare \u0060engine/packages/logs/src/unix.rs\u0060 and \u0060engine/packages/logs/src/windows.rs\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 126 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":"engine/packages/logs/src/unix.rs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d20b269ee0cd931ed3e73a3c67346f26141dffb4cbb8c4bc89e658d4e9fa9c1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18\u201319 lines \u00D7 2): engine/packages/pegboard/src/ops/envoy/evict_actors.rs:97-114 | engine/packages/pegboard/src/ops/envoy/evict_actors.rs:117-135 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/ops/envoy/evict_actors.rs"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"b625ea7978779d3566a4f31cbff31ecbd39b3d072dda19494d13d52865a555d4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor/runtime.rs:821-839 | engine/packages/pegboard/src/workflows/actor/runtime.rs:956-974 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/runtime.rs"},"region":{"startLine":821}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0f5f8c92e3364c11e9e10651978b6b7f6b1e0e005885176b904a4b1e82a3a95"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): engine/packages/pegboard/src/workflows/runner.rs:327-345 | engine/packages/pegboard/src/workflows/runner2.rs:138-156 \u2014 before extracting anything, compare \u0060engine/packages/pegboard/src/workflows/runner.rs\u0060 and \u0060engine/packages/pegboard/src/workflows/runner2.rs\u0060 as WHOLE FILES: this scan already matched 11 separate duplicated blocks between them, totalling at least 164 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":"engine/packages/pegboard/src/workflows/runner.rs"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"e55dbb896a25a4cd0af81b358870c33b09692af1f41db5ee85ffa3ebd2c56cca"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17\u201319 lines \u00D7 2): engine/packages/pegboard-envoy/src/actor_event_demuxer.rs:79-97 | engine/packages/pegboard-runner/src/actor_event_demuxer.rs:64-80 \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":"engine/packages/pegboard-envoy/src/actor_event_demuxer.rs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef0a9b4834033f7cb77a0949ae024cc7eef4aac15c91c493a18d8d074c7a9abc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): engine/packages/pegboard-gateway/src/metrics_task.rs:63-81 | engine/packages/pegboard-gateway2/src/metrics_task.rs:63-81 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway/src/metrics_task.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/metrics_task.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 58 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/metrics_task.rs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"788b70f1efe234719613b8d265889587397847dedb6bcbd5a67a81d55e33e7fe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs:248-266 | engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs:316-334 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"c639c33af06d239dda8d44e84341a55830b03be2ece51905f5340d2043948305"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs:613-631 | engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs:679-697 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs"},"region":{"startLine":613}}}],"partialFingerprints":{"codehealthFindingId/v1":"a27078b9b4cbe6c5bcd1b261e4f520ca388ba89385adb73a05a011710d4230ff"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17\u201319 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs:1438-1456 | rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs:1459-1475 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs"},"region":{"startLine":1438}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ce3a991fcd32ad6a8b5fbcdd2e1ff37acea6b4f3b40eec0f4f05f8c44af7231"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 3): engine/packages/pegboard-gateway/src/shared_state.rs:288-305 | engine/packages/pegboard-gateway2/src/shared_state.rs:660-677 | engine/packages/pegboard-gateway3/src/shared_state.rs:910-927 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 105 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/shared_state.rs"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd968d057df6b42cbbcc13ef34afab4a82e2febb118a56575bbdc1f3d703cd25"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 3): engine/packages/pegboard-gateway/src/shared_state.rs:608-625 | engine/packages/pegboard-gateway2/src/shared_state.rs:1032-1049 | engine/packages/pegboard-gateway3/src/shared_state.rs:1499-1516 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 105 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/shared_state.rs"},"region":{"startLine":608}}}],"partialFingerprints":{"codehealthFindingId/v1":"31a84cf41c56cd9cf218b981ee2e4244d0dfc0cf0b235e2dd199447c391103b1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201318 lines \u00D7 2): engine/packages/depot-client/src/worker.rs:557-574 | engine/packages/depot-client/src/worker.rs:618-631 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot-client/src/worker.rs"},"region":{"startLine":557}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3b92a9075fd2973d12d77a2da8442afd39749f29be3462f15a338f60fa79d70"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17\u201318 lines \u00D7 2): engine/packages/gasoline/src/ctx/workflow.rs:381-398 | engine/packages/gasoline/src/ctx/workflow.rs:420-436 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/ctx/workflow.rs"},"region":{"startLine":381}}}],"partialFingerprints":{"codehealthFindingId/v1":"e89ce5b013b385bd55af77bee33f8df51d8d05bab5e8bedc4e8ca7b7d54bcfef"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17\u201318 lines \u00D7 2): engine/packages/guard/src/routing/pegboard_gateway/mod.rs:645-661 | engine/packages/guard/src/routing/pegboard_gateway/mod.rs:898-915 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/guard/src/routing/pegboard_gateway/mod.rs"},"region":{"startLine":645}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae1e97276a04be98020bf121974d0a8e7bc2d3412972df4faa324b76d40b4726"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs:593-610 | engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs:112-129 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs\u0060 and \u0060engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 42 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs"},"region":{"startLine":593}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2d4163b40d1d7c0fd8ed5dedd36818c8c4484d740cd1f31a29b409311e2cace"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): engine/packages/pegboard-gateway2/src/lib.rs:445-462 | engine/packages/pegboard-gateway3/src/lib.rs:189-206 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 34 separate duplicated blocks between them, totalling at least 700 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/lib.rs"},"region":{"startLine":445}}}],"partialFingerprints":{"codehealthFindingId/v1":"bef8b716ff9b91256a8805c0e4fb2e933dfd668557faaf452ea52bdcd8e2031a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): engine/packages/pegboard-gateway2/src/lib.rs:857-874 | engine/packages/pegboard-gateway3/src/lib.rs:606-623 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 34 separate duplicated blocks between them, totalling at least 700 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/lib.rs"},"region":{"startLine":857}}}],"partialFingerprints":{"codehealthFindingId/v1":"87422255580a01386ed88144b7d793ecd663ec65f65091b2431b4d555887f1d1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): engine/packages/runner-protocol/src/versioned.rs:1609-1626 | engine/packages/runner-protocol/src/versioned.rs:1750-1767 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/runner-protocol/src/versioned.rs"},"region":{"startLine":1609}}}],"partialFingerprints":{"codehealthFindingId/v1":"119cd099b5a998a3f00d06dfcdcaeca7d32a2f5e43c776c135c8ead8868bd199"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): rivetkit-rust/packages/client/src/handle.rs:99-116 | rivetkit-rust/packages/client/src/handle.rs:159-176 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/client/src/handle.rs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"f04bed9faaebfcac2838a79dd09a2de2d11ebde820746267e0fd52d9c8d1df69"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17\u201318 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/tx.rs:520-536 | rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/tx.rs:577-594 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/tx.rs"},"region":{"startLine":520}}}],"partialFingerprints":{"codehealthFindingId/v1":"944c44b797c667bccc7e2d4cfa004e6304343cf6629ff5aeb0c573022c8ea747"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/actor/state.rs:401-418 | rivetkit-rust/packages/rivetkit-core/src/actor/state.rs:493-510 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/state.rs"},"region":{"startLine":401}}}],"partialFingerprints":{"codehealthFindingId/v1":"c58cd9bf6b507558e1e48bf6b103da0b6379274adff1ca151b1d5f269d8a3625"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15\u201318 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/actor/state.rs:703-720 | rivetkit-rust/packages/rivetkit-core/src/actor/state.rs:796-810 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/state.rs"},"region":{"startLine":703}}}],"partialFingerprints":{"codehealthFindingId/v1":"29fccc9d29bfecc3d5040ee1f261cfb5126c3d30fdef0d2193b49d0bc32cf2b9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/registry/http.rs:269-286 | rivetkit-rust/packages/rivetkit-core/src/registry/http.rs:407-424 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/http.rs"},"region":{"startLine":269}}}],"partialFingerprints":{"codehealthFindingId/v1":"05b0473fd9ac404efcdc6d04ee609bcc36690bc4ab523ad857f9eff278168bca"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 5): engine/packages/pegboard-envoy/src/lib.rs:280-296 | engine/packages/pegboard-gateway/src/lib.rs:502-518 | engine/packages/pegboard-gateway2/src/lib.rs:774-790 | engine/packages/pegboard-gateway3/src/lib.rs:523-539 | engine/packages/pegboard-runner/src/lib.rs:190-206 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-envoy/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 35 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-envoy/src/lib.rs"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"b039e6d117e2779915acd65fd75d24c0781125102472b103a9a34d8717fe7b7c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 4): rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/mod.rs:580-596 | rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/mod.rs:649-665 | rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/mod.rs:717-733 | rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/mod.rs:780-796 \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":"rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/mod.rs"},"region":{"startLine":580}}}],"partialFingerprints":{"codehealthFindingId/v1":"1683e11ce37e28466b36ff33a139490a5c99c409430ee0bbeb48dea6e02687ec"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 3): engine/packages/gasoline/src/db/kv/repair.rs:829-845 | engine/packages/gasoline/src/db/kv/repair.rs:1563-1579 | engine/packages/gasoline/src/db/kv/repair.rs:1794-1810 \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":"engine/packages/gasoline/src/db/kv/repair.rs"},"region":{"startLine":829}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa87a2c6fb775a6fae0f1fa66ec0c20301125352223b4402c1fa0c47c598e55b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16\u201317 lines \u00D7 3): engine/packages/pegboard/src/workflows/actor/mod.rs:113-128 | engine/packages/pegboard/src/workflows/actor/mod.rs:137-153 | engine/packages/pegboard/src/workflows/actor/mod.rs:204-219 \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":"engine/packages/pegboard/src/workflows/actor/mod.rs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"90f885a41f1e01c0f1b508ae7a2046447445a6cffeb5169fc9aaee53797334ab"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 3): engine/packages/pegboard-gateway/src/ws_to_tunnel_task.rs:55-71 | engine/packages/pegboard-gateway2/src/ws_to_tunnel_task.rs:98-114 | engine/packages/pegboard-gateway3/src/ws_to_tunnel_task.rs:98-114 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/ws_to_tunnel_task.rs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"3750d5ff5d91884704afdf71b9d2fafbbbcdb71cafb1fcf844a0052df8367264"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): engine/packages/api-peer/src/envoys.rs:41-57 | engine/packages/api-peer/src/runners.rs:60-76 \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":"engine/packages/api-peer/src/envoys.rs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a5d4b79d1e1ec673d1e0b099f46fd664d1a3b90515da8d5a984b44a655b7fc0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16\u201317 lines \u00D7 2): engine/packages/pegboard/src/keys/envoy.rs:1321-1337 | engine/packages/pegboard/src/keys/runner.rs:1062-1077 \u2014 before extracting anything, compare \u0060engine/packages/pegboard/src/keys/envoy.rs\u0060 and \u0060engine/packages/pegboard/src/keys/runner.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 43 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/keys/envoy.rs"},"region":{"startLine":1321}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9b0cc6e7c1b42e71ea872c96e76793b1bdc77f809bccfa28ba7dcb4f789c0e0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16\u201317 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor2/mod.rs:536-552 | engine/packages/pegboard/src/workflows/actor2/mod.rs:566-581 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor2/mod.rs"},"region":{"startLine":536}}}],"partialFingerprints":{"codehealthFindingId/v1":"122bf6bef69851a3c5629fb335c6c9c36015be0dc4868bfc159790d5b6f7b45f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): engine/packages/pegboard-gateway2/src/lib.rs:519-535 | engine/packages/pegboard-gateway3/src/lib.rs:265-281 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 34 separate duplicated blocks between them, totalling at least 700 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/lib.rs"},"region":{"startLine":519}}}],"partialFingerprints":{"codehealthFindingId/v1":"2810a740cf20cf62efa5de9a8b83ebce655798e1b8877614f80618457749ca57"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): engine/packages/pegboard-gateway2/src/shared_state.rs:754-770 | engine/packages/pegboard-gateway3/src/shared_state.rs:1135-1151 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":754}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd4129bf8e31ea7c110587bdf505d544804e480795e2c208d1d1ce043e0cbc3c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): engine/packages/pegboard-gateway2/src/hibernation_task.rs:134-150 | engine/packages/pegboard-gateway3/src/hibernation_task.rs:134-150 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/hibernation_task.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/hibernation_task.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 139 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/hibernation_task.rs"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"99668420843618bde37a899059bea7226dd395589cc08bec075fc3182b969c40"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): engine/packages/runner-protocol/src/versioned.rs:468-484 | engine/packages/runner-protocol/src/versioned.rs:837-853 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/runner-protocol/src/versioned.rs"},"region":{"startLine":468}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf3968b286dd5fd3736632fb1717e933d9ceb261162ca27878fc46721755b878"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): engine/packages/universaldb/src/driver/postgres/transaction.rs:235-251 | engine/packages/universaldb/src/driver/postgres/transaction.rs:328-344 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universaldb/src/driver/postgres/transaction.rs"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"8db4d155a9e51dfe5bc23060500e178e5448997a190c5e1d879f5600f84f1315"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): engine/packages/universaldb/src/driver/rocksdb/transaction.rs:260-276 | engine/packages/universaldb/src/driver/rocksdb/transaction.rs:353-369 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universaldb/src/driver/rocksdb/transaction.rs"},"region":{"startLine":260}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ebfa52b11f14d2c6366e240c75deac82b1320b4591b40b7d23a96cae9742d27"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): engine/packages/util/src/throttle.rs:168-184 | engine/packages/util/src/throttle.rs:224-240 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/util/src/throttle.rs"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"8673776d62373a402439e4aed3cabb29daad9ae720c646f8abf601bb783cff99"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/actor/context.rs:1815-1831 | rivetkit-rust/packages/rivetkit-core/src/actor/context.rs:1883-1899 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/context.rs"},"region":{"startLine":1815}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ccbf4d2eca2d37188340c3ee876719a74bfa8a4abb1362799b7ff9d369487ba"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 3): rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs:1422-1437 | rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs:1447-1462 | rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs:1478-1493 \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":"rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs"},"region":{"startLine":1422}}}],"partialFingerprints":{"codehealthFindingId/v1":"b20638ac2b443c2daa805fc016b536a494abce6a33234d5208e0d460a399a107"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): engine/packages/depot/src/doctor.rs:3273-3288 | engine/packages/depot/src/doctor.rs:3324-3339 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/doctor.rs"},"region":{"startLine":3273}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d64303e6e94aebcc6668fdda795150bb50dc3673f02da3233c0992645afa00a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): engine/packages/engine/src/commands/udb/cli.rs:1186-1201 | engine/packages/engine/src/commands/udb/cli.rs:1215-1230 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/engine/src/commands/udb/cli.rs"},"region":{"startLine":1186}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f0f79e76dbd469703fb5c4ef3347b279c74ad448c8f3e9e48d989fad8a0c161"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): engine/packages/epoxy/src/replica/messages/accept.rs:62-77 | engine/packages/epoxy/src/replica/messages/accept.rs:84-99 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/epoxy/src/replica/messages/accept.rs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"67c894c12359837eae6cb9c8eee9569eefa603a9258cd2e2f841f1982485560b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201316 lines \u00D7 2): engine/packages/gasoline/src/builder/common/signal.rs:173-183 | engine/packages/gasoline/src/builder/workflow/signal.rs:235-250 \u2014 \u0060engine/packages/gasoline/src/builder/common/signal.rs\u0060 and \u0060engine/packages/gasoline/src/builder/workflow/signal.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 5 separate duplicated blocks between them, totalling at least 89 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/builder/common/signal.rs"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a44742f8f0ca16a5c0fbcfe65b1fc28fbf44472a7517ca331b9f02a0898a883"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15\u201316 lines \u00D7 2): engine/packages/gasoline/src/worker.rs:426-440 | engine/packages/pegboard-outbound/src/lib.rs:58-73 \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":"engine/packages/gasoline/src/worker.rs"},"region":{"startLine":426}}}],"partialFingerprints":{"codehealthFindingId/v1":"8925ebe84c50c846e8e5954c2f364e7b566c77700d9de0208f1e9adf2a4bcccc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15\u201316 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor/keys.rs:73-88 | engine/packages/pegboard/src/workflows/actor/keys.rs:127-141 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/keys.rs"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"b49231e30b42a5b43a1373d86e8c074e3a2b417953fa314545fbc06c0af65ef4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor/metrics.rs:344-359 | engine/packages/pegboard/src/workflows/actor2/metrics.rs:341-356 \u2014 \u0060engine/packages/pegboard/src/workflows/actor/metrics.rs\u0060 and \u0060engine/packages/pegboard/src/workflows/actor2/metrics.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 8 separate duplicated blocks between them, totalling at least 128 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/metrics.rs"},"region":{"startLine":344}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ebe9e0eed69b97d0343b7473ad34e2e7ef2fa022201d32b0ce790fe2290d005"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): engine/packages/pegboard/src/workflows/runner.rs:478-493 | engine/packages/pegboard/src/workflows/runner2.rs:451-466 \u2014 before extracting anything, compare \u0060engine/packages/pegboard/src/workflows/runner.rs\u0060 and \u0060engine/packages/pegboard/src/workflows/runner2.rs\u0060 as WHOLE FILES: this scan already matched 11 separate duplicated blocks between them, totalling at least 164 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":"engine/packages/pegboard/src/workflows/runner.rs"},"region":{"startLine":478}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf4e141d7e9060124c4efffc596ad4e960fcd7b74bfb39e19af23da288bcdb2c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): engine/packages/pegboard/src/workflows/runner.rs:714-729 | engine/packages/pegboard/src/workflows/runner2.rs:576-591 \u2014 before extracting anything, compare \u0060engine/packages/pegboard/src/workflows/runner.rs\u0060 and \u0060engine/packages/pegboard/src/workflows/runner2.rs\u0060 as WHOLE FILES: this scan already matched 11 separate duplicated blocks between them, totalling at least 164 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":"engine/packages/pegboard/src/workflows/runner.rs"},"region":{"startLine":714}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9418e50b3a383ea844a8822a0fed2c186ae267e8c4c47cc532d58011bee0859"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): engine/packages/pegboard-envoy/src/actor_event_demuxer.rs:108-123 | engine/packages/pegboard-runner/src/actor_event_demuxer.rs:98-113 \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":"engine/packages/pegboard-envoy/src/actor_event_demuxer.rs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"06627c176f93e25915475ae15d99e8ed2ef69353ff87b01244383ba0a23614be"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): engine/packages/pegboard-gateway2/src/lib.rs:652-667 | engine/packages/pegboard-gateway3/src/lib.rs:398-413 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 34 separate duplicated blocks between them, totalling at least 700 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/lib.rs"},"region":{"startLine":652}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d17751567ac39e0822623152785b5db540c4bdc733afcd05f730477d7b8e730"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): engine/packages/pegboard-gateway2/src/shared_state.rs:84-99 | engine/packages/pegboard-gateway3/src/shared_state.rs:90-105 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"4303b00948e1afccf026a546fe71ac8d4ed96bc140802bfbad1b13805c8e57eb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): engine/packages/pegboard-gateway2/src/shared_state.rs:514-529 | engine/packages/pegboard-gateway3/src/shared_state.rs:571-586 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":514}}}],"partialFingerprints":{"codehealthFindingId/v1":"7cbfbbad22ab9403d13c9ae123d9d970d1f3992018d1a7ae17f1b83f7e0864fd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): engine/packages/pegboard-gateway2/src/shared_state.rs:1119-1134 | engine/packages/pegboard-gateway3/src/shared_state.rs:1597-1612 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":1119}}}],"partialFingerprints":{"codehealthFindingId/v1":"de18691e3f4a7fbf951be42b009278782267baa4647fdc3339e11f2ec9898a46"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): engine/packages/pegboard-gateway3/src/shared_state.rs:694-709 | engine/sdks/rust/envoy-client/src/http.rs:264-279 \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":"engine/packages/pegboard-gateway3/src/shared_state.rs"},"region":{"startLine":694}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb770016baf6f56236a50810646a40fd595bf4298e31008b4679d92369214248"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): engine/sdks/rust/envoy-client/src/actor.rs:670-685 | engine/sdks/rust/envoy-client/src/actor.rs:786-801 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/actor.rs"},"region":{"startLine":670}}}],"partialFingerprints":{"codehealthFindingId/v1":"acbfa8869ff726b40798ab40610b9693fa9529569e5365bcb4d366a70a88ea04"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15\u201316 lines \u00D7 2): rivetkit-rust/packages/engine-process/src/lib.rs:667-681 | rivetkit-rust/packages/engine-process/src/lib.rs:692-707 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/engine-process/src/lib.rs"},"region":{"startLine":667}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c4aa4fdbc70f91fc5ba2d1de221750df50ecb5cfd40b7d446ff1a2c638cf086"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/actor/internal_storage/mod.rs:62-77 | rivetkit-rust/packages/rivetkit-core/src/actor/internal_storage/mod.rs:457-472 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/internal_storage/mod.rs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb9275763f56fe03bf12d1681266a944dd891da0a741b78f1fe2403a0cd0c64b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201316 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/actor/sleep.rs:534-549 | rivetkit-rust/packages/rivetkit-core/src/actor/sleep.rs:551-564 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/sleep.rs"},"region":{"startLine":534}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0f35ab553a34ccdcce8583c76e4dbcdf621d6cdfe8fd275f201b87db2a368b8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/registry/http.rs:223-238 | rivetkit-rust/packages/rivetkit-core/src/registry/http.rs:344-359 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/http.rs"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b6469ebd102436fd0369da5cec14d69666b4d0a1ac5437972c9ebb8ddbb135c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 3): engine/packages/gasoline/src/db/kv/keys/history.rs:24-38 | engine/packages/gasoline/src/db/kv/keys/history.rs:1598-1612 | engine/packages/gasoline/src/db/kv/keys/history.rs:1672-1686 \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":"engine/packages/gasoline/src/db/kv/keys/history.rs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"58e8546a6e96bef407cab9e5026aafd435816277554476ffb6224ecf55163493"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 3): engine/packages/pegboard-gateway/src/lib.rs:563-577 | engine/packages/pegboard-gateway2/src/lib.rs:835-849 | engine/packages/pegboard-gateway3/src/lib.rs:584-598 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 19 separate duplicated blocks between them, totalling at least 440 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/lib.rs"},"region":{"startLine":563}}}],"partialFingerprints":{"codehealthFindingId/v1":"9bddebe1001547498d4d3daa23db09bc69ec7ee95154d6f88f7d9291858232aa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 3): engine/packages/pegboard-gateway/src/lib.rs:618-632 | engine/packages/pegboard-gateway2/src/lib.rs:910-924 | engine/packages/pegboard-gateway3/src/lib.rs:659-673 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 19 separate duplicated blocks between them, totalling at least 440 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/lib.rs"},"region":{"startLine":618}}}],"partialFingerprints":{"codehealthFindingId/v1":"4433cf4d7ff000568092050c16b6a777b3a6fd86efea0ad1fb0bf295d1b6cab0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 3): engine/packages/pegboard-gateway/src/tunnel_to_ws_task.rs:38-52 | engine/packages/pegboard-gateway2/src/hibernation_task.rs:62-76 | engine/packages/pegboard-gateway3/src/hibernation_task.rs:62-76 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/hibernation_task.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/hibernation_task.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 139 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/tunnel_to_ws_task.rs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e86ca13b46f289fddfef2f8feaece57e0b31b06961462a66a2fa9ecda80d89a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 3): engine/packages/pegboard-gateway/src/tunnel_to_ws_task.rs:93-107 | engine/packages/pegboard-gateway2/src/tunnel_to_ws_task.rs:106-120 | engine/packages/pegboard-gateway3/src/tunnel_to_ws_task.rs:106-120 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway/src/tunnel_to_ws_task.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/tunnel_to_ws_task.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 41 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/tunnel_to_ws_task.rs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"c90edae5d5109b782e826cc5e22e3d5bb860053be75fa93243cde816e45fe298"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 3): engine/packages/pegboard-gateway2/src/lib.rs:759-773 | engine/packages/pegboard-gateway3/src/lib.rs:508-522 | engine/packages/pegboard-runner/src/lib.rs:177-191 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 34 separate duplicated blocks between them, totalling at least 700 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/lib.rs"},"region":{"startLine":759}}}],"partialFingerprints":{"codehealthFindingId/v1":"f06faea715266fa2aa9fe2d947bab0111db5a5bdbfda211f86145fdc3e19eae0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): engine/packages/api-builder/src/error_response.rs:40-54 | engine/packages/guard-core/src/utils.rs:437-451 \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":"engine/packages/api-builder/src/error_response.rs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba040ac6c5fd7a4bd8f5de918a2785b317e91997c7e8f1a83277dfa628130997"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): engine/packages/depot/src/conveyer/ltx.rs:174-188 | engine/packages/depot/src/conveyer/ltx.rs:411-425 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/conveyer/ltx.rs"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"12a4817ee6cc1daf67733497446b30112952368e815e2ff04e7145a87fbd075e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): engine/packages/depot/src/workflows/db_reclaimer.rs:264-278 | engine/packages/depot/src/workflows/db_reclaimer.rs:820-834 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/workflows/db_reclaimer.rs"},"region":{"startLine":264}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c7dcf967bf5dae77e9dceff620d015ad309cb947f97b84956f9033e5689c4b9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): engine/packages/epoxy/src/replica/messages/accept.rs:19-33 | engine/packages/epoxy/src/replica/messages/prepare.rs:18-32 \u2014 before extracting anything, compare \u0060engine/packages/epoxy/src/replica/messages/accept.rs\u0060 and \u0060engine/packages/epoxy/src/replica/messages/prepare.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 32 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":"engine/packages/epoxy/src/replica/messages/accept.rs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab106838ea631e826a0c5a0e4e4d37a9925923f836b74c60f6df116c575b5b8e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor/keys.rs:80-94 | engine/packages/pegboard/src/workflows/actor2/keys.rs:75-89 \u2014 \u0060engine/packages/pegboard/src/workflows/actor/keys.rs\u0060 and \u0060engine/packages/pegboard/src/workflows/actor2/keys.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 5 separate duplicated blocks between them, totalling at least 70 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/keys.rs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae2bfc5d7523852357d545f1eb374f4db9ef7848747374b2f6253489f56099ad"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor/metrics.rs:212-226 | engine/packages/pegboard/src/workflows/actor2/metrics.rs:203-217 \u2014 \u0060engine/packages/pegboard/src/workflows/actor/metrics.rs\u0060 and \u0060engine/packages/pegboard/src/workflows/actor2/metrics.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 8 separate duplicated blocks between them, totalling at least 128 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/metrics.rs"},"region":{"startLine":212}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ddfcf247b19d37991878aef3d798ac5ecf11657e1c67e7d9aaadfcb67db916f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor/metrics.rs:314-328 | engine/packages/pegboard/src/workflows/actor2/metrics.rs:309-323 \u2014 \u0060engine/packages/pegboard/src/workflows/actor/metrics.rs\u0060 and \u0060engine/packages/pegboard/src/workflows/actor2/metrics.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 8 separate duplicated blocks between them, totalling at least 128 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/metrics.rs"},"region":{"startLine":314}}}],"partialFingerprints":{"codehealthFindingId/v1":"962135d8b0ea03c0779e06f174b180610e0f6ab28acb4acd3755d5695d3d8724"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201315 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor2/keys.rs:69-83 | engine/packages/pegboard/src/workflows/actor2/keys.rs:123-136 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor2/keys.rs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b2cf22536cb715bd8a9a65823f0c671acd0a8aeae3b910c4a854dba497f7423"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201315 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor2/runtime.rs:489-503 | engine/packages/pegboard/src/workflows/actor2/runtime.rs:677-690 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor2/runtime.rs"},"region":{"startLine":489}}}],"partialFingerprints":{"codehealthFindingId/v1":"875729a2cab41016ac812a1c6ce55a2beb38ff041093d02f342f1ca2f4533a08"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201315 lines \u00D7 2): engine/packages/pegboard-envoy/src/lib.rs:320-334 | engine/packages/pegboard-runner/src/lib.rs:222-235 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-envoy/src/lib.rs\u0060 and \u0060engine/packages/pegboard-runner/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 118 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-envoy/src/lib.rs"},"region":{"startLine":320}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc6c13f23f8508b05e30eb17e5464461d31c56131597d3fee71e92d894b61016"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201315 lines \u00D7 2): engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs:963-974 | engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs:585-599 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs\u0060 and \u0060engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 42 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs"},"region":{"startLine":963}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3aa6e4e8e640cbad476278923917b720cb837957808c992a3c97abf4bc1dc21"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): engine/packages/pegboard-envoy/src/tunnel_to_ws_task.rs:81-95 | engine/packages/pegboard-runner/src/tunnel_to_ws_task.rs:66-80 \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":"engine/packages/pegboard-envoy/src/tunnel_to_ws_task.rs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"950a09f0804e19321df3fb2273e3aff515e74340906e9b24c41dbd972ea2a3ec"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201315 lines \u00D7 2): engine/packages/pegboard-gateway/src/lib.rs:705-714 | engine/packages/pegboard-gateway2/src/lib.rs:1013-1027 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 19 separate duplicated blocks between them, totalling at least 440 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/lib.rs"},"region":{"startLine":705}}}],"partialFingerprints":{"codehealthFindingId/v1":"07ff6300d5de422549e82c7f1bfa17047e4e8960a46b3fc3afaa6bc24439be72"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): engine/packages/pegboard-gateway2/src/lib.rs:354-368 | engine/packages/pegboard-gateway3/src/lib.rs:127-141 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 34 separate duplicated blocks between them, totalling at least 700 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/lib.rs"},"region":{"startLine":354}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bf3f20e11c412ee43f58efef04ed598484a1b24243e485f526985052cb4fdac"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): engine/packages/pegboard-gateway2/src/lib.rs:570-584 | engine/packages/pegboard-gateway3/src/lib.rs:316-330 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 34 separate duplicated blocks between them, totalling at least 700 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/lib.rs"},"region":{"startLine":570}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ded4eba38e9ec872a4840bba802c45df7bb7204d9273d37e401df4e87ef0e25"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): engine/packages/pegboard-gateway2/src/shared_state.rs:916-930 | engine/packages/pegboard-gateway3/src/shared_state.rs:1383-1397 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":916}}}],"partialFingerprints":{"codehealthFindingId/v1":"595033c97a1cc1790c38b8b1e3a389f30d937e38a92025e6161a64a0b236f0b5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): engine/packages/pegboard-gateway2/src/shared_state.rs:1244-1258 | engine/packages/pegboard-gateway3/src/shared_state.rs:2167-2181 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":1244}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab32b13a861acff805eaa1a201d1fe1984bdcaddb008832671f7254934a38044"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): engine/packages/pegboard-gateway2/src/shared_state.rs:1345-1359 | engine/packages/pegboard-gateway3/src/shared_state.rs:2287-2301 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":1345}}}],"partialFingerprints":{"codehealthFindingId/v1":"333732cd9f8d1e01bffe246281cb5f74b6af76cbaa08a4a655d60148e724896e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): engine/packages/pegboard-runner/src/tunnel_to_ws_task.rs:58-72 | engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs:99-113 \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":"engine/packages/pegboard-runner/src/tunnel_to_ws_task.rs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"70e440eb57cad0874cb2f6d1bd38aa3efd72a88fbee272a5fdde67f5e4cc80df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs:1063-1077 | engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs:1084-1098 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs"},"region":{"startLine":1063}}}],"partialFingerprints":{"codehealthFindingId/v1":"9895bc0464e1666358cd16078e216d5953effd967b95699574661b1205dad61b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 4): engine/packages/logs/src/unix.rs:65-78 | engine/packages/logs/src/unix.rs:152-165 | engine/packages/logs/src/windows.rs:75-88 | engine/packages/logs/src/windows.rs:176-189 \u2014 before extracting anything, compare \u0060engine/packages/logs/src/unix.rs\u0060 and \u0060engine/packages/logs/src/windows.rs\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 126 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":"engine/packages/logs/src/unix.rs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a972057835136b991c10df36bb8dab1d1e73b487506079b304fc19317132dd4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 4): engine/packages/pegboard-gateway2/src/shared_state.rs:780-793 | engine/packages/pegboard-gateway2/src/shared_state.rs:815-828 | engine/packages/pegboard-gateway3/src/shared_state.rs:1181-1194 | engine/packages/pegboard-gateway3/src/shared_state.rs:1234-1247 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":780}}}],"partialFingerprints":{"codehealthFindingId/v1":"80a8c096c4d4f1db194ae18090efade6a80d0702dae32973c4c6e3f4e4ef5420"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 4): rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/mod.rs:557-570 | rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/mod.rs:620-633 | rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/mod.rs:689-702 | rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/mod.rs:757-770 \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":"rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/mod.rs"},"region":{"startLine":557}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7d3fc9c4189ad70c576a8531976186be0f4dc18fb16fd0cace8b5c4cea74dee"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): engine/packages/api-public/src/actors/utils.rs:144-157 | engine/packages/guard/src/routing/pegboard_gateway/resolve_actor_query.rs:195-208 \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":"engine/packages/api-public/src/actors/utils.rs"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"8093402fab9068b1f770b64c2406c49176f3f612780eeff2274188df179cf984"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201314 lines \u00D7 2): engine/packages/depot/src/compaction/shared.rs:1777-1790 | engine/packages/depot/src/compaction/shared.rs:1999-2010 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/compaction/shared.rs"},"region":{"startLine":1777}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ba58d0b2a09cb047be425f04ee725f0bf84cb873a6d8035ca941bb2a9f4b580"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): engine/packages/depot/src/conveyer/restore_point.rs:79-92 | engine/packages/depot/src/conveyer/restore_point.rs:103-116 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/conveyer/restore_point.rs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c70c617dcfedc8b44d1800632ca8ccb200976edc38f28b55656f79997fba71c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): engine/packages/gasoline/src/ctx/standalone.rs:88-101 | engine/packages/gasoline/src/ctx/standalone.rs:105-118 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/ctx/standalone.rs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc2d2863988f6da6305f6e4b5f2758c57af396f95cb9491a2fbda1a01ec13d3a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): engine/packages/gasoline/src/db/kv/keys/history.rs:1570-1583 | engine/packages/gasoline/src/db/kv/keys/history.rs:1642-1655 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/keys/history.rs"},"region":{"startLine":1570}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9a5d9680eddceede35f2f22902d22ad85427bb7aecc023725e734f3d48022ec"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): engine/packages/guard/src/routing/pegboard_gateway/mod.rs:225-238 | engine/packages/guard/src/routing/pegboard_gateway/mod.rs:990-1003 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/guard/src/routing/pegboard_gateway/mod.rs"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fe2698e17d684f95dae1a0be5a95d6a90d65650a4a50767da4dee19539cf11e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor/keys.rs:134-147 | engine/packages/pegboard/src/workflows/actor2/keys.rs:129-142 \u2014 \u0060engine/packages/pegboard/src/workflows/actor/keys.rs\u0060 and \u0060engine/packages/pegboard/src/workflows/actor2/keys.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 5 separate duplicated blocks between them, totalling at least 70 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/keys.rs"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e8e1444550da6e0ffde6dd5702d6f3e1d3ccc4ceee8de82985449c25d00eed3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor/mod.rs:231-244 | engine/packages/pegboard/src/workflows/actor/mod.rs:868-881 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/mod.rs"},"region":{"startLine":231}}}],"partialFingerprints":{"codehealthFindingId/v1":"851089bcd4e8d5b7181dde57953dc4bce67bc246c53ea4761d2d7929868a4709"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor/runtime.rs:841-854 | engine/packages/pegboard/src/workflows/actor/runtime.rs:976-989 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/runtime.rs"},"region":{"startLine":841}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7ee3841b23f2bd93c606c9a1cc7d951e523330c8687976fa1e83f77a0fa5ffe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor2/alloc_serverful/newest_ping_timestamp.rs:17-30 | engine/packages/pegboard/src/workflows/actor2/alloc_serverful/random_ping_timestamp.rs:113-126 \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":"engine/packages/pegboard/src/workflows/actor2/alloc_serverful/newest_ping_timestamp.rs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"149398e8f7e002550fb30deec338db6918f4d0ce4074b847a006f138a1b10ca3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): engine/packages/pegboard-gateway2/src/lib.rs:1070-1083 | engine/packages/pegboard-gateway3/src/lib.rs:771-784 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 34 separate duplicated blocks between them, totalling at least 700 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/lib.rs"},"region":{"startLine":1070}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6ac498685ba395e1cadb6d64124dcf8af289114734ba0679c801139d4e86a21"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): engine/packages/pegboard-gateway2/src/shared_state.rs:552-565 | engine/packages/pegboard-gateway3/src/shared_state.rs:609-622 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":552}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1f65714b99e03f58a03709b8ccc4051e8c33c9db32af2dbe8a844dce192007f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): engine/packages/universaldb/src/driver/postgres/transaction.rs:290-303 | engine/packages/universaldb/src/driver/rocksdb/transaction.rs:314-327 \u2014 \u0060engine/packages/universaldb/src/driver/postgres/transaction.rs\u0060 and \u0060engine/packages/universaldb/src/driver/rocksdb/transaction.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 6 separate duplicated blocks between them, totalling at least 53 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universaldb/src/driver/postgres/transaction.rs"},"region":{"startLine":290}}}],"partialFingerprints":{"codehealthFindingId/v1":"5bccab8009a92f62b502f48552bba7632181fc8d1b078eeb7cc02b8b8693f4b5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201314 lines \u00D7 2): engine/packages/universalpubsub/src/driver/memory/mod.rs:50-63 | engine/packages/universalpubsub/src/pubsub.rs:58-68 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universalpubsub/src/driver/memory/mod.rs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"d644cb613681f6e9053b33832b244ad2b4d65d182c80186c553b85f091edb767"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): engine/sdks/rust/envoy-client/src/handle.rs:839-852 | engine/sdks/rust/envoy-client/src/handle.rs:879-892 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/handle.rs"},"region":{"startLine":839}}}],"partialFingerprints":{"codehealthFindingId/v1":"827c38c7cc03716e42220ffffeb6415e06f37bd4bc7aa47a7de0986cd331821a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201314 lines \u00D7 2): rivetkit-rust/packages/client/src/remote_manager.rs:735-748 | rivetkit-rust/packages/client/src/remote_manager.rs:785-796 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/client/src/remote_manager.rs"},"region":{"startLine":735}}}],"partialFingerprints":{"codehealthFindingId/v1":"44e86ab4febaa3fb209509746b10ba0785b61df5b6a1ff1853ef7d34398626a5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/actor/sleep.rs:652-665 | rivetkit-rust/packages/rivetkit-core/src/actor/sleep.rs:734-747 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/sleep.rs"},"region":{"startLine":652}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bbf5d1e795b7fede8e48f8335e89c201cdfa7af5fc0f508f49464addb40f935"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): rivetkit-typescript/packages/rivetkit-napi/src/actor_factory.rs:1101-1114 | rivetkit-typescript/packages/rivetkit-wasm/src/lib.rs:278-291 \u2014 before extracting anything, compare \u0060rivetkit-typescript/packages/rivetkit-napi/src/actor_factory.rs\u0060 and \u0060rivetkit-typescript/packages/rivetkit-wasm/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 56 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit-napi/src/actor_factory.rs"},"region":{"startLine":1101}}}],"partialFingerprints":{"codehealthFindingId/v1":"12b0f213a3ecbf7e5485c0108358547a29c205462798e68702bc146bb3221617"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 5): engine/packages/pegboard/src/workflows/actor/destroy.rs:43-55 | engine/packages/pegboard/src/workflows/actor/mod.rs:1139-1151 | engine/packages/pegboard/src/workflows/actor/runtime.rs:694-706 | engine/packages/pegboard/src/workflows/actor/runtime.rs:784-796 | engine/packages/pegboard/src/workflows/actor/runtime.rs:918-930 \u2014 there are 5 copies across 3 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 5 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/destroy.rs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6c8a51483c7672d9a5ee34cbc2298cfcb53df242a43a5f393227ad297108647"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 5): engine/packages/pegboard-gateway/src/tunnel_to_ws_task.rs:40-51 | engine/packages/pegboard-gateway2/src/hibernation_task.rs:64-75 | engine/packages/pegboard-gateway2/src/tunnel_to_ws_task.rs:43-55 | engine/packages/pegboard-gateway3/src/hibernation_task.rs:64-75 | engine/packages/pegboard-gateway3/src/tunnel_to_ws_task.rs:43-55 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway/src/tunnel_to_ws_task.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/tunnel_to_ws_task.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 41 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/tunnel_to_ws_task.rs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c8d0568997bb2a4ffcad1a0256759067024ac898c11db9bee92f50ea3cfd7b0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 4): engine/packages/pegboard-gateway/src/lib.rs:485-497 | engine/packages/pegboard-gateway2/src/lib.rs:757-769 | engine/packages/pegboard-gateway3/src/lib.rs:506-518 | engine/packages/pegboard-runner/src/lib.rs:175-187 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 19 separate duplicated blocks between them, totalling at least 440 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/lib.rs"},"region":{"startLine":485}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a1842bc81d37e58c2d0f5f8682ae87c8a6033fdfb6e411f9ab2af5d16c0ad87"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 4): rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs:1387-1399 | rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs:1434-1446 | rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs:1455-1467 | rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs:1490-1502 \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":"rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs"},"region":{"startLine":1387}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3ccd470c7d480d9860ac1bf351fa50e48f1a5fc71aea792c226685ae4e06748"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): engine/packages/gasoline/src/builder/common/signal.rs:92-104 | engine/packages/gasoline/src/builder/workflow/signal.rs:80-92 | engine/packages/gasoline/src/builder/workflow/sub_workflow.rs:65-77 \u2014 \u0060engine/packages/gasoline/src/builder/common/signal.rs\u0060 and \u0060engine/packages/gasoline/src/builder/workflow/signal.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 5 separate duplicated blocks between them, totalling at least 89 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/builder/common/signal.rs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c8c29902ff811244b9aa3ec7168ca906f24a96882308a485cff46949fbd9f08"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): engine/packages/pegboard-envoy/src/tunnel_to_ws_task.rs:301-313 | engine/packages/pegboard-gateway2/src/shared_state.rs:69-81 | engine/packages/pegboard-gateway3/src/shared_state.rs:75-87 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-envoy/src/tunnel_to_ws_task.rs"},"region":{"startLine":301}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b375f65d8470412d89f68ff888881e6325c3563e02375c02b315335dacff66a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201313 lines \u00D7 3): engine/packages/pegboard-gateway/src/lib.rs:335-344 | engine/packages/pegboard-gateway2/src/lib.rs:521-533 | engine/packages/pegboard-gateway3/src/lib.rs:267-279 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 19 separate duplicated blocks between them, totalling at least 440 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/lib.rs"},"region":{"startLine":335}}}],"partialFingerprints":{"codehealthFindingId/v1":"b90ea4688e353b67080abdeccf2745dbbebf0cc08e997afd232e7aac9db8ce11"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201313 lines \u00D7 3): engine/packages/pegboard-gateway/src/shared_state.rs:408-418 | engine/packages/pegboard-gateway2/src/shared_state.rs:243-255 | engine/packages/pegboard-gateway3/src/shared_state.rs:256-268 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 105 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/shared_state.rs"},"region":{"startLine":408}}}],"partialFingerprints":{"codehealthFindingId/v1":"e87699230642f181010d53abf994b800ea994af4fbd2b06914484a2ab70553b4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): engine/packages/pegboard-gateway/src/tunnel_to_ws_task.rs:64-76 | engine/packages/pegboard-gateway2/src/tunnel_to_ws_task.rs:74-86 | engine/packages/pegboard-gateway3/src/tunnel_to_ws_task.rs:74-86 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway/src/tunnel_to_ws_task.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/tunnel_to_ws_task.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 41 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/tunnel_to_ws_task.rs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"57f7f1530151bc918c7ba01b86e7a773995ff26487e50e1aa1c6487eb451cb2e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): engine/packages/depot/src/compaction/companion.rs:396-408 | engine/packages/depot/src/compaction/companion.rs:471-483 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/compaction/companion.rs"},"region":{"startLine":396}}}],"partialFingerprints":{"codehealthFindingId/v1":"59415e3bb6726703e083a2eb77d3b83c2f37ecb5172518217e389d39143a4b8c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): engine/packages/depot/src/doctor.rs:2868-2880 | engine/packages/depot/src/doctor.rs:2907-2919 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/doctor.rs"},"region":{"startLine":2868}}}],"partialFingerprints":{"codehealthFindingId/v1":"62013c0f4027a69886aff452aeac7219a2cd353100c03c9c205c3473b4504de0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 2): engine/packages/depot-client/src/query.rs:100-112 | engine/packages/depot-client/src/query.rs:172-183 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot-client/src/query.rs"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f931c16242e3fa29a310b43c87875773527b366b351375206d9a48a4197500d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201313 lines \u00D7 2): engine/packages/depot-client/src/worker.rs:576-588 | engine/packages/depot-client/src/worker.rs:633-643 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot-client/src/worker.rs"},"region":{"startLine":576}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c12c2f2d98b5ffb4eb996286b501a3ffbb85f2f135862fcb01a949e1ac2ddc6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 2): engine/packages/engine/src/commands/wf/repair.rs:217-229 | engine/packages/engine/src/commands/wf/repair.rs:293-304 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/engine/src/commands/wf/repair.rs"},"region":{"startLine":217}}}],"partialFingerprints":{"codehealthFindingId/v1":"61dc1e34cda38e7e55f5c06e73e3104ac534e1399fe03862c33344af66d1f7bd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): engine/packages/error-macros/src/lib.rs:346-358 | engine/packages/error-macros/src/lib.rs:436-448 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/error-macros/src/lib.rs"},"region":{"startLine":346}}}],"partialFingerprints":{"codehealthFindingId/v1":"3624b3784ec26308f0f01fdb1f4ef70f0e7d45d9f12f4bb238ccda5beaf355e2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 2): engine/packages/error-macros/src/lib.rs:516-527 | engine/packages/error-macros/src/lib.rs:553-565 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/error-macros/src/lib.rs"},"region":{"startLine":516}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c00a9569f39eb9d3012e01d41cecb06aea260d81c9c314130e94313be1891fb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): engine/packages/gasoline/src/ctx/workflow.rs:768-780 | engine/packages/gasoline/src/ctx/workflow.rs:1104-1116 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/ctx/workflow.rs"},"region":{"startLine":768}}}],"partialFingerprints":{"codehealthFindingId/v1":"3648e34094458736525d3ff6de91c36b7cbbb74143d48a11ddd719add30b0063"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): engine/packages/pegboard/src/ops/envoy/drain.rs:63-75 | engine/packages/pegboard/src/ops/runner/drain.rs:72-84 \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":"engine/packages/pegboard/src/ops/envoy/drain.rs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"634f0192f99ea1dc1e0b10407470f52828486518dd6f8fb28cb11fad1df46ebf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor/metrics.rs:188-200 | engine/packages/pegboard/src/workflows/actor2/metrics.rs:179-191 \u2014 \u0060engine/packages/pegboard/src/workflows/actor/metrics.rs\u0060 and \u0060engine/packages/pegboard/src/workflows/actor2/metrics.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 8 separate duplicated blocks between them, totalling at least 128 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/metrics.rs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9134daeb090a0f071767eac9521e218b5cb073e7d35cd3bd7ecaf03a2fffa73"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor/runtime.rs:891-903 | engine/packages/pegboard/src/workflows/actor/runtime.rs:943-955 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/runtime.rs"},"region":{"startLine":891}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f716a50c4bfd83f869466314712fe55b2af40195f49e24bbcd1e875a194739b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor/runtime.rs:1412-1424 | engine/packages/pegboard/src/workflows/runner2.rs:934-946 \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":"engine/packages/pegboard/src/workflows/actor/runtime.rs"},"region":{"startLine":1412}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fd709454a93aa09e55b8f76db1eefd9b17e869dbdae99f51763325cdd245531"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor/setup.rs:117-129 | engine/packages/pegboard/src/workflows/actor/setup.rs:224-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":"engine/packages/pegboard/src/workflows/actor/setup.rs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"171a7da471c1cae77d924cd495b6436986e4d66e85a51d081490ef4a484ee574"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor2/mod.rs:723-735 | engine/packages/pegboard/src/workflows/actor2/mod.rs:943-955 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor2/mod.rs"},"region":{"startLine":723}}}],"partialFingerprints":{"codehealthFindingId/v1":"8dc81a088e494f01c9040ef41cde2ecd9483f2f80095d8d0dc2c90b1679560da"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): engine/packages/pegboard/src/workflows/runner.rs:356-368 | engine/packages/pegboard/src/workflows/runner2.rs:174-186 \u2014 before extracting anything, compare \u0060engine/packages/pegboard/src/workflows/runner.rs\u0060 and \u0060engine/packages/pegboard/src/workflows/runner2.rs\u0060 as WHOLE FILES: this scan already matched 11 separate duplicated blocks between them, totalling at least 164 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":"engine/packages/pegboard/src/workflows/runner.rs"},"region":{"startLine":356}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba4c0f537e0de35bc5f4e5c5e710ac43069175216dd9cd3cec4fe000d2664fed"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs:638-650 | engine/sdks/rust/envoy-client/src/connection/mod.rs:332-344 \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":"engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs"},"region":{"startLine":638}}}],"partialFingerprints":{"codehealthFindingId/v1":"e95e4be907ef809ade29b366fc90cd7080f57f45564b81637a53d48709ae31c9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): engine/packages/pegboard-gateway2/src/shared_state.rs:199-211 | engine/packages/pegboard-gateway3/src/shared_state.rs:206-218 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"45b1a4fbc59c4c924cb26b9eddbf56f36c2cc7bf788cdbda97858ecf9736c646"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): engine/packages/pegboard-gateway2/src/shared_state.rs:417-429 | engine/packages/pegboard-gateway3/src/shared_state.rs:452-464 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":417}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ce8423eb33aa88ba1e60195cb1b59dd7149ad905180fec8a5a4b21ff1567e63"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201313 lines \u00D7 2): engine/packages/pegboard-gateway3/src/http_stream/handler.rs:87-96 | engine/packages/pegboard-gateway3/src/lib.rs:140-152 \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":"engine/packages/pegboard-gateway3/src/http_stream/handler.rs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac4cf5dd4335a1b2f0b6e217c6898c1e16651dfb4e49f4eaaa013c320e67c6fd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): engine/packages/universaldb/src/driver/postgres/database.rs:386-398 | engine/packages/universaldb/src/driver/rocksdb/database.rs:126-138 \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":"engine/packages/universaldb/src/driver/postgres/database.rs"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a9ea1bdd036ba93fcce98cb77715662ac4acd47c15a7a015614d9ff7673a66c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): engine/packages/universalpubsub/src/driver/nats/mod.rs:155-167 | engine/packages/universalpubsub/src/driver/nats/mod.rs:195-207 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universalpubsub/src/driver/nats/mod.rs"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"7036ed53ee17ae8995ff69d3bf8f641f8bc15fff2f468f678f87ca92b7fffa0e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201313 lines \u00D7 2): engine/sdks/rust/envoy-client/src/tunnel.rs:280-290 | engine/sdks/rust/envoy-client/src/tunnel.rs:310-322 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/tunnel.rs"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"52ffdeff7352a1ce42c148f12cd395bdf673c2a7d36cf0ab2414adc7b662320b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): rivetkit-python/client/src/events/async/handle.rs:46-58 | rivetkit-python/client/src/simple/async/handle.rs:66-78 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-python/client/src/events/async/handle.rs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"d72cd7ba809d32226c55e05a2ecab7d38752a0906b6b8c674ee361a00ae8890c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/actor/migrate_kv_to_sqlite/mod.rs:244-256 | rivetkit-rust/packages/rivetkit-core/src/actor/migrate_kv_to_sqlite/mod.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":"rivetkit-rust/packages/rivetkit-core/src/actor/migrate_kv_to_sqlite/mod.rs"},"region":{"startLine":244}}}],"partialFingerprints":{"codehealthFindingId/v1":"d214c666348cedb85dc3e3649f5838177ceef43de90c1ab01814747b91497f7b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): rivetkit-typescript/packages/rivetkit-napi/src/actor_factory.rs:976-988 | rivetkit-typescript/packages/rivetkit-wasm/src/lib.rs:3140-3152 \u2014 before extracting anything, compare \u0060rivetkit-typescript/packages/rivetkit-napi/src/actor_factory.rs\u0060 and \u0060rivetkit-typescript/packages/rivetkit-wasm/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 56 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit-napi/src/actor_factory.rs"},"region":{"startLine":976}}}],"partialFingerprints":{"codehealthFindingId/v1":"65a38edd72055cf9421816438e5b34b2fefa25c01cca3c7fa28e5e33cfd59a18"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 4): engine/packages/depot/src/compaction/shared.rs:3543-3554 | engine/packages/depot/src/conveyer/history_pin.rs:151-162 | engine/packages/depot/src/conveyer/pitr_interval.rs:136-147 | engine/packages/depot/src/gc/mod.rs:337-348 \u2014 before extracting anything, compare \u0060engine/packages/depot/src/conveyer/history_pin.rs\u0060 and \u0060engine/packages/depot/src/conveyer/pitr_interval.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 37 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":"engine/packages/depot/src/compaction/shared.rs"},"region":{"startLine":3543}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a3554cb362669df0739ca2adb42108535dd9a9d2cd4ac8e90ad505a4bfcd145"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201312 lines \u00D7 3): engine/packages/api-public/src/actors/create.rs:61-71 | engine/packages/api-public/src/actors/get_or_create.rs:69-79 | engine/packages/api-public/src/runner_configs/refresh_metadata.rs:75-86 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-public/src/actors/create.rs"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"90a12c40fe34a6522ad8ac2b7b7e5ac4e034616cd8a708d329c0d3a9e2d3bc03"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): engine/packages/gasoline-macros/src/lib.rs:75-86 | engine/packages/gasoline-macros/src/lib.rs:143-154 | engine/packages/gasoline-macros/src/lib.rs:213-224 \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":"engine/packages/gasoline-macros/src/lib.rs"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"d75e16033e9e2a158e0257c399b1a58ed72a0b0910538e783622e187861d8f4c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): engine/packages/pegboard-gateway/src/shared_state.rs:146-157 | engine/packages/pegboard-gateway2/src/shared_state.rs:203-214 | engine/packages/pegboard-gateway3/src/shared_state.rs:210-221 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 105 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/shared_state.rs"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd029137600cb07a7e6f6e120937c6ed618b7ba4ba365ca0561940db6f92cb79"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): engine/packages/api-peer/src/actors/reschedule.rs:41-52 | engine/packages/api-peer/src/actors/sleep.rs:41-52 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-peer/src/actors/reschedule.rs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7f2494383d6d89b0713d0afa0b439e2c4c13e52d140549fdbccea0aaa061c76"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): engine/packages/cache/src/req_config.rs:154-165 | engine/packages/cache/src/req_config.rs:266-277 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/cache/src/req_config.rs"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"96ecc48a54f726a8a274e4a9a17e50a603442afcdb2c47f0e680e30d2c36f088"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): engine/packages/cli/src/cloud.rs:181-192 | engine/packages/cli/src/cloud.rs:213-224 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/cli/src/cloud.rs"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"5263af74d9c285a28d3ac2427798e8dcabaed90faad622a265f5cc0c08f6f9bb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): engine/packages/depot-client/src/query.rs:557-568 | engine/packages/depot-client/src/query.rs:601-612 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot-client/src/query.rs"},"region":{"startLine":557}}}],"partialFingerprints":{"codehealthFindingId/v1":"746293e99062a1f8328da3e523d4965e5879631281eedff8d3e81c4dc9818872"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): engine/packages/epoxy/src/workflows/coordinator/replica_status_change.rs:27-38 | engine/packages/epoxy/src/workflows/coordinator/replica_status_change.rs:44-55 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/epoxy/src/workflows/coordinator/replica_status_change.rs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"6573701228b997da2d44e67b2bf96a21ab2716eae95289e05c768eb840a16ab7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): engine/packages/gasoline/src/db/kv/mod.rs:755-766 | engine/packages/gasoline/src/db/kv/mod.rs:769-780 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/mod.rs"},"region":{"startLine":755}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c424f32295c7d1326ba8648511f1793acf07d8c866ff5da23bfc1de19b4dd96"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): engine/packages/gasoline-runtime/src/workflows/pruner.rs:115-126 | engine/packages/gasoline-runtime/src/workflows/pruner.rs:153-164 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline-runtime/src/workflows/pruner.rs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"f75c51526917e738e2bb0d4a9ed80f5f03fe313dfe864f14b3bf9d7f31e763cb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): engine/packages/guard/src/routing/pegboard_gateway/mod.rs:550-561 | engine/packages/guard/src/routing/pegboard_gateway/mod.rs:845-856 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/guard/src/routing/pegboard_gateway/mod.rs"},"region":{"startLine":550}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bdd97e82afb26da6044e9bdd25611d6041b741b4cba3dfd1c2dc5d8c44849e8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): engine/packages/guard-core/src/proxy_service.rs:845-856 | engine/packages/guard-core/src/proxy_service.rs:1032-1043 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/guard-core/src/proxy_service.rs"},"region":{"startLine":845}}}],"partialFingerprints":{"codehealthFindingId/v1":"707636003b334fa57399d6a635723d9bee9fd55b70d617dfe44ea5754bd00942"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): engine/packages/pegboard-gateway2/src/lib.rs:471-482 | engine/packages/pegboard-gateway3/src/lib.rs:216-228 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 34 separate duplicated blocks between them, totalling at least 700 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/lib.rs"},"region":{"startLine":471}}}],"partialFingerprints":{"codehealthFindingId/v1":"06bed58a7964f68c67af3e25824a635d9dd020e4bcd9f2ced3c9b2cfca54fed7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): engine/packages/pegboard-gateway2/src/ping_task.rs:18-29 | engine/packages/pegboard-gateway3/src/ping_task.rs:18-29 \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":"engine/packages/pegboard-gateway2/src/ping_task.rs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"39f5c78c9fccea6fb505f4f4a3eb70cb8a913e8848ea723e0aeece264f288058"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs:289-300 | engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs:654-665 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"58c700032ecc52a6d56bf5495eacd2c8f0e59b5d5de0fb5e03bb35ae748fb81f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): engine/packages/universaldb/src/driver/rocksdb/transaction_task.rs:444-455 | engine/packages/universaldb/src/driver/rocksdb/transaction_task.rs:469-480 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universaldb/src/driver/rocksdb/transaction_task.rs"},"region":{"startLine":444}}}],"partialFingerprints":{"codehealthFindingId/v1":"3717e57b8550ef2677ed710a62372b137728e27d8ef2512b34e7bd75ab3d5821"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): engine/packages/universaldb/src/versionstamp.rs:67-78 | engine/packages/universaldb/src/versionstamp.rs:123-134 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universaldb/src/versionstamp.rs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"c39e61b692e0be82e241b7852846602afeca03c98ceb5ac961ba89336c7bf60d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): engine/sdks/rust/data/src/versioned/namespace_runner_config.rs:157-168 | engine/sdks/rust/data/src/versioned/namespace_runner_config.rs:269-281 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/data/src/versioned/namespace_runner_config.rs"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fbd241467525a05008d5dc91f9579e92aa3cce76df1a34fea13d90f1b5ebb70"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201312 lines \u00D7 2): engine/sdks/rust/envoy-client/src/metrics.rs:187-198 | engine/sdks/rust/envoy-client/src/metrics.rs:216-226 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/metrics.rs"},"region":{"startLine":187}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfd9b7504487ccf7f66167ee10cda82c6601405033293910811eecd1070e735e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): rivetkit-rust/packages/client/src/remote_manager.rs:340-351 | rivetkit-rust/packages/client/src/remote_manager.rs:405-416 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/client/src/remote_manager.rs"},"region":{"startLine":340}}}],"partialFingerprints":{"codehealthFindingId/v1":"c162f6eaaedb3c34439f3216e369a4882cc6496c4af91bbf5b0025dae10de272"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/actor/messages.rs:85-96 | rivetkit-rust/packages/rivetkit-core/src/actor/messages.rs:206-217 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/messages.rs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"f29905c900d9980b9efce6954a87063a45df94d2e0ee66e3c5558ac63d67c5f2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/registry/websocket.rs:151-162 | rivetkit-rust/packages/rivetkit-core/src/registry/websocket.rs:531-542 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/websocket.rs"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ba05de13ce23aa57b6067a831a7e92c22396563cb61a043ba3ee01d49dca151"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): rivetkit-typescript/packages/rivetkit-napi/src/kv.rs:63-74 | rivetkit-typescript/packages/rivetkit-napi/src/kv.rs:85-96 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit-napi/src/kv.rs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e216107088b20184a480c538ccba9d2c4973b04938cf0df2d76aa8247eee1f4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 5): engine/packages/pegboard-gateway/src/lib.rs:546-556 | engine/packages/pegboard-gateway2/src/lib.rs:797-807 | engine/packages/pegboard-gateway2/src/lib.rs:1146-1156 | engine/packages/pegboard-gateway3/src/lib.rs:546-556 | engine/packages/pegboard-gateway3/src/lib.rs:847-857 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 19 separate duplicated blocks between them, totalling at least 440 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/lib.rs"},"region":{"startLine":546}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fba4d52ea772af9d21301ce9fcabc4a14f367ececa371a8fb1627cf63cb0b76"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 4): engine/packages/gasoline/src/db/kv/debug.rs:2428-2438 | engine/packages/gasoline/src/db/kv/debug.rs:2458-2468 | engine/packages/gasoline/src/db/kv/debug.rs:2490-2500 | engine/packages/gasoline/src/db/kv/debug.rs:2525-2535 \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":"engine/packages/gasoline/src/db/kv/debug.rs"},"region":{"startLine":2428}}}],"partialFingerprints":{"codehealthFindingId/v1":"9dc64103c711c2430d5e0512b72c3dd20a0d3c87d26567e9b3f5d7a3b6fddf77"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): engine/packages/depot/src/inspect.rs:884-894 | engine/packages/depot/src/inspect.rs:979-989 | engine/packages/depot/src/inspect.rs:1068-1078 \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":"engine/packages/depot/src/inspect.rs"},"region":{"startLine":884}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ca6df89fb6e29a766823a171f0b501b8df05b64207e4582778b45736f3c182c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): engine/packages/epoxy/src/replica/commit_kv.rs:38-48 | engine/packages/epoxy/src/replica/messages/accept.rs:29-39 | engine/packages/epoxy/src/replica/messages/prepare.rs:28-38 \u2014 before extracting anything, compare \u0060engine/packages/epoxy/src/replica/messages/accept.rs\u0060 and \u0060engine/packages/epoxy/src/replica/messages/prepare.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 32 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":"engine/packages/epoxy/src/replica/commit_kv.rs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"07b1e480be17d3d20b764d885669fac73f7b5437ec33b73fb8cae3c14e8f8112"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): engine/packages/gasoline/src/db/kv/keys/history.rs:1864-1874 | engine/packages/gasoline/src/db/kv/keys/history.rs:1977-1987 | engine/packages/gasoline/src/db/kv/keys/history.rs:2054-2064 \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":"engine/packages/gasoline/src/db/kv/keys/history.rs"},"region":{"startLine":1864}}}],"partialFingerprints":{"codehealthFindingId/v1":"49021cdc5a84ec8e6e8c4f789ec8dc6749dc53086bad8e9ceeec052d64b9f0e4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201311 lines \u00D7 3): engine/packages/guard/src/cache/pegboard_gateway.rs:45-54 | engine/packages/guard/src/routing/pegboard_gateway/mod.rs:224-233 | engine/packages/guard/src/routing/pegboard_gateway/mod.rs:988-998 \u2014 there are 3 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 3 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/guard/src/cache/pegboard_gateway.rs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"5179e0c020ec6d095625a55ddee8031f9cebf8828decefa2aa8d09074e2013f1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201311 lines \u00D7 3): engine/packages/pegboard-gateway/src/lib.rs:413-423 | engine/packages/pegboard-gateway2/src/lib.rs:678-687 | engine/packages/pegboard-gateway3/src/lib.rs:423-432 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 19 separate duplicated blocks between them, totalling at least 440 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/lib.rs"},"region":{"startLine":413}}}],"partialFingerprints":{"codehealthFindingId/v1":"92dd6afc2f922a072bd24f1c47033f6f91c24c4a0edd6ff941057feeadb4ce34"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): engine/packages/pegboard-gateway/src/ping_task.rs:16-26 | engine/packages/pegboard-gateway2/src/ping_task.rs:15-25 | engine/packages/pegboard-gateway3/src/ping_task.rs:15-25 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/ping_task.rs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d5cea256f6854ee39887712069d33dbb754bc110ca2c92634494bb54eb9f288"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): engine/packages/pegboard-gateway2/src/shared_state.rs:679-689 | engine/packages/pegboard-gateway3/src/shared_state.rs:929-939 | engine/packages/pegboard-gateway3/src/shared_state.rs:1323-1333 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":679}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fa8ccf6fc66e85a825b9935a80d229434ab64554a2f147c296d71c21d13dd3f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201311 lines \u00D7 3): engine/sdks/rust/envoy-client/src/tunnel.rs:278-288 | engine/sdks/rust/envoy-client/src/tunnel.rs:308-318 | engine/sdks/rust/envoy-client/src/tunnel.rs:537-546 \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":"engine/sdks/rust/envoy-client/src/tunnel.rs"},"region":{"startLine":278}}}],"partialFingerprints":{"codehealthFindingId/v1":"e88e18b89d4e9185a0080ac29c47b422a6a0d42b7d1dc0a4668e02394a9ec835"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): engine/packages/depot/src/doctor.rs:3139-3149 | engine/packages/depot/src/doctor.rs:3196-3206 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/doctor.rs"},"region":{"startLine":3139}}}],"partialFingerprints":{"codehealthFindingId/v1":"580fb40e17f8a1a04285c45fbb70aaaed553ff3121cf4aa912333ec66d0adc59"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): engine/packages/epoxy/src/replica/messages/accept.rs:50-60 | engine/packages/epoxy/src/replica/messages/accept.rs:71-82 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/epoxy/src/replica/messages/accept.rs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"1cf2b5a7c10342a702ba5aad8efcc66f73171ebc11b3813d991d4076db79f58f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): engine/packages/error-macros/src/lib.rs:78-88 | engine/packages/error-macros/src/lib.rs:178-188 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/error-macros/src/lib.rs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0cb65b91195896e2239488911e95f1dfc6fc110efaba1eaec36db24e77a601a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): engine/packages/error-macros/src/lib.rs:369-379 | engine/packages/error-macros/src/lib.rs:459-469 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/error-macros/src/lib.rs"},"region":{"startLine":369}}}],"partialFingerprints":{"codehealthFindingId/v1":"23d6844f42727afb97676836903a2415521729a5467c73eb09bc9eb8359aeb35"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): engine/packages/gasoline/src/builder/common/signal.rs:132-142 | engine/packages/gasoline/src/builder/workflow/signal.rs:148-158 \u2014 \u0060engine/packages/gasoline/src/builder/common/signal.rs\u0060 and \u0060engine/packages/gasoline/src/builder/workflow/signal.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 5 separate duplicated blocks between them, totalling at least 89 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/builder/common/signal.rs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f0cfe0a986a4d85c8c969408f8cd0391cb30ce686635e9a222ddd7a9c32bf46"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor/destroy.rs:154-164 | engine/packages/pegboard/src/workflows/actor2/mod.rs:1264-1274 \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":"engine/packages/pegboard/src/workflows/actor/destroy.rs"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"6eaec2cba4a986dfe2673bd9aba4d549bd8ca4371ec270ea3cc3996e29395bad"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5\u201311 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor/runtime.rs:245-255 | engine/packages/pegboard/src/workflows/actor2/runtime.rs:209-213 \u2014 \u0060engine/packages/pegboard/src/workflows/actor/runtime.rs\u0060 and \u0060engine/packages/pegboard/src/workflows/actor2/runtime.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 4 separate duplicated blocks between them, totalling at least 38 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/runtime.rs"},"region":{"startLine":245}}}],"partialFingerprints":{"codehealthFindingId/v1":"524c784cf3987020b455743568acdabe0b52519996b30532486d4abe4028b465"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201311 lines \u00D7 2): engine/packages/pegboard-envoy/src/lib.rs:226-236 | engine/packages/pegboard-runner/src/lib.rs:141-149 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-envoy/src/lib.rs\u0060 and \u0060engine/packages/pegboard-runner/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 118 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-envoy/src/lib.rs"},"region":{"startLine":226}}}],"partialFingerprints":{"codehealthFindingId/v1":"0171556a89c9dc726e4661b4f4dcf0e2bb7366a5244ee97359f4d2b18152b847"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs:1484-1494 | engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs:1523-1533 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs"},"region":{"startLine":1484}}}],"partialFingerprints":{"codehealthFindingId/v1":"ece448170413e266c50e19ada6f7617518142617560f7ecd13a86a143624b4ef"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): engine/packages/pegboard-gateway2/src/lib.rs:504-514 | engine/packages/pegboard-gateway3/src/lib.rs:250-260 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 34 separate duplicated blocks between them, totalling at least 700 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/lib.rs"},"region":{"startLine":504}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd92614d887fb9fa8c1c878340d0f070fbfaa3ae8c2093258660ad6520e9e8e6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): engine/packages/pegboard-gateway2/src/lib.rs:637-647 | engine/packages/pegboard-gateway3/src/lib.rs:383-393 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 34 separate duplicated blocks between them, totalling at least 700 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/lib.rs"},"region":{"startLine":637}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e36e2b46f3fc41439e7245e7e52c5ae8b0a1b511ab4c6d34ab53017278f00bc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): engine/packages/pegboard-gateway2/src/shared_state.rs:1165-1175 | engine/packages/pegboard-gateway3/src/shared_state.rs:2075-2085 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":1165}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e7c1133b2f88e52cd378d7122eebb8eab3838898ec0d18311a6ea24dc36c931"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): engine/packages/universaldb/src/driver/postgres/transaction.rs:88-98 | engine/packages/universaldb/src/driver/rocksdb/transaction.rs:112-122 \u2014 \u0060engine/packages/universaldb/src/driver/postgres/transaction.rs\u0060 and \u0060engine/packages/universaldb/src/driver/rocksdb/transaction.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 6 separate duplicated blocks between them, totalling at least 53 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universaldb/src/driver/postgres/transaction.rs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"790d6e101ef80a660c08ea8443b8f595dade8478ed747ec476b0ceab6edd49fd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): engine/packages/universaldb/src/driver/rocksdb/transaction_task.rs:212-222 | engine/packages/universaldb/src/driver/rocksdb/transaction_task.rs:533-543 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universaldb/src/driver/rocksdb/transaction_task.rs"},"region":{"startLine":212}}}],"partialFingerprints":{"codehealthFindingId/v1":"22df429c477298c598eb3eebdbbea5a2768c7eb665195f751d7b49fc146dbe90"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u201311 lines \u00D7 2): engine/packages/universaldb/src/tx_ops.rs:370-377 | engine/packages/universaldb/src/tx_ops.rs:500-510 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universaldb/src/tx_ops.rs"},"region":{"startLine":370}}}],"partialFingerprints":{"codehealthFindingId/v1":"28655a4a3c0207e6fb227823ad6c950438bfa5f1acb6c25b4a6d5f22cc628b6c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): engine/packages/universalpubsub/src/driver/memory/mod.rs:120-130 | engine/packages/universalpubsub/src/driver/memory/mod.rs:141-151 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universalpubsub/src/driver/memory/mod.rs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"609a1e97b98da7b94840972aec55aba68db3f47d9b00e190da0ff36311b4f7c0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): engine/sdks/rust/envoy-client/src/actor.rs:215-225 | engine/sdks/rust/envoy-client/src/actor.rs:230-240 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/actor.rs"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fed34c538b32223210c42eca9b3ba04613025b6f6f4c8ee3b39c044fa361c5d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): engine/sdks/rust/envoy-client/src/handle.rs:854-864 | engine/sdks/rust/envoy-client/src/handle.rs:894-904 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/handle.rs"},"region":{"startLine":854}}}],"partialFingerprints":{"codehealthFindingId/v1":"149b5fb602c0067f9c88c6f3ffa3abd226f91d62ce52141ce40fceef939d4eaa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): rivetkit-rust/packages/client/src/remote_manager.rs:317-327 | rivetkit-rust/packages/client/src/remote_manager.rs:382-392 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/client/src/remote_manager.rs"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba206a70216eecba948fa761960710bdd8bf289cd536a02de5c28e2dd4e82e0f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/tx.rs:197-207 | rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/tx.rs:333-343 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/tx.rs"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"e404313eb01a012e60c85af180c8e342e2ae1aa3ea6582ce345e6b2cd3bad63a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/tx.rs:457-467 | rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/tx.rs:477-487 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/tx.rs"},"region":{"startLine":457}}}],"partialFingerprints":{"codehealthFindingId/v1":"0889a9d8deb7d56072b862790507f5a9dfba82cc0b11b561818cba30f6970b6e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/registry/mod.rs:631-641 | rivetkit-rust/packages/rivetkit-core/src/serverless.rs:159-169 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/mod.rs"},"region":{"startLine":631}}}],"partialFingerprints":{"codehealthFindingId/v1":"585198f550ace28319303ad64c2c8511ec6c181eba410d2e7be0dc5443a64781"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201311 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/serverless_http.rs:93-103 | rivetkit-rust/packages/rivetkit-core/src/serverless_http.rs:142-151 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/serverless_http.rs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"a193da562208e2ab5df7634fe8dfc99d18dcda8105ea1229103ba9630a8bc231"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): engine/packages/depot/src/compaction/shared.rs:3550-3559 | engine/packages/depot/src/compaction/shared.rs:3579-3588 | engine/packages/depot/src/compaction/shared.rs:3644-3653 \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":"engine/packages/depot/src/compaction/shared.rs"},"region":{"startLine":3550}}}],"partialFingerprints":{"codehealthFindingId/v1":"61cc1e180512d30791ba541a064ac9be68a62b6f9e29ad47d6847227ff17b32b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u201310 lines \u00D7 3): engine/packages/depot/src/conveyer/branch/shared.rs:74-81 | engine/packages/depot/src/conveyer/read/tx.rs:22-31 | engine/packages/depot/src/conveyer/read/tx.rs:60-69 \u2014 there are 3 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 3 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/conveyer/branch/shared.rs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1c74e1c85b3e4af4c311d57e7fb5d35245afb1e51da5b41ef1b9363adfb7642"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): engine/packages/depot/src/conveyer/restore_point/resolve.rs:169-178 | engine/packages/depot/src/conveyer/restore_point/resolve.rs:329-338 | engine/packages/depot/src/conveyer/restore_point/resolve.rs:388-397 \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":"engine/packages/depot/src/conveyer/restore_point/resolve.rs"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5aa8da44268d05049597c3f574043837722a32d1e97bb59b1edc656d777462b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): engine/packages/error-macros/src/lib.rs:76-85 | engine/packages/error-macros/src/lib.rs:176-185 | engine/packages/error-macros/src/lib.rs:209-218 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/error-macros/src/lib.rs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"b62c6fef485823ed1a01a474d1e9b6e620b6fc0dc9c375dffb4d9be94555702c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): engine/packages/pegboard/src/ops/actor/get_reservation_for_key.rs:47-56 | engine/packages/pegboard/src/workflows/actor/keys.rs:161-170 | engine/packages/pegboard/src/workflows/actor2/keys.rs:174-183 \u2014 \u0060engine/packages/pegboard/src/workflows/actor/keys.rs\u0060 and \u0060engine/packages/pegboard/src/workflows/actor2/keys.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 5 separate duplicated blocks between them, totalling at least 70 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/ops/actor/get_reservation_for_key.rs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"182dd89c7888511a19e49312cf99301cf324bff6044bbc34b280a8bb2aa8e854"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201310 lines \u00D7 3): engine/packages/pegboard/src/workflows/actor/runtime.rs:737-745 | engine/packages/pegboard/src/workflows/actor/runtime.rs:853-862 | engine/packages/pegboard/src/workflows/actor/runtime.rs:988-997 \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":"engine/packages/pegboard/src/workflows/actor/runtime.rs"},"region":{"startLine":737}}}],"partialFingerprints":{"codehealthFindingId/v1":"f322cf9349425ff5446dbb1deb86952af9c16e8b6bd0d48227a158c3dfde7e5c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): engine/packages/pegboard-envoy/src/tunnel_to_ws_task.rs:80-89 | engine/packages/pegboard-runner/src/tunnel_to_ws_task.rs:65-74 | engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs:106-115 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-envoy/src/tunnel_to_ws_task.rs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"a454a763a6f0bb6ec87d65b5266584e8c39f0d69004c98747a23fb859f0c5fb1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): engine/packages/pegboard-gateway/src/lib.rs:583-592 | engine/packages/pegboard-gateway2/src/lib.rs:855-864 | engine/packages/pegboard-gateway3/src/lib.rs:604-613 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 19 separate duplicated blocks between them, totalling at least 440 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/lib.rs"},"region":{"startLine":583}}}],"partialFingerprints":{"codehealthFindingId/v1":"2cb9213bd6576a2dd1bbd205931081d8be7a6df16cf01e31e15e832e26f2d1a8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201310 lines \u00D7 3): rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs:942-950 | rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs:952-960 | rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs:1398-1407 \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":"rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs"},"region":{"startLine":942}}}],"partialFingerprints":{"codehealthFindingId/v1":"00b86f0170d532f8f1e107d270b31d4d7c3670a5f6aecd5cb346c1c356f91d1e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201310 lines \u00D7 2): engine/packages/api-public/src/actors/reschedule.rs:48-57 | engine/packages/api-public/src/actors/sleep.rs:48-56 \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":"engine/packages/api-public/src/actors/reschedule.rs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"e03a101f5cf5e5496c980a6ee52c6ff1b4fbe4e2328be0b974bf2852502385e3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): engine/packages/api-util/src/lib.rs:37-46 | engine/packages/api-util/src/lib.rs:75-84 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-util/src/lib.rs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1bb0a085e34422dcfd85882fe9a76867e05e7d4edcdfcf5856c66d8cf2b4f9b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): engine/packages/depot-client/src/vfs.rs:2225-2234 | engine/packages/depot-client/src/vfs.rs:2351-2360 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot-client/src/vfs.rs"},"region":{"startLine":2225}}}],"partialFingerprints":{"codehealthFindingId/v1":"69c6e729b81d56c24b39e9c41b0013cd378d86d94623b793428e91079e0c83f8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): engine/packages/depot-client/src/vfs.rs:2239-2248 | engine/packages/depot-client/src/vfs.rs:2366-2375 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot-client/src/vfs.rs"},"region":{"startLine":2239}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b6b267d538af7323212e8f830da62ac5a0ec4c08391804d35225fd2043e9221"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): engine/packages/engine/src/commands/udb/cli.rs:524-533 | engine/packages/engine/src/commands/udb/cli.rs:570-579 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/engine/src/commands/udb/cli.rs"},"region":{"startLine":524}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe09fc4867bb684313b562fb8fec2fd0b2ca11b174041365eb802de0839d14d7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): engine/packages/gasoline/src/db/debug.rs:457-466 | engine/packages/gasoline/src/history/event.rs:71-80 \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":"engine/packages/gasoline/src/db/debug.rs"},"region":{"startLine":457}}}],"partialFingerprints":{"codehealthFindingId/v1":"224016511584d73260ce82d58af93ea6b70d2346f145caaaf8df90946b503c66"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): engine/packages/gasoline/src/db/kv/keys/history.rs:1859-1868 | engine/packages/gasoline/src/db/kv/keys/history.rs:1913-1922 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/keys/history.rs"},"region":{"startLine":1859}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d37f8f12f844289f9740255af17b04e31ead46af3ce00c9fd1505d0d4f0be69"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): engine/packages/gasoline/src/db/kv/keys/history.rs:1925-1934 | engine/packages/gasoline/src/db/kv/mod.rs:319-328 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/keys/history.rs"},"region":{"startLine":1925}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9b9787a2548be241bc156cb7e973dc6b891d69e2fe64b6dfce0a8c709f4e9bc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): engine/packages/gasoline/src/db/kv/keys/signal.rs:179-188 | engine/packages/gasoline/src/db/kv/keys/workflow.rs:629-638 \u2014 before extracting anything, compare \u0060engine/packages/gasoline/src/db/kv/keys/signal.rs\u0060 and \u0060engine/packages/gasoline/src/db/kv/keys/workflow.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 57 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":"engine/packages/gasoline/src/db/kv/keys/signal.rs"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2a7f30878f91baa06b0b4f4c5618e4324cf4b9f7531f730128a64997f3fe639"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): engine/packages/gasoline/src/db/kv/keys/signal.rs:227-236 | engine/packages/gasoline/src/db/kv/keys/workflow.rs:677-686 \u2014 before extracting anything, compare \u0060engine/packages/gasoline/src/db/kv/keys/signal.rs\u0060 and \u0060engine/packages/gasoline/src/db/kv/keys/workflow.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 57 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":"engine/packages/gasoline/src/db/kv/keys/signal.rs"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ec2155d7c7716d7a88ac39940c9f8cce9b59b72ff6c17c7fc8f7c874df0e873"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): engine/packages/gasoline/src/db/kv/keys/signal.rs:275-284 | engine/packages/gasoline/src/db/kv/keys/workflow.rs:580-589 \u2014 before extracting anything, compare \u0060engine/packages/gasoline/src/db/kv/keys/signal.rs\u0060 and \u0060engine/packages/gasoline/src/db/kv/keys/workflow.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 57 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":"engine/packages/gasoline/src/db/kv/keys/signal.rs"},"region":{"startLine":275}}}],"partialFingerprints":{"codehealthFindingId/v1":"88e3545f406a563a34140c5769bd61bede84835c09ecc3ed1030b1f7afd3309e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): engine/packages/gasoline/src/db/kv/keys/signal.rs:407-416 | engine/packages/gasoline/src/db/kv/keys/workflow.rs:1196-1205 \u2014 before extracting anything, compare \u0060engine/packages/gasoline/src/db/kv/keys/signal.rs\u0060 and \u0060engine/packages/gasoline/src/db/kv/keys/workflow.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 57 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":"engine/packages/gasoline/src/db/kv/keys/signal.rs"},"region":{"startLine":407}}}],"partialFingerprints":{"codehealthFindingId/v1":"c68e7c474f56ab03bb49fb799271648d3fd58533edc588d72c0fd20fa533f3ca"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): engine/packages/guard/src/routing/pegboard_gateway/mod.rs:631-643 | engine/packages/guard/src/routing/pegboard_gateway/mod.rs:882-891 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/guard/src/routing/pegboard_gateway/mod.rs"},"region":{"startLine":631}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef6923bf7bf617beb7aed6f9eb791e3636ca58b8b916caa2aa1035cb02070c47"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): engine/packages/pegboard/src/keys/envoy.rs:749-758 | engine/packages/pegboard/src/keys/runner.rs:801-810 \u2014 before extracting anything, compare \u0060engine/packages/pegboard/src/keys/envoy.rs\u0060 and \u0060engine/packages/pegboard/src/keys/runner.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 43 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/keys/envoy.rs"},"region":{"startLine":749}}}],"partialFingerprints":{"codehealthFindingId/v1":"f07691ed9bef9451e0ecba500866a62b2f3a371529721de8fc254e39996d5ee1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): engine/packages/pegboard/src/keys/ns.rs:147-156 | engine/packages/pegboard/src/keys/ns.rs:268-277 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/keys/ns.rs"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"19fe29b2592e014f64e6bb052437cba6db9557262b7608b0f8d2592744b15bac"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): engine/packages/pegboard/src/ops/runner_config/delete.rs:46-55 | engine/packages/pegboard/src/ops/runner_config/upsert.rs:163-172 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/ops/runner_config/delete.rs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"b43ea38ada5b9256a7f328545f254548cbb11201d6579016c1ded12b03d4ae84"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201310 lines \u00D7 2): engine/packages/pegboard/src/ops/runner_config/upsert.rs:244-252 | engine/packages/pegboard/src/ops/runner_config/upsert.rs:267-276 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/ops/runner_config/upsert.rs"},"region":{"startLine":244}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ffdf2e5f7105138e577b5b415028f3046e43961660d6298542d16fce45e9bae"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor/runtime.rs:1211-1220 | engine/packages/pegboard/src/workflows/actor2/runtime.rs:826-835 \u2014 \u0060engine/packages/pegboard/src/workflows/actor/runtime.rs\u0060 and \u0060engine/packages/pegboard/src/workflows/actor2/runtime.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 4 separate duplicated blocks between them, totalling at least 38 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/runtime.rs"},"region":{"startLine":1211}}}],"partialFingerprints":{"codehealthFindingId/v1":"eed8c27fa06bc5c0ce906d235396b6f87c6d8963d95d7f0ae330e8cde6edef12"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor2/mod.rs:977-986 | engine/packages/pegboard/src/workflows/actor2/mod.rs:1044-1053 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor2/mod.rs"},"region":{"startLine":977}}}],"partialFingerprints":{"codehealthFindingId/v1":"b31c2c9aaf92722156384057ec218b5bd9be14b7055d5d688278f8af1e3697eb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): engine/packages/pegboard/src/workflows/runner.rs:913-922 | engine/packages/pegboard/src/workflows/runner2.rs:621-630 \u2014 before extracting anything, compare \u0060engine/packages/pegboard/src/workflows/runner.rs\u0060 and \u0060engine/packages/pegboard/src/workflows/runner2.rs\u0060 as WHOLE FILES: this scan already matched 11 separate duplicated blocks between them, totalling at least 164 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":"engine/packages/pegboard/src/workflows/runner.rs"},"region":{"startLine":913}}}],"partialFingerprints":{"codehealthFindingId/v1":"e04352caa6f48be855217d0ff2c2fa99dc96e307731227a2ad4586e6690fe10b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): engine/packages/pegboard/src/workflows/runner.rs:947-956 | engine/packages/pegboard/src/workflows/runner2.rs:655-664 \u2014 before extracting anything, compare \u0060engine/packages/pegboard/src/workflows/runner.rs\u0060 and \u0060engine/packages/pegboard/src/workflows/runner2.rs\u0060 as WHOLE FILES: this scan already matched 11 separate duplicated blocks between them, totalling at least 164 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":"engine/packages/pegboard/src/workflows/runner.rs"},"region":{"startLine":947}}}],"partialFingerprints":{"codehealthFindingId/v1":"cee7c2a8a947bd03b20005f35425eb2e0872d90350342d44be1bfda8b2bbabf7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201310 lines \u00D7 2): engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs:989-997 | engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs:1005-1014 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs"},"region":{"startLine":989}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecf2f6d7c641b3ecd6e6d0055f737cde4be8287598a13ef45289fcb398be8f67"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): engine/packages/pools/src/pools.rs:26-35 | engine/packages/pools/src/pools.rs:59-68 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pools/src/pools.rs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f5ccf15098bdb74bdb9c823855e616c3a125cae4a1b6631097f4cadbf2f54e0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): engine/sdks/rust/envoy-client/src/actor/http.rs:591-600 | engine/sdks/rust/envoy-client/src/actor/http.rs:698-707 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/actor/http.rs"},"region":{"startLine":591}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f560eff00a2998fba7d5d37a8561ab647e734e2e20b0da45b62abbe54460afd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): engine/sdks/rust/envoy-client/src/connection/native.rs:81-90 | engine/sdks/rust/envoy-client/src/connection/wasm.rs:87-96 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/connection/native.rs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"979def47c0e7db12ea7de78eec258b1d07ae9ea443576d479e618d7c8b17a79f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/actor/actor_runtime_socket.rs:723-732 | rivetkit-rust/packages/rivetkit-core/src/actor/actor_runtime_socket.rs:743-752 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/actor_runtime_socket.rs"},"region":{"startLine":723}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d0879c45047e659b6bb1e75e22158c26dc256da38e3a2d67d8860f68d7e043a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/mod.rs:109-118 | rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/mod.rs:133-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":"rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/mod.rs"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"af364f1b606ae60cf9a7b1fe21760a7b0f10c64312a7dc6c57f71c9a5a8042c0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/registry/http.rs:1015-1024 | rivetkit-rust/packages/rivetkit-core/src/registry/http.rs:1059-1068 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/http.rs"},"region":{"startLine":1015}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2503f05812a0bf535336fa47e93b4e013316cd79a708b39f2bb25258dd48cb4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 8): engine/packages/depot/src/conveyer/branch/shared.rs:76-84 | engine/packages/depot/src/conveyer/commit/helpers.rs:42-50 | engine/packages/depot/src/conveyer/debug.rs:331-339 | engine/packages/depot/src/conveyer/history_pin.rs:159-167 | engine/packages/depot/src/conveyer/pitr_interval.rs:144-152 | engine/packages/depot/src/conveyer/read/tx.rs:26-34 | engine/packages/depot/src/conveyer/read/tx.rs:64-72 | engine/packages/depot/src/gc/mod.rs:345-353 \u2014 before extracting anything, compare \u0060engine/packages/depot/src/conveyer/history_pin.rs\u0060 and \u0060engine/packages/depot/src/conveyer/pitr_interval.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 37 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":"engine/packages/depot/src/conveyer/branch/shared.rs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"c402888913b28aade5dc956df48828d9ad90bd1bb08697567c9f9312be6f5923"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u20139 lines \u00D7 6): engine/packages/pegboard/src/workflows/actor/destroy.rs:42-50 | engine/packages/pegboard/src/workflows/actor/mod.rs:1138-1146 | engine/packages/pegboard/src/workflows/actor/runtime.rs:693-701 | engine/packages/pegboard/src/workflows/actor/runtime.rs:783-791 | engine/packages/pegboard/src/workflows/actor/runtime.rs:917-925 | engine/packages/pegboard/src/workflows/actor/runtime.rs:1028-1034 \u2014 there are 6 copies across 3 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 6 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/destroy.rs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"793227555400f625a052cebf8e4f1b490532b4bdd79f9343c1350fa75d5fead9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6\u20139 lines \u00D7 4): engine/packages/pegboard-envoy/src/lib.rs:223-231 | engine/packages/pegboard-gateway2/src/lib.rs:682-688 | engine/packages/pegboard-gateway3/src/lib.rs:427-433 | engine/packages/pegboard-runner/src/lib.rs:140-145 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-envoy/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 35 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-envoy/src/lib.rs"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bf95f077520669ec806d6ded9f34e4dc5e04fa5b945cc7c39e971102b9df5c9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 4): engine/packages/pegboard-envoy/src/lib.rs:255-263 | engine/packages/pegboard-gateway2/src/lib.rs:748-756 | engine/packages/pegboard-gateway3/src/lib.rs:497-505 | engine/packages/pegboard-runner/src/lib.rs:168-176 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-envoy/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 35 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-envoy/src/lib.rs"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"e92e14c765cc72f21da2cb8d2901218a63a6887b7bdd06c4e1280fcd116531b8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u20139 lines \u00D7 3): engine/packages/api-peer/src/actors/get_or_create.rs:27-35 | engine/packages/api-peer/src/runner_configs.rs:155-162 | engine/packages/api-peer/src/runners.rs:85-93 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-peer/src/actors/get_or_create.rs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"3293ff4c2f2be412ec99a3dccd48e088cff75f803a198f30fae7ba39b0bee5ce"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): engine/packages/cli/src/commands/logs.rs:56-64 | engine/packages/cli/src/commands/pool.rs:97-105 | engine/packages/cli/src/commands/pool.rs:137-145 \u2014 there are 3 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 3 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/cli/src/commands/logs.rs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"30fc439eb1e4754898ca5d1a347f70858837be04ece0d227da2e3b88db5b956a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): engine/packages/gasoline/src/db/kv/keys/history.rs:1994-2002 | engine/packages/gasoline/src/db/kv/keys/history.rs:2111-2119 | engine/packages/gasoline/src/db/kv/keys/history.rs:2156-2164 \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":"engine/packages/gasoline/src/db/kv/keys/history.rs"},"region":{"startLine":1994}}}],"partialFingerprints":{"codehealthFindingId/v1":"079060db0bae421854133e45875afa747fc5463a220819320182dafb0f30bdcc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): engine/sdks/rust/envoy-client/src/connection/wasm.rs:351-359 | engine/sdks/rust/envoy-client/src/utils.rs:105-113 | rivetkit-rust/packages/rivetkit-core/src/lib.rs:76-84 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/connection/wasm.rs"},"region":{"startLine":351}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7d84b79ce23bc68f336fb157eb23695daee0643666c6a79b61d4292b29c2e49"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u20139 lines \u00D7 3): rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs:941-947 | rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs:951-957 | rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs:1384-1392 \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":"rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs"},"region":{"startLine":941}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ba639c4fcf2914019cd15d5752611d97cc539bed218163211d5c37956cc55b9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/packages/depot/src/workflows/db_reclaimer.rs:293-301 | engine/packages/depot/src/workflows/db_reclaimer.rs:855-863 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/workflows/db_reclaimer.rs"},"region":{"startLine":293}}}],"partialFingerprints":{"codehealthFindingId/v1":"abbca90b9a3a11e80c0cc021ee8969dea23b5662a87f9e7e93cfc83cd116c79d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/packages/engine/src/commands/depot_transfer.rs:744-752 | engine/packages/engine/src/commands/depot_transfer.rs:835-843 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/engine/src/commands/depot_transfer.rs"},"region":{"startLine":744}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3d5ed44ee2914b6917aa440a3ec68d3b3bfe8c0c61b1ea65afba1e2638ad487"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/packages/engine/src/commands/udb/key_parser.rs:247-255 | engine/packages/engine/src/util/udb.rs:34-42 \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":"engine/packages/engine/src/commands/udb/key_parser.rs"},"region":{"startLine":247}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f730034ddd3df009af5a596b23b4599283dce9af9c137de09fe6ac5ffc3c9dd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/packages/gasoline/src/ctx/workflow.rs:1039-1047 | engine/packages/gasoline/src/ctx/workflow.rs:1085-1093 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/ctx/workflow.rs"},"region":{"startLine":1039}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdf370debdad6579ff1bdf8a75828bc908ca705063836d38db1417c2cb8c6f0a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/packages/gasoline/src/db/kv/keys/history.rs:637-645 | engine/packages/gasoline/src/db/kv/keys/workflow.rs:182-190 \u2014 before extracting anything, compare \u0060engine/packages/gasoline/src/db/kv/keys/history.rs\u0060 and \u0060engine/packages/gasoline/src/db/kv/keys/workflow.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 35 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/keys/history.rs"},"region":{"startLine":637}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4f7fe8e9ba457c349f352e10f2c0cbd8b729ddcefe5749ea2a10cca6a131b36"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/packages/gasoline/src/db/kv/keys/history.rs:753-761 | engine/packages/gasoline/src/db/kv/keys/workflow.rs:269-277 \u2014 before extracting anything, compare \u0060engine/packages/gasoline/src/db/kv/keys/history.rs\u0060 and \u0060engine/packages/gasoline/src/db/kv/keys/workflow.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 35 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/keys/history.rs"},"region":{"startLine":753}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2fd013cd5173c60e355fa4979f23bb517e295564555ce1a13f90af51d8949a2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u20139 lines \u00D7 2): engine/packages/gasoline/src/db/kv/keys/history.rs:2093-2101 | engine/packages/gasoline/src/db/kv/keys/history.rs:2136-2142 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/keys/history.rs"},"region":{"startLine":2093}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6a5e00c8c3b575b677914e9a328fc8491ae0977f0ffb996587f77d89cde6ca8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/packages/pegboard/src/actor_kv/mod.rs:543-551 | engine/packages/pegboard/src/actor_kv/preload.rs:364-372 \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":"engine/packages/pegboard/src/actor_kv/mod.rs"},"region":{"startLine":543}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c51926491bbd0e125d20965bf90b8ae9bc1e9c66380a83c3ccdf1bb20a36dd3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor/metrics.rs:177-185 | engine/packages/pegboard/src/workflows/actor2/metrics.rs:166-174 \u2014 \u0060engine/packages/pegboard/src/workflows/actor/metrics.rs\u0060 and \u0060engine/packages/pegboard/src/workflows/actor2/metrics.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 8 separate duplicated blocks between them, totalling at least 128 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/metrics.rs"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd1b483d1ba53a23f66fe0e9447729c6a53b4560cd6991de8723bea2697d2e30"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor2/alloc_serverful/hash.rs:545-553 | engine/packages/pegboard/src/workflows/actor2/alloc_serverful/newest_ping_timestamp.rs:27-35 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor2/alloc_serverful/hash.rs"},"region":{"startLine":545}}}],"partialFingerprints":{"codehealthFindingId/v1":"68af07de30949c9375282879068efa8e117e7a870cbaafba72e26362ecf2bfdd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor2/mod.rs:984-992 | engine/packages/pegboard/src/workflows/actor2/mod.rs:1107-1115 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor2/mod.rs"},"region":{"startLine":984}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef2b99ee6f795beb4fc59e78b9730b3537eb27f0486214497c1feaf4e2558ba2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/packages/pegboard-envoy/src/lib.rs:309-317 | engine/packages/pegboard-runner/src/lib.rs:211-219 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-envoy/src/lib.rs\u0060 and \u0060engine/packages/pegboard-runner/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 118 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-envoy/src/lib.rs"},"region":{"startLine":309}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bcfbc6abf2687a76fd8158aef8bdbd55ccdc9fe77843f698f7034c9f3f73e5e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs:694-702 | engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs:161-169 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs\u0060 and \u0060engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 42 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs"},"region":{"startLine":694}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b368f168ac62a2f3ecb41710d08ec0fb5d7bbc2efb63b105a14ee8934f7b617"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/packages/pegboard-envoy/src/ping_task.rs:26-34 | engine/packages/pegboard-runner/src/ping_task.rs:25-33 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-envoy/src/ping_task.rs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"14999ba55a6582bc2fed5baebc666aed2f45a448a271febd15ae30ee42f52dcd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/packages/pegboard-gateway/src/lib.rs:104-112 | engine/packages/pegboard-gateway2/src/lib.rs:131-139 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 19 separate duplicated blocks between them, totalling at least 440 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/lib.rs"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"ace05c1337785acbdfcd769d1a63f9f320000d4c13344a36cc546a3a2873dc46"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/packages/runner-protocol/src/versioned.rs:1459-1467 | engine/packages/runner-protocol/src/versioned.rs:1798-1806 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/runner-protocol/src/versioned.rs"},"region":{"startLine":1459}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c6187db36b25f09188d3220037fc461fef3fb5bcfb2ed348194c227bf1666a5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/packages/universaldb/src/driver/postgres/database.rs:334-342 | engine/packages/universaldb/src/driver/rocksdb/database.rs:73-81 \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":"engine/packages/universaldb/src/driver/postgres/database.rs"},"region":{"startLine":334}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b034491e6b8da69ab48914cccfa21c33084ba608a3b8f0077aae96e098125c1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/packages/universaldb/src/driver/postgres/transaction.rs:118-126 | engine/packages/universaldb/src/driver/rocksdb/transaction.rs:142-150 \u2014 \u0060engine/packages/universaldb/src/driver/postgres/transaction.rs\u0060 and \u0060engine/packages/universaldb/src/driver/rocksdb/transaction.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 6 separate duplicated blocks between them, totalling at least 53 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universaldb/src/driver/postgres/transaction.rs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ba1e0eded07ca933a2cdfacc121736f7932a707804d7aaefa367c839cfc58a4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/sdks/rust/data/src/versioned/namespace_runner_config.rs:228-236 | engine/sdks/rust/data/src/versioned/namespace_runner_config.rs:448-457 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/data/src/versioned/namespace_runner_config.rs"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"992d6f62575c6e73dacc05eb0c225d0722e94356e2a3cb1d542b05cf4a79dda1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u20139 lines \u00D7 2): engine/sdks/rust/envoy-client/src/stringify.rs:78-86 | engine/sdks/rust/envoy-client/src/stringify.rs:146-153 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/stringify.rs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"c904307444218675aa6721d65debd867713e030ddedaa22013d6b5e67b8a2c2d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u20139 lines \u00D7 2): rivetkit-python/client/src/util.rs:183-189 | rivetkit-python/client/src/util.rs:221-229 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-python/client/src/util.rs"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"d87de77ca021db5e9f5e1736cc3ba5666292107c60764366fb940e32c610660c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): rivetkit-rust/packages/client/src/remote_manager.rs:756-764 | rivetkit-rust/packages/client/src/remote_manager.rs:800-808 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/client/src/remote_manager.rs"},"region":{"startLine":756}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5a120b5619a570a914e646b098bc385f696fee4724f4762f9e8a0ba0e44e216"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/actor/queue.rs:428-436 | rivetkit-rust/packages/rivetkit-core/src/actor/queue.rs:481-489 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/queue.rs"},"region":{"startLine":428}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4efc432b30265cd166817cc1c00dca43a51399958a7250d45b8f560dec5f636"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/actor/sleep.rs:677-685 | rivetkit-rust/packages/rivetkit-core/src/actor/sleep.rs:708-716 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/sleep.rs"},"region":{"startLine":677}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fc32a3c78dba91c39e66db56dc648b434aa0f380915ddd0639b95603d6194e3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): rivetkit-typescript/packages/rivetkit-wasm/src/lib.rs:815-823 | rivetkit-typescript/packages/rivetkit-wasm/src/lib.rs:839-847 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit-wasm/src/lib.rs"},"region":{"startLine":815}}}],"partialFingerprints":{"codehealthFindingId/v1":"2653dd670510952ad616942db125be27ca3b37361e36ccb28d2282d21312f42b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 9): engine/packages/pegboard-gateway2/src/lib.rs:465-472 | engine/packages/pegboard-gateway2/src/lib.rs:486-493 | engine/packages/pegboard-gateway2/src/lib.rs:498-505 | engine/packages/pegboard-gateway2/src/lib.rs:513-520 | engine/packages/pegboard-gateway2/src/lib.rs:535-542 | engine/packages/pegboard-gateway2/src/lib.rs:549-556 | engine/packages/pegboard-gateway2/src/lib.rs:564-571 | engine/packages/pegboard-gateway2/src/lib.rs:583-590 | engine/packages/pegboard-gateway2/src/lib.rs:631-638 \u2014 all 9 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":"engine/packages/pegboard-gateway2/src/lib.rs"},"region":{"startLine":465}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b09eb54f4bf3416d46d38d04d340eab7f6189d4fcb21cc4a8ffc19549ad3985"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 9): engine/packages/pegboard-gateway3/src/lib.rs:210-217 | engine/packages/pegboard-gateway3/src/lib.rs:232-239 | engine/packages/pegboard-gateway3/src/lib.rs:244-251 | engine/packages/pegboard-gateway3/src/lib.rs:259-266 | engine/packages/pegboard-gateway3/src/lib.rs:281-288 | engine/packages/pegboard-gateway3/src/lib.rs:295-302 | engine/packages/pegboard-gateway3/src/lib.rs:310-317 | engine/packages/pegboard-gateway3/src/lib.rs:329-336 | engine/packages/pegboard-gateway3/src/lib.rs:377-384 \u2014 all 9 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":"engine/packages/pegboard-gateway3/src/lib.rs"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b5d1b97e5be6c3751a7cd6431147806436a084b044619e8e958d0ff7050435b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 6): engine/packages/depot/src/compaction/shared.rs:3549-3556 | engine/packages/depot/src/compaction/shared.rs:3578-3585 | engine/packages/depot/src/compaction/shared.rs:3643-3650 | engine/packages/depot/src/conveyer/history_pin.rs:157-164 | engine/packages/depot/src/conveyer/pitr_interval.rs:142-149 | engine/packages/depot/src/gc/mod.rs:343-350 \u2014 before extracting anything, compare \u0060engine/packages/depot/src/conveyer/history_pin.rs\u0060 and \u0060engine/packages/depot/src/conveyer/pitr_interval.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 37 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":"engine/packages/depot/src/compaction/shared.rs"},"region":{"startLine":3549}}}],"partialFingerprints":{"codehealthFindingId/v1":"d17a947da7d1aa48d840f74f96c2196a6f77bc87e5a69310676e03cfd071fa6d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 5): engine/packages/depot/src/compaction/shared.rs:3542-3549 | engine/packages/depot/src/conveyer/debug.rs:322-329 | engine/packages/depot/src/conveyer/history_pin.rs:150-157 | engine/packages/depot/src/conveyer/pitr_interval.rs:135-142 | engine/packages/depot/src/gc/mod.rs:336-343 \u2014 before extracting anything, compare \u0060engine/packages/depot/src/conveyer/history_pin.rs\u0060 and \u0060engine/packages/depot/src/conveyer/pitr_interval.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 37 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":"engine/packages/depot/src/compaction/shared.rs"},"region":{"startLine":3542}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac3bf0f9c4accb788ff5d6cfd69941e595bd053c837ca73368cde05fe9e447e3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 4): engine/packages/api-peer/src/actors/list.rs:37-45 | engine/packages/api-peer/src/actors/list.rs:84-91 | engine/packages/api-peer/src/actors/list_names.rs:21-28 | engine/packages/api-public/src/actors/list.rs:140-147 \u2014 there are 4 copies across 3 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 4 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-peer/src/actors/list.rs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b424f93ce752018b74fbf3c6025355d732602b0312b352dfa804c36a894cfbd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): engine/packages/gasoline/src/db/kv/keys/history.rs:1825-1832 | engine/packages/gasoline/src/db/kv/keys/history.rs:1945-1952 | engine/packages/gasoline/src/db/kv/keys/history.rs:2063-2070 \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":"engine/packages/gasoline/src/db/kv/keys/history.rs"},"region":{"startLine":1825}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d2747ecc35853a8c17737b44748fa30fbc38602ccae101fe310d31f77317cde"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): engine/packages/pegboard/src/keys/ns.rs:145-152 | engine/packages/pegboard/src/keys/ns.rs:266-273 | engine/packages/pegboard/src/keys/ns.rs:1675-1682 \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":"engine/packages/pegboard/src/keys/ns.rs"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"30a3d8d180858ce5a0b1322dd053f217747863978eef14f2c91aacf5688c5538"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): engine/packages/pegboard/src/workflows/actor/runtime.rs:258-265 | engine/packages/pegboard/src/workflows/actor2/runtime.rs:193-200 | engine/packages/pegboard/src/workflows/actor2/runtime.rs:875-882 \u2014 \u0060engine/packages/pegboard/src/workflows/actor/runtime.rs\u0060 and \u0060engine/packages/pegboard/src/workflows/actor2/runtime.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 4 separate duplicated blocks between them, totalling at least 38 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/runtime.rs"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d0fee5e88adc4c1decc405905dc155e5345a6efbb802b2c0e736abe960aed1f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): engine/packages/api-peer/src/actors/list.rs:22-29 | engine/packages/api-public/src/actors/list.rs:72-79 \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":"engine/packages/api-peer/src/actors/list.rs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0fb8bbb6bf12e36b2d3bc5a43b52ec07f3bff34680897854cf9966bbeb5fff7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): engine/packages/api-util/src/lib.rs:50-57 | engine/packages/api-util/src/lib.rs:88-95 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-util/src/lib.rs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"00d9041d94710faf4d0678542a0e90c94219217e294350ee44623c3fda15e66b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): engine/packages/depot/src/conveyer/quota.rs:57-64 | engine/packages/depot/src/conveyer/quota.rs:81-88 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/conveyer/quota.rs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"6569041ba7a2ff7e1633352451a649a7a119b50868d1e59c831dba4a37d1bf1d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): engine/packages/epoxy/src/ops/propose.rs:791-798 | engine/packages/epoxy/src/ops/propose.rs:922-929 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/epoxy/src/ops/propose.rs"},"region":{"startLine":791}}}],"partialFingerprints":{"codehealthFindingId/v1":"29a2e109bb74e94117ae085e9536672cd7596ebe8868a385c7d659de6723b7b0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): engine/packages/gasoline/src/db/kv/debug.rs:1707-1714 | engine/packages/gasoline/src/db/kv/debug.rs:1743-1750 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/debug.rs"},"region":{"startLine":1707}}}],"partialFingerprints":{"codehealthFindingId/v1":"67f951f7390f676604fa8d6714c135a6305711869a57d386dd745d95ec243145"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): engine/packages/gasoline/src/db/kv/repair.rs:526-533 | engine/packages/gasoline/src/db/kv/repair.rs:604-611 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/repair.rs"},"region":{"startLine":526}}}],"partialFingerprints":{"codehealthFindingId/v1":"63cbd070b573b5010ec8828b69143cb6e4c5cef9c20eb0fb62ff604a34425441"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): engine/packages/guard-core/src/response_body.rs:170-177 | engine/packages/guard-core/src/response_body.rs:183-190 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/guard-core/src/response_body.rs"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"db4f3e1a4273267d7dfef222b7e4e0f4a373989c12512ec51b722c1f3adc998a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): engine/packages/pegboard-gateway/src/lib.rs:207-214 | engine/packages/pegboard-gateway3/src/http_stream/request.rs:300-307 \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":"engine/packages/pegboard-gateway/src/lib.rs"},"region":{"startLine":207}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1564a0fdc0443ee90f8b89781aef275477bdd1b24b90f5e3798930b3d88a615"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): engine/packages/util/src/async_counter.rs:17-24 | engine/sdks/rust/envoy-client/src/async_counter.rs:22-29 \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":"engine/packages/util/src/async_counter.rs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5b15c6ed81274bbf109be8d3bd3005c5a8a157ca03f8f1e314c1a5b223c9b74"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): engine/sdks/rust/envoy-client/src/actor/http.rs:574-581 | engine/sdks/rust/envoy-client/src/actor/http.rs:650-657 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/actor/http.rs"},"region":{"startLine":574}}}],"partialFingerprints":{"codehealthFindingId/v1":"14b35fe44b6e622265141c407403ddf8661872ac9733c4f07e1ebe3b1adc226f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6\u20138 lines \u00D7 2): engine/sdks/rust/envoy-client/src/tunnel.rs:675-682 | engine/sdks/rust/envoy-client/src/tunnel.rs:698-703 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/tunnel.rs"},"region":{"startLine":675}}}],"partialFingerprints":{"codehealthFindingId/v1":"759521f39cea8c8008ae0728267923133ccefff3436bc9acdb123fba6227bb7b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): rivetkit-python/client/src/events/async/client.rs:43-50 | rivetkit-python/client/src/simple/async/client.rs:43-50 \u2014 before extracting anything, compare \u0060rivetkit-python/client/src/events/async/client.rs\u0060 and \u0060rivetkit-python/client/src/simple/async/client.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 57 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-python/client/src/events/async/client.rs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a3e980788db081cd4a2d1e3695a850832ce99062f4a05c8cfd6516aeb43d41d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): rivetkit-python/client/src/events/async/client.rs:64-71 | rivetkit-python/client/src/simple/async/client.rs:62-69 \u2014 before extracting anything, compare \u0060rivetkit-python/client/src/events/async/client.rs\u0060 and \u0060rivetkit-python/client/src/simple/async/client.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 57 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-python/client/src/events/async/client.rs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e61b32f15d86ac79ae4cff744cf8c1b4fe795743cce7f43eb58bcd8b0c955d5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): rivetkit-python/client/src/events/async/client.rs:85-92 | rivetkit-python/client/src/simple/async/client.rs:81-88 \u2014 before extracting anything, compare \u0060rivetkit-python/client/src/events/async/client.rs\u0060 and \u0060rivetkit-python/client/src/simple/async/client.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 57 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-python/client/src/events/async/client.rs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f2bcd6e5d9ee0574f0d7b87d00547b32a48e5773e185830ee674550b4113be6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): rivetkit-rust/packages/client/src/protocol/codec.rs:133-140 | rivetkit-rust/packages/client/src/protocol/codec.rs:143-150 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/client/src/protocol/codec.rs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"5eedaf313d58c11d833398922b25acdee3b755bb7acb80a2da7c3a880515a3c7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/actor/actor_runtime_socket.rs:329-336 | rivetkit-rust/packages/rivetkit-core/src/actor/actor_runtime_socket.rs:557-564 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/actor_runtime_socket.rs"},"region":{"startLine":329}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c6f618d8c28a52edbf60629bbb938f21f78a48332224305188387e8f60bd27f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/serverless_http.rs:346-353 | rivetkit-rust/packages/rivetkit-core/src/serverless_http.rs:405-412 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/serverless_http.rs"},"region":{"startLine":346}}}],"partialFingerprints":{"codehealthFindingId/v1":"b81f3d1b17236470e7e042c6a05df7949b8c2821620df4843b17e8e9a4b9578e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): rivetkit-typescript/packages/rivetkit-napi/src/registry.rs:443-450 | rivetkit-typescript/packages/rivetkit-napi/src/registry.rs:488-495 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit-napi/src/registry.rs"},"region":{"startLine":443}}}],"partialFingerprints":{"codehealthFindingId/v1":"765ea62f424fe097982e38105940cffb9c5c5b65c3d37ce7c631bced7e4a09fd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): engine/packages/gasoline/src/db/kv/keys/history.rs:1868-1874 | engine/packages/gasoline/src/db/kv/keys/history.rs:1981-1987 | engine/packages/gasoline/src/db/kv/keys/history.rs:2058-2064 | engine/packages/gasoline/src/db/kv/keys/history.rs:2099-2105 \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":"engine/packages/gasoline/src/db/kv/keys/history.rs"},"region":{"startLine":1868}}}],"partialFingerprints":{"codehealthFindingId/v1":"03464700e8106262a3c2c5910a772969ac6ef560cc9fb41b10fb9d0ae20db70b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): engine/packages/universaldb/src/driver/postgres/transaction.rs:224-230 | engine/packages/universaldb/src/driver/postgres/transaction.rs:316-322 | engine/packages/universaldb/src/driver/rocksdb/transaction.rs:248-254 | engine/packages/universaldb/src/driver/rocksdb/transaction.rs:340-346 \u2014 \u0060engine/packages/universaldb/src/driver/postgres/transaction.rs\u0060 and \u0060engine/packages/universaldb/src/driver/rocksdb/transaction.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 6 separate duplicated blocks between them, totalling at least 53 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universaldb/src/driver/postgres/transaction.rs"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"695760a0b2567dd95be78086e59b63291eb315386db6e1bff08679b293b47ad9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): engine/packages/depot/src/compaction/shared.rs:3493-3499 | engine/packages/depot/src/doctor.rs:3410-3416 | engine/packages/depot/src/inspect.rs:1424-1430 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/compaction/shared.rs"},"region":{"startLine":3493}}}],"partialFingerprints":{"codehealthFindingId/v1":"df078ebb357e3a17a0d5f24a46765ff3ee9e654390a170d3e1b109b4f31fed2f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): engine/packages/depot/src/workflows/db_reclaimer.rs:323-329 | engine/packages/depot/src/workflows/db_reclaimer.rs:882-888 | engine/packages/depot/src/workflows/db_reclaimer.rs:1198-1205 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/workflows/db_reclaimer.rs"},"region":{"startLine":323}}}],"partialFingerprints":{"codehealthFindingId/v1":"88a234d59c08b0e3dbdb9b6943d71517293c1f30cff09aaa25595ae43507ad88"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): engine/packages/cli/src/commands/deploy.rs:123-129 | engine/packages/cli/src/commands/token.rs:84-90 \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":"engine/packages/cli/src/commands/deploy.rs"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"637e557a31604777ef100e8254a7940aaf1948704f18462a579760065de4c8a5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): engine/packages/depot/src/conveyer/commit/test_hooks.rs:43-49 | engine/packages/depot/src/takeover.rs:91-97 \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":"engine/packages/depot/src/conveyer/commit/test_hooks.rs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"f54e471c9f502828a125eae86a8e547ef1c3e067417b5fc6fe8ca767e865da04"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): engine/packages/depot/src/workflows/db_reclaimer.rs:283-289 | engine/packages/depot/src/workflows/db_reclaimer.rs:845-851 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/workflows/db_reclaimer.rs"},"region":{"startLine":283}}}],"partialFingerprints":{"codehealthFindingId/v1":"04f358c72dcd83096f8d38542e44b1612439f2a12495052944ea260478d21bd7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): engine/packages/depot-client/src/query.rs:309-315 | engine/packages/depot-client/src/query.rs:386-392 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot-client/src/query.rs"},"region":{"startLine":309}}}],"partialFingerprints":{"codehealthFindingId/v1":"be7d9ef06f7d6bbf185465b475ce3606cf7ed0d4e495403292a20c1b537a3c4d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): engine/packages/engine/src/util/wf/mod.rs:57-63 | engine/packages/engine/src/util/wf/signal.rs:25-31 \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":"engine/packages/engine/src/util/wf/mod.rs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"6edbe464b37ca44cbdd11d9e81aa6edb174ff44fffa4bfd8d06175cc268d434c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): engine/packages/gasoline/src/db/kv/debug.rs:1918-1924 | engine/packages/gasoline/src/db/kv/debug.rs:2103-2109 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/debug.rs"},"region":{"startLine":1918}}}],"partialFingerprints":{"codehealthFindingId/v1":"73becd97f8f44ff0380c1a0248c8fd3a2fc8019e6c3ab0aa5ce9a55c4cd152df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): engine/packages/pegboard-envoy/src/conn.rs:101-107 | engine/packages/pegboard-runner/src/conn.rs:49-55 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-envoy/src/conn.rs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c8a5d67c7d387eb5e52d22e9c71ab5c895eeb932a3d688d3de348b2b4d3b853"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): engine/packages/pegboard-gateway3/src/http_stream/handler.rs:163-169 | engine/packages/pegboard-gateway3/src/lib.rs:783-789 \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":"engine/packages/pegboard-gateway3/src/http_stream/handler.rs"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"4acd7f238fbd9c4422a3d2576b042bbfe7b9ad13d7bbcb88dbc7b1eca1f8c67c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): engine/packages/universaldb/src/driver/postgres/transaction.rs:158-164 | engine/packages/universaldb/src/driver/rocksdb/transaction.rs:182-188 \u2014 \u0060engine/packages/universaldb/src/driver/postgres/transaction.rs\u0060 and \u0060engine/packages/universaldb/src/driver/rocksdb/transaction.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 6 separate duplicated blocks between them, totalling at least 53 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universaldb/src/driver/postgres/transaction.rs"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"a71b59122de00f2f59cecf49c60621d4709969df1f56e294333d1b51337355cb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): engine/sdks/rust/envoy-client/src/actor.rs:768-774 | engine/sdks/rust/envoy-client/src/actor.rs:1016-1022 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/actor.rs"},"region":{"startLine":768}}}],"partialFingerprints":{"codehealthFindingId/v1":"3079bb64baeee8f1c4e6fdc66dbe2d1d74ddc3810876c6bca6281530581b1808"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): engine/sdks/rust/envoy-client/src/tunnel.rs:387-393 | engine/sdks/rust/envoy-client/src/tunnel.rs:579-585 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/tunnel.rs"},"region":{"startLine":387}}}],"partialFingerprints":{"codehealthFindingId/v1":"f114b396331530ddf81f4dd160690c355eb39f7542886ddf706038e83a67812a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): rivetkit-rust/packages/inspector-protocol/src/versioned.rs:492-498 | rivetkit-rust/packages/inspector-protocol/src/versioned.rs:603-609 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/inspector-protocol/src/versioned.rs"},"region":{"startLine":492}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd26a23deb32bd16cb9f99cbd5b51bf23ce8f3bdb3ec5c0625ba9194eea1f30a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs:951-957 | rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs:1413-1419 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs"},"region":{"startLine":951}}}],"partialFingerprints":{"codehealthFindingId/v1":"87ffb0a42516cee46e73ca970ba0cbb374375b3b5ec62b12fe43415bddfd4ae9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/tx.rs:512-518 | rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/tx.rs:569-575 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/tx.rs"},"region":{"startLine":512}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f1fecc8a8babec5ade3fda4d9b0131aa05e8b62c4581d77bbc81b066a2c8e9f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/telemetry.rs:777-783 | rivetkit-rust/packages/rivetkit-core/src/telemetry.rs:805-811 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/telemetry.rs"},"region":{"startLine":777}}}],"partialFingerprints":{"codehealthFindingId/v1":"515ca5d85110f87daea37ec0a325302a41756965ed2564f2ade3153cdd7c52c3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 4): engine/packages/epoxy/src/replica/commit_kv.rs:40-45 | engine/packages/epoxy/src/replica/messages/accept.rs:31-36 | engine/packages/epoxy/src/replica/messages/prepare.rs:30-35 | engine/packages/epoxy/src/replica/messages/read_state.rs:28-33 \u2014 before extracting anything, compare \u0060engine/packages/epoxy/src/replica/messages/accept.rs\u0060 and \u0060engine/packages/epoxy/src/replica/messages/prepare.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 32 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":"engine/packages/epoxy/src/replica/commit_kv.rs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e5bc3fff02e395fb902accf7169470f594f5a6c0573a85e1f4dd4eaebf05fa6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): engine/packages/bootstrap/src/lib.rs:6-11 | engine/packages/guard/src/lib.rs:13-18 | engine/packages/pegboard-outbound/src/lib.rs:29-34 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/bootstrap/src/lib.rs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"f110fdfeb383b9a7f854a81abc299a8dab9589574bc0e5df9618bfe0af65bba4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): engine/sdks/rust/epoxy-protocol/src/convert.rs:122-127 | engine/sdks/rust/epoxy-protocol/src/convert.rs:171-176 | engine/sdks/rust/epoxy-protocol/src/convert.rs:214-219 \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":"engine/sdks/rust/epoxy-protocol/src/convert.rs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d149a5f446569e0e06bc53072a03f31ad560926e0d96da6dcf93f50be20e2f2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): engine/sdks/rust/epoxy-protocol/src/convert.rs:517-522 | engine/sdks/rust/epoxy-protocol/src/convert.rs:566-571 | engine/sdks/rust/epoxy-protocol/src/convert.rs:609-614 \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":"engine/sdks/rust/epoxy-protocol/src/convert.rs"},"region":{"startLine":517}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fbd10bcd201872a4229efae97eeda754f5fb7f143cbfcebf56f6272d35a6b03"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): engine/packages/cli/src/commands/logs.rs:95-100 | engine/packages/cli/src/commands/logs.rs:129-134 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/cli/src/commands/logs.rs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"53230adaeb20c9ee6697b224e47323c82d1555c1ad7823c0bdcecedcaca0cbcc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): engine/packages/engine/src/commands/depot_transfer.rs:303-308 | engine/packages/engine/src/commands/depot_transfer.rs:413-418 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/engine/src/commands/depot_transfer.rs"},"region":{"startLine":303}}}],"partialFingerprints":{"codehealthFindingId/v1":"aed6bf324b279c72c18dd4e0259dcc7a30ac9f7b5a834be82cea5bdd6cac390f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): engine/packages/gasoline/src/db/kv/debug.rs:2361-2366 | engine/packages/gasoline/src/db/kv/mod.rs:3691-3696 \u2014 before extracting anything, compare \u0060engine/packages/gasoline/src/db/kv/debug.rs\u0060 and \u0060engine/packages/gasoline/src/db/kv/mod.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 34 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/debug.rs"},"region":{"startLine":2361}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd23cb938a138b178ebade428926519fd3cd4df937b6113e2d803c39ac53c398"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor2/alloc_serverful/random_full_range.rs:37-42 | engine/packages/pegboard/src/workflows/actor2/alloc_serverful/random_ping_timestamp.rs:129-134 \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":"engine/packages/pegboard/src/workflows/actor2/alloc_serverful/random_full_range.rs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"977532a44cc0473eb412824133dd44ef2f4aa99561ca3f23f7feb0eec22dd5af"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): engine/packages/runner-protocol/src/versioned.rs:1377-1382 | engine/packages/runner-protocol/src/versioned.rs:1719-1724 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/runner-protocol/src/versioned.rs"},"region":{"startLine":1377}}}],"partialFingerprints":{"codehealthFindingId/v1":"77b31880eb46e84e7fa6133550fb0c5bb5ec9303ca04372e982c3d0a71c2aba2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): engine/packages/term/src/format.rs:8-13 | engine/packages/term/src/format.rs:22-27 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/term/src/format.rs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"542ccb23634390247e0b4746751d98092fb61dd91abbab37f2809eff9db733bc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): engine/sdks/rust/envoy-client/src/handle.rs:832-837 | engine/sdks/rust/envoy-client/src/handle.rs:871-876 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/handle.rs"},"region":{"startLine":832}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bb18c37e51ceacab60d38788bfbeb3346df7b651c9b96f657438ce4d2cd05d5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): rivetkit-python/client/src/events/async/handle.rs:27-32 | rivetkit-python/client/src/simple/async/handle.rs:47-52 \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":"rivetkit-python/client/src/events/async/handle.rs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"49e7ceaf1f2e18b16dda4926cd3865972ea8621b147b6c145618f4421cd58cd1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): rivetkit-rust/packages/inspector-protocol/src/versioned.rs:1134-1139 | rivetkit-rust/packages/inspector-protocol/src/versioned.rs:1236-1241 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/inspector-protocol/src/versioned.rs"},"region":{"startLine":1134}}}],"partialFingerprints":{"codehealthFindingId/v1":"c062f1e06b160023e0845daa88cf0aa026547ced659c6c476c3db5786a424350"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): rivetkit-typescript/packages/rivetkit-napi/src/actor_factory.rs:800-805 | rivetkit-typescript/packages/rivetkit-napi/src/actor_factory.rs:867-872 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit-napi/src/actor_factory.rs"},"region":{"startLine":800}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0ab2a7a7051b670d36c9b58070f244ec2b71845bc6010676e40c07f8bda2bce"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 8): engine/packages/gasoline/src/db/kv/keys/history.rs:1873-1877 | engine/packages/gasoline/src/db/kv/keys/history.rs:1945-1949 | engine/packages/gasoline/src/db/kv/keys/history.rs:1986-1990 | engine/packages/gasoline/src/db/kv/keys/history.rs:1997-2001 | engine/packages/gasoline/src/db/kv/keys/history.rs:2063-2067 | engine/packages/gasoline/src/db/kv/keys/history.rs:2104-2108 | engine/packages/gasoline/src/db/kv/keys/history.rs:2114-2118 | engine/packages/gasoline/src/db/kv/keys/history.rs:2159-2163 \u2014 all 8 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/keys/history.rs"},"region":{"startLine":1873}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe92885851cd17d824b6ab9788ce1bf8d0cfcbd4dfdd4b1526e70efa22232a10"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 6): engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:144-148 | engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:310-314 | engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:476-480 | engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:642-646 | engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:808-812 | engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:974-978 \u2014 all 6 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-protocol/src/versioned/mod.rs"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"25363a3ff62f82c9c8fc25baf4697d751d1fab6d394329df8e7d7d52df1b2922"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): engine/packages/pegboard/src/workflows/actor2/mod.rs:976-980 | engine/packages/pegboard/src/workflows/actor2/mod.rs:1043-1047 | engine/packages/pegboard/src/workflows/actor2/mod.rs:1099-1103 \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":"engine/packages/pegboard/src/workflows/actor2/mod.rs"},"region":{"startLine":976}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fcbd75141ec28c922a0ecc016445b5fa0f9708d262957f96865c0342eeda850"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): engine/packages/pegboard-gateway/src/lib.rs:593-597 | engine/packages/pegboard-gateway2/src/lib.rs:870-874 | engine/packages/pegboard-gateway3/src/lib.rs:619-623 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 19 separate duplicated blocks between them, totalling at least 440 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/lib.rs"},"region":{"startLine":593}}}],"partialFingerprints":{"codehealthFindingId/v1":"1027db5632bd872b571f2f4f0aed5582b80dacdf78b35a950d2b181f3fcae449"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): engine/packages/pegboard-gateway/src/metrics_task.rs:63-67 | engine/packages/pegboard-gateway2/src/metrics_task.rs:63-67 | engine/packages/pegboard-gateway3/src/metrics_task.rs:55-59 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway/src/metrics_task.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/metrics_task.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 58 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/metrics_task.rs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"20bd695760a6290f138bada254674b585bd4739bb71e91394b513805d435869e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): engine/packages/pegboard-gateway2/src/lib.rs:364-369 | engine/packages/pegboard-gateway3/src/http_stream/handler.rs:85-89 | engine/packages/pegboard-gateway3/src/lib.rs:137-142 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 34 separate duplicated blocks between them, totalling at least 700 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/lib.rs"},"region":{"startLine":364}}}],"partialFingerprints":{"codehealthFindingId/v1":"b570cbd23e1984dfb5377fb2a9c898f6ebea50c5496891cc02ef24e74b482e1b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): engine/packages/gasoline/src/db/kv/keys/history.rs:1934-1938 | engine/packages/gasoline/src/db/kv/keys/history.rs:2046-2050 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/keys/history.rs"},"region":{"startLine":1934}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9b806e2db964864009531cca9a89b5109b0b4362820e6ff6d7c788c345b4c97"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): engine/packages/gasoline/src/db/kv/keys/workflow.rs:1339-1343 | engine/packages/namespace/src/keys/metric.rs:207-211 \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":"engine/packages/gasoline/src/db/kv/keys/workflow.rs"},"region":{"startLine":1339}}}],"partialFingerprints":{"codehealthFindingId/v1":"841b965ef9dd60ad695f94f98649fe81f8926a36e2904b22dd894c0aa201905a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): engine/packages/pegboard-envoy/src/lib.rs:84-88 | engine/packages/pegboard-runner/src/lib.rs:73-77 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-envoy/src/lib.rs\u0060 and \u0060engine/packages/pegboard-runner/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 118 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-envoy/src/lib.rs"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d6953fd4322d70887e5761857209fa958de0ca2fe5472ccf43fc1d135484f69"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): engine/packages/universaldb/src/driver/postgres/transaction_task.rs:231-235 | engine/packages/universaldb/src/driver/postgres/transaction_task.rs:258-262 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universaldb/src/driver/postgres/transaction_task.rs"},"region":{"startLine":231}}}],"partialFingerprints":{"codehealthFindingId/v1":"021fe12b01e97168350a450a6f7a06778e0ab9e349d285b26ebf46b0db39cecc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): rivetkit-typescript/packages/rivetkit-wasm/src/lib.rs:670-674 | rivetkit-typescript/packages/rivetkit-wasm/src/lib.rs:689-693 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit-wasm/src/lib.rs"},"region":{"startLine":670}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca170e278f25409ca884ac8688b2ddfa7f09a8e90c7403a54f478faf7411727a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (37 lines \u00D7 4): engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs:719-755 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs:720-756 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs:779-815 | engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v6.rs:787-823 \u2014 before extracting anything, compare \u0060engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs\u0060 and \u0060engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 131 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":"engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs"},"region":{"startLine":719}}}],"partialFingerprints":{"codehealthFindingId/v1":"473b75998427b5d2f8299ac0e3cb2059128abdb983ffd5644163d602c0c9354e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (53 lines \u00D7 2): engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v8.rs:1119-1171 | engine/sdks/rust/envoy-protocol/src/versioned/v8_to_v7.rs:1116-1168 \u2014 before extracting anything, compare \u0060engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v8.rs\u0060 and \u0060engine/sdks/rust/envoy-protocol/src/versioned/v8_to_v7.rs\u0060 as WHOLE FILES: this scan already matched 12 separate duplicated blocks between them, totalling at least 138 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. 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":"engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v8.rs"},"region":{"startLine":1119}}}],"partialFingerprints":{"codehealthFindingId/v1":"286dbb47259a7df03f42f44f7b7ee0fb571c77ae55c622e8212d11aa6a7fcb63"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): engine/packages/runner-protocol/src/util.rs:2-14 | engine/sdks/rust/envoy-protocol/src/util.rs:2-14 \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":"engine/packages/runner-protocol/src/util.rs"},"region":{"startLine":2}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd49c736e4490944f3d9038ca429348cbeda02a5016d6478ced00fa75d3dd307"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 4): engine/packages/api-public/src/actors/list.rs:45-50 | engine/packages/api-public/src/envoys.rs:24-29 | engine/packages/api-public/src/namespaces.rs:25-30 | engine/packages/api-public/src/runners.rs:25-30 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 4 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 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-public/src/actors/list.rs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d4383fabe6c2db2383b670d14518c7f6d28200eb2f09a67fc47c5a94d2d9fb9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): engine/packages/api-public/src/actors/list_names.rs:34-39 | engine/packages/api-public/src/runners.rs:90-95 \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":"engine/packages/api-public/src/actors/list_names.rs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c80f2198be8fe4dcc7ab56dc64c681c7d69cf2dbfdd9d6f1a3d535aa372006f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): engine/packages/depot/src/compaction/shared.rs:3529-3535 | engine/packages/depot/src/conveyer/commit/helpers.rs:15-21 \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":"engine/packages/depot/src/compaction/shared.rs"},"region":{"startLine":3529}}}],"partialFingerprints":{"codehealthFindingId/v1":"55dff66daa28b9fb1197db37ec3e522997355684b1499ad284cab6fc4726151f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 13): engine/packages/depot/src/conveyer/types/branch.rs:130-134 | engine/packages/depot/src/conveyer/types/branch.rs:192-196 | engine/packages/depot/src/conveyer/types/branch.rs:223-227 | engine/packages/depot/src/conveyer/types/branch.rs:254-258 | engine/packages/depot/src/conveyer/types/compaction.rs:156-160 | engine/packages/depot/src/conveyer/types/history_pin.rs:51-55 | engine/packages/depot/src/conveyer/types/policy.rs:70-74 | engine/packages/depot/src/conveyer/types/policy.rs:97-101 | engine/packages/depot/src/conveyer/types/restore_points.rs:169-173 | engine/packages/depot/src/conveyer/types/storage.rs:61-65 | engine/packages/depot/src/conveyer/types/storage.rs:177-181 | engine/packages/depot/src/conveyer/types/storage.rs:208-212 | engine/packages/depot/src/conveyer/types/storage.rs:239-243 \u2014 there are 13 copies across 6 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 13 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/conveyer/types/branch.rs"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"38ea77828142aecbd7a69e20a4200252a2014d8f8a78134dcee377e0d6c9ef3a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): engine/packages/depot/src/doctor.rs:3401-3406 | engine/packages/depot/src/inspect.rs:739-744 \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":"engine/packages/depot/src/doctor.rs"},"region":{"startLine":3401}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc04c9722be45f549e8a44c54782cfa00cecd4d19743db661348ded79e5c616f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): engine/packages/depot/src/conveyer/branch/shared.rs:159-165 | engine/packages/depot/src/conveyer/restore_point/resolve.rs:434-440 \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":"engine/packages/depot/src/conveyer/branch/shared.rs"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ec8d04fcfa0cb1aa445f6a863dbea143be02634db2ea05f2388293973e5442f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/packages/depot-client/src/vfs.rs:88-96 | engine/packages/depot-client/src/worker.rs:947-955 \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":"engine/packages/depot-client/src/vfs.rs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"09dd71ec088853f8c895058b392f51b7954554572fe75f2eae7d9261a37a48ed"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): engine/packages/depot-client-embedded/src/lib.rs:206-211 | engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs:2454-2459 \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":"engine/packages/depot-client-embedded/src/lib.rs"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"5855f9544f848f14a718b7742283a6fd6d2005f4cb7ca69e8a7b79a721480894"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 4): engine/packages/gasoline/src/builder/common/signal.rs:76-89 | engine/packages/gasoline/src/builder/common/workflow.rs:64-77 | engine/packages/gasoline/src/builder/workflow/signal.rs:64-77 | engine/packages/gasoline/src/builder/workflow/sub_workflow.rs:49-62 \u2014 \u0060engine/packages/gasoline/src/builder/common/signal.rs\u0060 and \u0060engine/packages/gasoline/src/builder/workflow/signal.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 5 separate duplicated blocks between them, totalling at least 89 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/builder/common/signal.rs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"f961384d19fe94592b6837722dd1381478e65a151bbc04e158c447ac4f3a860f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): engine/packages/gasoline/src/ctx/activity.rs:160-166 | engine/packages/gasoline/src/ctx/operation.rs:155-161 | engine/packages/gasoline/src/ctx/standalone.rs:210-216 | engine/packages/gasoline/src/ctx/test.rs:225-231 \u2014 before extracting anything, compare \u0060engine/packages/gasoline/src/ctx/operation.rs\u0060 and \u0060engine/packages/gasoline/src/ctx/standalone.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 38 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":"engine/packages/gasoline/src/ctx/activity.rs"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"7462d425487af8222cff18251c114aa6fa4fbe50dbdd1da64112029d9f7f117d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/packages/gasoline/src/ctx/operation.rs:76-84 | engine/packages/gasoline/src/ctx/standalone.rs:131-139 \u2014 before extracting anything, compare \u0060engine/packages/gasoline/src/ctx/operation.rs\u0060 and \u0060engine/packages/gasoline/src/ctx/standalone.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 38 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":"engine/packages/gasoline/src/ctx/operation.rs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4b247cf471bf188d2fa470613d276d1c17e8c580c36754068d8c939596ed8c9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/packages/gasoline/src/ctx/operation.rs:114-122 | engine/packages/gasoline/src/ctx/standalone.rs:169-177 \u2014 before extracting anything, compare \u0060engine/packages/gasoline/src/ctx/operation.rs\u0060 and \u0060engine/packages/gasoline/src/ctx/standalone.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 38 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":"engine/packages/gasoline/src/ctx/operation.rs"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3efafe18deb2201f8608191285b768e07a66d1e88001cff110ef475ff06f856"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): engine/packages/gasoline/src/ctx/operation.rs:132-144 | engine/packages/gasoline/src/ctx/standalone.rs:187-199 \u2014 before extracting anything, compare \u0060engine/packages/gasoline/src/ctx/operation.rs\u0060 and \u0060engine/packages/gasoline/src/ctx/standalone.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 38 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":"engine/packages/gasoline/src/ctx/operation.rs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"31ba59e9a529a3e35907a8ee8b857ad404543184a628b6a8098a26131edbb06f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): engine/packages/gasoline/src/db/kv/debug.rs:2588-2597 | engine/packages/gasoline/src/db/kv/mod.rs:3803-3812 \u2014 before extracting anything, compare \u0060engine/packages/gasoline/src/db/kv/debug.rs\u0060 and \u0060engine/packages/gasoline/src/db/kv/mod.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 34 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/debug.rs"},"region":{"startLine":2588}}}],"partialFingerprints":{"codehealthFindingId/v1":"eeb4cd73bccf5b46b3b6b203d953065a8e1ba4ffb7257d26b084f9c56915c829"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): engine/packages/gasoline/src/db/kv/debug.rs:2603-2610 | engine/packages/gasoline/src/db/kv/mod.rs:3818-3825 \u2014 before extracting anything, compare \u0060engine/packages/gasoline/src/db/kv/debug.rs\u0060 and \u0060engine/packages/gasoline/src/db/kv/mod.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 34 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/debug.rs"},"region":{"startLine":2603}}}],"partialFingerprints":{"codehealthFindingId/v1":"12a1b11c000e7d28e93d02bb3d89f1629910150e5c2ac5821de55f60431974db"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): engine/packages/gasoline/src/db/kv/debug.rs:2655-2664 | engine/packages/gasoline/src/db/kv/mod.rs:3831-3840 \u2014 before extracting anything, compare \u0060engine/packages/gasoline/src/db/kv/debug.rs\u0060 and \u0060engine/packages/gasoline/src/db/kv/mod.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 34 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/debug.rs"},"region":{"startLine":2655}}}],"partialFingerprints":{"codehealthFindingId/v1":"ead52290e2f5c787fb087b58de90390277a5703bcdb4c596366e223db1df3529"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 7): engine/packages/gasoline/src/db/kv/keys/history.rs:613-620 | engine/packages/gasoline/src/db/kv/keys/history.rs:729-736 | engine/packages/gasoline/src/db/kv/keys/history.rs:1454-1461 | engine/packages/gasoline/src/db/kv/keys/signal.rs:16-23 | engine/packages/gasoline/src/db/kv/keys/workflow.rs:160-167 | engine/packages/gasoline/src/db/kv/keys/workflow.rs:247-254 | engine/packages/gasoline/src/db/kv/keys/workflow.rs:334-341 \u2014 before extracting anything, compare \u0060engine/packages/gasoline/src/db/kv/keys/history.rs\u0060 and \u0060engine/packages/gasoline/src/db/kv/keys/workflow.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 35 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/keys/history.rs"},"region":{"startLine":613}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca825acdb2f4e93db3e7aca814948f73fe88f6e40a574fb71cb3c984cecf7262"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): engine/packages/gasoline/src/db/kv/keys/worker.rs:41-47 | engine/packages/pegboard/src/keys/runner.rs:133-139 \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":"engine/packages/gasoline/src/db/kv/keys/worker.rs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"425628a4547640585d3af9773923461a4b337a4779a14d5e796420bf8b7e21a1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): engine/packages/gasoline/src/db/kv/keys/worker.rs:131-137 | engine/packages/pegboard/src/keys/actor.rs:719-725 | engine/packages/pegboard/src/keys/runner.rs:544-551 \u2014 before extracting anything, compare \u0060engine/packages/pegboard/src/keys/actor.rs\u0060 and \u0060engine/packages/pegboard/src/keys/runner.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 39 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/keys/worker.rs"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"27cbd76267367c46fc28a4484291e61334a44a64b0236df6a896ab3a8bd78bc8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/packages/logs/src/unix.rs:16-24 | engine/packages/logs/src/windows.rs:26-34 \u2014 before extracting anything, compare \u0060engine/packages/logs/src/unix.rs\u0060 and \u0060engine/packages/logs/src/windows.rs\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 126 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":"engine/packages/logs/src/unix.rs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"f065addf4d1985eef2cb7eaf8ef17442224a1b74d73628cc7bf7b0fcca254298"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): engine/packages/logs/src/unix.rs:28-35 | engine/packages/logs/src/windows.rs:38-45 \u2014 before extracting anything, compare \u0060engine/packages/logs/src/unix.rs\u0060 and \u0060engine/packages/logs/src/windows.rs\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 126 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":"engine/packages/logs/src/unix.rs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"082e3ca3b0d9ba04052b7a2507f9021cfb181261b3dd7edf17dae554bcca4de2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): engine/packages/logs/src/unix.rs:117-124 | engine/packages/logs/src/windows.rs:141-148 \u2014 before extracting anything, compare \u0060engine/packages/logs/src/unix.rs\u0060 and \u0060engine/packages/logs/src/windows.rs\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 126 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":"engine/packages/logs/src/unix.rs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a4d75b7c5bcbe2fe2efb45ac0515cd989345e54f97f0693d4ca5caa61880f27"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): engine/packages/namespace/src/utils.rs:6-11 | engine/packages/pegboard/src/utils.rs:37-42 \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":"engine/packages/namespace/src/utils.rs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f0c38193b6a9a8a747b8926e43a94b2e8b37ce8060a9d82e5573a6b95e2255a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): engine/packages/pegboard/src/keys/actor.rs:56-61 | engine/packages/pegboard/src/keys/runner.rs:44-50 \u2014 before extracting anything, compare \u0060engine/packages/pegboard/src/keys/actor.rs\u0060 and \u0060engine/packages/pegboard/src/keys/runner.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 39 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/keys/actor.rs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ce32757e44c1eddaae9bbe9f448e5b96bcb591476d4188616926565a13d1e2d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): engine/packages/pegboard/src/keys/actor.rs:326-332 | engine/packages/pegboard/src/keys/runner.rs:409-416 \u2014 before extracting anything, compare \u0060engine/packages/pegboard/src/keys/actor.rs\u0060 and \u0060engine/packages/pegboard/src/keys/runner.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 39 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/keys/actor.rs"},"region":{"startLine":326}}}],"partialFingerprints":{"codehealthFindingId/v1":"3cd9fb37d27543598f94e73fa2bd21f98901453ae24afaaee2127effc8abe7ad"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): engine/packages/pegboard/src/keys/actor.rs:414-420 | engine/packages/pegboard/src/keys/runner.rs:454-461 \u2014 before extracting anything, compare \u0060engine/packages/pegboard/src/keys/actor.rs\u0060 and \u0060engine/packages/pegboard/src/keys/runner.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 39 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/keys/actor.rs"},"region":{"startLine":414}}}],"partialFingerprints":{"codehealthFindingId/v1":"57073874abce72a04949a844689f6cc5647ff2c0d82da7e25863ae2a80ec6fdd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): engine/packages/pegboard/src/keys/actor.rs:458-464 | engine/packages/pegboard/src/keys/runner.rs:499-506 \u2014 before extracting anything, compare \u0060engine/packages/pegboard/src/keys/actor.rs\u0060 and \u0060engine/packages/pegboard/src/keys/runner.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 39 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/keys/actor.rs"},"region":{"startLine":458}}}],"partialFingerprints":{"codehealthFindingId/v1":"91909904dcab97331a32b7fbc4908f28fb667b19c323133a3de8b0b6bc285faa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/packages/pegboard/src/keys/envoy.rs:760-768 | engine/packages/pegboard/src/keys/runner.rs:812-820 \u2014 before extracting anything, compare \u0060engine/packages/pegboard/src/keys/envoy.rs\u0060 and \u0060engine/packages/pegboard/src/keys/runner.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 43 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/keys/envoy.rs"},"region":{"startLine":760}}}],"partialFingerprints":{"codehealthFindingId/v1":"c84d79a0367a1386d855a0a0177f418d4ebd7b4fef8ac11cb43ddd3a56bdbf2a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): engine/packages/pegboard/src/keys/envoy.rs:1365-1371 | engine/packages/pegboard/src/keys/runner.rs:257-263 \u2014 before extracting anything, compare \u0060engine/packages/pegboard/src/keys/envoy.rs\u0060 and \u0060engine/packages/pegboard/src/keys/runner.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 43 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/keys/envoy.rs"},"region":{"startLine":1365}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d3fce7a0606a55a23c84de0921108caf8325f06362f7bcf6a936366217491b4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): engine/packages/pegboard-gateway/src/shared_state.rs:169-177 | engine/packages/pegboard-gateway2/src/shared_state.rs:226-234 | engine/packages/pegboard-gateway3/src/shared_state.rs:239-247 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 105 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/shared_state.rs"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"b06ab7cb3f4794ec4dd63179d47e2fed8b8fc80116664a7bd760db8246522a5b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): engine/packages/pegboard-gateway/src/shared_state.rs:628-637 | engine/packages/pegboard-gateway2/src/shared_state.rs:501-510 | engine/packages/pegboard-gateway3/src/shared_state.rs:558-567 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 105 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/shared_state.rs"},"region":{"startLine":628}}}],"partialFingerprints":{"codehealthFindingId/v1":"d97490ed50deaeb59b67b7e6ac26431870ab67e34ab75324b93166ed8b51f285"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): engine/packages/pegboard-gateway2/src/shared_state.rs:29-34 | engine/packages/pegboard-gateway3/src/shared_state.rs:35-40 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc79d55dd73cdd786613fd755af82b8131acf6dbf071aa4adb36d038f9632b12"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): engine/packages/pegboard-gateway2/src/shared_state.rs:60-65 | engine/packages/pegboard-gateway3/src/shared_state.rs:66-71 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"1746dffdf3e6e4bbacfd8b85ecd10d840bcac5444112ca4b5d61c93032f3b0a1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/packages/pegboard-gateway2/src/shared_state.rs:159-167 | engine/packages/pegboard-gateway3/src/shared_state.rs:163-171 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"b50e1701dbcd4783266b34054e4bc6be05aaf95fbf56e873d66d6064bb62433d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): engine/packages/pegboard-gateway2/src/shared_state.rs:169-178 | engine/packages/pegboard-gateway3/src/shared_state.rs:173-182 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"b09b10379aa65db3a4d6fd4ca95b896c4eaaec21799f667e6e2971acf5ff6e65"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): engine/packages/pegboard-gateway2/src/shared_state.rs:1177-1189 | engine/packages/pegboard-gateway3/src/shared_state.rs:2087-2099 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":1177}}}],"partialFingerprints":{"codehealthFindingId/v1":"96317ae33c5e92bdf2bc1e15a73adfb2cd14d9230bc51bdb85444dafd7dda8a1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/packages/pegboard-gateway2/src/shared_state.rs:1137-1145 | engine/packages/pegboard-gateway3/src/shared_state.rs:1615-1623 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway2/src/shared_state.rs\u0060 and \u0060engine/packages/pegboard-gateway3/src/shared_state.rs\u0060 as WHOLE FILES: this scan already matched 43 separate duplicated blocks between them, totalling at least 963 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":1137}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0a7739b7432d89604743f153a96dc5d0c8c942b8150e373a32f953a3857580d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): engine/packages/runtime/src/traces.rs:24-33 | rivetkit-typescript/packages/rivetkit-napi/src/lib.rs:36-45 \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":"engine/packages/runtime/src/traces.rs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"33197397fb79036e67b7b8acb50106a292fc5fe832cdde38f0027de43285424a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): engine/packages/universaldb/src/driver/postgres/transaction.rs:205-209 | engine/packages/universaldb/src/driver/rocksdb/transaction.rs:229-233 \u2014 \u0060engine/packages/universaldb/src/driver/postgres/transaction.rs\u0060 and \u0060engine/packages/universaldb/src/driver/rocksdb/transaction.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 6 separate duplicated blocks between them, totalling at least 53 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universaldb/src/driver/postgres/transaction.rs"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"06af9ac83a5aaf33c4f1b845be3225b8aeb2d1924166835852ca3fc9e662dc2f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/packages/universaldb/src/range_option.rs:153-163 | engine/packages/universaldb/src/utils/subspace.rs:91-99 \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":"engine/packages/universaldb/src/range_option.rs"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"44bf90528e8be8ec0d5d83c675942c7d00bd01155bf2fed4afd6cab72c81cca1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): engine/sdks/rust/envoy-client/src/handle.rs:907-912 | engine/sdks/rust/envoy-client/src/tunnel.rs:56-61 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/handle.rs"},"region":{"startLine":907}}}],"partialFingerprints":{"codehealthFindingId/v1":"51d6e4e33520146023c65403d00846182be8b95444c7ac362d5213eb3de975b5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs:160-167 | engine/sdks/rust/envoy-protocol/src/versioned/v8_to_v7.rs:160-167 \u2014 before extracting anything, compare \u0060engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs\u0060 and \u0060engine/sdks/rust/envoy-protocol/src/versioned/v8_to_v7.rs\u0060 as WHOLE FILES: this scan already matched 16 separate duplicated blocks between them, totalling at least 127 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":"engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e1c62142a8dfc588bcd5528066698697173a2f6ba8360b8ecafbd0d2d6166e1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs:341-348 | engine/sdks/rust/envoy-protocol/src/versioned/v8_to_v7.rs:453-460 \u2014 before extracting anything, compare \u0060engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs\u0060 and \u0060engine/sdks/rust/envoy-protocol/src/versioned/v8_to_v7.rs\u0060 as WHOLE FILES: this scan already matched 16 separate duplicated blocks between them, totalling at least 127 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":"engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs"},"region":{"startLine":341}}}],"partialFingerprints":{"codehealthFindingId/v1":"373454e7359639f4bd323a34cc48adf5820de796eebb9a735292058df27d747b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs:482-489 | engine/sdks/rust/envoy-protocol/src/versioned/v8_to_v7.rs:594-601 \u2014 before extracting anything, compare \u0060engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs\u0060 and \u0060engine/sdks/rust/envoy-protocol/src/versioned/v8_to_v7.rs\u0060 as WHOLE FILES: this scan already matched 16 separate duplicated blocks between them, totalling at least 127 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":"engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs"},"region":{"startLine":482}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c9d33aabf524513b0909d94f00e33a30b9225153a70ad40c52d1d48e643e285"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs:676-685 | engine/sdks/rust/envoy-protocol/src/versioned/v8_to_v7.rs:788-797 \u2014 before extracting anything, compare \u0060engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs\u0060 and \u0060engine/sdks/rust/envoy-protocol/src/versioned/v8_to_v7.rs\u0060 as WHOLE FILES: this scan already matched 16 separate duplicated blocks between them, totalling at least 127 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":"engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs"},"region":{"startLine":676}}}],"partialFingerprints":{"codehealthFindingId/v1":"de8d92f3ccdd1a7c0b82d4701bb3ce066fa226d6857bc667c9f65dc394d354ce"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs:698-705 | engine/sdks/rust/envoy-protocol/src/versioned/v8_to_v7.rs:810-817 \u2014 before extracting anything, compare \u0060engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs\u0060 and \u0060engine/sdks/rust/envoy-protocol/src/versioned/v8_to_v7.rs\u0060 as WHOLE FILES: this scan already matched 16 separate duplicated blocks between them, totalling at least 127 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":"engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs"},"region":{"startLine":698}}}],"partialFingerprints":{"codehealthFindingId/v1":"647f234e2c7910d5fe7d23737827b008f68dd0a4428c1f9a13d8517046bbc422"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs:160-167 | engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v6.rs:168-175 \u2014 before extracting anything, compare \u0060engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs\u0060 and \u0060engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v6.rs\u0060 as WHOLE FILES: this scan already matched 17 separate duplicated blocks between them, totalling at least 164 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":"engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"92bb9ce62a08bebf1376f3140394100333109520bca3686be3b5b307db5bbbee"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs:341-348 | engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v6.rs:349-356 \u2014 before extracting anything, compare \u0060engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs\u0060 and \u0060engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v6.rs\u0060 as WHOLE FILES: this scan already matched 17 separate duplicated blocks between them, totalling at least 164 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":"engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs"},"region":{"startLine":341}}}],"partialFingerprints":{"codehealthFindingId/v1":"4041e3c8f0fb208505e661dcc9ccf09f5f25d1dda5ed6f2bb77fb127228890ed"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs:422-429 | engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v6.rs:490-497 \u2014 before extracting anything, compare \u0060engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs\u0060 and \u0060engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v6.rs\u0060 as WHOLE FILES: this scan already matched 17 separate duplicated blocks between them, totalling at least 164 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":"engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs"},"region":{"startLine":422}}}],"partialFingerprints":{"codehealthFindingId/v1":"bced6c5c39726f0a5b2d030bca761d1ec0b765250017418c5b3e690dfec46281"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs:616-625 | engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v6.rs:684-693 \u2014 before extracting anything, compare \u0060engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs\u0060 and \u0060engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v6.rs\u0060 as WHOLE FILES: this scan already matched 17 separate duplicated blocks between them, totalling at least 164 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":"engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs"},"region":{"startLine":616}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb8684bc59d5029a954a2902dd660e6571108aacee70e5dcac10528fa6a23f27"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs:638-645 | engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v6.rs:706-713 \u2014 before extracting anything, compare \u0060engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs\u0060 and \u0060engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v6.rs\u0060 as WHOLE FILES: this scan already matched 17 separate duplicated blocks between them, totalling at least 164 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":"engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs"},"region":{"startLine":638}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2b3b63ec1e8df6df8b7490f9f3d38d5b77815142add0bd8fed7f63f6f485ab4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): rivetkit-python/client/src/events/async/client.rs:27-39 | rivetkit-python/client/src/simple/async/client.rs:27-39 \u2014 before extracting anything, compare \u0060rivetkit-python/client/src/events/async/client.rs\u0060 and \u0060rivetkit-python/client/src/simple/async/client.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 57 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-python/client/src/events/async/client.rs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"3184878b444089662fab9554c660f4c1f8b64f18955dbd3f8b78cf7d0f91c306"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 4): rivetkit-python/client/src/events/async/client.rs:107-116 | rivetkit-python/client/src/events/sync/client.rs:86-95 | rivetkit-python/client/src/simple/async/client.rs:101-110 | rivetkit-python/client/src/simple/sync/client.rs:87-96 \u2014 before extracting anything, compare \u0060rivetkit-python/client/src/events/async/client.rs\u0060 and \u0060rivetkit-python/client/src/simple/async/client.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 57 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-python/client/src/events/async/client.rs"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"00ddc4ed8d50b2b2dd31ad50c3073bc9c096d0b7dede63a536d8c2509be1aaad"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 4): rivetkit-python/client/src/events/async/client.rs:120-129 | rivetkit-python/client/src/events/sync/client.rs:99-108 | rivetkit-python/client/src/simple/async/client.rs:114-123 | rivetkit-python/client/src/simple/sync/client.rs:100-109 \u2014 before extracting anything, compare \u0060rivetkit-python/client/src/events/async/client.rs\u0060 and \u0060rivetkit-python/client/src/simple/async/client.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 57 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-python/client/src/events/async/client.rs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab609e4dc3cfc6c4070aa60a744fa9f65e6769b3d4ca74af15b96c7b74996647"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): rivetkit-python/client/src/events/async/handle.rs:86-94 | rivetkit-python/client/src/simple/async/handle.rs:176-184 \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":"rivetkit-python/client/src/events/async/handle.rs"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"9764c141c70d4c913e8e51754901882788dc88345b459241dae54f3efa8e27b6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): rivetkit-python/client/src/events/sync/client.rs:24-36 | rivetkit-python/client/src/simple/sync/client.rs:24-36 \u2014 before extracting anything, compare \u0060rivetkit-python/client/src/events/sync/client.rs\u0060 and \u0060rivetkit-python/client/src/simple/sync/client.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 33 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-python/client/src/events/sync/client.rs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"fada2b628b03ffffff2b9ca9d3992a8243ae49f49c18af09e7f53267eefffd63"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): rivetkit-rust/packages/rivetkit/src/action.rs:46-51 | rivetkit-rust/packages/rivetkit/src/context.rs:715-720 | rivetkit-rust/packages/rivetkit/src/queue.rs:349-354 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from all 3 call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit/src/action.rs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"a33e8541aa8401a9f77115225fdbbcec5a2565d2c4a12c7d51fb882e285171ab"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): rivetkit-typescript/packages/rivetkit-napi/src/actor_factory.rs:308-313 | rivetkit-typescript/packages/rivetkit-wasm/src/lib.rs:80-85 \u2014 before extracting anything, compare \u0060rivetkit-typescript/packages/rivetkit-napi/src/actor_factory.rs\u0060 and \u0060rivetkit-typescript/packages/rivetkit-wasm/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 56 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit-napi/src/actor_factory.rs"},"region":{"startLine":308}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c9033a734c3b7e84bf1f5063faa9311c793ecdbf2323c0543a0c020201a6890"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): engine/packages/api-public/src/datacenters.rs:23-28 | engine/packages/api-public/src/health.rs:52-57 | engine/packages/api-public/src/metadata.rs:35-40 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from all 3 call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-public/src/datacenters.rs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"63c13f5a6e2a5f7bafa4a706219b6021906a6d23ef3703cfaf319c5c3eae30fd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): engine/packages/api-public/src/runner_configs/delete.rs:32-37 | engine/packages/api-public/src/runner_configs/list.rs:51-56 \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":"engine/packages/api-public/src/runner_configs/delete.rs"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b5678e03ed0c685a8b06a60e3df3926ccc1314e90c7f79e34018a3cb3e23d88"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): engine/packages/api-public/src/runner_configs/refresh_metadata.rs:58-63 | engine/packages/api-public/src/runner_configs/upsert.rs:45-50 \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":"engine/packages/api-public/src/runner_configs/refresh_metadata.rs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c17592e21f27aae7e4d0104a1269b3af2a4e277ef8dbd6fe8ff40f54ca10d81"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): engine/packages/api-public/src/actors/reschedule.rs:34-39 | engine/packages/api-public/src/actors/sleep.rs:34-39 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-public/src/actors/reschedule.rs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca4ca065eeaa4b73a2073ac8214eecfe089c8e791d9e321fcd4d115072345e99"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): engine/packages/api-public/src/actors/delete.rs:37-42 | engine/packages/api-public/src/actors/kv_get.rs:33-38 \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":"engine/packages/api-public/src/actors/delete.rs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b1694e89794d4bc933cf5580f1df0ffd5b99968b02d66f3ca105220a5a40da4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 5): engine/packages/datacenter/src/keys.rs:44-49 | engine/packages/datacenter/src/keys.rs:88-93 | engine/packages/namespace/src/keys/mod.rs:50-56 | engine/packages/namespace/src/keys/mod.rs:94-100 | engine/packages/namespace/src/keys/mod.rs:139-144 \u2014 there are 5 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 5 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/datacenter/src/keys.rs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a7efd4e131fcecd0851e7216fffe5b4bda75d051535b6636c88488990f80e12"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/packages/depot/src/conveyer/branch/shared.rs:149-157 | engine/packages/depot/src/conveyer/restore_point/resolve.rs:406-414 \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":"engine/packages/depot/src/conveyer/branch/shared.rs"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"d82beb0cb535074cefb5a1389548f650c2af16a2fed50ce8e7c3096448f10e66"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): engine/packages/gasoline/src/db/kv/keys/workflow.rs:49-54 | engine/packages/types/src/keys/backfill.rs:45-50 \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":"engine/packages/gasoline/src/db/kv/keys/workflow.rs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ec687feb31ae4e010218c03155497120742281a876e24f1cda4cc0c2ba958b0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): engine/packages/gasoline/src/db/mod.rs:354-360 | engine/packages/gasoline/src/history/event.rs:133-139 | engine/packages/gasoline/src/history/event.rs:173-179 \u2014 there are 3 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 3 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/mod.rs"},"region":{"startLine":354}}}],"partialFingerprints":{"codehealthFindingId/v1":"c387b2d977dfdf2b40091a178ff537f2e74e35932643ab4e1dfaf53d712953be"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): engine/packages/pegboard/src/workflows/runner_pool_error_tracker.rs:97-101 | engine/packages/pegboard/src/workflows/serverless/receiver.rs:63-69 \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":"engine/packages/pegboard/src/workflows/runner_pool_error_tracker.rs"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"493bfae4715d0b29faa62ca1453e22b59ccfa628988d3e7617c04bfad989cfef"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 6): engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs:48-54 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs:49-55 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs:48-54 | engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v6.rs:56-62 | engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v8.rs:48-54 | engine/sdks/rust/envoy-protocol/src/versioned/v8_to_v7.rs:48-54 \u2014 before extracting anything, compare \u0060engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs\u0060 and \u0060engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 131 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":"engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"701017170b277c7fe27324b38b3b936f937a2c97755801f7fd8c8b1ea20b7f28"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 12): engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs:80-90 | engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs:92-102 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs:81-91 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs:93-103 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs:80-90 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs:92-102 | engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v6.rs:88-98 | engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v6.rs:100-110 | engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v8.rs:80-90 | engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v8.rs:92-102 | engine/sdks/rust/envoy-protocol/src/versioned/v8_to_v7.rs:80-90 | engine/sdks/rust/envoy-protocol/src/versioned/v8_to_v7.rs:92-102 \u2014 before extracting anything, compare \u0060engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs\u0060 and \u0060engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 131 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":"engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"a27f2c043ef56264cb2e1bf04eb69fcc52c804a993b34a42cd333a0f16a86fe5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 6): engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs:171-180 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs:172-181 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs:171-180 | engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v6.rs:179-188 | engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v8.rs:171-180 | engine/sdks/rust/envoy-protocol/src/versioned/v8_to_v7.rs:171-180 \u2014 before extracting anything, compare \u0060engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs\u0060 and \u0060engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 131 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":"engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"16f2f1020a1cac05a132d7de508267a196567773db76115475b2bdc555f51fc9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 4): engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs:195-206 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs:233-244 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs:397-408 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs:194-205 \u2014 before extracting anything, compare \u0060engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs\u0060 and \u0060engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs\u0060 as WHOLE FILES: this scan already matched 15 separate duplicated blocks between them, totalling at least 151 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":"engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"44db265edba289d91eb612ee20c7041f58fcf0e83297b17c2b7b8a9498306126"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs:384-393 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs:426-435 \u2014 before extracting anything, compare \u0060engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs\u0060 and \u0060engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs\u0060 as WHOLE FILES: this scan already matched 15 separate duplicated blocks between them, totalling at least 151 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":"engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs"},"region":{"startLine":384}}}],"partialFingerprints":{"codehealthFindingId/v1":"868d485e1636dde62735389eca379bef63ab8b5fe1ff6633a3ba6271198a4e33"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 6): engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs:409-414 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs:410-415 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs:469-474 | engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v6.rs:477-482 | engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v8.rs:581-586 | engine/sdks/rust/envoy-protocol/src/versioned/v8_to_v7.rs:581-586 \u2014 before extracting anything, compare \u0060engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs\u0060 and \u0060engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 131 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":"engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs"},"region":{"startLine":409}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d932b3488f9b5e0c713f3c0120faa2ce9ae79903d437dd8714ac6728c3f4b5f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 6): engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs:439-444 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs:440-445 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs:499-504 | engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v6.rs:507-512 | engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v8.rs:611-616 | engine/sdks/rust/envoy-protocol/src/versioned/v8_to_v7.rs:611-616 \u2014 before extracting anything, compare \u0060engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs\u0060 and \u0060engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 131 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":"engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs"},"region":{"startLine":439}}}],"partialFingerprints":{"codehealthFindingId/v1":"037fc11e18535e1b027ed07c95363e6ea0037a577c6370f6986c05326430c0d5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 6): engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs:455-462 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs:456-463 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs:515-522 | engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v6.rs:523-530 | engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v8.rs:627-634 | engine/sdks/rust/envoy-protocol/src/versioned/v8_to_v7.rs:627-634 \u2014 before extracting anything, compare \u0060engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs\u0060 and \u0060engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 131 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":"engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs"},"region":{"startLine":455}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1f1cca13fbb07c961549e7daf96609ef1c1d73c30edb9b83d47e4f2b35d2d3b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 7): engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs:502-507 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs:503-508 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs:587-592 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs:562-567 | engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v6.rs:570-575 | engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v8.rs:674-679 | engine/sdks/rust/envoy-protocol/src/versioned/v8_to_v7.rs:674-679 \u2014 before extracting anything, compare \u0060engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs\u0060 and \u0060engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 131 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":"engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs"},"region":{"startLine":502}}}],"partialFingerprints":{"codehealthFindingId/v1":"09bba67010acd1a69b322e55b6e96b89db8d9f52c3baca0058703b6902a73391"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 6): engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs:511-517 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs:512-518 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs:571-577 | engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v6.rs:579-585 | engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v8.rs:683-689 | engine/sdks/rust/envoy-protocol/src/versioned/v8_to_v7.rs:683-689 \u2014 before extracting anything, compare \u0060engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs\u0060 and \u0060engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 131 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":"engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs"},"region":{"startLine":511}}}],"partialFingerprints":{"codehealthFindingId/v1":"5800f6625f2412e1102cd8a05ae5f020070f75337c1b831635dfde4196becc7d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 6): engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs:519-529 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs:520-530 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs:579-589 | engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v6.rs:587-597 | engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v8.rs:691-701 | engine/sdks/rust/envoy-protocol/src/versioned/v8_to_v7.rs:691-701 \u2014 before extracting anything, compare \u0060engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs\u0060 and \u0060engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 131 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":"engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs"},"region":{"startLine":519}}}],"partialFingerprints":{"codehealthFindingId/v1":"3eabfb44dffb51498743778abe7f8c4eb943bef4534bc2d1bc874d68ee633e2e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 12): engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs:828-832 | engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs:944-948 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs:829-833 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs:953-957 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs:888-892 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs:1018-1022 | engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v6.rs:896-900 | engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v6.rs:1035-1039 | engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v8.rs:1015-1019 | engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v8.rs:1187-1191 | engine/sdks/rust/envoy-protocol/src/versioned/v8_to_v7.rs:1012-1016 | engine/sdks/rust/envoy-protocol/src/versioned/v8_to_v7.rs:1184-1188 \u2014 before extracting anything, compare \u0060engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs\u0060 and \u0060engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 131 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":"engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs"},"region":{"startLine":828}}}],"partialFingerprints":{"codehealthFindingId/v1":"c154c57562ca684791723a6345f8809bef0a24348888d2905c75a6b70d627ba7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 4): engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs:836-844 | engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs:952-960 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs:837-845 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs:961-969 \u2014 before extracting anything, compare \u0060engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs\u0060 and \u0060engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 131 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":"engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs"},"region":{"startLine":836}}}],"partialFingerprints":{"codehealthFindingId/v1":"627190fb94f65923f3c17884eeeac73a047d5515c5e75b3d6e52d79cd5117568"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 6): engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs:1086-1093 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs:1103-1110 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs:1174-1181 | engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v6.rs:1200-1207 | engine/sdks/rust/envoy-protocol/src/versioned/v7_to_v8.rs:1385-1392 | engine/sdks/rust/envoy-protocol/src/versioned/v8_to_v7.rs:1382-1389 \u2014 before extracting anything, compare \u0060engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs\u0060 and \u0060engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 131 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":"engine/sdks/rust/envoy-protocol/src/versioned/v5_to_v6.rs"},"region":{"startLine":1086}}}],"partialFingerprints":{"codehealthFindingId/v1":"aac3e6301572b22a464208105dff977c7ad962e781669ba6698b3687da479bb5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs:1112-1118 | engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs:1183-1189 \u2014 before extracting anything, compare \u0060engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs\u0060 and \u0060engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v7.rs\u0060 as WHOLE FILES: this scan already matched 15 separate duplicated blocks between them, totalling at least 151 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":"engine/sdks/rust/envoy-protocol/src/versioned/v6_to_v5.rs"},"region":{"startLine":1112}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c9b143612739b3c9a956af07a9f43d3bad0ae9ad6232a52495f1e79859fc5a8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/mod.rs:1449-1458 | rivetkit-typescript/packages/rivetkit-napi/src/database.rs:356-365 \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":"rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/mod.rs"},"region":{"startLine":1449}}}],"partialFingerprints":{"codehealthFindingId/v1":"de0d895daa96a69ac68a9106369f2c03c1f8a9e1555afb56660b04df27a3917a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/mod.rs:1460-1471 | rivetkit-typescript/packages/rivetkit-napi/src/database.rs:367-378 \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":"rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/mod.rs"},"region":{"startLine":1460}}}],"partialFingerprints":{"codehealthFindingId/v1":"71a8e8428286b8442742ae4e6f2beca678397c3b601961b87494cefd618870a7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): rivetkit-typescript/packages/rivetkit-napi/src/kv.rs:32-37 | rivetkit-typescript/packages/rivetkit-wasm/src/lib.rs:1927-1932 \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":"rivetkit-typescript/packages/rivetkit-napi/src/kv.rs"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"690f1839d8fa96f690703a3cd3b5344f0f5af1719f2402ecfa3eefc0ad3908b0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 3): engine/sdks/rust/envoy-client/src/actor.rs:670-684 | engine/sdks/rust/envoy-client/src/actor.rs:786-800 | engine/sdks/rust/envoy-client/src/actor.rs:1040-1056 \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":"engine/sdks/rust/envoy-client/src/actor.rs"},"region":{"startLine":670}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f1fa441bd9bde3b3383b27283ff401dfb80f679e3d061754a8053a8218d889b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): engine/packages/depot/src/workflows/db_reclaimer.rs:171-186 | engine/packages/depot/src/workflows/db_reclaimer.rs:697-709 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/workflows/db_reclaimer.rs"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"93a7dc336e4dfed04b31f15f38483f8dcd9ce22c08fd52080192ced7a49d2148"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 4): engine/packages/gasoline/src/history/cursor.rs:182-197 | engine/packages/gasoline/src/history/cursor.rs:228-243 | engine/packages/gasoline/src/history/cursor.rs:274-289 | engine/packages/gasoline/src/history/cursor.rs:320-335 \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":"engine/packages/gasoline/src/history/cursor.rs"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"b99a65b7d88671980be609a5aba6c2a2b5332d1576699b4da7689bb571ac9462"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 3): engine/packages/gasoline/src/history/cursor.rs:250-265 | engine/packages/gasoline/src/history/cursor.rs:296-311 | engine/packages/gasoline/src/history/cursor.rs:342-357 \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":"engine/packages/gasoline/src/history/cursor.rs"},"region":{"startLine":250}}}],"partialFingerprints":{"codehealthFindingId/v1":"e47f5a4686fbe4b52a46ff80e292a40915d0122ff654a5a56ce640bed4c80709"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 4): engine/packages/gasoline/src/history/cursor.rs:362-376 | engine/packages/gasoline/src/history/cursor.rs:393-407 | engine/packages/gasoline/src/history/cursor.rs:425-439 | engine/packages/gasoline/src/history/cursor.rs:575-589 \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":"engine/packages/gasoline/src/history/cursor.rs"},"region":{"startLine":362}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d6daec988b7c73783f8eb3cd377dd8641ebd752cbbe1dfa023b7543f2d61c46"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs:1048-1062 | engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs:1065-1079 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs"},"region":{"startLine":1048}}}],"partialFingerprints":{"codehealthFindingId/v1":"00b5dfecf44e4523ede2db6a69c06d44675d73865195df21bfb63a0b70b8a81b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 4): engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs:621-635 | engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs:687-701 | engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs:741-755 | engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs:767-781 \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":"engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs"},"region":{"startLine":621}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8ae36a596d7d3dc402e7fe5ade9de85752eccc1af30f10993df84c4963e66c2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 5): engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs:254-268 | engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs:322-336 | engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs:380-394 | engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs:410-423 | engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs:437-451 \u2014 all 5 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-runner/src/ws_to_tunnel_task.rs"},"region":{"startLine":254}}}],"partialFingerprints":{"codehealthFindingId/v1":"738087d0c88c275ab8db8469024b7f35a2ed73467ffad99f9dead5e19f76c9b0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): engine/packages/pegboard-gateway3/src/shared_state.rs:1061-1074 | engine/packages/pegboard-gateway3/src/shared_state.rs:1098-1111 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway3/src/shared_state.rs"},"region":{"startLine":1061}}}],"partialFingerprints":{"codehealthFindingId/v1":"735fba401cda753a84c1910ca0b915f9890bd237494522c00902d77b03397f96"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): engine/packages/depot/src/workflows/db_reclaimer.rs:685-698 | engine/packages/depot/src/workflows/db_reclaimer.rs:1344-1357 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/workflows/db_reclaimer.rs"},"region":{"startLine":685}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ed77edd3b52febd6f24a5accd75b725e9fde70af39912c682648c9e9cd0bab8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 3): engine/packages/pegboard-gateway3/src/shared_state.rs:1034-1047 | engine/packages/pegboard-gateway3/src/shared_state.rs:1060-1073 | engine/packages/pegboard-gateway3/src/shared_state.rs:1097-1110 \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":"engine/packages/pegboard-gateway3/src/shared_state.rs"},"region":{"startLine":1034}}}],"partialFingerprints":{"codehealthFindingId/v1":"b29acae640399fecac822e709e8b1f660a6a79d324120f48a687f0ff5106f827"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): engine/packages/gasoline/src/db/kv/repair.rs:2550-2563 | engine/packages/gasoline/src/db/kv/repair.rs:2687-2700 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/repair.rs"},"region":{"startLine":2550}}}],"partialFingerprints":{"codehealthFindingId/v1":"2caf9e95080b9af75975ea0dce091037a30338eb168d8d6361d9923283063a8b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 3): engine/packages/gasoline/src/db/kv/repair.rs:2550-2563 | engine/packages/gasoline/src/db/kv/repair.rs:2687-2700 | engine/packages/gasoline/src/db/kv/repair.rs:2744-2757 \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":"engine/packages/gasoline/src/db/kv/repair.rs"},"region":{"startLine":2550}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd2bbec476b1c956f818d34c2461c26f5edf6e1ffcd44c7fce40b9a3ced0a099"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): engine/packages/depot/src/workflows/db_hot_compactor.rs:315-324 | engine/packages/depot/src/workflows/db_reclaimer.rs:1338-1350 \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":"engine/packages/depot/src/workflows/db_hot_compactor.rs"},"region":{"startLine":315}}}],"partialFingerprints":{"codehealthFindingId/v1":"8beca9583b11fc8562c73c88bba4972708344b98d0edbfb8ed5f449fd1ef1ce2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): engine/packages/gasoline/src/db/kv/debug.rs:2050-2062 | engine/packages/gasoline/src/db/kv/debug.rs:2223-2235 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/debug.rs"},"region":{"startLine":2050}}}],"partialFingerprints":{"codehealthFindingId/v1":"31a17ef1bab1ad70e58cd916ec4246aea4ef8ede0b3ead3e9e618d2b80abc12f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/registry/http.rs:208-220 | rivetkit-rust/packages/rivetkit-core/src/registry/http.rs:329-341 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/http.rs"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f9d7696ccaaf80f100583e24574904d8f51f7973d5b7be32973936534933115"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): engine/packages/pegboard/src/workflows/serverless/conn.rs:692-704 | engine/packages/pegboard/src/workflows/serverless/conn.rs:710-722 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/serverless/conn.rs"},"region":{"startLine":692}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fe520602cd371a1f6ea2173cb2ff6dc61d8f3ea0cc84ffa3adf5713c142162c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): engine/packages/gasoline-runtime/src/workflows/pruner.rs:128-140 | engine/packages/gasoline-runtime/src/workflows/pruner.rs:166-178 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline-runtime/src/workflows/pruner.rs"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"2adf2ee79539e3da4ce92401cdfa27eadc28cb63b5f736156735cbc5426cd670"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): engine/packages/depot/src/conveyer/restore_point/resolve.rs:300-311 | engine/packages/depot/src/conveyer/restore_point/resolve.rs:350-361 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/conveyer/restore_point/resolve.rs"},"region":{"startLine":300}}}],"partialFingerprints":{"codehealthFindingId/v1":"99894d729e9b361fbfdb382d01581a337b51c981164ee1c516f568a73ad9a63a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): engine/packages/api-public/src/actors/reschedule.rs:61-72 | engine/packages/api-public/src/actors/sleep.rs:60-71 \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":"engine/packages/api-public/src/actors/reschedule.rs"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"45704e400b9ade88afd53e41b53efba61e8d3acd234c657a221fe392fce414f1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): engine/packages/pegboard-gateway/src/lib.rs:470-481 | engine/packages/pegboard-gateway2/src/lib.rs:742-753 | engine/packages/pegboard-gateway3/src/lib.rs:491-502 \u2014 before extracting anything, compare \u0060engine/packages/pegboard-gateway/src/lib.rs\u0060 and \u0060engine/packages/pegboard-gateway2/src/lib.rs\u0060 as WHOLE FILES: this scan already matched 19 separate duplicated blocks between them, totalling at least 440 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/lib.rs"},"region":{"startLine":470}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d20bb045744c50460d90699cc106142c8313062cdaaa090975b5316aa66b603"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 9): engine/packages/depot/src/workflows/db_hot_compactor.rs:316-327 | engine/packages/depot/src/workflows/db_hot_compactor.rs:943-953 | engine/packages/depot/src/workflows/db_hot_compactor.rs:1356-1366 | engine/packages/depot/src/workflows/db_reclaimer.rs:157-167 | engine/packages/depot/src/workflows/db_reclaimer.rs:421-431 | engine/packages/depot/src/workflows/db_reclaimer.rs:683-693 | engine/packages/depot/src/workflows/db_reclaimer.rs:1130-1140 | engine/packages/depot/src/workflows/db_reclaimer.rs:1258-1268 | engine/packages/depot/src/workflows/db_reclaimer.rs:1342-1352 \u2014 there are 9 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 9 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/workflows/db_hot_compactor.rs"},"region":{"startLine":316}}}],"partialFingerprints":{"codehealthFindingId/v1":"70930548b3aab417f05273cb3178861c36f2e327323f19ed3a98bbc1ba79ea6c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): engine/packages/api-peer/src/namespaces.rs:19-30 | engine/packages/api-peer/src/runners.rs:31-42 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-peer/src/namespaces.rs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4cb217882e974e57ec6b25d6d264c6075b805e811a90238d10e15e4a82cf1c6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/registry/http.rs:256-267 | rivetkit-rust/packages/rivetkit-core/src/registry/http.rs:394-405 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/http.rs"},"region":{"startLine":256}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ead65e9b16aa1396d91f77d68d4abd9485bb74058d60e1039f1324b27a9ae56"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): engine/packages/depot-client/src/vfs.rs:2205-2215 | engine/packages/depot-client/src/vfs.rs:2331-2341 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot-client/src/vfs.rs"},"region":{"startLine":2205}}}],"partialFingerprints":{"codehealthFindingId/v1":"7434f4c2a1615b00ebdda3089b17e09f337cf51d54f8307166d43b5b6d52e376"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): engine/packages/error-macros/src/lib.rs:19-29 | engine/packages/error-macros/src/lib.rs:245-255 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/error-macros/src/lib.rs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"c20dd2b8da09e123d6ef1e4c08546529b9169200c19bef954aaaa9ae2623b111"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): engine/packages/pegboard/src/workflows/runner.rs:672-682 | engine/packages/pegboard/src/workflows/runner2.rs:529-539 \u2014 before extracting anything, compare \u0060engine/packages/pegboard/src/workflows/runner.rs\u0060 and \u0060engine/packages/pegboard/src/workflows/runner2.rs\u0060 as WHOLE FILES: this scan already matched 11 separate duplicated blocks between them, totalling at least 164 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":"engine/packages/pegboard/src/workflows/runner.rs"},"region":{"startLine":672}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b7dad702ae12c3aec278e7b0bb264cd459a6e3bd13ce39403b45d0d0dc57c02"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs:1513-1523 | engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs:1526-1536 | engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs:1548-1558 \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":"engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs"},"region":{"startLine":1513}}}],"partialFingerprints":{"codehealthFindingId/v1":"e545260aaca2160037695b63568aa8ccb29ab0d81bb327b566a8c4a7ca975e8e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): engine/packages/pegboard/src/ops/envoy/list.rs:120-130 | engine/packages/pegboard/src/ops/runner/list_for_ns.rs:198-208 \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":"engine/packages/pegboard/src/ops/envoy/list.rs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"6198e89cbbe7c3524ee5a3b02c8ee8d051cd3ac5e0c3a3b6d5266b55c502a8a3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): engine/packages/gasoline-macros/src/lib.rs:64-73 | engine/packages/gasoline-macros/src/lib.rs:132-141 | engine/packages/gasoline-macros/src/lib.rs:202-211 \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":"engine/packages/gasoline-macros/src/lib.rs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee0c8742d82b9f21f99a77ca6e64acdfebc60fce66c6350b90530ef5f892637a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): engine/packages/pegboard/src/workflows/runner.rs:933-942 | engine/packages/pegboard/src/workflows/runner2.rs:641-650 \u2014 before extracting anything, compare \u0060engine/packages/pegboard/src/workflows/runner.rs\u0060 and \u0060engine/packages/pegboard/src/workflows/runner2.rs\u0060 as WHOLE FILES: this scan already matched 11 separate duplicated blocks between them, totalling at least 164 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":"engine/packages/pegboard/src/workflows/runner.rs"},"region":{"startLine":933}}}],"partialFingerprints":{"codehealthFindingId/v1":"356148d2cb3d94a92f255eac2b9bf09467b6b4c0a1be8d1eb1d8d92318562187"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): engine/packages/postgres-util/src/lib.rs:27-31 | engine/packages/postgres-util/src/lib.rs:53-62 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/postgres-util/src/lib.rs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"2332419ee39e5e4a6e9032c61b0530ad66cbf41066d699fec57b8e331496ec6d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): engine/packages/gasoline/src/db/kv/debug.rs:129-138 | engine/packages/gasoline/src/db/kv/debug.rs:235-244 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/debug.rs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c456c70940d4d2bd06507298cd34a6fa8509637ef38064e766e43e485669d85"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/packages/gasoline/src/db/kv/keys/signal.rs:324-332 | engine/packages/pegboard/src/keys/actor.rs:101-110 \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":"engine/packages/gasoline/src/db/kv/keys/signal.rs"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"dca92812640f76231687eddd1637dc1915acee03ff3d31c24c816d5a974faf1a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/packages/depot/src/conveyer/keys.rs:951-959 | engine/packages/depot/src/conveyer/keys.rs:1558-1566 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/conveyer/keys.rs"},"region":{"startLine":951}}}],"partialFingerprints":{"codehealthFindingId/v1":"b92f0447981d1e2b8d109b74d1bb4299a8070457452714b7d0556965164b1acf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 7): engine/packages/gasoline/src/db/kv/keys/history.rs:637-645 | engine/packages/gasoline/src/db/kv/keys/history.rs:753-761 | engine/packages/gasoline/src/db/kv/keys/history.rs:1479-1487 | engine/packages/gasoline/src/db/kv/keys/signal.rs:38-46 | engine/packages/gasoline/src/db/kv/keys/workflow.rs:182-190 | engine/packages/gasoline/src/db/kv/keys/workflow.rs:269-277 | engine/packages/gasoline/src/db/kv/keys/workflow.rs:356-364 \u2014 before extracting anything, compare \u0060engine/packages/gasoline/src/db/kv/keys/history.rs\u0060 and \u0060engine/packages/gasoline/src/db/kv/keys/workflow.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 35 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/keys/history.rs"},"region":{"startLine":637}}}],"partialFingerprints":{"codehealthFindingId/v1":"025bbdb15000669642bbcff5df55fc6ce0b1498533db99fc846e891091400f03"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/packages/engine/src/commands/epoxy.rs:214-222 | engine/packages/engine/src/commands/epoxy.rs:226-234 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/engine/src/commands/epoxy.rs"},"region":{"startLine":214}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe56b7f7bed1ce1351650521464d66b62ecc7ff61beeb6c76b500da63344f64f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/packages/engine/src/commands/epoxy.rs:135-143 | engine/packages/engine/src/commands/epoxy.rs:169-177 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/engine/src/commands/epoxy.rs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"31f8101996fd640d2e696fe951fcf2a6d4d930a6a5caea7e668b1f9e1220b28e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor/runtime.rs:1473-1481 | engine/packages/pegboard/src/workflows/actor2/runtime.rs:797-803 \u2014 \u0060engine/packages/pegboard/src/workflows/actor/runtime.rs\u0060 and \u0060engine/packages/pegboard/src/workflows/actor2/runtime.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 4 separate duplicated blocks between them, totalling at least 38 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/runtime.rs"},"region":{"startLine":1473}}}],"partialFingerprints":{"codehealthFindingId/v1":"330f048eee350ffc5555401435defcca62d52d9a727270a5166f4662c24201c3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor/metrics.rs:335-343 | engine/packages/pegboard/src/workflows/actor2/metrics.rs:330-338 \u2014 \u0060engine/packages/pegboard/src/workflows/actor/metrics.rs\u0060 and \u0060engine/packages/pegboard/src/workflows/actor2/metrics.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 8 separate duplicated blocks between them, totalling at least 128 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/metrics.rs"},"region":{"startLine":335}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1a1a58801de424dec4e0ddcee37e9928b8e297914a825e9b715f5d95deb5fe1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/packages/engine/src/commands/epoxy.rs:184-192 | engine/packages/engine/src/commands/epoxy.rs:198-206 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/engine/src/commands/epoxy.rs"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"6aaa0c6148264af437f25ebd0d2b2f372396c96d9a3a8d7a6b8330cd66fe6cb2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): engine/packages/pegboard/src/workflows/metrics_aggregator.rs:52-59 | engine/packages/pegboard/src/workflows/metrics_aggregator.rs:216-223 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/metrics_aggregator.rs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b11eb7f29803cc94881cdc45b42c239fd96b7de468d740595068b25b2fb9c77"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): engine/packages/pegboard/src/ops/envoy/list.rs:25-32 | engine/packages/pegboard/src/ops/runner/list_for_ns.rs:26-33 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/ops/envoy/list.rs"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"eecabf62385ab521295716dd0f088463c7fcd585d49f280b474652edb73f586c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs:2536-2543 | engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs:2673-2680 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs"},"region":{"startLine":2536}}}],"partialFingerprints":{"codehealthFindingId/v1":"f24a628729f15bf7eabf3d9bd81a4b6e571d8af771458c7b134887b1e333bcc5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): engine/packages/gasoline-macros/src/lib.rs:359-366 | engine/packages/gasoline-macros/src/lib.rs:416-423 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline-macros/src/lib.rs"},"region":{"startLine":359}}}],"partialFingerprints":{"codehealthFindingId/v1":"8561625fd47fec003b83a846aa2cb57bb375fccbd1ae49834941f46a92f36c79"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 7): engine/packages/gasoline/src/db/kv/mod.rs:3052-3059 | engine/packages/gasoline/src/db/kv/mod.rs:3096-3103 | engine/packages/gasoline/src/db/kv/mod.rs:3290-3297 | engine/packages/gasoline/src/db/kv/mod.rs:3329-3336 | engine/packages/gasoline/src/db/kv/mod.rs:3366-3373 | engine/packages/gasoline/src/db/kv/mod.rs:3405-3412 | engine/packages/gasoline/src/db/kv/mod.rs:3446-3453 \u2014 all 7 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/mod.rs"},"region":{"startLine":3052}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e5b6d5c6a261ebe33d790b3d46f5908b70d6db02ff4df194a60e67195082671"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs:938-945 | rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs:1381-1388 | rivetkit-rust/packages/rivetkit-core/src/serde_metrics.rs:77-84 \u2014 there are 3 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 3 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/metrics.rs"},"region":{"startLine":938}}}],"partialFingerprints":{"codehealthFindingId/v1":"35f7560b50630ef38664e7c5bcfd22335769f286b1b29a2a42ef06dff9343cf4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/actor/migrate_kv_to_sqlite/mod.rs:169-176 | rivetkit-rust/packages/rivetkit-core/src/actor/migrate_kv_to_sqlite/mod.rs:199-206 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/migrate_kv_to_sqlite/mod.rs"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"537014df67eed67711231a551e06aa28cda020f1499e8de5921547e65023ec0a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): engine/packages/pegboard/src/workflows/actor/keys.rs:283-290 | engine/packages/pegboard/src/workflows/actor2/keys.rs:272-279 \u2014 \u0060engine/packages/pegboard/src/workflows/actor/keys.rs\u0060 and \u0060engine/packages/pegboard/src/workflows/actor2/keys.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 5 separate duplicated blocks between them, totalling at least 70 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/workflows/actor/keys.rs"},"region":{"startLine":283}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5e08afea75ec0f4dad2fbf24772c70ef4e1a6b8b2a342b81927f53e6bdc695c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/registry/runner_config.rs:118-124 | rivetkit-rust/packages/rivetkit-core/src/registry/runner_config.rs:155-161 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/runner_config.rs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"e16a1241b42460a0d0b7ec15d796f94b3e3cb6c66a6f93d9bc8bbe41858e17ef"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): rivetkit-typescript/packages/rivetkit-wasm/src/lib.rs:867-873 | rivetkit-typescript/packages/rivetkit-wasm/src/lib.rs:904-910 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit-wasm/src/lib.rs"},"region":{"startLine":867}}}],"partialFingerprints":{"codehealthFindingId/v1":"032e1d1d3d580aeafec0674795980ad05c630338cbdca5a6786187efee848eec"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): engine/packages/depot/src/workflows/db_reclaimer.rs:128-134 | engine/packages/depot/src/workflows/db_reclaimer.rs:586-592 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/workflows/db_reclaimer.rs"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"1818a224204b2e3a26d9998449c05ef8b17155743b5229d0651bd823e1616c29"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): engine/packages/depot/src/inspect.rs:556-562 | engine/packages/depot/src/inspect.rs:631-637 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/inspect.rs"},"region":{"startLine":556}}}],"partialFingerprints":{"codehealthFindingId/v1":"650fe22523237cbba9b6022eca08b3d29b4676edaf0ace2df851649e2a41eeda"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): engine/packages/service-manager/src/lib.rs:166-172 | engine/packages/service-manager/src/lib.rs:209-215 | engine/packages/service-manager/src/lib.rs:251-257 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/service-manager/src/lib.rs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ec5952dc37690ea676fd22b3a7711a0c953951f7c39565405990698e37a45e5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): engine/packages/pegboard/src/ops/envoy/drain.rs:39-45 | engine/packages/pegboard/src/ops/runner/drain.rs:50-56 \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":"engine/packages/pegboard/src/ops/envoy/drain.rs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"8dfd495bab4ca383b6069c7000b604bbde963176ffcc4eb9bd629d7d92656023"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): engine/packages/pegboard/src/workflows/runner.rs:895-901 | engine/packages/pegboard/src/workflows/runner2.rs:603-609 \u2014 before extracting anything, compare \u0060engine/packages/pegboard/src/workflows/runner.rs\u0060 and \u0060engine/packages/pegboard/src/workflows/runner2.rs\u0060 as WHOLE FILES: this scan already matched 11 separate duplicated blocks between them, totalling at least 164 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":"engine/packages/pegboard/src/workflows/runner.rs"},"region":{"startLine":895}}}],"partialFingerprints":{"codehealthFindingId/v1":"f81180dd37a5debdc68b426675d90b38eed47b5ccdfa4c623d76021438d9ec44"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): engine/packages/depot/src/doctor.rs:2282-2288 | engine/packages/depot/src/doctor.rs:2294-2300 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/doctor.rs"},"region":{"startLine":2282}}}],"partialFingerprints":{"codehealthFindingId/v1":"09a22abef596e4d73cec9c5333857906de2b52931b9d94edc0852977c2df502c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): engine/packages/depot/src/compaction/shared.rs:3473-3478 | engine/packages/depot/src/conveyer/commit/helpers.rs:53-58 \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":"engine/packages/depot/src/compaction/shared.rs"},"region":{"startLine":3473}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fcc0bb41b6ab73b22a20809655b332e54df61b3d1d0a188af029ce92a7b0b60"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): engine/packages/pegboard/src/workflows/runner.rs:467-472 | engine/packages/pegboard/src/workflows/runner2.rs:305-310 \u2014 before extracting anything, compare \u0060engine/packages/pegboard/src/workflows/runner.rs\u0060 and \u0060engine/packages/pegboard/src/workflows/runner2.rs\u0060 as WHOLE FILES: this scan already matched 11 separate duplicated blocks between them, totalling at least 164 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":"engine/packages/pegboard/src/workflows/runner.rs"},"region":{"startLine":467}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad8be2d4bb01e7d113197116027a6e91ed73e9127a782610200a410d12b5051f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): engine/packages/gasoline/src/db/debug.rs:449-454 | engine/packages/gasoline/src/history/event.rs:63-68 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/debug.rs"},"region":{"startLine":449}}}],"partialFingerprints":{"codehealthFindingId/v1":"e131f051a6b9dd963a557b05a85f77857124472e324614e37e9ffe0702c2d41e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): engine/packages/depot/src/conveyer/keys.rs:392-397 | engine/packages/depot/src/conveyer/keys.rs:424-429 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/conveyer/keys.rs"},"region":{"startLine":392}}}],"partialFingerprints":{"codehealthFindingId/v1":"0eccad2aa4841b0630f87006398b21d9d373d083627f4cb0a1afc8dadd3a2067"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): engine/packages/pegboard/src/ops/actor/hibernating_request/delete.rs:19-24 | engine/packages/pegboard/src/ops/actor/hibernating_request/upsert.rs:19-24 \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":"engine/packages/pegboard/src/ops/actor/hibernating_request/delete.rs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"b78b084413f28a193a01f6f62094238ddf21d5ba24fe2cb877926879150d0cbc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): engine/packages/pegboard/src/workflows/runner_pool2_backfill.rs:101-106 | engine/packages/pegboard/src/workflows/runner_pool_backfill.rs:64-69 \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":"engine/packages/pegboard/src/workflows/runner_pool2_backfill.rs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cbcda8df6c866424a3c95f1d95a23fedb1ec85e55316c4e298c7e8ce0cb4782"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 4): engine/packages/depot/src/workflows/compaction_backfill.rs:273-278 | engine/packages/epoxy/src/workflows/backfill.rs:193-198 | engine/packages/gasoline-runtime/src/workflows/dead_wf_backfill.rs:91-96 | engine/packages/pegboard/src/workflows/actor_runner_name_selector_backfill.rs:88-93 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 4 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 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/workflows/compaction_backfill.rs"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e15ed3fa6aac784b3a9891edb9b56e6dcf90db1a75393313f905ebf947cd03d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): engine/packages/depot-client/src/query.rs:50-54 | engine/packages/depot-client/src/query.rs:92-96 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot-client/src/query.rs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7549d5b4b927fb96f300b6242cf672567072651a96c04bce6a44113c42887ad"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (4\u20135 lines \u00D7 12): engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:137-140 | engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:303-306 | engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:469-472 | engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:635-638 | engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:801-804 | engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:967-970 | rivetkit-rust/packages/actor-persist/src/versioned.rs:29-32 | rivetkit-rust/packages/client-protocol/src/versioned.rs:31-35 | rivetkit-rust/packages/client-protocol/src/versioned.rs:414-417 | rivetkit-rust/packages/client-protocol/src/versioned.rs:624-628 | rivetkit-rust/packages/inspector-protocol/src/versioned.rs:37-40 | rivetkit-rust/packages/inspector-protocol/src/versioned.rs:324-327 \u2014 there are 12 copies across 4 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 12 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-protocol/src/versioned/mod.rs"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4673fb3a3a148d75009d49fa998eecb526a86bb84758f0c67b639d2f1cac145"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): rivetkit-rust/packages/client/src/remote_manager.rs:197-201 | rivetkit-rust/packages/client/src/remote_manager.rs:258-262 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/client/src/remote_manager.rs"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"14e3958e2936c520ef593b9e4b1493ebbc12f9997797b6cebd6b524deea15aa0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (3\u20135 lines \u00D7 8): engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:140-142 | engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:306-308 | engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:472-474 | engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:638-640 | engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:804-806 | engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:970-972 | rivetkit-rust/packages/inspector-protocol/src/versioned.rs:42-46 | rivetkit-rust/packages/inspector-protocol/src/versioned.rs:329-333 \u2014 there are 8 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 8 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-protocol/src/versioned/mod.rs"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"e24b585456354e112de30981d113c9f23f768c8004424732150c85e0c7dc3e79"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): engine/packages/depot/src/workflows/db_reclaimer.rs:337-341 | engine/packages/depot/src/workflows/db_reclaimer.rs:894-898 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot/src/workflows/db_reclaimer.rs"},"region":{"startLine":337}}}],"partialFingerprints":{"codehealthFindingId/v1":"65bb3097c4da2eee83c27dfc27e1d0e8678f93a1d8b38e5e8e61ac6c35216462"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): engine/packages/pegboard/src/keys/ns.rs:346-350 | engine/packages/pegboard/src/keys/ns.rs:481-485 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/keys/ns.rs"},"region":{"startLine":346}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1a7679e83115cd638493b1753733082954e9a3483869256a6926af4077ae66c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): engine/sdks/rust/envoy-client/src/utils.rs:98-102 | rivetkit-rust/packages/rivetkit-core/src/lib.rs:69-73 \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":"engine/sdks/rust/envoy-client/src/utils.rs"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"d85c3ebd810eadd9769f493ee61e68148a9b7ed718bad605d48f5120f0d47303"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 6): engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:153-161 | engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:319-327 | engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:485-493 | engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:651-659 | engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:817-825 | engine/sdks/rust/envoy-protocol/src/versioned/mod.rs:983-991 \u2014 all 6 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-protocol/src/versioned/mod.rs"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"93103f177e4a17c1c47c461c4f92f3aee2831d3ce2f5172d5c6d72631bb2d4ec"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 6): rivetkit-rust/packages/actor-persist/src/versioned.rs:41-45 | rivetkit-rust/packages/client-protocol/src/versioned.rs:38-42 | rivetkit-rust/packages/client-protocol/src/versioned.rs:427-431 | rivetkit-rust/packages/client-protocol/src/versioned.rs:631-635 | rivetkit-rust/packages/inspector-protocol/src/versioned.rs:49-53 | rivetkit-rust/packages/inspector-protocol/src/versioned.rs:336-340 \u2014 there are 6 copies across 3 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 6 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/actor-persist/src/versioned.rs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"889c3e4d9c247803048508c97756da6a015a865b76d412af1326ea501a2f3415"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/registry/http.rs:1032-1036 | rivetkit-rust/packages/rivetkit-core/src/registry/http.rs:1040-1044 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/http.rs"},"region":{"startLine":1032}}}],"partialFingerprints":{"codehealthFindingId/v1":"a46965c65c2981ba1eccdd5ed562ca6880a6ce196acfa681fbc253b833d7d84f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): rivetkit-rust/packages/rivetkit-core/src/registry/websocket.rs:884-889 | rivetkit-rust/packages/rivetkit-core/src/registry/websocket.rs:902-907 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/websocket.rs"},"region":{"startLine":884}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6dbb36359d277952f9d64b541cddeed400991006db05bd15ea371cc43f6ca2f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): rivetkit-swift/Sources/RivetKitClient/RivetKitClient.swift:35-51 | rivetkit-swift/Sources/RivetKitClient/RivetKitClient.swift:59-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":"rivetkit-swift/Sources/RivetKitClient/RivetKitClient.swift"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"755949547ed68d98005671468aad582a84cb1d47a907c54f7b2b78ff1692844b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 5): rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift:129-144 | rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift:178-193 | rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift:204-219 | rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift:235-250 | rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift:267-282 \u2014 all 5 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift:129\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The \u0060return\u0060 at the foot of the matched lines is the enclosing body\u0027s own terminal exit, not an early one: it moves with them unchanged, and each site calls the extracted unit from the position that \u0060return\u0060 occupied \u2014 no decision has to be handed back and re-acted on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"cdc6f2dcf7040500ecea0ee266c3a7278ef32fadf6b7fb47727a2db4edff32e0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 6): rivetkit-swift/Sources/RivetKitSwiftUI/ActorObservable.swift:228-241 | rivetkit-swift/Sources/RivetKitSwiftUI/ActorObservable.swift:289-302 | rivetkit-swift/Sources/RivetKitSwiftUI/ActorObservable.swift:321-334 | rivetkit-swift/Sources/RivetKitSwiftUI/ActorObservable.swift:358-371 | rivetkit-swift/Sources/RivetKitSwiftUI/ActorObservable.swift:396-409 | rivetkit-swift/Sources/RivetKitSwiftUI/ActorObservable.swift:426-439 \u2014 all 6 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060rivetkit-swift/Sources/RivetKitSwiftUI/ActorObservable.swift:228\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-swift/Sources/RivetKitSwiftUI/ActorObservable.swift"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb7cd576630792d3f45dd86fa00b1d2a7d384ebed4902c64371fbfa9d985349f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 7): rivetkit-swift/Sources/RivetKitSwiftUI/ActorObservable.swift:216-226 | rivetkit-swift/Sources/RivetKitSwiftUI/ActorObservable.swift:245-255 | rivetkit-swift/Sources/RivetKitSwiftUI/ActorObservable.swift:277-287 | rivetkit-swift/Sources/RivetKitSwiftUI/ActorObservable.swift:309-319 | rivetkit-swift/Sources/RivetKitSwiftUI/ActorObservable.swift:346-356 | rivetkit-swift/Sources/RivetKitSwiftUI/ActorObservable.swift:384-394 | rivetkit-swift/Sources/RivetKitSwiftUI/ActorObservable.swift:414-424 \u2014 all 7 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060rivetkit-swift/Sources/RivetKitSwiftUI/ActorObservable.swift:216\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-swift/Sources/RivetKitSwiftUI/ActorObservable.swift"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"4525ce3e442b94a2eac320092154181a8365ec6f991b54f13db8ca86af7c105c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift:222-231 | rivetkit-swift/Sources/RivetKitSwiftUI/ActorObservable.swift:336-345 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift:222\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift"},"region":{"startLine":222}}}],"partialFingerprints":{"codehealthFindingId/v1":"3245b4d4bcd98e2af1fee6420723ab62663e4e5026d85561fe2a6e8e21510a6d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift:253-262 | rivetkit-swift/Sources/RivetKitSwiftUI/ActorObservable.swift:373-382 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift:253\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift"},"region":{"startLine":253}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e30cd74676bf00ffc1aa342b677b3af464143562d64faa877de9744063dae5d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift:113-121 | rivetkit-swift/Sources/RivetKitClient/ActorHandle.swift:61-69 \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":"rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d666b3701d6bbd6d41e8cbf5adbd408a7a3e67bc6c699c15770e1ca4e2f39d2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift:634-640 | rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift:651-657 | rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift:669-675 | rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift:688-694 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift:634\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift"},"region":{"startLine":634}}}],"partialFingerprints":{"codehealthFindingId/v1":"416227e2ac0f8efa216dd2e1edcc4c10ddd5cb396f32635b854cb40fcf4f350f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift:171-175 | rivetkit-swift/Sources/RivetKitSwiftUI/ActorObservable.swift:273-277 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift:171\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e0a9f0c91ee58acc177f5f0cb585ecff34cf279912ca565f7efbbe3f3b0cb3f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift:197-201 | rivetkit-swift/Sources/RivetKitSwiftUI/ActorObservable.swift:305-309 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift:197\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"83eaac10a6b3d47a571550b49c7c6297cb5aa4994e725ecdd9cbcc3437ac4449"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (42 lines \u00D7 2): engine/packages/test-snapshot-gen/src/lib.rs:211-252 | engine/packages/test-snapshot-gen/src/test_cluster.rs:117-158 \u2014 before extracting anything, compare \u0060engine/packages/test-snapshot-gen/src/lib.rs\u0060 and \u0060engine/packages/test-snapshot-gen/src/test_cluster.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 116 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":"engine/packages/test-snapshot-gen/src/lib.rs"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"0caf4db72ea6399a63efe392c56b2dbd25bb44389d9c5a3b72ebf392be4b814a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): engine/packages/test-snapshot-gen/src/lib.rs:257-279 | engine/packages/test-snapshot-gen/src/test_cluster.rs:163-185 \u2014 before extracting anything, compare \u0060engine/packages/test-snapshot-gen/src/lib.rs\u0060 and \u0060engine/packages/test-snapshot-gen/src/test_cluster.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 116 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":"engine/packages/test-snapshot-gen/src/lib.rs"},"region":{"startLine":257}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ff0c2f70acc8c041dc26b9354bdca4bfbc301cef53cfdda0bccf253225e8517"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): engine/packages/test-snapshot-gen/src/lib.rs:286-308 | engine/packages/test-snapshot-gen/src/test_cluster.rs:192-214 \u2014 before extracting anything, compare \u0060engine/packages/test-snapshot-gen/src/lib.rs\u0060 and \u0060engine/packages/test-snapshot-gen/src/test_cluster.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 116 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":"engine/packages/test-snapshot-gen/src/lib.rs"},"region":{"startLine":286}}}],"partialFingerprints":{"codehealthFindingId/v1":"9cd012ba338c9a75d1e07637a22fa792dfaf134142524c169db33bbee9dd9cc0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): engine/packages/test-snapshot-gen/src/lib.rs:193-206 | engine/packages/test-snapshot-gen/src/test_cluster.rs:99-112 \u2014 before extracting anything, compare \u0060engine/packages/test-snapshot-gen/src/lib.rs\u0060 and \u0060engine/packages/test-snapshot-gen/src/test_cluster.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 116 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":"engine/packages/test-snapshot-gen/src/lib.rs"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"44fabbc631f85fc391c724de09c71921d04a7971b7988f83c8f51600f084d078"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): engine/packages/test-snapshot-gen/src/lib.rs:315-328 | engine/packages/test-snapshot-gen/src/test_cluster.rs:221-234 \u2014 before extracting anything, compare \u0060engine/packages/test-snapshot-gen/src/lib.rs\u0060 and \u0060engine/packages/test-snapshot-gen/src/test_cluster.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 116 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":"engine/packages/test-snapshot-gen/src/lib.rs"},"region":{"startLine":315}}}],"partialFingerprints":{"codehealthFindingId/v1":"37674814dede48fc285710eb71b65cd5bcf8a9ad8f877878d4f4ca05604316c6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 3): engine/packages/test-deps-docker/src/lib.rs:93-106 | engine/packages/test-deps-docker/src/lib.rs:129-142 | engine/packages/test-deps-docker/src/lib.rs:165-178 \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":"engine/packages/test-deps-docker/src/lib.rs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6f8a1e6ce9a3bd8809b7c9908d5d7cc354e85de6318b1e5a9b5e8e51019890b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/packages/test-deps-docker/src/database.rs:38-46 | engine/packages/test-deps-docker/src/pubsub.rs:35-43 \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":"engine/packages/test-deps-docker/src/database.rs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f0433ca4f86b0867b0df6dd0fb7251aadbb39c46727d4100f226d65f866857a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): engine/packages/test-deps-docker/src/toxiproxy.rs:274-280 | engine/packages/test-deps-docker/src/toxiproxy.rs:330-336 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/test-deps-docker/src/toxiproxy.rs"},"region":{"startLine":274}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c53608e1a2a4383a8c841472a6734c949de2460cef09f214c0de0fc195d0527"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project pegboard-envoy: pegboard-envoy has instability 0.95 with 1 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"5818a344fa16ac284dabb084cfccd4f8089e4ceb0cbd91ba011542c435da0fb3"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project pegboard-gateway: pegboard-gateway has instability 0.92 with 1 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6e283d7ca459b260e630464a38ad59af6c2fc85c9d20a23aa6cf93b965ae2dc3"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project pegboard-gateway2: pegboard-gateway2 has instability 0.92 with 1 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"ec914df04a200c8ad95a575d1fbb6068218387cca2bd144911af231608e4f225"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project pegboard-gateway3: pegboard-gateway3 has instability 0.92 with 1 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0a342963160f565eb1102f9302aa3d08d05c82e656fa1ac9e42b6acfa83545ca"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project pegboard-outbound: pegboard-outbound has instability 0.93 with 1 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"27e9571745a0794870748ed5abff919a6af4b4100a0c302f68e0c9da49b834e0"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project pegboard-runner: pegboard-runner has instability 0.88 with 2 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"8bba298874b6513824baf7662d7168a5890147e95a85a2e916a5c31428531c25"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project rivet-api-peer: rivet-api-peer has instability 0.89 with 2 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"9ab33b0bdcb1f0a87651c1f254ccf1fff5fd87d5aee89f08bae01510b228c8d9"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project rivet-api-public: rivet-api-public has instability 0.90 with 2 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"fdb6b7e9ecafacf2664b06ce6e240003e7c01f681d1af35f3dac2e5a13b93023"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project rivet-bootstrap: rivet-bootstrap has instability 0.93 with 1 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"1dd67899ed57924f91912fabfe5de45757fd402c6f766a796038fc27a0b01aec"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project rivet-cache-purge: rivet-cache-purge has instability 0.83 with 1 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"75115aef57e5ff7217c500c4e1859b0e4c69d69cc164132c1fd7a4f6260ec2f5"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project rivet-dynamic-config: rivet-dynamic-config has instability 0.86 with 1 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6f9d7c14fb6eeb6ec660347f26eaf102ba0d4da6dcdf8abbfd7d99c2159a472f"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project rivet-guard: rivet-guard has instability 0.97 with 1 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"7313cada168ecd10e0cc53e219dea6252f821f2409a956baa4c729f41de5c793"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project rivet-version-management: rivet-version-management has instability 0.86 with 1 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"c4dfa22dd71fa29f26a4d14ccffd5b8b2de33ca2cbffeab414fbf04ef20640a3"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project rivet-workflow-worker: rivet-workflow-worker has instability 0.90 with 1 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"e288b35885dba48c7254bf9c217bb7dca1bb83c03dd3f16a79e471ba3edcc1ab"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: RivetKitClient: RivetKitClient: abstractness 0.00, instability 0.00, distance 1.00 \u2014 zone of pain \u2014 concrete and depended on by 1 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"7ec9d92d5755d48e0add3d957262fda366007bc06260d6ad273ed1f1400bb466"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: rivet-config: rivet-config: abstractness 0.00, instability 0.00, distance 1.00 \u2014 zone of pain \u2014 concrete and depended on by 37 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"1a15d046c2dba16fa97afbbb499abad04ce241b4cacd6239a375a11bbaffdeda"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: rivet-depot-client-types: rivet-depot-client-types: abstractness 0.00, instability 0.00, distance 1.00 \u2014 zone of pain \u2014 concrete and depended on by 3 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"4f150b2d29f83fb100bca75afb6de1406c98541f4451cc44c0c02ce860b21dfa"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: rivet-envoy-protocol: rivet-envoy-protocol: abstractness 0.00, instability 0.00, distance 1.00 \u2014 zone of pain \u2014 concrete and depended on by 12 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"7e26a745f9390f59e8a0c0f2d35dcc7159338deb6cded1dfa413c401de872e3b"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: rivet-logs: rivet-logs: abstractness 0.00, instability 0.00, distance 1.00 \u2014 zone of pain \u2014 concrete and depended on by 2 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"ea7ec9347256d7880a82610c1a5f10da2202214e87e7125be05d5c7d340b2d49"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: rivet-term: rivet-term: abstractness 0.00, instability 0.00, distance 1.00 \u2014 zone of pain \u2014 concrete and depended on by 1 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"4af80109da173489c77b301cccdad562ff945c26a56df122e1e19da50fc34ead"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: rivetkit-engine-process: rivetkit-engine-process: abstractness 0.00, instability 0.00, distance 1.00 \u2014 zone of pain \u2014 concrete and depended on by 1 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"627638f8b7a8efb7fe84250b8cb5db8910268d5f4846bb3ac057cc6d96dd8b7c"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: rivetkit-shared-types: rivetkit-shared-types: abstractness 0.00, instability 0.00, distance 1.00 \u2014 the shape a shared-kernel / building-block library has BY DESIGN \u2014 concrete and widely depended-on is what makes it useful, and this dimension does not penalise it (the distance is reported for completeness, not as a defect). Worth a look only if it has grown past one coherent kernel into an everything-bucket."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"b61c4f8b2ffacb3bd4e6b415f114abe8ab1a3b28e7a9f89ab68cdefaedbf72e0"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: rivetkit-core: rivetkit-core: abstractness 0.04, instability 0.00, distance 0.96 \u2014 zone of pain \u2014 concrete and depended on by 2 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"a64f2221f140391ad4136500894d5fb43db05d5514a29c4374e69539080503a0"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: rivet-error: rivet-error: abstractness 0.00, instability 0.05, distance 0.95 \u2014 zone of pain \u2014 concrete and depended on by 20 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"291a903f160a8a6a511ae4f863bf7a3d270157cbbb8a0176c9456894ff56660c"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: rivet-runtime: rivet-runtime: abstractness 0.00, instability 0.19, distance 0.81 \u2014 zone of pain \u2014 concrete and depended on by 13 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"ec35dc92931f9841c78c8dda4faa4dfb775a898665ae55d0e85a7620de1906bc"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: rivet-data: rivet-data: abstractness 0.00, instability 0.20, distance 0.80 \u2014 zone of pain \u2014 concrete and depended on by 8 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"e22b415835fb530f453f9ef0d2b01e0cdc2ac134cc1e125769aa54a50444f1df"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: rivet-auth-policy: rivet-auth-policy: 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":"936683717291006e3517d6fd6cfbfa530b84e4b7287afa2efedfcd1e35f67d21"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: rivet-outbound-guard: rivet-outbound-guard: 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":"1ea2957a2d0809b467f17a867899ebf435da74aecf3c6a06f4e6742ed3e1d102"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: rivet-pools: rivet-pools: abstractness 0.00, instability 0.25, distance 0.75 \u2014 zone of pain \u2014 concrete and depended on by 18 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"b994f94c673e5547ae2ceb9c6220e6cb6610b927c9a0972a2c07fa9cf015e26e"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: rivet-util-serde: rivet-util-serde: abstractness 0.25, instability 0.00, distance 0.75 \u2014 zone of pain \u2014 concrete and depended on by 2 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"85e1f466feb3998b93453b6f967f52bbb8e6fb78b04bd0998f269a6e0126893d"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: @rivetkit/traces: @rivetkit/traces: abstractness 0.27, instability 0.00, distance 0.73 \u2014 zone of pain \u2014 concrete and depended on by 2 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"c08470d41fa5a8b3fa1149c2817b3fdaa0e1397295c43fbc92e514d068065c58"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: universaldb: universaldb: abstractness 0.12, instability 0.15, distance 0.72 \u2014 zone of pain \u2014 concrete and depended on by 22 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"73b504d56673c969711699b1b9007df2e9e37643bfd7cd436816985820fd5911"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: SharedState (LCOM4 11): SharedState\u0027s methods fall into 11 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 11 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway/src/shared_state.rs"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"405a9f9ea31adc6f4bba66352d90ce3289405f57edfe445aa9b6c420422ef1a7"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: SharedState (LCOM4 6): SharedState\u0027s methods fall into 6 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 6 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/shared_state.rs"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c3b337685a0f2ee2b73bf5097e56b8b295aabe08279736b83bcf6feed500882"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: SharedState (LCOM4 6): SharedState\u0027s methods fall into 6 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 6 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway3/src/shared_state.rs"},"region":{"startLine":202}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c814381d8b9485751d1407eca27d5e33d5866921f20c1e4686e440850321b97"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: DefaultTestCallbacks (LCOM4 6): DefaultTestCallbacks\u0027s methods fall into 6 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 6 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/test-envoy/src/behaviors/default.rs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"721ea5fcca41db6d72c9948e6de6808df70cfd392ea40deeabba0013b346f80d"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: Runtime (LCOM4 5): Runtime\u0027s methods fall into 5 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 5 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/config/src/config/runtime.rs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd58fb2c2484a6bc06d78dc0a81cb756b14dfa2ae098d902802ed616f58def80"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: CoreRegistry (LCOM4 4): CoreRegistry\u0027s methods fall into 4 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 4 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit-napi/src/registry.rs"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b0380c839578267c1059a1c31a7ec8b428a261d1bec3c0cddc86bc0e8595bc1"}},{"ruleId":"D8","level":"warning","message":{"text":"Coverage not measured \u2014 JavaScript/TypeScript suite: Coverage NOT MEASURED: the JavaScript/TypeScript half could not be measured \u2014 engine/sdks/typescript/envoy-protocol/ runs vitest but declares no coverage provider, so the suite can run and still produce no lcov \u2014 add \u0060@vitest/coverage-v8\u0060 (or \u0060@vitest/coverage-istanbul\u0060) as a devDependency. Coverage is excluded from the score rather than counted as a near-zero. The named suite step is one the repository\u0027s maintainers can perform; once it passes, the real number is measured on the next scan. Alternatively, commit the lcov/Cobertura report your CI produces and it is read without a re-run."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"62e63e619c28f057e129f2997c965d32a457366a9ce18ca019ffb6bdfba85c99"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: delivery failures retry with backoff then succeed: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"integrations/workflow-world/tests/integration/dispatcher-loop.test.ts"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7306c927735cb62e7164fe4a4287490b5842b5f7185190ceef02e82288ad4d8"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: long-step {timeoutSeconds} response defers redelivery instead of acking: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"integrations/workflow-world/tests/integration/dispatcher-loop.test.ts"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e6802832ec380f8ac68772aa49ffbe5a025d19b49cd28f6877ddfbf0c97a4f1"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): satisfies the same shared runtime interface as the NAPI adapter: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/tests/wasm-runtime.test.ts"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2c987c923989aa6402f84dda25e84096f9938d9d28b3b83ca1f66db1dae9681"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: preserves nested handler context and client action types: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/tests/nested-actions.test.ts"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"05dd513e18bb2bb945b8b07c5dee0013d176ea89c6f929e463f8100c12d369b1"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: preserves default database context and actions on base definitions: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/tests/nested-actions.test.ts"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"79556593016203d391316bc3869b44fb196087d9b90b68ab89a14cca7c3a646e"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: rivetkit-typescript/packages/rivetkit/src/registry/native.ts: rivetkit-typescript/packages/rivetkit/src/registry/native.ts changed 36 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 138 in native.buildNativeFactory at line 4033. 11 of those changes were fix/bug commits, and the other 25 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- rivetkit-typescript/packages/rivetkit/src/registry/native.ts\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":"rivetkit-typescript/packages/rivetkit/src/registry/native.ts"},"region":{"startLine":4033}}}],"partialFingerprints":{"codehealthFindingId/v1":"326793c95e9d37f6dcb66fcef64e77f9e60af96adc6a744997d535716d895998"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: rivetkit-typescript/packages/rivetkit-wasm/src/lib.rs: rivetkit-typescript/packages/rivetkit-wasm/src/lib.rs changed 24 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 44 in rivetkit_wasm::dispatch_event at line 722. 6 of those changes were fix/bug commits, and the other 18 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- rivetkit-typescript/packages/rivetkit-wasm/src/lib.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit-wasm/src/lib.rs"},"region":{"startLine":722}}}],"partialFingerprints":{"codehealthFindingId/v1":"c577b565dcb0fd09ebb0212813930d986e8fe85794e7d772451c9222e6d858c9"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: engine/packages/guard-core/src/proxy_service.rs: engine/packages/guard-core/src/proxy_service.rs changed 12 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 75 in ProxyService::handle_websocket_upgrade at line 1113. 4 of those changes were fix/bug commits, and the other 8 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- engine/packages/guard-core/src/proxy_service.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":"engine/packages/guard-core/src/proxy_service.rs"},"region":{"startLine":1113}}}],"partialFingerprints":{"codehealthFindingId/v1":"bef783fbdbbe815f23e77a967e66906078cecb2de6253bd37465efbc5f93c313"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: rivetkit-typescript/packages/rivetkit-napi/src/napi_actor_events.rs: rivetkit-typescript/packages/rivetkit-napi/src/napi_actor_events.rs changed 13 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 38 in rivetkit_napi::napi_actor_events::dispatch_event at line 381. 4 of those changes were fix/bug commits, and the other 9 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- rivetkit-typescript/packages/rivetkit-napi/src/napi_actor_events.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":"rivetkit-typescript/packages/rivetkit-napi/src/napi_actor_events.rs"},"region":{"startLine":381}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7e3e6c3f6aa704517409001b3cbfb31ee2f5a11fc8319b10848db24efd7297f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: rivetkit-rust/packages/rivetkit/src/start.rs: rivetkit-rust/packages/rivetkit/src/start.rs changed 15 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 22 in rivetkit::start::handle_actor_event at line 359. 4 of those changes were fix/bug commits, and the other 11 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- rivetkit-rust/packages/rivetkit/src/start.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":"rivetkit-rust/packages/rivetkit/src/start.rs"},"region":{"startLine":359}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8b14dbc1a9bfef95538c9be8c17710ce3a0bf3294fbcd4cdfa670962b7b3f5c"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: engine/sdks/rust/envoy-client/src/envoy.rs: engine/sdks/rust/envoy-client/src/envoy.rs changed 9 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 36 in rivet_envoy_client::envoy::envoy_loop at line 448. 3 of those changes were fix/bug commits, and the other 6 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- engine/sdks/rust/envoy-client/src/envoy.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":"engine/sdks/rust/envoy-client/src/envoy.rs"},"region":{"startLine":448}}}],"partialFingerprints":{"codehealthFindingId/v1":"e33daa77270ee369f8a038b4797536dd5da336063362b0550156654a516d668f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs: engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs changed 11 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 29 in pegboard_envoy::ws_to_tunnel_task::dispatch_message at line 685. 1 of those changes was a fix/bug commit, and the other 10 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- engine/packages/pegboard-envoy/src/ws_to_tunnel_task.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":"engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs"},"region":{"startLine":685}}}],"partialFingerprints":{"codehealthFindingId/v1":"e18e182c4c06b94aa0f27e4dacba3551d6aef52b458c28d80c7ea7560c97db1c"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: engine/packages/pegboard-gateway2/src/lib.rs: engine/packages/pegboard-gateway2/src/lib.rs changed 8 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 38 in PegboardGateway2::handle_websocket_inner at line 347. 2 of those changes were fix/bug commits, and the other 6 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- engine/packages/pegboard-gateway2/src/lib.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway2/src/lib.rs"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"96e41051da59ce40c89a27f6eb3833c728a59e05cecbce353cb6445f00a31760"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: engine/packages/guard-core/src/utils.rs: engine/packages/guard-core/src/utils.rs changed 7 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 40 in rivet_guard_core::utils::err_into_response at line 391. 2 of those changes were fix/bug commits, and the other 5 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- engine/packages/guard-core/src/utils.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":"engine/packages/guard-core/src/utils.rs"},"region":{"startLine":391}}}],"partialFingerprints":{"codehealthFindingId/v1":"626bf278162451c717e749ef902c6dfdd8011c7c9bb70c48a4b266b76d54dadd"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: rivetkit-rust/packages/rivetkit-core/src/actor/context.rs: rivetkit-rust/packages/rivetkit-core/src/actor/context.rs changed 17 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in ActorContext::prepare_state_deltas at line 1347. 1 of those changes was a fix/bug commit, and the other 16 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- rivetkit-rust/packages/rivetkit-core/src/actor/context.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":"rivetkit-rust/packages/rivetkit-core/src/actor/context.rs"},"region":{"startLine":1347}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8f8b377e9f1eeac1b20bdfbe7db9e8048bd77c15d80212ad59dee079775e73f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: rivetkit-typescript/packages/rivetkit/src/client/actor-handle.ts: rivetkit-typescript/packages/rivetkit/src/client/actor-handle.ts changed 13 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 19 in ActorHandleRaw.#sendActionAttempts at line 327. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- rivetkit-typescript/packages/rivetkit/src/client/actor-handle.ts\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":"rivetkit-typescript/packages/rivetkit/src/client/actor-handle.ts"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"124cc13172b8b76f8535cdfb2b4bd184006477a141ab5fb007058a23170fadd6"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: engine/packages/universaldb/src/driver/postgres/resolver/mod.rs: engine/packages/universaldb/src/driver/postgres/resolver/mod.rs changed 11 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 19 in universaldb::driver::postgres::resolver::drain_batch at line 419. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- engine/packages/universaldb/src/driver/postgres/resolver/mod.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/universaldb/src/driver/postgres/resolver/mod.rs"},"region":{"startLine":419}}}],"partialFingerprints":{"codehealthFindingId/v1":"013eaf5045c95acdbc5725494e8c5c253c1b3a5217bab4b149de24df5fa2613b"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: engine/packages/guard-core/src/response_body.rs: engine/packages/guard-core/src/response_body.rs changed 8 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 26 in ResponseBody::poll_frame at line 149. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- engine/packages/guard-core/src/response_body.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":"engine/packages/guard-core/src/response_body.rs"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd3fb30cd99d428162670dc3efee87eccf546f6fab47c03bf935494079aa8a92"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: engine/packages/engine/src/commands/udb/cli.rs: engine/packages/engine/src/commands/udb/cli.rs changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 91 in SubCommand::execute at line 156. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- engine/packages/engine/src/commands/udb/cli.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":"engine/packages/engine/src/commands/udb/cli.rs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea9e2a41a7cd114ec1f626797e003740b109ad48f7233b1f7f07085129a3c12d"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: engine/packages/pegboard-gateway3/src/lib.rs: engine/packages/pegboard-gateway3/src/lib.rs changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 36 in PegboardGateway3::handle_websocket_inner at line 119. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- engine/packages/pegboard-gateway3/src/lib.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway3/src/lib.rs"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"06a8fc22eb30c3bb0ca95ad2c5d97f2adf8f37e6d1bd08079c00cfe8093c0cac"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: rivetkit-rust/packages/rivetkit-core/src/registry/inspector.rs: rivetkit-rust/packages/rivetkit-core/src/registry/inspector.rs changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 42 in RegistryDispatcher::handle_inspector_fetch at line 22. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- rivetkit-rust/packages/rivetkit-core/src/registry/inspector.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":"rivetkit-rust/packages/rivetkit-core/src/registry/inspector.rs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"64f2a03dd5408830e64a0275123579304fcfba23f2d6390609ddc1ee67ba3a37"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: engine/packages/gasoline/src/db/kv/mod.rs: engine/packages/gasoline/src/db/kv/mod.rs changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 40 in DatabaseKv::pull_workflows at line 1138. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- engine/packages/gasoline/src/db/kv/mod.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/gasoline/src/db/kv/mod.rs"},"region":{"startLine":1138}}}],"partialFingerprints":{"codehealthFindingId/v1":"655e1a16b934a7d5577ef7cf873f04de8e85c32b67266dc48ccd1ba6023aefc6"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: engine/packages/pegboard-gateway3/src/shared_state.rs: engine/packages/pegboard-gateway3/src/shared_state.rs changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 49 in InFlightRequestHandle::send_message_admitted at line 821. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- engine/packages/pegboard-gateway3/src/shared_state.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard-gateway3/src/shared_state.rs"},"region":{"startLine":821}}}],"partialFingerprints":{"codehealthFindingId/v1":"ceba288b8f75426c1cf982065c7d5af357f190050e850a2ace19c8935d604a59"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: rivetkit-rust/packages/rivetkit-core/src/actor/config.rs: rivetkit-rust/packages/rivetkit-core/src/actor/config.rs changed 7 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 21 in ActorConfig::from_input at line 258. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- rivetkit-rust/packages/rivetkit-core/src/actor/config.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":"rivetkit-rust/packages/rivetkit-core/src/actor/config.rs"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7259da4ac88567b70d9eb626fe75ba9054b889a0adf60da4a6b18742012fc3e"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: scripts/publish/src/lib/version.ts: scripts/publish/src/lib/version.ts changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 28 in version.bumpPackageJsons at line 187. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- scripts/publish/src/lib/version.ts\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":"scripts/publish/src/lib/version.ts"},"region":{"startLine":187}}}],"partialFingerprints":{"codehealthFindingId/v1":"5943ff9fea7e239285771b6b8cef954119a6c1c70789d30c438e8bc6cd5c0966"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: engine/packages/config/src/config/mod.rs: engine/packages/config/src/config/mod.rs changed 9 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in Root::validate_and_set_defaults at line 260. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- engine/packages/config/src/config/mod.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/config/src/config/mod.rs"},"region":{"startLine":260}}}],"partialFingerprints":{"codehealthFindingId/v1":"0664bea95d16566f0613ceac7225e8f962b0337fbbbc64ea884f2ff52ec610a8"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: engine/sdks/rust/envoy-client/src/connection/native.rs: engine/sdks/rust/envoy-client/src/connection/native.rs changed 7 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 19 in rivet_envoy_client::connection::native::single_connection at line 96. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- engine/sdks/rust/envoy-client/src/connection/native.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":"engine/sdks/rust/envoy-client/src/connection/native.rs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"f58c7fd7a659a121b4369e4fcd1abf772636651095aa7e4913d70e36d657eeff"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: scripts/publish/src/lib/packages.ts: scripts/publish/src/lib/packages.ts changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 22 in packages.discoverPackages at line 118. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- scripts/publish/src/lib/packages.ts\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":"scripts/publish/src/lib/packages.ts"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"92d583285db35fbab988a1912ba265e792f7b82ed4945c99ce315a89b809eca3"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: rivetkit-typescript/packages/rivetkit/src/registry/config/index.ts: rivetkit-typescript/packages/rivetkit/src/registry/config/index.ts changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 23 in index.RegistryConfigSchema at line 309. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- rivetkit-typescript/packages/rivetkit/src/registry/config/index.ts\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":"rivetkit-typescript/packages/rivetkit/src/registry/config/index.ts"},"region":{"startLine":309}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac006e14ae9c2b0a5f30feb5aa216b062587fae6a2981645c34985969fe54a49"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: engine/sdks/rust/envoy-client/src/connection/wasm.rs: engine/sdks/rust/envoy-client/src/connection/wasm.rs changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 22 in rivet_envoy_client::connection::wasm::imp::single_connection at line 102. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- engine/sdks/rust/envoy-client/src/connection/wasm.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":"engine/sdks/rust/envoy-client/src/connection/wasm.rs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffe545184087bbe0d71958070d5b528632757897bbbf13d78ec52e11bfa0f3d5"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: engine/packages/cli/src/util.rs: engine/packages/cli/src/util.rs changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 18 in rivet_cli::util::build_resources at line 51. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- engine/packages/cli/src/util.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":"engine/packages/cli/src/util.rs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"b22d4ea6a98135c6e718dfa8fecb559d8c13d4b3036d32f818defc0bc4e0e664"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: engine/packages/depot/src/workflows/db_reclaimer.rs: engine/packages/depot/src/workflows/db_reclaimer.rs changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 32 in depot::workflows::db_reclaimer::reclaim_fdb_job_tx at line 641. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- engine/packages/depot/src/workflows/db_reclaimer.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":"engine/packages/depot/src/workflows/db_reclaimer.rs"},"region":{"startLine":641}}}],"partialFingerprints":{"codehealthFindingId/v1":"1313aaddb47cd63e2d3eda9d8d664673545ba7b639bae797f15643d8b4652951"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: engine/sdks/rust/envoy-client/src/tunnel.rs: engine/sdks/rust/envoy-client/src/tunnel.rs changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 19 in rivet_envoy_client::tunnel::handle_tunnel_message at line 93. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- engine/sdks/rust/envoy-client/src/tunnel.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":"engine/sdks/rust/envoy-client/src/tunnel.rs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"469fa5dcf75daf26f0e5721c7f5274f142263e223e50289be613a164c873b3bb"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: self-host/compose/template/src/docker-compose.ts: self-host/compose/template/src/docker-compose.ts changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 17 in docker-compose.generateDockerCompose at line 6. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- self-host/compose/template/src/docker-compose.ts\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":"self-host/compose/template/src/docker-compose.ts"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd2b3f1a9bc9ab4edac12efbd274ee8c26fb2a59fdeeb0d94202fa0d7d08f209"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: engine/packages/config/src/lib.rs: engine/packages/config/src/lib.rs changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 28 in Config::apply_dynamic at line 165. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- engine/packages/config/src/lib.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/config/src/lib.rs"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"58258c9adc1c705a9d299868477c3c3c7c08314cbf7b46e1464f2774084d75f2"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: rivetkit-rust/packages/rivetkit-core/src/actor/state.rs: rivetkit-rust/packages/rivetkit-core/src/actor/state.rs changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in ActorContext::apply_state_deltas_inner at line 585. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- rivetkit-rust/packages/rivetkit-core/src/actor/state.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/actor/state.rs"},"region":{"startLine":585}}}],"partialFingerprints":{"codehealthFindingId/v1":"758435f6891bb198abb10a76e2bf9e2a5a21bfcc35aa528912938fe61730d3f4"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: engine/packages/universaldb/src/driver/rocksdb/transaction_task.rs: engine/packages/universaldb/src/driver/rocksdb/transaction_task.rs changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in TransactionTask::handle_commit at line 270. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- engine/packages/universaldb/src/driver/rocksdb/transaction_task.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":"engine/packages/universaldb/src/driver/rocksdb/transaction_task.rs"},"region":{"startLine":270}}}],"partialFingerprints":{"codehealthFindingId/v1":"aba2cbf2ad466a9e6f28ece4de095f0019eb45fa48570c1acc5f1357a9574de8"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: rivetkit-typescript/packages/rivetkit/src/common/database/mod.ts: rivetkit-typescript/packages/rivetkit/src/common/database/mod.ts changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 26 in mod.db at line 83. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- rivetkit-typescript/packages/rivetkit/src/common/database/mod.ts\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":"rivetkit-typescript/packages/rivetkit/src/common/database/mod.ts"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"858c61b88932a2593a83fd0badbaa3695924c31b115edab4cecb0548e0eb446b"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: rivetkit-typescript/packages/rivetkit/src/common/database/native-database.ts: rivetkit-typescript/packages/rivetkit/src/common/database/native-database.ts changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 19 in native-database.wrapJsNativeDatabase at line 326. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- rivetkit-typescript/packages/rivetkit/src/common/database/native-database.ts\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":"rivetkit-typescript/packages/rivetkit/src/common/database/native-database.ts"},"region":{"startLine":326}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b140a8ecf5c8ef44425629614ec3e78d7c1673a757898c1ddab111df273721b"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: engine/sdks/rust/envoy-client/src/connection/mod.rs: engine/sdks/rust/envoy-client/src/connection/mod.rs changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in rivet_envoy_client::connection::to_rivet_kind at line 326. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- engine/sdks/rust/envoy-client/src/connection/mod.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/rust/envoy-client/src/connection/mod.rs"},"region":{"startLine":326}}}],"partialFingerprints":{"codehealthFindingId/v1":"5bb7116c07dbf171feb6fed4a5fcb22581274c86e1c1ef2c2c5439eda7f10770"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: engine/sdks/rust/envoy-client/src/stringify.rs: engine/sdks/rust/envoy-client/src/stringify.rs changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in rivet_envoy_client::stringify::stringify_to_rivet at line 252. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- engine/sdks/rust/envoy-client/src/stringify.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":"engine/sdks/rust/envoy-client/src/stringify.rs"},"region":{"startLine":252}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5c8485d08248386dbc68b630caffa36e9d6d1db9dc28bccd5909a89b5cb7620"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: rivetkit-typescript/packages/rivetkit/src/client/actor-conn.ts: rivetkit-typescript/packages/rivetkit/src/client/actor-conn.ts changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 18 in ActorConnRaw.#handleOnClose at line 867. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- rivetkit-typescript/packages/rivetkit/src/client/actor-conn.ts\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":"rivetkit-typescript/packages/rivetkit/src/client/actor-conn.ts"},"region":{"startLine":867}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fb5dc8e0864e3d830b4024e8ff648e8dd6936b61cfefe3e892a7f669cfc9ed5"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: rivetkit-typescript/packages/workflow-engine/src/context.ts: rivetkit-typescript/packages/workflow-engine/src/context.ts changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 24 in WorkflowContextImpl.executeStep at line 790. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- rivetkit-typescript/packages/workflow-engine/src/context.ts\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":"rivetkit-typescript/packages/workflow-engine/src/context.ts"},"region":{"startLine":790}}}],"partialFingerprints":{"codehealthFindingId/v1":"34d4b67d4aa47fe02c7b673f21a4cc75d05c1861630bb6443e7369feb4a0de6f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: rivetkit-rust/packages/rivetkit-core/src/registry/inspector_ws.rs: rivetkit-rust/packages/rivetkit-core/src/registry/inspector_ws.rs changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 18 in RegistryDispatcher::handle_inspector_websocket at line 166. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- rivetkit-rust/packages/rivetkit-core/src/registry/inspector_ws.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":"rivetkit-rust/packages/rivetkit-core/src/registry/inspector_ws.rs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"e71a051d372e9c50f66ede3e2b2c8b90f91105ce0edc33d7b992b90ba1201f51"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: rivetkit-typescript/packages/workflow-engine/src/storage.ts: rivetkit-typescript/packages/workflow-engine/src/storage.ts changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 23 in storage.flush at line 240. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- rivetkit-typescript/packages/workflow-engine/src/storage.ts\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":"rivetkit-typescript/packages/workflow-engine/src/storage.ts"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"94d4bf62bfdf95b3098df40b8c65ae1cc4eb54180471932e100c1808e2dfaca8"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: engine/packages/pegboard/src/ops/actor/create.rs: engine/packages/pegboard/src/ops/actor/create.rs changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 20 in pegboard::ops::actor::create::pegboard_actor_create at line 44. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- engine/packages/pegboard/src/ops/actor/create.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pegboard/src/ops/actor/create.rs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"49073bb0f292e61ffe782e0c8df362f7d2755e50823fcb79f1f3cc8393f31205"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: engine/packages/guard-core/src/server.rs: engine/packages/guard-core/src/server.rs changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 27 in rivet_guard_core::server::run_server at line 27. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- engine/packages/guard-core/src/server.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/guard-core/src/server.rs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"8dc56c644dee4cf74ac62b634797834c091664910edfdcf0886cc534272f1135"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: rivetkit-rust/packages/inspector-protocol/src/versioned.rs: rivetkit-rust/packages/inspector-protocol/src/versioned.rs changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 18 in ToClient::v6_to_v5 at line 569. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- rivetkit-rust/packages/inspector-protocol/src/versioned.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":"rivetkit-rust/packages/inspector-protocol/src/versioned.rs"},"region":{"startLine":569}}}],"partialFingerprints":{"codehealthFindingId/v1":"2cd320bbf209fb70c97dc4e6abe9966bf07b9e4e12f5423d8f00dbd77e7c4817"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: engine/packages/gasoline/src/ctx/workflow.rs: engine/packages/gasoline/src/ctx/workflow.rs changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in WorkflowCtx::run at line 158. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- engine/packages/gasoline/src/ctx/workflow.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":"engine/packages/gasoline/src/ctx/workflow.rs"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"b56d97028b31ac13c620b094b548fbf6a34aadfee3ec3af649f9a2702ae1684d"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: scripts/publish/src/lib/npm.ts: scripts/publish/src/lib/npm.ts changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in npm.publishAll at line 319. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- scripts/publish/src/lib/npm.ts\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":"scripts/publish/src/lib/npm.ts"},"region":{"startLine":319}}}],"partialFingerprints":{"codehealthFindingId/v1":"661030a7c4dd1a809742c5ba6762fed6a1a82b6e7a0db236b0826f72b3a61024"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: engine/packages/engine/src/commands/config.rs: engine/packages/engine/src/commands/config.rs changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 22 in UpdateSubCommand::execute at line 155. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- engine/packages/engine/src/commands/config.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":"engine/packages/engine/src/commands/config.rs"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"630178d6136b57126791c965732fbddbb17249798f7ca956504d19092f610981"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: rivetkit-typescript/packages/rivetkit/src/db/drizzle.ts: rivetkit-typescript/packages/rivetkit/src/db/drizzle.ts changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 20 in drizzle.db at line 88. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- rivetkit-typescript/packages/rivetkit/src/db/drizzle.ts\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":"rivetkit-typescript/packages/rivetkit/src/db/drizzle.ts"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"433b9c1283503d38b2c3a8af4c88a2c596dd4f5686840c5dd764376d4fb9ad1f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: engine/packages/pegboard/src/ops/serverless_metadata/fetch.rs: engine/packages/pegboard/src/ops/serverless_metadata/fetch.rs changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 18 in pegboard::ops::serverless_metadata::fetch::pegboard_serverless_metadata_fetch at line 156. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- engine/packages/pegboard/src/ops/serverless_metadata/fetch.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":"engine/packages/pegboard/src/ops/serverless_metadata/fetch.rs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a66f86597776f5e3de10cdd1b80d68c76b101e6448a163adff7b820abe02e95"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: engine/packages/epoxy/src/ops/propose.rs: engine/packages/epoxy/src/ops/propose.rs changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in epoxy::ops::propose::epoxy_propose at line 321. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- engine/packages/epoxy/src/ops/propose.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":"engine/packages/epoxy/src/ops/propose.rs"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6bc67434995930e233206c2e6a7391b32d36238a50ec4868941eab02e113130"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: engine/packages/gasoline/src/worker.rs: engine/packages/gasoline/src/worker.rs changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in Worker::start at line 77. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- engine/packages/gasoline/src/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":"engine/packages/gasoline/src/worker.rs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc4ec34f7c47d3126e30353427377b1ca504cf63292804fdf7e36b4330fcb5f4"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: engine/packages/pegboard-envoy/src/conn.rs: engine/packages/pegboard-envoy/src/conn.rs changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in pegboard_envoy::conn::init_conn at line 90. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- engine/packages/pegboard-envoy/src/conn.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":"engine/packages/pegboard-envoy/src/conn.rs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"0273f0df204d75fc2e261f0488533f78e148ce7e639997f7161385263fdee4a2"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: engine/packages/gasoline/src/builder/workflow/signal.rs: engine/packages/gasoline/src/builder/workflow/signal.rs changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in SignalBuilder::send at line 108. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- engine/packages/gasoline/src/builder/workflow/signal.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":"engine/packages/gasoline/src/builder/workflow/signal.rs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"26974f395186dfbfc9e50119755afa36059dd3a0d4ab2b1c59143b93c5e55dcf"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: scripts/publish/src/lib/context.ts: scripts/publish/src/lib/context.ts changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in context.resolveContext at line 189. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- scripts/publish/src/lib/context.ts\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":"scripts/publish/src/lib/context.ts"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"814dcde6348198523174571c9c73692e50c499c361c10876dbbca308596a20d1"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: rivetkit-typescript/packages/rivetkit/src/client/utils.ts: rivetkit-typescript/packages/rivetkit/src/client/utils.ts changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in utils.sendHttpRequest at line 99. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- rivetkit-typescript/packages/rivetkit/src/client/utils.ts\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":"rivetkit-typescript/packages/rivetkit/src/client/utils.ts"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3271b735faec00767dc491d2dc5ad8ffbe2b19351b14e00b04713c55a3916ef"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: engine/packages/depot/src/compaction/shared.rs: engine/packages/depot/src/compaction/shared.rs changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in depot::compaction::shared::read_stale_pidx_chunk at line 1766. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- engine/packages/depot/src/compaction/shared.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":"engine/packages/depot/src/compaction/shared.rs"},"region":{"startLine":1766}}}],"partialFingerprints":{"codehealthFindingId/v1":"30c403b89f8e468bdb5da57fc930ca29da8a4198cf8cf6073150fa447a2df8eb"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: engine/packages/universaldb/src/driver/postgres/transaction_task.rs: engine/packages/universaldb/src/driver/postgres/transaction_task.rs changed 5 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 12 (its worst body is TransactionTask::run at line 77), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix(universaldb): run postgres transaction reads concurrently\u201D; \u201Cfix(universaldb): restore commit connection release and reserved leader pool\u201D; \u201Cfix(universaldb): stop postgres commits from starving the connection pool\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- engine/packages/universaldb/src/driver/postgres/transaction_task.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":"engine/packages/universaldb/src/driver/postgres/transaction_task.rs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4d7b6580a84caa85246e41659c0a73fdb320749f156ea04c4c54ecde3209538"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: rivetkit-typescript/packages/rivetkit/src/registry/native-http.ts: rivetkit-typescript/packages/rivetkit/src/registry/native-http.ts changed 5 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 13 (its worst body is native-http.buildNativeHttpRequest at line 45), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Crevert(http): return main to Envoy protocol v6 (#5515)\u201D; \u201Crevert(http): remove streaming lifecycle hardening\u201D; \u201Cfix(http): harden streaming lifecycle and observability (#5471)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- rivetkit-typescript/packages/rivetkit/src/registry/native-http.ts\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":"rivetkit-typescript/packages/rivetkit/src/registry/native-http.ts"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"90017941ba977412d8164d64c47d043b65e46abd3666fd6f3bcd240be6b197ce"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: engine/packages/pegboard-gateway2/src/metrics_task.rs: engine/packages/pegboard-gateway2/src/metrics_task.rs changed 4 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 3 (its worst body is pegboard_gateway2::metrics_task::task at line 10), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Crevert(http): return main to Envoy protocol v6 (#5515)\u201D; \u201Crevert(http): remove streaming lifecycle hardening\u201D; \u201Cfix(http): harden streaming lifecycle and observability (#5471)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 04:27:49 -07:00\u0027 --until=\u00272026-09-29 04:27:49 -07:00\u0027 --full-history --no-merges -- engine/packages/pegboard-gateway2/src/metrics_task.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":"engine/packages/pegboard-gateway2/src/metrics_task.rs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac0d39421a3671fd0d0532ccdc20536a02e1de7f7c2763d73d1b843f42cf5b3c"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #1: If anonymized user #1 becomes unavailable, 71 significant file(s) lose their only recent owner: engine/packages/depot-client/src/vfs.rs, rivetkit-rust/packages/rivetkit-core/src/actor/schedule.rs, rivetkit-rust/packages/rivetkit-core/src/actor/sqlite/tx.rs, rivetkit-rust/packages/rivetkit-core/src/actor/internal_storage/mod.rs, integrations/workflow-world/src/actors/workflow-run.ts, rivetkit-typescript/packages/rivetkit-napi/src/actor_context.rs, rivetkit-rust/packages/rivetkit-core/src/registry/inspector_ws.rs, rivetkit-rust/packages/rivetkit-core/src/actor/connection.rs (\u002B63 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"079455c07815727ebf1135adfda702c38a3bad26a1b1dd177ce9a66fa6a4ce4d"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #2: If anonymized user #2 becomes unavailable, 45 significant file(s) lose their only recent owner: engine/packages/gasoline/src/db/kv/debug.rs, engine/packages/gasoline/src/db/kv/keys/history.rs, engine/packages/gasoline/src/ctx/workflow.rs, engine/packages/gasoline/src/db/kv/keys/workflow.rs, engine/packages/universaldb/src/driver/postgres/resolver/mod.rs, engine/packages/pegboard/src/workflows/runner2.rs, engine/packages/gasoline/src/history/cursor.rs, engine/packages/gasoline/src/db/debug.rs (\u002B37 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"5c212e272b3a43f5944875c8d4e53984b28095b344bcc19947cbc6e2f8590bc2"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #3: If anonymized user #3 becomes unavailable, 11 significant file(s) lose their only recent owner: container-runner/src/main.rs, container-runner/src/actor.rs, engine/packages/cli/src/util.rs, rivetkit-rust/packages/client/src/protocol/codec.rs, container-runner/src/monitor.rs, engine/packages/cli/src/commands/pool.rs, engine/packages/cli/src/commands/deploy.rs, container-runner/src/child.rs (\u002B3 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"118e844eacf4ece891e1d70fa14bb995f73bd740935427c19d7e7f4c8018669c"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #4: If anonymized user #4 becomes unavailable, 7 significant file(s) lose their only recent owner: rivetkit-typescript/packages/effect/src/RivetError.ts, rivetkit-typescript/packages/effect/src/Actor.ts, rivetkit-typescript/packages/effect/src/State.ts, rivetkit-typescript/packages/effect/src/Registry.ts, rivetkit-typescript/packages/effect/src/Client.ts, rivetkit-typescript/packages/effect/src/Action.ts, rivetkit-typescript/packages/effect/src/internal/logging.ts. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6fce979853c70d494b53c77b0d8d372e6d3e31472c814d68b558a77e5e1d48df"}},{"ruleId":"D16","level":"note","message":{"text":"Further sole-owners (lower concentration): 1 other contributor(s) are each the sole owner of a small amount of code below the off-boarding threshold \u2014 folded into the bus-factor score and metrics (135 single-owned of 741 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; 741 of the 1314 production source files in this repository met that bar). They are anonymized user #5 (1 file(s)) \u2014 spread or document their files in the same way, at lower priority than the named off-boarding risks above."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6eac528f2429e724e1a97ed868f79eefbcf1888dab4af9a9e673429369bb5b2f"}},{"ruleId":"D19","level":"note","message":{"text":"Documentation: no project overview: The opening paragraph describes Rivet Actors as \u0027long-running, lightweight processes designed for stateful workloads\u0027 but does not explain what the project is or what it does beyond its own description. Expand the overview to define Rivet Actors and their role in durable execution, plus a one-paragraph problem statement motivating them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"README.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"66dbf18d06aa983c06246108610908ba99aae6784280b3aacd1a6655733d71be"}},{"ruleId":"D22","level":"warning","message":{"text":"Three methods perform database execution with overlapping signatures. \u0060exec\u0060 takes only SQL, while \u0060run\u0060 and \u0060execute\u0060 both take SQL and params. \u0060run\u0060 and \u0060execute\u0060 are functionally identical in signature and likely intent, creating unnecessary duplication.: Remove \u0060run\u0060 and \u0060execute\u0060. Keep \u0060exec\u0060 for parameterless queries and \u0060execute\u0060 (or \u0060run\u0060) for parameterized queries. Standardize on one name (e.g., \u0060execute\u0060 is more common in SQL libraries). (signatures: NativeDatabaseHandle.exec(sql: String): Result | NativeDatabaseHandle.run(sql: String, params: BindParam): Result | NativeDatabaseHandle.execute(sql: String, params: BindParam): Result)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"a13e957664bd939030fb43b359fde2341692e0fb5c4636db80e91edc8820bea9"}},{"ruleId":"D22","level":"warning","message":{"text":"Profiled execution methods are split between \u0060exec\u0060 and \u0060execute\u0060 roots. If \u0060exec\u0060 and \u0060execute\u0060 are redundant (see above), their profiled variants are too. Furthermore, having both \u0060exec_profiled\u0060 and \u0060execute_profiled\u0060 suggests a lack of unified naming convention for the base operations.: Unify base execution methods first. Then provide a single profiled variant, e.g., \u0060execute_profiled(sql, params)\u0060 and \u0060exec_profiled(sql)\u0060 if parameterless is needed, or just \u0060execute_profiled\u0060 with optional params. (signatures: NativeDatabaseHandle.exec_profiled(sql: String): Result | NativeDatabaseHandle.execute_profiled(sql: String, params: BindParam): Result)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"c49992667ba17cf5c14487d08b863fc03d626414dad04c6bd216779a7ec2f5e2"}},{"ruleId":"D22","level":"warning","message":{"text":"Two close methods with ambiguous distinction. \u0060close\u0060 and \u0060close_and_wait\u0060 likely differ by whether they wait for background workers to finish, but the naming is not immediately clear from the signature alone (no \u0060wait\u0060 boolean or similar). This forces users to guess the semantics.: Rename to \u0060close()\u0060 (non-blocking) and \u0060close_sync()\u0060 or \u0060close_with_timeout()\u0060 to make the blocking/waiting behavior explicit in the name. (signatures: NativeDatabaseHandle.close(): Result | NativeDatabaseHandle.close_and_wait(): Result)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"881d4edab742250efefec067137a2bd1e7ba1b7ff8045163f2275dac44c0c952"}},{"ruleId":"D22","level":"warning","message":{"text":"Two methods returning error strings with unclear distinction. \u0060take_last_kv_error\u0060 implies retrieving a specific KV store error, while \u0060clone_fatal_error\u0060 implies cloning a fatal error state. The return type is identical (\u0060String\u0060), and the intent is not obvious from the names alone, risking confusion about which error to retrieve.: Clarify names based on source. E.g., \u0060get_last_kv_error()\u0060 and \u0060get_fatal_error()\u0060. If they return the same underlying error, consolidate into one method. (signatures: NativeDatabaseHandle.take_last_kv_error(): String | NativeDatabaseHandle.clone_fatal_error(): String)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"8def4c81aa8bc948d65b06720912ff789cecb4a99107d41b6b7759399f2e21ce"}},{"ruleId":"D26","level":"note","message":{"text":"Split engine/packages/pegboard: A sprawling pegboard whose 15 namespaces are all named ops/workflows/actor/*, a single cohesive layer sprawled across many unrelated sub-areas. Suggested: split into focused workflow/actor and ops runner bundles"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"2290deacd16402254fa3ca2432e0521659597407d0059ac3d7f5ca1963200ca8"}},{"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":"768486dc7760424760d8592a5c37724cff85688b53936d5df960090cc4b2dda8"},"taxa":[{"id":"CWE-321","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"a45e4b0364e5dda078f08e51417f14bb62517bdaf60b6c55401bbe573199ac05"},"properties":{"commitSha":"45d0d4cb39707f850b28b2b3c2fc628e5a747ce4"}},{"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":"9cf3bedf47ac9a14be06ea23549ea96edb4fd3e9d1bc6aec74e7bfb97c286304"},"properties":{"commitSha":"571e9f62012694fbb63cba452cd27d580fa33d1e"}},{"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":"c84f44fd1a549d716124bd003905f638c9f19162ad1321967f9699efa111fef2"},"properties":{"commitSha":"1d5e805d76f593b2fc1c03d0ab3ed25b9b35a10c"}},{"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":"b3f13cde26b129ac187fe91782ed29e28212903620ff35e19261d54c36ff8da6"},"properties":{"commitSha":"d4b80f69dbb1f18d10cef603398f5b381586719e"}},{"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":"8bc883385c5fefd58f1a806119a0ef1e0cf6db475559b4ca1e4bce946ae7f001"},"properties":{"commitSha":"a7114082b307db50bea3aab73520a0781275a672"}},{"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":"f6285b994da4311e21991096836e73819c57e02f72258b6d6ccb1d743cf8ff99"},"properties":{"commitSha":"f8ff424491ad52445825808d04dbef299aef735e"}},{"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":"a0e1ebebd7a881966583948950996ef6cfa8884a2207e020e4b376b2bfefbb7a"},"properties":{"commitSha":"d4b80f69dbb1f18d10cef603398f5b381586719e"}},{"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":"17f3738b2344fb515b7fbb182775abaee27313ec9ef94caa5919a2aed676b589"},"properties":{"commitSha":"51cd729349de7720b5cb1a0419907c116d277ada"}},{"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":"e225195aaa04c8f4b9ee0f78579fd706cfadef3f22878b5a4d14f069f598ae92"},"properties":{"commitSha":"2d869d5013fc2c2ff9d834421711433842bcb370"}},{"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":"3e10c311682148babe10904a04ed59362febb198e9791bfc003904a41108e45f"},"properties":{"commitSha":"f8ff424491ad52445825808d04dbef299aef735e"}},{"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":"009eb686379b31cb367226ad4faca60bbfe9ccadbc808ace9e800bfc8c2f770f"},"properties":{"commitSha":"f8ff424491ad52445825808d04dbef299aef735e"}},{"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":"42c39966716a7977b80855e2d9743d410dfeaaa6f4a265772bc82058bb3189cf"},"properties":{"commitSha":"f8ff424491ad52445825808d04dbef299aef735e"}},{"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":"5c4c6a9c99fe7250d281ddd96e58c328fac458706cfa74c180c8335134747e3e"},"properties":{"commitSha":"d4b80f69dbb1f18d10cef603398f5b381586719e"}},{"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":"f15a5e85a6638475a1ee6f6bd56c62dba805792eecbc45265afba4cf235c8279"},"properties":{"commitSha":"f8ff424491ad52445825808d04dbef299aef735e"}},{"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":"0f9a76fb0b130bc0b5eb74381d0d3af4ec87f67f04f6357319e9760b9dcfd44d"},"properties":{"commitSha":"e5170a5b15cf05220425ce6fe4e8d6219996445b"}},{"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":"89554897b7666d4e6866856c08f7df0789a84fccab6559f4cf6e5ceb4c9ee7c0"},"properties":{"commitSha":"5bf95b33401a681530485ae4390bd1f4e32032a1"}},{"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":"9a249d96dc31a2d26429c126d6898457500b4ba612c00b32ef6ce64edbec62de"},"properties":{"commitSha":"ac5de3ec07faf771bb2d2ac0babcaf3c0c755e97"}},{"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":"37531c35d070230b248e0713e67e9039b1be77cd6c0937ce8ccd96c1a38f27c6"},"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":"2612dbdc08234e82be6429a3c8591d8d66544e956b75e85344015af3f7277180"},"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":"932d6f7a550ba6dae6e082777b7c6a1c4c01ab2dfc29912697086f4eb773f6d4"},"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":"8303db16945a563b65f21340cc9929f2070a35831fc9d6a8bada17a945df9719"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"61882cbe17a694c2e461787e99cfb9483432db7ddc279eb4a6c065b62b30c21c"},"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":"10c56a38858357ca9e1678c77c6b09a50a04b3f7d5c5aa9d458ffd15a74a7c6a"},"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":"f59b8a83fe4db5d95cdda29eb7db13adea9f8b2f574e5eddb03417851bb3c67e"},"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":"49e9df15abb5f92add0830591936c7eef68c563b22208cadcbe80ba32728ab96"},"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":"d2bbf4db0c0e09606afc98b04e17df3bfe887cdfdd807d54822b0c9b8316e441"},"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":"0957cc7f47d1931c56662464cd3ce406765637560a7f96e94ab37853c0558962"},"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":"a507b25ae9d4b378128e0c4feb16921bd33912d8a11fc031bec7bfcc8b21a2dd"},"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":"4a38410c0da21a6735db5fb4372a94b9ef370d85c2f22370cc95280e1630d1d9"},"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":"b534d8fa1ed9d9b2d0481141255def1e52efaf06301db9c74a82fb5fe8d70ae0"},"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":"0e4362509d5aaf34bdcc9be64b3955dc3a939310b412771044b3af85f4770b6b"},"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":"f30aeb7e1b0749aaac6bb5f10a835cb8951ac671f0b58e0f7294c946ee71dea2"},"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":"c73686409ba4c645ed31925b409692ccd05a6c93daa2d26b3e344f66a0513474"},"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":"f0a42980f5f7d1d0345135eeedca75e6ab3e7379b5c76a65b7a6d93b71b84d14"},"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":"31e9a591cea22ffe183fc654f525d3e997e76323a619a7ec43cc6cee65bda722"},"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":"2e1c34f50998dc22120e44ec9eab02fb1970217d27d7cb46e2e04a704e8bf124"},"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":"2e620945e5589105eceba239b5716d9e9abf6a097bb8f725e135827647f5d83b"},"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":"87310287edf56f8c7d3df00cd8ba3a618d08f9f2d5512a903ea9296610d0242e"},"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":"73f1fc56e61003da7cd00477604f92961226523981cbc63cb93320832aabc47a"},"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":"4e2048165a9bd570f894646aba56b456b6b57202f5b454aed452549511acaf87"},"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":"af9f52ba98470f260525d37567133c3ca5a3b47117fe2794e224f745c0f2da73"},"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":"6dc13dbf8d0e3706500a83e65e18a9c48ab48c54447ca308ef508eafc2133e8a"},"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":"f1b0b14011ddb1fbbdbb5076ab90100201214c5f223e9f78464ea257950a3192"},"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":"f023591ee3ee59f453efc9c6e9f5a1481cfe81d4489600707d33af8bfa56d84d"},"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":"ac7e8ae55c537ec8d744ab05c2edebb3e147abffc02fe6f3577a94324bd7efd5"},"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":"2b14be7723248c7c260b9b890ce7ed1d934fc7891d6d1f16ffd8b25436a186d9"},"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":"dda50a1a93964896819944929ff67be8f9d8235437758e1dd585d5e5f77db11c"},"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":"a71125890e4d625c6142a237b6bc8bcfed07af0aed0941e0d238d253da8d8076"},"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":"c2efb2287643721aed6634398b09e8a8eaa24496ee0e59aa0ba4490e1d00c725"},"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":"9cc13327ef4c3a0b4236e05f77bcd032f8860287c6c09833c59fabc3ba9188a7"},"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":"9c538e31bf6f178b6ffe60c40c68ab6e1c518c00032b5112096be526a6c2daf9"},"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":"9e73656814c72b6fd26336a9661586bd078722377085e6ab3eca2c78e0772c38"},"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":"4e2d87707ee4ccc5f1562c1b8787a1ee2cdedd5963e2a25b7c84f4fec16ad61b"},"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":"5002cd30cffd7fd0122445c0e36d1a505274ba05792f2589a89856e612d9ca9f"},"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":"ab231b939e0c2ee9df41c0b545eedf403706dd312c31d1231a826c76de1ac071"},"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":"81cea3b324c3ecbcd4f1312bfcbb2d0baa8ffea2085566a90399c24632b9b434"},"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":"b7d61309058f9f706aa484772c39fdbd1a1e509902e537d6d950f8b7012ec174"},"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":"e08216ca6c15828d93f005b3d83e6a681aab4f1c51aa8d3a1be309ce029403b9"},"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":"318c3e784d8d18d8695dd5591f8aaa2fd8057d259d9626c1db29c9bd262d4a96"},"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":"3d986c8d3bcb1d2fc1935f4e8a87fb16d5b9af43f5d98b19f809df478e6d29eb"},"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":"82e1cdfa78aacab3f3e3a1da6392e4c75aca59c7826bc453129ab68837a1c44c"},"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":"57f9f56b72936685b0d63f5c3fc4bb0d5ea0a3e5ea368e89a14d2c56f2ce9c28"},"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":"38bd976542d601104a611d43ee518b5ad4d2cb25b80ba30919c7f0815575f7fb"},"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":"48cd8c405855e49db0a98e13c80b9e348935964b4c390e5f449fc22459919368"},"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":"6891a4e1a5f123ed29b5e7b478d7d62b822cce453d3bd63bc8ed2f45da8434da"},"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":"2a8a4684d38e7b8030617cdc43b0c814f60f94693392144e6f434871b63a93ee"},"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":"4574b4182ec8df488481f3adb664e2fbf659035ce0350fe8e17ee44b7a87d0d8"},"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":"516926911dfd3af5a4fdf18d361d8fe6862ce62eeed04dc072efecf31720d9d6"},"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":"774926130c2a3a9e6f5c48ffa85eff7ec285db59ac17a6d5376e35594e2fe243"},"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":"a4fb4e9e82f99aca40458a17f254e86616ed6b896056d35509b23c83026fbc46"},"taxa":[{"id":"CWE-214","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-532","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":"4ffea88679679727de53c1bf5749ebe1e3fe36590dce9d03b9ea14539c319e26"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3c190c5cf82ee3ea495262a9a12bc61d5b832efcc07c8f3bb6fff65004db91c1"},"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":"1f83f1a7b6ac294f5ee74662c79b0c2592f1b55c32bf6f9a723d5a003f998a4c"},"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":"a9d59ac9aad93273d3071bb14c604daac0ff9b805ff21c480e0f17156d6a9747"},"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":"4bacc60546bbeae4ef323bd5c710d9aac95051bea3605cb28d91adadc648ecfd"},"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":"a3a6b4b2cd08dfa4179c37dc7254a9e86c1979684f72a28c3a530e259df71b73"},"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":"3f08b03b3cba9697ecb0d8f084f2376b19fdc3860cb5f89e5c709b9d7f5d0bf3"},"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":"489401bd9e978039f83ee93309a8af92689e6cccff5c81f3c9f4995322c20a07"},"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":"2c4907e8844c73f262e319ee0933fc84114518f1c4f2f5809669f708b4a79c84"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e732739fe805746267a10810f3ca01ea77a790d79201f55aa42fe890c84ca3c8"},"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":"522900f428eba7fbf14609c73a2949c767a414b12233028014c97810852febee"},"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":"a437e04fee0bc83aac1712045ded313bb60756be978cf036e3eb2abd99fd0eb3"},"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":"3de372a928d3a67a078c06e50e38de3ad29d1e5b88df7118f2f372cb83b58735"},"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":"fb35b3b04b423b8636df17fe1806928a17c8642913e13e989fc644351af6f706"},"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":"c0807a51492fa8797be3f350c32100c9bd2b6f5a633b7df131e0e6124bf83c8a"},"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":"f89c7b84a5607cddc6db82fe3073a792fe03fab8b3e07e45ee524cf9cb16e6c0"},"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":"320c31211c3cb80130eee85c5f1fad156e0b07f1ebc251cec5cb6d6de8a09d5d"},"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":"7e99fc94d7f635a95d672db1375900cebcddbb44145aecb7cfb3934f17749abf"},"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":"9547ffe1fe450c6c27db818620d208444635fcb2b5e8020d78e0fe53a6e209e3"},"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":"891fa081c17c25e18854967ff1ac897ba94bd8200ab15d8a454af86ad158a21a"},"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":"89bb37b903bc30f61450a2205ec954e925681e960fc56e28dec9f39c9a5a6c25"},"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":"92df06dcac64ff14553fa03946d47981e9f11ec92cc4f978b14895ab958b0501"},"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":"2ef5a0aae33f2e29951864bb709b4827d548b7614fbc3028c88a99fd78b14135"},"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":"a9734479c1036653b707648b7d050fed25524c6c760ecaf95dde916fa355fdc4"},"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":"52981d90d41d96730042c6dd89266edd1bef2319c5cc27cb68be46a6c3e237fe"},"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":"7cf8a78c4a993aecafcb4fe2b18ecb6ff3aced137586a07de2812771fcf18756"},"taxa":[{"id":"CWE-829","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"1498825690ee691422757d83c6c8726aaf69040fa62a3b6b71a03075f0880320"},"taxa":[{"id":"CWE-829","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"85f99189d964cdde824a816d83f2290af0a3f7efe42feb1d6495743a90e33e22"},"taxa":[{"id":"CWE-829","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"90d11978b08dc95d4e6a16e37a0afa34dbba7d67f4c4cfb6379bed4fae53e6b6"},"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":"e0fc12d9729061d6842b347165a93db8c795c9ba439349e482b28dbe07aa71bf"},"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":"d14eac812a5ab5bb4c1a23e1e6a12efed0649a2701c45f937b811200e7e91614"},"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":"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":"0db0724e9f8c48ef9744de27d6305712da3089828347a2ddc534ff22d0120044"},"taxa":[{"id":"CWE-125","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"bed3d4a53139b0ad05ec39385cf7d9e8c4f9759bf9d71821ca7596a0181789aa"},"taxa":[{"id":"CWE-732","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f03f8b3d0a2b73612cf2253df7ff28eae655b17a66b782464c7faae3f31d22f6"},"taxa":[{"id":"CWE-732","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a8fd4f171004b850481a992773ad36efd9cfad881bcaecb15b97bf2ec987ef8d"},"taxa":[{"id":"CWE-732","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b11453024ea8870f8349c66a99cf158e9ab7ab98e411c64a887ff127425c39a6"},"taxa":[{"id":"CWE-732","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"64817b26bce4caf686ef1ed996068f9a778c7d72e0be66ddef1ec3ef5f8dc9a4"},"properties":{"dependency":{"package":"tar","version":"7.5.11","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"31c1a5aa3079c81fae12f2d72af993ee3310f599fdae3430125398f3e214d09e"},"properties":{"dependency":{"package":"vitest","version":"1.6.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"production","file":"integrations/flue-runtime/test/rivet-store-contracts.test.ts","line":2}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"8e6a48ead2ac50f8e32efb046b370069a397c4aa967fcafe3b8b8b1fa0fa3f9e"},"properties":{"dependency":{"package":"vitest","version":"2.1.9","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"production","file":"integrations/flue-runtime/test/rivet-store-contracts.test.ts","line":2}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ca300731cac11c595f62a7ad4603c0018dcbf600e0c5305e26a39d5a8dac0439"},"properties":{"dependency":{"package":"vitest","version":"3.2.4","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"production","file":"integrations/flue-runtime/test/rivet-store-contracts.test.ts","line":2}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"030dd616a3038a21ca97f8d14e865db4f114926c80aac5e4e96c1f449f798fc4"},"properties":{"dependency":{"package":"vitest","version":"4.0.18","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"production","file":"integrations/flue-runtime/test/rivet-store-contracts.test.ts","line":2}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a585d014729ffa74ba563a02099225a26e0cb5b1eb41d0d87d928941d506bef0"},"properties":{"dependency":{"package":"elysia","version":"1.4.12","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"385373ee1cdb346ecefbcc486871a8e3c30bbd37d434add337ad2b194ce82768"},"properties":{"dependency":{"package":"seroval","version":"1.5.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"29827ff1862f4841c892ec8b8867f048f1bfa9d96110dfe90e22961d0aa8306d"},"properties":{"dependency":{"package":"shell-quote","version":"1.8.3","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"cfd6c07cc7bff03297537b0171241ce48b166913da00cb8d31accb695587d98e"},"properties":{"dependency":{"package":"protobufjs","version":"7.5.4","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"15ae3ead1f3f5ec870344d346f1736e90ef99920397a2461a1c7e852bea7c378"},"properties":{"dependency":{"package":"protobufjs","version":"8.0.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6870cb2c01d7d496744580e47e801b1d58ebf36de67fd3098821e0a3322609fc"},"properties":{"dependency":{"package":"next","version":"16.1.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b5308f9ed219ff7d361ed2b01ab7b5fa7a33b0013fcd35575e7068ccda1d2997"},"properties":{"dependency":{"package":"quinn-proto","version":"0.11.13","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]","RUSTSEC-2026-0037","RUSTSEC-2026-0185"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"0fa33d10b7f78bb9d7ecc3d6c9413b3b5622ca4e712cce60afe25b4fccaa8cd1"},"properties":{"dependency":{"package":"rustls-webpki","version":"0.102.8","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","RUSTSEC-2026-0049","RUSTSEC-2026-0098","RUSTSEC-2026-0099","RUSTSEC-2026-0104"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"03f854c30680763c5585cd28ff9f9682f40b91f88c768a9ca8f69e1c27c7af6c"},"properties":{"dependency":{"package":"rustls-webpki","version":"0.103.4","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","RUSTSEC-2026-0049","RUSTSEC-2026-0098","RUSTSEC-2026-0099","RUSTSEC-2026-0104"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9b85187965de9ca72b16606c538a72f0ac48a56f7356938168954d4b8708ab80"},"properties":{"dependency":{"package":"tokio-tar","version":"0.3.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","RUSTSEC-2025-0110","RUSTSEC-2025-0111"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"bd96282e5ed93fc9b9bde601a594fe188db4eb1314e071fec5e163ce82ea76dc"},"properties":{"dependency":{"package":"lz4_flex","version":"0.11.5","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","RUSTSEC-2026-0041"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ec6eb82b5c491529ec32e9c3bdabd5655bf79fa3c694a8b51178853861951e50"},"properties":{"dependency":{"package":"postgres-protocol","version":"0.6.9","advisory":"[GHSA redacted]","aliases":["[GHSA redacted]","RUSTSEC-2026-0179","RUSTSEC-2026-0180"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"1c436004dbd621ebcd05d90ad3583dfa555ecab6f081fe7e33d0c129a03ee0cb"},"properties":{"dependency":{"package":"node-forge","version":"1.3.3","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c4b4df51940677be3c3ff345f9e61dbec72235b5fd83b5fdf3774a087ece93ce"},"properties":{"dependency":{"package":"minimatch","version":"10.0.3","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ff577dcc680f4f5eab1365fffe111829b498312ef425635327227b9f4b81eb77"},"properties":{"dependency":{"package":"minimatch","version":"3.0.8","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"745edca29defa99158bf80e5f24ef03b3a8e1e46db85dc9a83bdaac8b13bd8fb"},"properties":{"dependency":{"package":"minimatch","version":"3.1.2","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ac8e3fe9491e446479cb6e1a5148873996c751f4157fd82fbc807faf7073f8e8"},"properties":{"dependency":{"package":"minimatch","version":"8.0.4","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"dcd64392f90c18401b918781f3086904a8ef2691e50467e3cb3018a7dfe9864b"},"properties":{"dependency":{"package":"@xmldom/xmldom","version":"0.7.13","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ad874d229c6c2b99f5f5f097cb07fbac3cd20d7cac3b0c18018cdd1ca5b48dc8"},"properties":{"dependency":{"package":"@xmldom/xmldom","version":"0.8.11","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b4aeead4b0a922410dd66dc07d6e187c48194d3326429beca162883bbd2e8506"},"properties":{"dependency":{"package":"js-yaml","version":"3.14.2","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"production","file":"self-host/compose/template/src/docker-compose.ts","line":1}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4d9f5f766e4f3cb6ebed1572bf299a6c813fdd775f094878a6a141406de52579"},"properties":{"dependency":{"package":"js-yaml","version":"4.1.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"production","file":"self-host/compose/template/src/docker-compose.ts","line":1}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"018dc4dc3e89bf4264f552965561f568e8c60f46ec10315a9636fa2b23bc38e1"},"properties":{"dependency":{"package":"nanoid","version":"3.3.11","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ac15f4d8c88db3b1798b13a72fa9fbc345241ec7d7710f7476a7f760075a4ed4"},"properties":{"dependency":{"package":"nanoid","version":"3.3.6","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"75b78596deca2f63e59f912c25163a429b4a4ca20ee440acec1c9202c45e33c0"},"properties":{"dependency":{"package":"nanoid","version":"5.1.6","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6b119d517ff16b1edbc441e60662a8065e02e36cc86ecac75b87b22cc76a3fff"},"properties":{"dependency":{"package":"nanoid","version":"3.3.16","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"55bb3986aec1e2e40294c46650ceeadc2ea24e7e4b8482cdd51746604ddded6a"},"properties":{"dependency":{"package":"preact","version":"10.27.2","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"fd66a72da70d33591650cd91206daf259c95e2828a47db882965f34588abf1b1"},"properties":{"dependency":{"package":"undici","version":"8.3.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d460970dfa3cd0fb83e80d07e8585c3c4386d7374e5b12d3671c642da9a4473f"},"properties":{"dependency":{"package":"brace-expansion","version":"1.1.12","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"20e21aef1934e68f54161be38896076528768e55350465bbcfb018cb7051b5e6"},"properties":{"dependency":{"package":"brace-expansion","version":"2.0.2","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f0e052d23816699ccb9c06cf411302ae4ddb61f1e92f9d6c745a0e16020ee4b7"},"properties":{"dependency":{"package":"brace-expansion","version":"5.0.5","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f1ce7de86194d1a7d845459a6aa5c1a6584a12cdec11ad7e0ba3cae64b2590e9"},"properties":{"dependency":{"package":"@trpc/server","version":"11.6.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"cda4a462449bfd942fc0dd2d20c5fe93e636fe7c0964cb58dcb0f5954dcc1c69"},"properties":{"dependency":{"package":"@opentelemetry/propagator-jaeger","version":"2.5.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"06593c39ce911a216ed914a471d9cdd931bac450d9675076e44dd756bcb35a60"},"properties":{"dependency":{"package":"fast-uri","version":"3.1.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"2fe513203d846c9ee9663e4760a8ab7046c1d16dabb25d3b83e4dc18fb5af515"},"properties":{"dependency":{"package":"undici","version":"7.24.7","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4e135dc5a9f235b01328c0104dba976fceb91389d33b7e32204bf6912c320e52"},"properties":{"dependency":{"package":"undici","version":"7.24.8","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"0b4242c027c947004fff98dd9b2e5369fef87dfcdd9ca525b8f43e593c5171a0"},"properties":{"dependency":{"package":"undici","version":"7.28.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"81e20134920e68a9b48bec226545a8737d18275f531fc9d757fec6cd0f3c9b5f"},"properties":{"dependency":{"package":"image-size","version":"1.2.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3f57da558c86ee085c3f56fde29b3c1a05e20d5c7b23fb5c5954cccfbdcd9d78"},"properties":{"dependency":{"package":"fast-xml-builder","version":"1.1.4","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"94c6ff14ea54b382a61d2f966f77a9032450e908372d7ab5d8acd1b161983573"},"properties":{"dependency":{"package":"postcss","version":"8.4.31","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7226dc01873ef2dc55cb85b4c38fb4f77f22aa91acb417ba07392bc725b8afbc"},"properties":{"dependency":{"package":"postcss","version":"8.4.49","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4400eb150e8f5dce7c0c5c512dda60ee90a32497976110923d91c6f958335a9a"},"properties":{"dependency":{"package":"postcss","version":"8.5.6","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ce9bbfea95fe015374ae86e03b9373fd15c82feee84c4ee070b765207d8d9476"},"properties":{"dependency":{"package":"browserslist","version":"4.28.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f7c1e3a3e0dd3d7109b8cd172c97c358295b1e4a3317d937b6a55ba9a737e8cf"},"properties":{"dependency":{"package":"koa","version":"2.16.3","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"2293c5b7438af6e9b72fcd6de42f60336e9647543d0ec963a873c5fd77b6da43"},"properties":{"dependency":{"package":"extract-zip","version":"2.0.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b9e6ed2f1c3b9d06c1ae728ca0754a134c8b09e532a74b14e5e76708e01e4c58"},"properties":{"dependency":{"package":"smol-toml","version":"1.6.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"fe6c7afff6c1a4c8c00349f74fdb69d2c894a637553f810cc4f3b08aae3dd95e"},"properties":{"dependency":{"package":"toml","version":"4.1.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3df0d1d450878a54d77d4bfdde6e3c0daeb7ae1abdc6433b96bc665241291e5b"},"properties":{"dependency":{"package":"hono","version":"4.11.9","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"production","file":"engine/sdks/typescript/test-runner/src/index.ts","line":4}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"25fdd927d33468e588a5dde500a34b65930009ceb0e5ddbab893c621445bffa9"},"properties":{"dependency":{"package":"ws","version":"6.2.3","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"production","file":"engine/sdks/typescript/runner/src/mod.ts","line":4}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e0efd81e53af1542832eeacc176d76c003cfe603a1986cdf58904d929bd2fbb1"},"properties":{"dependency":{"package":"ws","version":"7.5.10","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"production","file":"engine/sdks/typescript/runner/src/mod.ts","line":4}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"96f6295f86bfc3113783774b4fe54d3f0e5e23b6879c76ac4825499744595c0a"},"properties":{"dependency":{"package":"ws","version":"8.19.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"production","file":"engine/sdks/typescript/runner/src/mod.ts","line":4}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"14c6ea47d4e2e1d4a6fc0369536f58a3da92cfc4b784e916193f47acded9923f"},"properties":{"dependency":{"package":"ws","version":"8.20.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"production","file":"engine/sdks/typescript/runner/src/mod.ts","line":4}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"98f5b7f1cc7ab72c7ef988be1ab835626c9ba93796c264fb44a05726fc7d8dd6"},"properties":{"dependency":{"package":"picomatch","version":"2.3.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b10420175f791c4b7e1106592d4e51c7b6ddced3c15d8dccd4db298f5f89f93c"},"properties":{"dependency":{"package":"picomatch","version":"3.0.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"03670cd2f215af360726e9d6e2dd6d8614267fd7015531cee1f463ecd90dd7bd"},"properties":{"dependency":{"package":"picomatch","version":"4.0.3","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"60e8ca068477dab985a051b837f1bf9c48ad35101d0376edd0df04dc12f430ea"},"properties":{"dependency":{"package":"vite","version":"5.4.21","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"production","file":"frontend/packages/components/src/vite/index.mjs","line":6}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ebedaf36f0edc82e14e0eddc0cc8ebcade21c18593f73e25632668b58c19c2c6"},"properties":{"dependency":{"package":"vite","version":"6.4.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"production","file":"frontend/packages/components/src/vite/index.mjs","line":6}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4d82fa4a5668d4f5773ebbee4e8f447602221a41aec06c99d67e7632ca9286b5"},"properties":{"dependency":{"package":"vite","version":"7.3.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"production","file":"frontend/packages/components/src/vite/index.mjs","line":6}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"17114fb5f38b84df3801279d770280afc1f324ff9f676307010505d29ab6dd3f"},"properties":{"dependency":{"package":"@modelcontextprotocol/inspector","version":"0.14.3","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"test-or-tooling","file":"rivetkit-typescript/packages/mcp-hub/package.json"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c55971e9ff5604cde165cdedff122a96f68ff83c7be3a3d88fd89821b281ab3e"},"properties":{"dependency":{"package":"drizzle-orm","version":"0.38.4","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"production","file":"rivetkit-typescript/packages/rivetkit/src/db/drizzle.ts","line":1}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c471e0a002327f998ad17e0451353aff9cec8ef11cf80b9df2f92fd3b8cc5325"},"properties":{"dependency":{"package":"drizzle-orm","version":"0.44.6","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"production","file":"rivetkit-typescript/packages/rivetkit/src/db/drizzle.ts","line":1}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"01fc85053279d115ea033564d5712283763a31a120ba4ad4775e78b10049b1a1"},"properties":{"dependency":{"package":"form-data","version":"4.0.5","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5402c61ab90b9ddad6879ac5cbcbc5f93a1ff01d4f5bcbc090a44fc5eca4c817"},"properties":{"dependency":{"package":"jsondiffpatch","version":"0.6.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7db4c72b188345c04d11c2e7e5cf4adf660a6ed88aead04c13257d67f74e9722"},"properties":{"dependency":{"package":"@mariozechner/pi-coding-agent","version":"0.60.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ebd07db18387087e67f9e845220aec719ccd37d9d14a5391220446f8e7a54857"},"properties":{"dependency":{"package":"@opentelemetry/exporter-prometheus","version":"0.211.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4627d31bc6ac36b10371bdac5dc7ecb340b4643f5cdb6039099d4000dc4e3d10"},"properties":{"dependency":{"package":"@opentelemetry/sdk-node","version":"0.211.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4554064566181fde52192473b38829a3712a5ea699ccc3440174d1237bf1bdf4"},"properties":{"dependency":{"package":"lodash","version":"4.17.23","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ba1a1464a7bed5b602fbda55eb2eab9b8712b1a5cf19e3578316951d27c52120"},"properties":{"dependency":{"package":"lodash-es","version":"4.17.21","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"22c071665370c54c3d696c701062608e53d6e170aa23a8856a5c1273552e5bfb"},"properties":{"dependency":{"package":"lodash-es","version":"4.17.22","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"73679d0be53861e9d43779c65e907995b46adff6be83bcdca9ca8146d2505c09"},"properties":{"dependency":{"package":"undici","version":"6.24.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b32ae0eae423675f55794e2bd6720a7f0dd3a14b43acad449705bb028c9002dd"},"properties":{"dependency":{"package":"undici","version":"7.29.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"691b7e2bf95c8af84df5ce832211dd11cd5da521b87c95df1fe446031c2b4fca"},"properties":{"dependency":{"package":"immutable","version":"5.1.3","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9a209c12a8b973f9be7221863ffa05f85e852ccdc2f5f4dffeacbce5f322db64"},"properties":{"dependency":{"package":"validator","version":"13.15.15","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"20e6f92b15fa08f0a4e75d418c056ae9d1a0f166ebe2404f3e88863f96dc1f21"},"properties":{"dependency":{"package":"@hono/node-server","version":"1.14.2","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"production","file":"engine/sdks/typescript/test-runner/src/index.ts","line":1}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d5f052bf18064b57b925dc3eec1ab574a1c5ce5d15c9096da797cf640b27d430"},"properties":{"dependency":{"package":"@hono/node-server","version":"1.19.9","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"production","file":"engine/sdks/typescript/test-runner/src/index.ts","line":1}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9a78356b0ee0e9244618236e9df97cfd1a8ab9b73166a885db92fa55b91f4382"},"properties":{"dependency":{"package":"basic-ftp","version":"5.2.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5f538739e89f76b0971a5390fa8cddbf706f34980e213deea9c68f7ff3476760"},"properties":{"dependency":{"package":"sharp","version":"0.33.5","advisory":"[GHSA redacted]","aliases":["[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"aa397a2ed490eaccc85ab9cc3ffcf3a96b11f48e16f70a3267ced7e9444c4923"},"properties":{"dependency":{"package":"sharp","version":"0.34.5","advisory":"[GHSA redacted]","aliases":["[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3dae02efd4a19e70cfc4f7b9f8206dc9e35e058d135bf49ebbe5dd0128f7f56f"},"properties":{"dependency":{"package":"sharp","version":"0.35.2","advisory":"[GHSA redacted]","reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b7d7b66cdb321a9cd51a9e4882df8607933fd2eeb40416630bbd81701ac61059"},"properties":{"dependency":{"package":"quinn-proto","version":"0.11.14","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","RUSTSEC-2026-0185"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"2d0c222fb68d7df17f8099920c00ebffcc75550e29fda1e8d702ac23e9bc3ddc"},"properties":{"dependency":{"package":"rustls-webpki","version":"0.103.11","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","RUSTSEC-2026-0098","RUSTSEC-2026-0099","RUSTSEC-2026-0104"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"14cd84eb55c447529c62b9addf0408128e5652b8450469ac5abf19b08695f503"},"properties":{"dependency":{"package":"image-size","version":"0.5.5","advisory":"[CVE redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}},"taxa":[{"id":"CWE-835","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"20b1f1eaab84667c535410e824c5b32850491cb68651da08c7e3e7d497031a80"},"properties":{"dependency":{"package":"rollup","version":"4.57.1","advisory":"[CVE redacted]","aliases":["[GHSA redacted]"],"reachability":{"kind":"unknown"}}},"taxa":[{"id":"CWE-22","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7cb949b0dfc97628adeb5867f44cfbeefa3a6a1068b707709bf0e421e653ea4f"},"properties":{"dependency":{"package":"bytes","version":"1.10.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","RUSTSEC-2026-0007"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"313181ad99189e9af422ed8dc84d0406dc5481e491cd19f12b1cc7416366ce9b"},"properties":{"dependency":{"package":"slab","version":"0.4.10","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","RUSTSEC-2025-0047"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"85ffa314d77812277deab31fb2264e02366c4034561614d82315c198cb6bb99e"},"properties":{"dependency":{"package":"time","version":"0.3.41","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","RUSTSEC-2026-0009"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"525150c79769e3a8552e1d639a767bc181c181d5c769963ba9e0faa9d03741e3"},"properties":{"dependency":{"package":"opentelemetry_sdk","version":"0.28.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e2e883ca754f334865470ceee513da1036b1d20dbcc1d943da2b82cea91929c7"},"properties":{"dependency":{"package":"term_size","version":"0.3.2","advisory":"RUSTSEC-2020-0163","reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"551ec82dfdc8bf5da0e29515778a3b34f4c4bb5028648944595fc6b8f8934376"},"properties":{"dependency":{"package":"serde_cbor","version":"0.11.2","advisory":"RUSTSEC-2021-0127","reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5922a5beeab5ac077ffb485a783ad545036e79b56239f83da38f3fb84336b113"},"properties":{"dependency":{"package":"paste","version":"1.0.15","advisory":"RUSTSEC-2024-0436","reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"705e8761c5e609601c0419d94a8bad1aeb6aee434f48ec4660c92e8bf534c9de"},"properties":{"dependency":{"package":"number_prefix","version":"0.4.0","advisory":"RUSTSEC-2025-0119","reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b5524f25221308ec94b7206b58afaa59996104c20abaa242285d451f5344e44b"},"properties":{"dependency":{"package":"rustls-pemfile","version":"2.2.0","advisory":"RUSTSEC-2025-0134","reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d469c4cdd0b2892278c4ee90c01a5a8ea4872a98733c483777e04c904cfebdfc"},"properties":{"dependency":{"package":"proc-macro-error2","version":"2.0.1","advisory":"RUSTSEC-2026-0173","reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a68364cf071d09d88ca15ff063e366b1469e1d0dd80f05e4abbc550427fa1320"},"properties":{"dependency":{"package":"rand","version":"0.8.5","advisory":"RUSTSEC-2026-0097","aliases":["[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4352a02266cdeea7855bc80a7dc0fc44c7765eb0439fc3a39ec2ee055c29b377"},"properties":{"dependency":{"package":"rand","version":"0.9.2","advisory":"RUSTSEC-2026-0097","aliases":["[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a40b8b744b00a47210fe4ab18e0050493bce5298c90abb024407a58554cc1e75"},"properties":{"dependency":{"package":"memmap2","version":"0.5.10","advisory":"RUSTSEC-2026-0186","reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9611b84644442a30dcbd998ee3ec7803a12f3992c85432e80a5356686a5770e6"},"properties":{"dependency":{"package":"memmap2","version":"0.9.10","advisory":"RUSTSEC-2026-0186","reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"759d36a63e8483c4a467399ff199fa57fa2e02d89ef311720974588edb9516d4"},"properties":{"dependency":{"package":"anyhow","version":"1.0.98","advisory":"RUSTSEC-2026-0190","reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"29657cae34dd8cde614417a5e63194c90262d7543de5763d566a22c44f87c6e9"},"properties":{"dependency":{"package":"scc","version":"3.6.12","advisory":"RUSTSEC-2026-0205","reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"1092cdc16bab90e26caa98781415518f2a1a0fec9b43d183894264e01dcc42b6"},"properties":{"dependency":{"package":"event-listener","version":"5.4.0","advisory":"RUSTSEC-2026-0221","reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"8977321aecc28dedc7f149b649deae898a3d3083d35bad2f5230fa177c5ae0c3"},"properties":{"dependency":{"package":"tokio-postgres","version":"0.7.15","advisory":"[GHSA redacted]","aliases":["RUSTSEC-2026-0178"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a7ac1525ee21f8396482ed6caafb5092cc4f1f938990a606ace871da2f8aa6f6"},"properties":{"dependency":{"package":"serde_with","version":"3.14.0","advisory":"[GHSA redacted]","reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5585c48a8c4ed670247ebaa40a533d385248c4e49079fee700e7b93cbab137a9"},"properties":{"dependency":{"package":"quick-xml","version":"0.38.3","advisory":"RUSTSEC-2026-0194","aliases":["RUSTSEC-2026-0195"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c4a0c58aca13bc848c37d4c3d5bcb90f8e046f8df5b386f5a3743d0625ad8dae"},"properties":{"dependency":{"package":"crossbeam-epoch","version":"0.9.18","advisory":"RUSTSEC-2026-0204","reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"80b5c22beae306eb623d7a60ec13361ab89285e1cc30fcf5b8daa2e87ffb5c69"},"properties":{"dependency":{"package":"h2","version":"0.4.11","advisory":"RUSTSEC-2026-0258","aliases":["[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3035e85b1a9c0c33df37dc333f490439b3fa52aefda24a401e2e75a177cdf778"},"properties":{"dependency":{"package":"rustls","version":"0.23.29","advisory":"RUSTSEC-2026-0285","aliases":["[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b9f2bf5977f091c5d3968e3cdfe41332f541c2def6b8cfc0f722e927aa69bb56"},"properties":{"dependency":{"package":"protobuf","version":"2.28.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","RUSTSEC-2024-0437"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"19ea439b4c61f2b5a9b39f6ffb0eb4b1893a1b0dd92bf71679764a28781fc610"},"properties":{"dependency":{"package":"bytes","version":"1.6.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","RUSTSEC-2026-0007"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"8aefa30fa8b070d98ad25d817d80a0a8228bb81dd5f02988ab88f99725540787"},"properties":{"dependency":{"package":"crossbeam-channel","version":"0.5.13","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","RUSTSEC-2025-0024","TROVE-2025-013"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"fcb4299362ce3b683014eb07b2012bb0d8822ecdd23fe037134b37db0278954b"},"properties":{"dependency":{"package":"tracing-subscriber","version":"0.3.18","advisory":"RUSTSEC-2025-0055","aliases":["[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"240be77958a56b49fb29e9cf176993285e9a804b8aa770b9cedad89b3e6148d7"},"properties":{"dependency":{"package":"adler","version":"1.0.2","advisory":"RUSTSEC-2025-0056","reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"8542dbc7e3450d038135b4c0dc111cbed18f8a0cacfe3141bac25023acb7aad6"},"properties":{"dependency":{"package":"tokio","version":"1.38.0","advisory":"RUSTSEC-2025-0023","aliases":["[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f4822b3253d64f40dee3d890f302fa7305838168f787e44000513de5e6111bc0"},"properties":{"dependency":{"package":"anyhow","version":"1.0.86","advisory":"RUSTSEC-2026-0190","reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e92b6fbdeac8c3bbccdc65673308ae8e0d5e7cf1a415f2dc5e7faf97462e4f49"},"properties":{"dependency":{"package":"h2","version":"0.3.26","advisory":"RUSTSEC-2026-0258","aliases":["[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9a6179f1176f871106254e9e70c73b787a72336d208665627705f0dad887fbaa"},"properties":{"dependency":{"package":"stdlib","version":"1.13.99","advisory":"GO-2021-0226","aliases":["BIT-golang-2020-24553","BIT-golang-2021-27918","BIT-golang-2021-3114","BIT-golang-2021-31525","BIT-golang-2021-33195","BIT-golang-2021-33196","BIT-golang-2021-33197","BIT-golang-2021-33198","BIT-golang-2021-34558","BIT-golang-2021-36221","BIT-golang-2021-39293","BIT-golang-2021-41771","BIT-golang-2021-41772","BIT-golang-2021-44716","BIT-golang-2021-44717","BIT-golang-2022-1705","BIT-golang-2022-1962","BIT-golang-2022-23772","BIT-golang-2022-23806","BIT-golang-2022-24675","BIT-golang-2022-24921","BIT-golang-2022-27664","BIT-golang-2022-28131","BIT-golang-2022-28327","BIT-golang-2022-2879","BIT-golang-2022-2880","BIT-golang-2022-29526","BIT-golang-2022-29804","BIT-golang-2022-30580","BIT-golang-2022-30629","BIT-golang-2022-30630","BIT-golang-2022-30631","BIT-golang-2022-30632","BIT-golang-2022-30633","BIT-golang-2022-30634","BIT-golang-2022-30635","BIT-golang-2022-32148","BIT-golang-2022-32189","BIT-golang-2022-41715","BIT-golang-2022-41716","BIT-golang-2022-41717","BIT-golang-2022-41720","BIT-golang-2022-41722","BIT-golang-2022-41723","BIT-golang-2022-41724","BIT-golang-2022-41725","BIT-golang-2023-24532","BIT-golang-2023-24534","BIT-golang-2023-24536","BIT-golang-2023-24537","BIT-golang-2023-24538","BIT-golang-2023-24539","BIT-golang-2023-24540","BIT-golang-2023-29400","BIT-golang-2023-29403","BIT-golang-2023-29406","BIT-golang-2023-29409","BIT-golang-2023-39318","BIT-golang-2023-39319","BIT-golang-2023-39325","BIT-golang-2023-39326","BIT-golang-2023-45283","BIT-golang-2023-45284","BIT-golang-2023-45287","BIT-golang-2023-45288","BIT-golang-2023-45289","BIT-golang-2023-45290","BIT-golang-2024-24783","BIT-golang-2024-24784","BIT-golang-2024-24785","BIT-golang-2024-24789","BIT-golang-2024-24790","BIT-golang-2024-24791","BIT-golang-2024-34155","BIT-golang-2024-34156","BIT-golang-2024-34158","BIT-golang-2024-45336","BIT-golang-2024-45341","BIT-golang-2025-0913","BIT-golang-2025-22866","BIT-golang-2025-22871","BIT-golang-2025-22873","BIT-golang-2025-4673","BIT-golang-2025-47906","BIT-golang-2025-47907","BIT-golang-2025-47912","BIT-golang-2025-58183","BIT-golang-2025-58185","BIT-golang-2025-58186","BIT-golang-2025-58187","BIT-golang-2025-58188","BIT-golang-2025-58189","BIT-golang-2025-61723","BIT-golang-2025-61724","BIT-golang-2025-61725","BIT-golang-2025-61726","BIT-golang-2025-61727","BIT-golang-2025-61728","BIT-golang-2025-61729","BIT-golang-2025-61730","BIT-golang-2025-68121","BIT-golang-2026-25679","BIT-golang-2026-27139","BIT-golang-2026-27142","BIT-golang-2026-27145","BIT-golang-2026-32280","BIT-golang-2026-32281","BIT-golang-2026-32282","BIT-golang-2026-32283","BIT-golang-2026-32288","BIT-golang-2026-32289","BIT-golang-2026-33811","BIT-golang-2026-33814","BIT-golang-2026-33818","BIT-golang-2026-39820","BIT-golang-2026-39822","BIT-golang-2026-39823","BIT-golang-2026-39825","BIT-golang-2026-39826","BIT-golang-2026-39836","BIT-golang-2026-42499","BIT-golang-2026-42504","BIT-golang-2026-42505","BIT-golang-2026-42507","BIT-golang-2026-56853","BIT-golang-2026-56858","BIT-golang-2026-56859","BIT-golang-2026-56860","BIT-golang-2026-56862","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","GO-2021-0234","GO-2021-0235","GO-2021-0239","GO-2021-0240","GO-2021-0241","GO-2021-0242","GO-2021-0243","GO-2021-0245","GO-2021-0263","GO-2021-0264","GO-2021-0317","GO-2021-0319","GO-2021-0347","GO-2022-0236","GO-2022-0273","GO-2022-0288","GO-2022-0289","GO-2022-0433","GO-2022-0435","GO-2022-0477","GO-2022-0493","GO-2022-0515","GO-2022-0520","GO-2022-0521","GO-2022-0522","GO-2022-0523","GO-2022-0524","GO-2022-0525","GO-2022-0526","GO-2022-0527","GO-2022-0531","GO-2022-0532","GO-2022-0533","GO-2022-0537","GO-2022-0969","GO-2022-1037","GO-2022-1038","GO-2022-1039","GO-2022-1095","GO-2022-1143","GO-2022-1144","GO-2023-1568","GO-2023-1569","GO-2023-1570","GO-2023-1571","GO-2023-1621","GO-2023-1702","GO-2023-1703","GO-2023-1704","GO-2023-1705","GO-2023-1751","GO-2023-1752","GO-2023-1753","GO-2023-1840","GO-2023-1878","GO-2023-1987","GO-2023-2041","GO-2023-2043","GO-2023-2102","GO-2023-2185","GO-2023-2186","GO-2023-2375","GO-2023-2382","GO-2024-2598","GO-2024-2599","GO-2024-2600","GO-2024-2609","GO-2024-2610","GO-2024-2687","GO-2024-2887","GO-2024-2888","GO-2024-2963","GO-2024-3105","GO-2024-3106","GO-2024-3107","GO-2025-3373","GO-2025-3420","GO-2025-3447","GO-2025-3503","GO-2025-3563","GO-2025-3750","GO-2025-3751","GO-2025-3849","GO-2025-3956","GO-2025-4006","GO-2025-4007","GO-2025-4008","GO-2025-4009","GO-2025-4010","GO-2025-4011","GO-2025-4012","GO-2025-4013","GO-2025-4014","GO-2025-4015","GO-2025-4155","GO-2025-4175","GO-2026-4337","GO-2026-4340","GO-2026-4341","GO-2026-4342","GO-2026-4403","GO-2026-4601","GO-2026-4602","GO-2026-4603","GO-2026-4864","GO-2026-4865","GO-2026-4869","GO-2026-4870","GO-2026-4918","GO-2026-4946","GO-2026-4947","GO-2026-4970","GO-2026-4971","GO-2026-4976","GO-2026-4977","GO-2026-4980","GO-2026-4981","GO-2026-4982","GO-2026-4986","GO-2026-5026","GO-2026-5037","GO-2026-5038","GO-2026-5039","GO-2026-5856","GO-2026-5972","GO-2026-6088","GO-2026-6089","GO-2026-6090","GO-2026-6091","GO-2026-6218"],"reachability":{"kind":"production","file":"engine/sdks/go/api-full/core/core.go","line":168,"symbol":"http.NewRequestWithContext"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c813c53325b8e2f21bb92f5a44b068fa63a47a9019280dce019e369ecf14edfb"},"properties":{"dependency":{"package":"ajv","version":"6.12.6","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"46d81cbc6dbd652619ebe706f5bca6fbe5ee20bfbd98fadd4da77d00803360b8"},"properties":{"dependency":{"package":"ajv","version":"8.12.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7e1a83ea2919cfbed2ec161b3b78d81bd1d90fc33d2dc6fd41ab0d035ecc98af"},"properties":{"dependency":{"package":"ajv","version":"8.13.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"47f811c9c146d2b5c45a658ceb9bd01892c00aa9a580124bf11f0d80cfd626ff"},"properties":{"dependency":{"package":"ajv","version":"8.17.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9f9969cc1dcef0e64fdd2efb47b4f5e837c1cd854c95ddd0d8beef9c7c6a680f"},"properties":{"dependency":{"package":"mermaid","version":"11.12.2","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d10c79b7ba192f2bf3e9d396706548fd35619089ac0c9053c2f32644873e24c7"},"properties":{"dependency":{"package":"ip-address","version":"10.4.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"39ce9f3d5b9937d1e18419611bdb567cc6e434f5804c6d0d0dd7db797398c187"},"properties":{"dependency":{"package":"dompurify","version":"3.2.7","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"cab2098e551f88d096756eea896ab201fc72ec0275bddc366f276c5eb947889d"},"properties":{"dependency":{"package":"yaml","version":"1.10.2","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"8e366a86dbc7cf9c2aa6ab83ef9700659bb56257d01b33b97ccbb5c13d5e384d"},"properties":{"dependency":{"package":"yaml","version":"2.8.2","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"77595ddeb2a6b879721911aadde164fd7862ca58273f1b37abcf5a8d19439247"},"properties":{"dependency":{"package":"mdast-util-to-hast","version":"13.2.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9fa903053a3f312606416859cb67a9d184205be1a801337492ae8f642ebf9203"},"properties":{"dependency":{"package":"qs","version":"6.14.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"277bb36859cbad175db3405a0791e2f21fca27e1d2ddbfe930181eb85d11b73c"},"properties":{"dependency":{"package":"hono","version":"4.12.25","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"production","file":"engine/sdks/typescript/test-runner/src/index.ts","line":4}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"46bcc0bc84ad9f8b3ec00522c29c1aa81d1ca4dc16e258a97ad689f45ab26693"},"properties":{"dependency":{"package":"hono","version":"4.12.33","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"production","file":"engine/sdks/typescript/test-runner/src/index.ts","line":4}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"24b306eb3b1d780b6c8f07b4be479a97a4bd45652b11930dd151501e04897aa8"},"properties":{"dependency":{"package":"@vitest/mocker","version":"2.1.9","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"45b95a8f4bd905de4a965f424100165d53a4466083c70fdd53f4ec2f0eb049ec"},"properties":{"dependency":{"package":"@vitest/mocker","version":"3.2.4","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6415a226dff34eb6e048080aa57cbe6fcf82752834f6ecc6718017b3e8820ddc"},"properties":{"dependency":{"package":"@vitest/mocker","version":"4.0.18","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f197b5e4734285b750a9e9ec471ab29a3dac00e21e133057279326cb09107bc1"},"properties":{"dependency":{"package":"@vitest/mocker","version":"4.1.10","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6aac851871de821774fc771e467378bac1044b91cbf57c411b431be5ba416057"},"properties":{"dependency":{"package":"@vitest/mocker","version":"4.1.7","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d86ea532d5e1358d13b29bc1b94d1d7c0a439ac14c0c1c2f5cd4a6bc5798f05a"},"properties":{"dependency":{"package":"vitest","version":"4.1.10","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"production","file":"integrations/flue-runtime/test/rivet-store-contracts.test.ts","line":2}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"20cf6d8bb2bb7bd9be232a277a40624d4303c60a24f8363da5bdcc13ec3c13c4"},"properties":{"dependency":{"package":"vitest","version":"4.1.7","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"production","file":"integrations/flue-runtime/test/rivet-store-contracts.test.ts","line":2}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f43eebbf4b1909e1cd9ece994c448a756df752e947ddf6c891f9e59a514bcfe9"},"properties":{"dependency":{"package":"@opentelemetry/core","version":"2.5.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e662f218ce84947b2061aa77d2b9e9570e918f2f91f2dae154a6b250108d4b1e"},"properties":{"dependency":{"package":"devalue","version":"5.8.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"2d93c38655ec32f76d456e0b7dac0b047eb2dbcdbeb544b53150bd8b4e342eb9"},"properties":{"dependency":{"package":"vue-template-compiler","version":"2.7.16","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"bef95ccbe8f40ae78671212808e9ad34d1ad6846fa25bfaa5843147f9bf5c030"},"properties":{"dependency":{"package":"fast-xml-parser","version":"5.5.8","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5195098faf77c255578453173c9756e85fb14347a8c3b35399684e48e4e14942"},"properties":{"dependency":{"package":"turbo","version":"2.5.6","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"test-or-tooling","file":"package.json"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d7a7ef8fa291ab1654151c1bd62ad6c2b3720cc2d89f94a71c360e3caf961813"},"properties":{"dependency":{"package":"@better-auth/oauth-provider","version":"1.6.23","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7814cce334b52f37373b221d1e431faf0f063fcfa3515d254ad139e207e66dae"},"properties":{"dependency":{"package":"srvx","version":"0.10.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5a3e228ec6637970d804c4b36036107c5e4ebefa0527c249d2d801466d7a8cf4"},"properties":{"dependency":{"package":"fflate","version":"0.4.8","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7fcd2e2d00999149457625fce31fe9e079f0c3f40cb5eaf0babd5f1f46fab6c6"},"properties":{"dependency":{"package":"fflate","version":"0.8.2","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"459bf2296eccf8b99f1bf9379b3cdbd0ff6f717c30e867950bdacc19ffb48497"},"properties":{"dependency":{"package":"@protobufjs/utf8","version":"1.1.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"bea5062a3b6660225d627f9c4bdb4f25fec7bc046da1156713c45b0c01333efd"},"properties":{"dependency":{"package":"decode-uri-component","version":"0.2.2","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"923cc336d3a3d0de8c2a67d99d5dab9dd928a38bdbfd9c77338b21e125804a6c"},"properties":{"dependency":{"package":"decode-uri-component","version":"0.4.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"920aa4b223eaa4b15be4fe842d9d3a3f3473cec8f929cc2bc18e97157485cb34"},"properties":{"dependency":{"package":"uuid","version":"11.1.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]"],"reachability":{"kind":"production","file":"engine/sdks/typescript/runner/src/mod.ts","line":3}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f8044c74f4d074d28ac4a1fab0174f92eb6f61a173afc489e737d2dcaa5cc875"},"properties":{"dependency":{"package":"uuid","version":"12.0.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]"],"reachability":{"kind":"production","file":"engine/sdks/typescript/runner/src/mod.ts","line":3}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d64e074fd8d3e0bc736fa37b9921056daf903b2d4b2c6288f15e8fd850c9f8a8"},"properties":{"dependency":{"package":"uuid","version":"7.0.3","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]"],"reachability":{"kind":"production","file":"engine/sdks/typescript/runner/src/mod.ts","line":3}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"16bc49aac72eafef4ac9a880a9755121d0367a6bdf3e48689c49c4d9d8c09a58"},"properties":{"dependency":{"package":"baseline-browser-mapping","version":"2.9.19","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"8fbae7affe33d99a549f4b8a8aa5e5e6d3bf16e68922adf11e518d7f63edd09c"},"properties":{"dependency":{"package":"esbuild","version":"0.19.12","advisory":"[GHSA redacted]","reachability":{"kind":"test-or-tooling","file":"engine/sdks/typescript/api-full/package.json"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"78e2e4614e5e25ec08b93e96a9853675685b49ba0c74c010024666746e476497"},"properties":{"dependency":{"package":"pytest","version":"8.3.5","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","PYSEC-2026-1845"],"reachability":{"kind":"test-or-tooling","file":"rivetkit-python/client/tests/test_e2e_async.py","line":2}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"de4ca0c4df7d8f548d28aa65e721512abf89c7d1c9489950017d68242c7a712a"},"properties":{"dependency":{"package":"anyhow","version":"1.0.102","advisory":"RUSTSEC-2026-0190","reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3dc052170cfc4712810139f50ebf84ca34b754033cabc4d7fa9846a5a6098324"},"properties":{"dependency":{"package":"h2","version":"0.4.13","advisory":"RUSTSEC-2026-0258","aliases":["[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"cab7c46085f1bc8e579e4a5327081b7cc8e87acae0744867974d25f9119bbeab"},"properties":{"dependency":{"package":"rustls","version":"0.23.38","advisory":"RUSTSEC-2026-0285","aliases":["[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5999c424f660228121d2361d5a1b6a282a561f6e53713156494d93d605f0e550"},"properties":{"dependency":{"package":"esbuild","version":"0.18.20","advisory":"[GHSA redacted]","reachability":{"kind":"test-or-tooling","file":"engine/sdks/typescript/api-full/package.json"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9d7fa4e70694c20ef292dbbb4abad034bde594865e7c3019ce9d38db523adc45"},"properties":{"dependency":{"package":"esbuild","version":"0.21.5","advisory":"[GHSA redacted]","reachability":{"kind":"test-or-tooling","file":"engine/sdks/typescript/api-full/package.json"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"41da8266ad99aba42e1a15b49148dc4815b8218f5e7ee64f913ffed9f8b104f2"},"properties":{"dependency":{"package":"@hono/node-server","version":"1.19.13","advisory":"[GHSA redacted]","reachability":{"kind":"production","file":"engine/sdks/typescript/test-runner/src/index.ts","line":1}}}},{"ruleId":"D30","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":"f725ad925cf527603c81b184e74678a84b7e7fa9f0fbc2a67fdf2a7487746145"},"properties":{"dependency":{"package":"webpack","version":"5.101.3","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"f392b1419f96aa208ac2115d3c34c2f00540ad0c5381e81423f8727e54319f35"},"properties":{"dependency":{"package":"@babel/core","version":"7.29.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"27d974ee3fd5dcbd0dc61a8a77f97951971d209729c9538c070e3cb1baa1af25"},"properties":{"dependency":{"package":"elliptic","version":"6.6.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"d713374f4d96807b764ba6187096c02b17337fe1fc68da4854b2e9d9d9fb5bf4"},"properties":{"dependency":{"package":"@ai-sdk/provider-utils","version":"1.0.20","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"8cc4fc6a063dbce131216641a580fa93a54dccac01dab51fff451f3a6e9d9b46"},"properties":{"dependency":{"package":"@ai-sdk/provider-utils","version":"2.2.8","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"2517dc42b1670509415641fdc04b77e72d0a9445f29bb071e34396574f47753f"},"properties":{"dependency":{"package":"@ai-sdk/provider-utils","version":"4.0.15","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"0c8584e4b0b687ada0aaf4b7c71086919727ef8bc956d6fa93420c66e441a34a"},"properties":{"dependency":{"package":"@ai-sdk/provider-utils","version":"4.0.23","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"729fde98da2093179cfe3ba158e8b07d4443192089dcad1a1a02a6e5d8452e98"},"properties":{"dependency":{"package":"ai","version":"4.3.19","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","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":"7ddbaf099bc937d503bb4f377c7294decf05b8f82a7f86e2267c1dc8fe41bdd2"},"properties":{"dependency":{"package":"body-parser","version":"2.2.2","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"eba7fb25d0b8d38048d1fab612533e16c381b81645728bbe7213282cfb7a64f5"},"properties":{"dependency":{"package":"postcss-selector-parser","version":"6.1.2","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"fb4abc1dc7c11d2f0d412d903a0c69304bc70254a703b13934b38f1ba71389e1"},"properties":{"dependency":{"package":"postcss-selector-parser","version":"7.1.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"3f54d1f4607fdaea22194262dabcf05db6136d2d813d8619ac129c6b6f33edda"},"properties":{"dependency":{"package":"esbuild","version":"0.27.3","advisory":"[GHSA redacted]","reachability":{"kind":"test-or-tooling","file":"engine/sdks/typescript/api-full/package.json"}}}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"52a235ef83472fecd5e0b04d1f9730bcb7a3aad92485ae6015834790e66eb4f4"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7219ac1b32e9ae936bc07d51f091f84b7e1bc2b87d6e63636c039908680160a7"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"364a39c79a29881931bb0eb9d81263203e6442a4e3f25536841b1396072591df"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7a1acd13a493cf8117fab89db94d52107c734373b514af4a78e0f41be473bd5d"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"45f89862b5adf0711c5b5f7c32ae79b49b4a50052b613f4783474691d926819a"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7362f2ab5741b04be082cc0ae3659fa53f673437bdf5e24df65fd7e6c4989a99"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"07a19ced417c14054d438c31c63667f2f406d025a7c63c6b112f83350eb4c2f6"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b98f158146fe197d06e8395daf284932f505e2598cb4bc81630eb975b92b138e"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"12d3bf91edc91387dbb6e21f2c9c1bcb58c8c0a9cf2d7b2d8b8ee557da73f99a"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f5a317f06d420cbcd8d19aefc8eb0d6a85abbfdf6ba7ae0a0fd0066adcb9679e"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"00a655bbd0ce0cf4bcc27755a7bf124c2b73300aec7eadee4286a585ed5a24c7"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"243437463f5256d9566564e5bade6c4708074ffb88b8562ed834764a8e23d1d7"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"0e6c5b10d20ef9caa1b677ac8985478588fac42f1c8f95840189b75ae2f899c8"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b8e9e2782158d4086f266897862563660a6814e1dee5ab83bd5eb57af5cd0199"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d5bb7563cfe84f944531ef994e3f628b5f9e13ddd6739a4965b8e1fdac69a01b"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f4b3c249144e272f496e654ee9d8a8f8946c03b10fa984771d7a3cf64638f3ee"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3a343085d0fd5cb57c19903d4bd3fbb8d4210fb195fa95152c9a5f125dda0b8f"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e94bc6334b4aebb983fbf5430eac25f54927c73939df99f932623becebb150b6"},"taxa":[{"id":"CWE-345","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"150b0b13f16ceae95a0db815f9573f212bab1ac73b70d3fde9f3c604265e0316"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"30d9016523b4bf8c2323f65b5ae12d31b3aaea288200c56555be7c67d5fc8148"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"42717d08cd7dd990093cf9aeb59d1ba7d7fb5d2536b279dbb2a858cae273f168"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"efdfc618354a007983ff484346d0ec6d3695128e0972037ddd0231d5414f9e85"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5b39384347e0d3167152667ee327282ef3179ea568d32d62266eaee81280da21"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d7e6e1d051b5adb0ee6b19aeef63390dd003542ef9c6325a5b8a0f20d0da310b"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"82059c0cf2a6a11371322c825ced412be4dae6e5293f075952d71f7853c81fdb"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b23d0d7802fb06aaf062f56b81019bbf816a127fb3e2062b0a294273e5ea1d3a"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3090c40a50b7d2a0232a554ee59aad148e9807852adb462c210a93b5811b987c"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"86a8fde70e228071393e0fd075f05a6d00e4a3636d8f7ec29b1dd46f7b963c3b"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"2a40b63e17e97b7081c9c77c645beccea1a841694cbfaba37b12df3697133771"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"fe8964aa3b99984e3f36030a4bbcf5b82cfa732c9dccabbe5ebc4f77daae98be"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"bb85d75fd3b1ebd6542aacd49613adc1892a5a1449fac0d237e4b00004fcefb9"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"911c6aff681f75b9d5447d330c0946e1d3bce45c8c7a6bebb86bd7124da7fae0"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c47c9ddab672e737df63ad217200fcf8574a0ac9b625f022993eba2258613b77"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"2baba0aebbc0592db9a0d30209d758248268788babfb3d27b0d41b1bd486a6ef"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"22bfd558d32f94380ebce32b581224c759e6ef6efa762e3a29dd7a559acc9fe4"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"719a61a3d082f33a7658a085e166f333d51648e31b73ad092a6d37594e2fb75f"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"1dfff17f91df69943e84cc02dcc407ca909983a94e3b353e20dd8fe4af69757c"},"taxa":[{"id":"CWE-250","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-653","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6e379f8821c1cfe42cd3b6d76202c62a5947bdc69a84f4960d7678b028000ce5"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"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":"0a11885cfc24352a18d15553ee191ef989672d3e1851e8a0845c0aecf954b19e"},"taxa":[{"id":"CWE-250","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-653","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e76b96a32f95db76541332c9af76ef916ab378fdb7b3148e201d800110e20d7f"},"taxa":[{"id":"CWE-250","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-653","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5d9ca2a651ff928b51b19441850a6c89d84f456454117df6961287791a1212c9"},"taxa":[{"id":"CWE-250","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-653","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c0230c00231d631303f677ecfac4d3b934d41023d494707436fa55f56088600f"},"taxa":[{"id":"CWE-250","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-653","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"94901ca1279370822f5c1fff90abdb2d4d847c45d9872797cb98122425929247"},"taxa":[{"id":"CWE-250","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-653","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b3bd1dd144c565fc9523632e71ab2b411de7ae9077eb456aed5e73991b806745"},"taxa":[{"id":"CWE-250","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-653","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"768d2c9eb1b40cddbea35e56e560e0c2e478966f4eb0012deaa9d59e802ef9b3"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"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":"8c568b7a7afbf1dbe247a21be3ad5cb4f8739b9299ba7b2beee7bcb38c85d39c"},"taxa":[{"id":"CWE-250","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-653","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3f77330fe40a798f8cea52bab7c4f2bde286c130e4aa96b33cfba8740d9294b4"},"taxa":[{"id":"CWE-250","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-653","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e986e041c5dc617b5f37e809c0cd215921f8e3786c8badcdd4ec3b6264eaa8bd"},"taxa":[{"id":"CWE-250","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-653","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d27a59d51b7e4f4976dc86b8d62b49a06ae86ee8139209dd2868a8e51b3db2cc"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"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":"640a10d3778351ade40a068b371c1b3d5e4f38575ab12f6c926e720cb4e379a3"},"taxa":[{"id":"CWE-250","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-653","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"38fc21061c0fc0b271ae1cebe1174fe6f6af529f386684ced44c316c2b14117e"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"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":"f05118a2216f715939d7c2565bf0a790c2bc6c335874d7e42d6072229eba3f3f"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"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":"020dbaf5b0df208a651f29a4b1335ed2c9814834e14cd3ac74f7e99d32feeed3"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"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":"9d2e14200ceb47ccad84203ffe5bb18b17f206ffb97d87daf587019a3465c9f7"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"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":"4740c3178d036abe8bd8ff08b58b753aac0254abaa541b98189ee2f48aa48eee"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"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":"d9886f494c3117a3f7d823e1bf20c4dd8ee936fa7fef1096117530efd9af8125"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"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":"cf940bd7912d76a43d4c44f9c4b42ab35a00ec6cff03d821f2f4336ee19c5d79"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"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":"91da74eb3e47f6a2f50c1a30f3fa2953d3f3d9a013d3e53b50a7387a2ca4f132"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"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":"e375da14c9a0de627871e2fa41c3a70d19fa0964f440b5f211e4d3d24dc99ccf"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"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":"9995f768751d027f6d7f6cc3e0a84505a6a8ec4dec380e33896be03cbd1e98ed"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"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":"c08f295c65724b7ef3f10dc1168611b218f9f0bf31bb2944e1530956364356ce"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"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":"39ecf1139666edd2e1d3651c1512d7d9e2587454d32265cc98a85b9f989ab4f4"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"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":"31e67641e56d722a68d6c795ff360e53fba7e3661685db5870f3f03a8f751585"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"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":"c526b4a8fad2e456e7da721cc85619f8201f49626efbab64f05a67dac52b2e25"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"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":"d54c171acd297d4587ebe82c4cfa15f65873007513b0fe37eaae52e2e54f5d40"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"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":"017f2ddd0753c8b56c1730a4db6fa752f3649f6e56c091f1a7b6813047a93745"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"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":"f4e3172f0b1c916f0ef9720db77c8b44c8d38804ecf9ee130504e197bedd9984"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d3397ad31e83585a504f6788af10903457d79312cf760a2bec6c108403aad18d"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3f36413871f893fa1f179dc7afcb39b7fa565d74b7c32d16215bd0be802f58d1"},"taxa":[{"id":"CWE-540","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"2f138c4c7d8246b9c77f25ca13be8e33a6d15ae6fd0661455bc5cf5a0e12e1c3"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e100408a3f6324c8eea6449b2f2031a889bcac4def5fd93a0b01e0187e3b66a1"},"taxa":[{"id":"CWE-540","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"8be3c565c87b2cb4eb585d98a688caa26ca65200a8e28287e22030df6dc49887"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a468f0cc83fb84cecc118650c0e56bf705b1095cb02353eac7986632a36a8d7e"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6f57a41877a9460d1f688ec4968856d52ec75c100aa2903d0170d8f7adb20d21"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"2dd08d95fd05ff210876c7277cf056d81c1329f234abfd22151108ac77ad7214"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"610e535b77d3b12d23e30c8a41cb70e40d25d5177d48439a3334f7d2bec774e1"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"39e0ce93bb3a44f0d1e748ef1d3c1f8ef4d98447c8f8d6637b2512b2751a0e93"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"8a1d4587e02d2d98af8baf7d30e21c0111d89452a5eb2fb79421e904d500f69b"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"dfd0aee0fc2ec341d97736d2a2791e2981112bec857d2c61415e3eef17d1d7dc"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"94cfb75450c4cd621a113b86a28b6e7e82ace36bbb498408af24ba31bb7732a2"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"151dcb011861253c136ac656b60ba7061d11fca1fa35bfbef39cdf7159e67100"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9aff15e28ebb5fceb49f1da2f0dd2b5ca2ea47bb4846be49ec21a4ba719be3de"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"67226f8fe03e81357a9315c888d620a968444dcb3a49a1e2fbfb4aa8103fafa2"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5ccb32c58e6810952494d8eb1b11384ff4b56e74c8ffa4a4e16bf85ff1749118"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"63dfe2d5a6c077b09015a521b2934d067cf34f0edfa9dbd0194f4caf540c520f"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"653e16e551378c4a2ffc1f59e93991ae04a92bd25ad1a67ad5ed921d043736ea"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"67c54bac6328d14943df370e7d6796c514bed60dc4cd10c0b91301106bd56e1e"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e398b3ae65db30568b94b29928601d0f1a4d1fb7c1a864cc8c71e390b2823aed"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b0297bfb0c8821d6ac337143e15c85c82c9611230e387e5cb99aaa76cfb0d2db"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"0e2b9bd720fedb5933820058b540c7223b4e3ea72c7d9b4b8f8815afa61b285a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7beb1ae578e20f4e96c9dcdddc448f516323ebd03d7aa496dd6c1b66d848f470"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"29aa7123ddfae093ecdf4f7854d815bad9b7c29628a78c35e7413bd0c5289166"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"10795cdccff536762d9bf43c42cd6330f7c97163b08b4ad544314c2abb02c34a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"48d368ce39e58f80d427fa8656cc6752f4b01a9d75f7fd99ae078dfea2e83ad1"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e3dfab58e22428f5c6143a2d2f744628bae61c105bac63aa2e53ab3bebf7a74d"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"295dbb8a60f27536b5daebf02e86cff125fa380e808ea02bb2a836860da58c55"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c0a0612eab050d322f7343867e2cb09abe5a3c934b2e75fe5ecdafea7bc61771"},"taxa":[{"id":"CWE-426","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-693","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"212c385d4260d14a9c10a15efbb10e084c6b338b815422959ac6a43f97d24c61"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c2e0268a64c9a749c57435a2ccc532eebf960a56a69701b065ac0dd0ede84858"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"0c3694dd2a943d57d2c523168d5f648e89fa104b584cbb2a985f07b4d8663012"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c6702c3fb4520969446a2eb6b3cc24f1215e3b87215e76c0e8b5b966c4600f57"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b5cb94881184c1e6bd3b8c26a634e8650460aec51bf6021af9ef34e3d76d2298"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"71f3bcb9a5855a2c94d924842b7311b10c7446aaa768652f53d6707572053523"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a780c172141481b7154917b015edf268cbbe86134adb364d9843d2163c59ad42"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"8cd79da132e564598b9e10c98c17f18c602c0f694fde3410b485a1e975a4e884"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"fd7bb55ce52a428b1b3578ab4ee25d5268422af8822fc7d77174fe6939c807de"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"06a8ac2877855a6d4839ecfdce88a6163544fd77cde5fb2732e3f918cceced93"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"23a75e41b96493abac6344ea5e3a0c9865d4b08532cb33c71ceaf5184c8079bf"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"599afc5c98c438b4908f2e14e49a2f4b9cf479b18ba8ad8a34386fdae253ea56"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7612be88a3390091aea42b0a6d961ea4aa4e04e4e43341b5c5f13f49c0c0378d"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"032afbdca573cd1a25ad060eea96bd161cb5095ac2fedd7c18a1dffc4d05f4e1"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"36613a155957fa88d8e0ad91a507f904804f919687ee0475ed9147ba37395afb"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6f5bdc648007665c4f85df65d8121a12fad3023c64c43b42654517611a8b3ca5"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"fe862f517d9d167a7593a37e5088b464c518762a2577ce01b7b4ae803229624b"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"1291156df96f01deaf3f161cc6269d5804abc2345c85da86132da9a54bdb6e2b"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9a01e07736cd3d0dae482b4047344a724d46b46de04ea99bce43ebbb6e15e400"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6d245c2e497cea37cfea51dcf0e18c352723a7c75d17629f8702296084f5cab1"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4b9ba91797fb97f8264889347eae99f157438d662fd82fdbada00b972dc9b1a3"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"eed0f0e62208aefe71142a3baa4ec66b93cc9154d8504e9bd012768f28699f01"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c5409fd2e8ee11a52969b6a3589a571c3ae82804c08d23f22353fb981f420a33"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"705fb918d2f175889d83a2102c2236fa8d4674a8f1f1f240faa4e9e8bc4a43a8"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4e235771ad27a93bc9bb4b4a4c156b141b7d2f3dfdc81c902a2db1fe6b7a4ef2"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"567c5b91f9245b1fb29367a7671e01ea40e992961e021948645be495523e85a9"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"16fa38dfa95abf26bd766bfc1d2c4b92b4c91af634c8cb1456699cba49ab70d5"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"42f9b03f3b87ff11ffcccf84d07c5af43bedb83f38c0e5cfbf8f0a4ace195b58"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"dfc67c0fab091933b7186d826295075484922dd0c95db4e85d368ddc3bad2389"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3348dd452e05170247b0f5f549bed1b5f79279cb2d46e1a001f127c9217067d8"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"8cb542848ce53a76bc735a5463ce611cd7f00eeb4116fd71e4e113fbba1bb845"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a879737bb187a411261da86de623de08a2a004e18ea82b8259e6a8b47f8a5530"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"84e5c36b261d49ac206e661d235ee1d05b641dc09f1c8d661d5bf4d6eed27bd7"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"2c2bc22f993643cdb114e62f017e42030d329b3b6cc1678405921cd2a1ddf8b9"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"2a833a0465e4f01e565f4fa1f49e58737f9e51bf77af75c745875004f94626f9"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a4efe69e7c678fe9f223fdb976f71c15d35648e5be9ae9200f3e0ae74e5e7c67"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"54d3b1effd73cc199fd422388df282c0746b5d38a160f8b51b3fb11af22d50bb"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"bc8e7dc8e301c6ee2d2b4ae380fc47a6466f86b4d39241f9580f09a47545104a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"02c86a584c8c6c4d316f192f27777c3c2ead7c0eccd05c189279b9f714db717e"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"baeff6b0704f6340a7b66dd2136ed9bb6f10e3e1b85e5031a651df78bde367ba"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"be8d4e5113aa04b5ed5e5eb880883437510e51ad57923a5d7411dc0ab67798c7"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4a90db0a5b3e838d8b6513062d0c10a169f2e2625f1aca95b5aa74546d71a637"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"11cedec8f9142dfaa2fdf4d03a4e96d6a90cb91bdd4f8e94ba815621ef55f8a2"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"1d6b371e79598a39949396c4866015761bc8c146407c70e9adae2d57589ecf14"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e2421c014e561e23e930dad85d5a6cdd0c91d28e0352adc3fb31846e8d42bca7"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"278e4efaddb5662f4b76787a12ec54e315be41703fdac36d8b778b473ede4f87"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e63d0a03ba472fd07d439b2ed147206533e554b816918510602306984f553d73"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"08157c6a41b12d70685400ef36df3c5d46092dc47b820cdc366bbc198a3468f2"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5a664b468fd93a3a6e32c806ec48464e5c9797158c26a034ab447106507a833e"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4fe94138369d356389509d06cc0fbeec7b8a676bca93b42916be68008fc24dad"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7edc758f63887e641c72a64711fff2659c08b946b6b9b3e3b8de663dd5e60818"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"8ec22469b64cc0c169bd2e7c87196c2dfb3ae8227eb38566d15a7fe2b2c4a859"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"bcae4f4e58d0c5827e8de37a6b2d3107cb1b7b3a64aebb284c240155334ea052"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"2958fa541f0d113fc8d1255af8c2de5e4aeb525d62808c107b3b26e8969e67fb"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f7a290362abf7040f7536357915c25ff78a33fd50171bde7b3b06075cd64ac6d"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"eabe5df12db338f9da5d2c145066816764512ffeb0c3eea6baa5215dc9121c73"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d3198c4e9608f7dc2a6ebad4eef0562c6261edbae8fd84ddba695fd4f3769b6d"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"57ca0b32727075578d1996b36a3ae3a1279c5c0f400e75ca32bdec0c7cc03650"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ed2fd075e6f430c7fe5020626a3db29f65b4bcc6e4dc96f83c898722e7ac56cd"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4cbff01d23cf2e13c1e5c46cd36f379c53414b00052aa672756d2f8d452d906e"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"008c1c7e77bf9b9c5a2cba76be33088423b2f9b5082934838ab985ba2cba3727"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7df7b34dd6b958e62f7887fbaaf905b3d900a43e0ad4cde8f9f48cd6281e22c9"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6737856ab31a035ea01ccbeb4aa30c28efdbd4d10b1e4d9cbe3a9c2e63ee90f0"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"8cfd4744b293efad60ed916334d38fb23ac3c78ce40be334e07e79bda2aaa7e8"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c7142588817bcbd524e84b6bbcb4830d683fcfe6398f015a69a88feccf7cfcb3"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ba6ecf84aab462cfd6d7d5113aa8eae73fe2b344caedc8062544a2a41fab1b8f"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ecf0057818a85b4eb88741c23b0d4fd08c414a74cec6a42c8a17a3ff5b16461c"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"08e23a745cfbc513e602cab97e5d7bf1f68c189a098893fc8492c82ab6da9c63"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"41e8a39e93ed4f60cf56946f953e0c1a1bf97a8e46957b2a819b1328d29d0091"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4e6bcdb5e624c9bae5492b7ae76ff878235339c80e4591c615ede16b527b333a"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f441aeef6c76eb8f088126e14afc2b0c1e427a44161cfe66717a992bc0af0b37"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ee1f69752006d4fbe9d3ac9c05f8713b9e4672471f66a34703a68ca09b68aecb"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6cdbc7f28232ece1bd2fb61d12e5859dff0e322c7ad88de10be52f83b88457f8"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"bbd1f6907ab8e6edc191ac50b7c013c800357e2c89abc60fd6eb40cce16ea50f"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5888637bfd50320bc69149997252a067421b7442837cce353f6f7862d7363738"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"8f861f44c7990068415dbbbef8ebb0d64a4848a673c3456b1998eb11cdae1e4b"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"fbd6525ba3195864861283091923fe7af2eca88b8f6d2a68824c2b0b30ec21f6"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6b51dbc4f35e6037ebcbd3dcbb20ee186eb7dff42dc81af9df819c732d939862"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7926a0ceb6b2d148a39c518ed7cb3521004b4941bee9ff6022268ddf941ea361"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"48aa7d26fc28e944ba969066aabf63bc778667ba8481e772b3b35bbde1fe8766"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9858fb43ed43ed020d28a94c0523b4bfd11a3da3d5359181c3bf1e408d139157"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"16afde6cb70d1d5c538db2138129dfb1bee603d66e40d0172af694078971a005"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a8bc2f0be847941ae7eaa25c3fe252b21a32c8785eb17ca9aa053761c4684ec9"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e2e22e3c3bc4549da28025323878c58e3f7516c2c75756937fe627fb0a648047"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3a3315ddb8e4b4e2c7aa9d4fe484d98802b5370450276ce2b677b9aecad8a6c6"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"cb3e9bc5718317444130795fb6488cd5228a896bd331522158b85205fadeb061"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"949dbbaf11cab44d0264f1273682dbb1e4299c9c4380e8b376c9f67d0c0179dd"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9b99aa7f51d82fb396af898177226829327720a47648eda6dfd567ced43e3bf8"},"taxa":[{"id":"CWE-250","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-522","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e182cbc14b931ef42840d492870ec106bb358915aa48f5fd0f0d071bc627720c"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"64f3639672e2a22de653b5c7cff23bcb65db5fc48545eee5d479280b60826047"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d03376e4b151607f39c73a09c57c2fd1a175b8f82a1ae43c125288c8c97ea639"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a0c299092bc3db5476a8c7fa225c468cb45f690849bef95b1b429563070ca487"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"db117413002b9163ebcc3f130866c1af71c098b7ee8cab81214a2556bb186b67"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"1d814d1d03a65ca4564c9f5f7c3a784ad4f16c085e82e59691f1d432ecf4e7a6"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ab869e51068a1570cb439e0e1b13a80650a2a9b2846561d84e6632a297923db5"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e3e79351371726f1575b80823e8206002e17263c5ec401630f4dbadd181c9151"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9c695e8f66ac4cba4688d54392a3244fcc537c9c7ce2100a3c1a82bf3babf336"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7a56e9a46133a0889badde6977a30c0b857feef97803002d978684536cce366e"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a4825f34387123169774b6826c5bab64e269c0ebcb67af8d8d3224d4ebb04740"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ff74ba87d14199d65231e08628917280480ab86b613b509841fd9387bfd88406"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"891b8c91ba1bc0c6bcf550513524e6af1b992753e9327dc87ed4b26d08f64a68"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"1ee1abf79c92bb8d407a4e5dd7837e262d5212c8773af964e68f53ce51073b2d"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e59a33ed74c080a1cbf70b554e5827e5a0263883bf18c0ed4e26b400809d6811"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"35b2e2d69f0cfd24db8438bc8133274ebf024798ff8683e28968ff1f37f3fc65"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e99be86323755f5747c7bc25f2bbcbe635fe93ec23a20efa7b4f7cc2075f77ad"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"17fc9747071348352676aaed8b5b1b4cd55749330ff2f1eead73f40d91ad8ce4"},"taxa":[{"id":"CWE-250","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-522","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"fded0dfbf1691bddc48059f75d3c141fbca19f3efcd2d6742f86efc6de7e4d50"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b4abb25f49980c240a5fac3d0f631fb784c907a37bb5f728867418d284338638"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"09383e3389c124c9dd2ee9502d2d26a2535ff6541782bda498d994f27bfb502c"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a8b02a64f77999239b9693deffb8171fe73a46f0c24d2d95a958a5d3ebe122d2"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"db753ae7a52ae64b48d09b52eac88457aea62ffc0da889982b91d3fe662616f3"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"da447efcbedd4150b7b5c0b667f381c5b9d687e3e8d2639f674060121d43f0c7"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"aeeb959eb04f47f7780744daa63582f4c80e9aa9221b3e2c1ccc7746cf404c8f"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"8f701a53865af85ddab545e5c143b2df7940ffb8750bb7e69dd8c3faf4a3fa1a"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"0fe05be2b78d3a601245728e532ac22ea4aecf70911db3d4e07df5c520d5d46b"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"84a5282f55668fe9aa38e3e4aa649a5fae77d8db9a2403acd2b2cae676f986ef"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3bbee20848a8203531858c59979d04012aa8eb0b509ded804e554223fe7ffac6"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a1ee31795ff7a45da553e83091876d3240b59fc598f1b28387d8b01bcac332db"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f42887800402dc27dbe22dcce715b3c1295b8089a51bac76dcf92e0d5b734e69"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"24823308cc42f19f68b2c314ca631b252591038616538188e57508f05f36af8a"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"49ffd0a5c09dbddfad26fe402c581fe5c3a1f5dee79dad2a0719f91855b21a40"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c7daafe007ddd33872ef31faddb57497c647c9746eb34169b7143d81bdbc9951"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"574209c6a229181a8e6e8f7c27ba631bdc608209f1f7e09f0152514f27c32ab2"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e7052df2150445a9365005d6298c488cecb986b3522c3e754bfd624b3526ffc1"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6e7cfb6cef92cd986952c8cadffea5e5683de956cb25a8aaa9547438cb2e127e"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"cc0450aa90a29592111d3837e8bc82cf8c30fd9f546bea89c16bf86f79c7c412"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"94034648b7b9264fd6d054c38659836afec21bbbb129ba6cd633582acdfd45ae"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"beb766150c69e13f87cc6c56ce5558bbe0d05b8fddcebe0bd4f572c82fb55e42"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"dedcd7a5dcb5392300251b5cd41274b1a1e6b7adc2d85ad6b5acc51f90856c77"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5533eeefc43488c0c5f9c2da06364326c22a067ba5aa419c8de73ebcbe715543"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ecf880e8bf4ed278f72430be762236a2e75a3fff845a8abccbffd27914b74d1a"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ad7b7a48c53d794f3315c302691c10145075779ffb0bed62284fb772c7d8fae0"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b67bc4e91b78127ae533e96822da5a2d7cb7453d2b6dc0ca965150fc52e5175f"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3db45f8b490dc787b2cc2783ac9f47be97943006f3980be8d1743112a161b7a0"},"taxa":[{"id":"CWE-250","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-522","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b072414f76f184c57beef5b997b4823f622cb8174f5a4ee23e6daf196956b88f"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ff2372481c4e0e85f06479c5629300c84235ea38b75b34f5891270d714f3ae31"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"678bbdabdaa0c93a8d12e6e4ba6cc43b89ce363dec837093c82cf9550b93de21"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"0670d4d639a296f73f060ef50ec2f382db2d3cb996caab938b1313f6412df0c0"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"09ea5cb360d470f3275ccbd1d1d7099dc3b4f6f9886c80435102176157764f11"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"485484e2065ab10aaed5d4e6e3c09413dbd5cfc69e6035a4e6048f3e0758b671"}},{"ruleId":"D31","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a1f8ebcae2d296fcb31ebfcbbf1ca1c3b74a58b4b69ed554d4bde33d890a4998"}},{"ruleId":"D31","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a45c17a84a6b7174b05f5a21fb3e4ee2acfad76cac51ec0ec7071699236d6e79"}},{"ruleId":"D31","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a9c7fa51fc47eee8219678ace9b54e09fe8c996023484bbcc1b7bbc37197eb00"}},{"ruleId":"D31","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c29543711d9874d9a60ba93ccca5a6732235c12d586573be6a29dd36360cf002"}},{"ruleId":"D31","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"23d5129ad25c4710f43c7fa94c8bf95bc03fec4aed006184892fc84dfa90bcbc"}},{"ruleId":"D31","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3f2d3d340c5df47d07922b609de0f3659b217f0a56ad8d0998e8135c280a65ac"}},{"ruleId":"D31","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"eb2fcc2324cf346a9fcee43a47deb42b7f825f7b6bdf0092628f7f7994e13147"}},{"ruleId":"D31","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"abebb2daffdae9111823b94e3a984ce1423c828f5b091446502dba58be3d4fcc"}},{"ruleId":"D31","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a63f1220c03ba4074e3fa05ec5b3ae96fbb2740ef65c23fe5df3a8fa50306507"}},{"ruleId":"D31","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"07ab76da13fbcb982631ab3286f026013993d54c63ea69c6368148b937f97498"}},{"ruleId":"D31","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"80b944918d88092c3f1b385aa3a00a07f2f6581a0497264f746b0bd8c13a093c"}},{"ruleId":"D31","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"fba9173656e890a080889bc1afdbc7ae5a978bd99b43213447b58ee77ef2f264"}},{"ruleId":"D31","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e0d8c4e546a7698d4928389821fcca06f8fa02174c97b0ef1ee4516726593424"}},{"ruleId":"D31","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a662f3afc01e385626d8b5776e030fccbd1b2202b82f39348896b445bbfa8219"}},{"ruleId":"D31","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"244d4f6ec40e1812be652c65058004c711e31fd6f3dbd3a4b358002f069d1249"}},{"ruleId":"D31","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"11799649ca710f84cdbea0f0d1034fb84b20c078e227a9710a2b691116a9ddc3"}},{"ruleId":"D31","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"56da8216f27f8d9729bb1fab8bb0e6a221970680dcf04c7399d0bc7cbc50f1ce"}},{"ruleId":"D31","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f1af85cecec5f1cb377f20e5f146bbfebfc0df820327393b5d6fd438f80bfeaf"}},{"ruleId":"D31","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9a533252da13be427bfa61eb8f5ead36d8075e8a6ff89d833e4b96f0e70fd775"}},{"ruleId":"D31","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ece255cb9a82f91a455755025199d175cdf4b5965a39947dcc30501c657c4062"}},{"ruleId":"D31","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a5823c55f27a8c8bace8b807c2cb8623c93e18910d773fc5d24956eebe6b0fa1"}},{"ruleId":"D31","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6014718b83bd6e5c0e6f72b85722df7ec165f2f0524a2b84636de173f6e93457"}},{"ruleId":"D31","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5cbfc31101cf6513d7fc8c2e17bf888b571fd2ca43b4986e497e30e26a2ec2f1"}},{"ruleId":"D31","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5ed42e528261fbe7d52a1265e7015502634737f71108914dcf4f28514bba62d4"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: telemetry.rs \u2194 telemetry.ts: \u0060rivetkit-rust/packages/rivetkit-core/src/telemetry.rs\u0060 and \u0060rivetkit-typescript/packages/rivetkit/fixtures/driver-test-suite/telemetry.ts\u0060 change together 90% of the time (9 of the 10 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) and are written in DIFFERENT LANGUAGES, so no import can join them and they cannot be co-located into one unit \u2014 they compile and ship as separate artifacts. What binds them is a CONTRACT across that boundary \u2014 an event or message name, a route, a serialised shape \u2014 that each side currently spells out on its own, which is exactly why a change to one drags the other. Declare that contract once where both sides read it (a shared schema, a generated constants file, an interface-definition file) so a change on one side fails the other\u0027s build instead of drifting silently; where the surface is too small to be worth that, name the counterpart in a comment on both sides so the next reader finds it. There is nothing here to merge. You can check this without leaving the row: of the 9 shared commits counted here, the most recent 3 are \u0060237814d8\u0060 feat(rivetkit): sample traces per actor and action; \u0060982eb970\u0060 feat(rivetkit): add tracing for workflow runs and steps; \u0060b965bf6d\u0060 feat(rivetkit): trace actor to actor calls \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/telemetry.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"98359e14fadb4016d35e3c05f38ca223b183bf984c9488b91867be00b02efdf6"}},{"ruleId":"D35","level":"warning","message":{"text":"Change-coupling hub: wasm-runtime.ts \u2192 context.rs, lib.rs, napi-runtime.ts: \u0060rivetkit-typescript/packages/rivetkit/src/registry/wasm-runtime.ts\u0060 changes together with 3 other files \u2014 \u0060rivetkit-rust/packages/rivetkit-core/src/actor/context.rs\u0060, \u0060rivetkit-rust/packages/rivetkit-core/src/lib.rs\u0060, \u0060rivetkit-typescript/packages/rivetkit/src/registry/napi-runtime.ts\u0060 \u2014 none of which declares a dependency on it: one file is the hub of 3 separate couplings, not 3 unrelated pairs. Read the hub first: if the others each duplicate a part of what it does, the shared concern belongs in ONE unit and extracting it clears every edge at once; if the hub is a registry, dispatcher or barrel that must name each of them, the coupling is structural and the question is whether that list can be discovered instead of enumerated. Fixing the hub is one change; breaking the couplings one pair at a time is 3."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/registry/wasm-runtime.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"58e294ab70d487b947c9a8e06962b4ad93c4e283bb5679735031475b6733dd3c"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: lib.rs \u2194 napi-runtime.ts: \u0060rivetkit-rust/packages/rivetkit-core/src/lib.rs\u0060 and \u0060rivetkit-typescript/packages/rivetkit/src/registry/napi-runtime.ts\u0060 change together 53% of the time (10 of the 19 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) and are written in DIFFERENT LANGUAGES, so no import can join them and they cannot be co-located into one unit \u2014 they compile and ship as separate artifacts. What binds them is a CONTRACT across that boundary \u2014 an event or message name, a route, a serialised shape \u2014 that each side currently spells out on its own, which is exactly why a change to one drags the other. Declare that contract once where both sides read it (a shared schema, a generated constants file, an interface-definition file) so a change on one side fails the other\u0027s build instead of drifting silently; where the surface is too small to be worth that, name the counterpart in a comment on both sides so the next reader finds it. There is nothing here to merge. You can check this without leaving the row: of the 10 shared commits counted here, the most recent 3 are \u0060982eb970\u0060 feat(rivetkit): add tracing for workflow runs and steps; \u0060b965bf6d\u0060 feat(rivetkit): trace actor to actor calls; \u0060f5827354\u0060 feat(rivetkit-core): trace queue sends and receives \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4302fdac112f00383997190f2f566b399e1b42b8fce6395ca60c213dd8ef621"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: actor_context.rs \u2194 telemetry.ts: \u0060rivetkit-typescript/packages/rivetkit-napi/src/actor_context.rs\u0060 and \u0060rivetkit-typescript/packages/rivetkit/fixtures/driver-test-suite/telemetry.ts\u0060 change together 50% of the time (5 of the 10 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) and are written in DIFFERENT LANGUAGES, so no import can join them and they cannot be co-located into one unit \u2014 they compile and ship as separate artifacts. What binds them is a CONTRACT across that boundary \u2014 an event or message name, a route, a serialised shape \u2014 that each side currently spells out on its own, which is exactly why a change to one drags the other. Declare that contract once where both sides read it (a shared schema, a generated constants file, an interface-definition file) so a change on one side fails the other\u0027s build instead of drifting silently; where the surface is too small to be worth that, name the counterpart in a comment on both sides so the next reader finds it. There is nothing here to merge. You can check this without leaving the row: of the 5 shared commits counted here, the most recent 3 are \u0060982eb970\u0060 feat(rivetkit): add tracing for workflow runs and steps; \u0060b965bf6d\u0060 feat(rivetkit): trace actor to actor calls; \u00605e59eadf\u0060 feat(rivetkit-core): trace scheduled invocations \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit-napi/src/actor_context.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0868daacf0afd66642acc2b6e5f1ab58d6c629ee58731d7c91ae24a611ad9266"}},{"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":"eb00976a698a5d68999b7ee6d27206fd374e916853e7ff1ead5eed42386f043f"}},{"ruleId":"D36","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"90f83b4fa27db32740afe9540c905f3c0499caed87f61049a8a903ecc95b41c3"}},{"ruleId":"D36","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"0752d0df7434000fcabf1048e2de30a7a1a8b982b3db9a19898c4dec199856b4"}},{"ruleId":"D36","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d068c977b62d9a977df1bb6f53e8b00b586c3abee955f91d715f92b8e019d624"}},{"ruleId":"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":"d657599f6f99da1927d3377533dfc0888b34c4d84aa7d5579841fd72d0e39bce"}},{"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":"4f1e7684f8281bd255ddef97105c7055c2ebae06964c8745716b83e174debe83"}},{"ruleId":"D40","level":"note","message":{"text":"No network policy: No Kubernetes NetworkPolicy (or Cilium policy) found. Without one, every pod can talk to every other pod and reach out to the internet by default. Add a default-deny policy and open only the flows you need."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"295828650a2aaa1b03ae9b32ae6843a0c38011e5a70b1926442c4fa7187de5f0"}},{"ruleId":"D41","level":"note","message":{"text":"No seccomp profile: Workloads do not set a seccomp profile (RuntimeDefault or a Localhost profile). Seccomp blocks the syscalls a container never needs, shrinking the kernel attack surface a container escape would use."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"3f418e9f76c3ac90484e0e94a454bfe9b08e914e1cdd218e1fc9e3b261a3bf6e"}},{"ruleId":"D41","level":"note","message":{"text":"No AppArmor/SELinux confinement: Workloads declare no AppArmor or SELinux profile. A mandatory-access-control profile confines what a compromised container can touch on the host, complementing seccomp\u0027s syscall filter."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"e83fbc31033373d6c51983ed230eb4ba61f7775ed02afb30f5fc1840bde01d4f"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CSelect\u003E field component without a label: This UI-library field component is named only by a placeholder \u2014 a placeholder is not a label (it vanishes as soon as the user types, and many assistive technologies ignore it). Give it a real name whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/packages/components/src/auto-form/fields/union.tsx"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8ee351734853b5fa2e6789d173c2f730bb87805ca779c659e3d097bdf459253"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CSelect\u003E field component without a label: This UI-library field component is named only by a placeholder \u2014 a placeholder is not a label (it vanishes as soon as the user types, and many assistive technologies ignore it). Give it a real name whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/packages/components/src/datepicker.tsx"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ec1c006c37c4d29b5fecf64e952e76ffabb1f0aaf491637552bc184e31a1b69"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CSelect\u003E field component without a label: This UI-library field component is named only by a placeholder \u2014 a placeholder is not a label (it vanishes as soon as the user types, and many assistive technologies ignore it). Give it a real name whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/packages/components/src/datepicker.tsx"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8db2418102f3c41499682bf703f7fe629c2755afac3518095dda76a635df389"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CCombobox\u003E field component without a label: This UI-library field component is named only by a placeholder \u2014 a placeholder is not a label (it vanishes as soon as the user types, and many assistive technologies ignore it). Give it a real name whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/app/dialogs/edit-runner-config.tsx"},"region":{"startLine":822}}}],"partialFingerprints":{"codehealthFindingId/v1":"806b215e018938e664508e21057fcf43daadc549a848e5b27bd569a2fb4227fe"}},{"ruleId":"AC2","level":"error","message":{"text":"\u003Ctextarea\u003E without a programmatic label: This control has only a placeholder \u2014 a placeholder is not a label (it vanishes on input and many AT ignore it). Add a \u003Clabel htmlFor\u003E, a wrapping \u003Clabel\u003E, or aria-label."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/app/feedback-button.tsx"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe2aca7fb5bdcb2ca6c0783e2a8a3237d11bfa2ca50362b5b568002109adc84c"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CSlider\u003E field component without a label: This UI-library field component has no label / aria-label / aria-labelledby / id / name \u2014 and neither does anything it renders \u2014 so it likely renders an unlabelled control. Name it whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/app/forms/upsert-deployment-form.tsx"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ec3e0c6bf5e9cd23ffc19bdc58c44669cc285e190cd974f99752d66a9755814"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CSelect\u003E field component without a label: This UI-library field component has no label / aria-label / aria-labelledby / id / name, and nothing it renders carries one either. The text inside it does not stand in for one: these compound APIs render a trigger with role=\u0022combobox\u0022 (or role=\u0022button\u0022), and those roles take their name from the AUTHOR, not from their content \u2014 so the words on screen never reach the accessibility tree as a name. Name it whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/app/help-button.tsx"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"29148c0639ad36242e0465daee7a358be52a0846f71c748a8968c87186572d1b"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CSelect\u003E field component without a label: This UI-library field component has no label / aria-label / aria-labelledby / id / name, and nothing it renders carries one either. The text inside it does not stand in for one: these compound APIs render a trigger with role=\u0022combobox\u0022 (or role=\u0022button\u0022), and those roles take their name from the AUTHOR, not from their content \u2014 so the words on screen never reach the accessibility tree as a name. Name it whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/app/metrics/metrics-time-range-select.tsx"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"10545959b29b92d0023023c6ce8831d7b5b41f244f93eb194e51599df0be3b3c"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CCombobox\u003E field component without a label: This UI-library field component is named only by a placeholder \u2014 a placeholder is not a label (it vanishes as soon as the user types, and many assistive technologies ignore it). Give it a real name whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/app/metrics/namespace-filter-combobox.tsx"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"68a7d067fc75ad8afa2cc94800bbe2458696218fed4d4242526a79b636bb2c82"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CSelect\u003E field component without a label: This UI-library field component has no label / aria-label / aria-labelledby / id / name, and nothing it renders carries one either. The text inside it does not stand in for one: these compound APIs render a trigger with role=\u0022combobox\u0022 (or role=\u0022button\u0022), and those roles take their name from the AUTHOR, not from their content \u2014 so the words on screen never reach the accessibility tree as a name. Name it whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/app/settings-pages/mcp-connection.tsx"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"664fc058b995b1a4dfc83ee7618fdfee77ee6aaffcf6c67ccf6c13e002bc8b74"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CTextarea\u003E field component without a label: This UI-library field component has no label / aria-label / aria-labelledby / id / name \u2014 and neither does anything it renders \u2014 so it likely renders an unlabelled control. Name it whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/components/actors/actor-database.tsx"},"region":{"startLine":693}}}],"partialFingerprints":{"codehealthFindingId/v1":"465e47cb29853c63aad15bb1ca11cb5342c9c6e66d71f5f624c0222428843364"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CSelect\u003E field component without a label: This UI-library field component is named only by a placeholder \u2014 a placeholder is not a label (it vanishes as soon as the user types, and many assistive technologies ignore it). Give it a real name whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/components/actors/actor-database.tsx"},"region":{"startLine":837}}}],"partialFingerprints":{"codehealthFindingId/v1":"d39836c756b978aeb2c69439a2157577a41d52b7514d8dc7ce3d0c9bff6869f0"}},{"ruleId":"AC2","level":"error","message":{"text":"\u003Cinput\u003E without a programmatic label: This control has only a placeholder \u2014 a placeholder is not a label (it vanishes on input and many AT ignore it). Add a \u003Clabel htmlFor\u003E, a wrapping \u003Clabel\u003E, or aria-label."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/components/actors/actor-logs-tab.tsx"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"47657d14d8c635d054a70be04db258ce91133e83d37d9c813863b39f2f4a8c59"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CSelect\u003E field component without a label: This UI-library field component is named only by a placeholder \u2014 a placeholder is not a label (it vanishes as soon as the user types, and many assistive technologies ignore it). Give it a real name whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/components/actors/actor-traces.tsx"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff2be799648fe38aa3058abbf2a1a65233f14a83660b9fddf65553835b6e9236"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CCombobox\u003E field component without a label: This UI-library field component is named only by a placeholder \u2014 a placeholder is not a label (it vanishes as soon as the user types, and many assistive technologies ignore it). Give it a real name whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/components/actors/all-runner-select.tsx"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3b87d79cc98b828d92eb1122b4ff2ac9ccd18dd9d89e93b2d31c1df52612728"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CCombobox\u003E field component without a label: This UI-library field component is named only by a placeholder \u2014 a placeholder is not a label (it vanishes as soon as the user types, and many assistive technologies ignore it). Give it a real name whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/components/actors/build-select.tsx"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"44cb240cb31c47f4431e3fd3850db2fd94d2b9cb310e22f48495d4aef0248e4a"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CCombobox\u003E field component without a label: This UI-library field component is named only by a placeholder \u2014 a placeholder is not a label (it vanishes as soon as the user types, and many assistive technologies ignore it). Give it a real name whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/components/actors/form/build-tags-form.tsx"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"1cece4b5f1096a7e717f64db44479cf418e89abea39c36a8097bb3eca2def601"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CCombobox\u003E field component without a label: This UI-library field component is named only by a placeholder \u2014 a placeholder is not a label (it vanishes as soon as the user types, and many assistive technologies ignore it). Give it a real name whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/components/actors/form/build-tags-form.tsx"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ccae6caeef63e54d88c42c9821c852df2151e005065df6a73e83e848ab2e7d9"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CCombobox\u003E field component without a label: This UI-library field component is named only by a placeholder \u2014 a placeholder is not a label (it vanishes as soon as the user types, and many assistive technologies ignore it). Give it a real name whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/components/actors/runner-select.tsx"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9d22cdcee25d3d02e8e3cb3de65d8fb758d3f467cc50cf71ef36b33e99a8388"}},{"ruleId":"AC2","level":"error","message":{"text":"\u003Cbutton\u003E with no accessible text: A button with no text and no aria-label has no accessible name. Add visible text or an aria-label (an icon-only button still needs one)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/components/actors/workflow/workflow-visualizer.tsx"},"region":{"startLine":277}}}],"partialFingerprints":{"codehealthFindingId/v1":"913f98a3071f8d89b06a272ec12a7806f85b1d678167167dc22d5df3cbf029d2"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CSelect\u003E field component without a label: This UI-library field component is named only by a placeholder \u2014 a placeholder is not a label (it vanishes as soon as the user types, and many assistive technologies ignore it). Give it a real name whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/components/datepicker.tsx"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0d138ba48c2213dc8594162e50cb0577bd2e71a64a5416f4a18a3e7a86e7816"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CSelect\u003E field component without a label: This UI-library field component is named only by a placeholder \u2014 a placeholder is not a label (it vanishes as soon as the user types, and many assistive technologies ignore it). Give it a real name whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/components/datepicker.tsx"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"930320444fcdb67c30284f95b10ded68deaf4e679a3395161bf5401423427cb2"}},{"ruleId":"AC2","level":"error","message":{"text":"\u003Cinput\u003E without a programmatic label: This control has no associated label. Add a \u003Clabel htmlFor\u003E / wrapping \u003Clabel\u003E / aria-label / aria-labelledby so assistive tech can name it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/components/ui/filters.tsx"},"region":{"startLine":421}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef29d1ed0c0aadd00a1ef1e04ad5ad579a7dc3cec802e4197e0b53b5b7e5114b"}},{"ruleId":"AC2","level":"error","message":{"text":"\u003Cinput\u003E without a programmatic label: This control has only a placeholder \u2014 a placeholder is not a label (it vanishes on input and many AT ignore it). Add a \u003Clabel htmlFor\u003E, a wrapping \u003Clabel\u003E, or aria-label."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/routes/_context/orgs.$organization/projects.$project/ns.$namespace/logs.tsx"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f1595d651d2d06a3198d25c3ea9d00b201c7fbc9b5eab684a2a5306836b10df"}},{"ruleId":"AC2","level":"error","message":{"text":"\u003Cinput\u003E without a programmatic label: This control has only a placeholder \u2014 a placeholder is not a label (it vanishes on input and many AT ignore it). Add a \u003Clabel for\u003E, a wrapping \u003Clabel\u003E, or aria-label."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/debug/diff-viewer/server.js"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d0046c963885c58484da401399079a23871ce83fd145335660b9de48f0b398d"}},{"ruleId":"AC3","level":"error","message":{"text":"\u003Chtml\u003E without a lang: The page declares no language, so assistive tech can\u0027t pick the right pronunciation. Add lang (e.g. lang=\u0022en\u0022)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/inspector_bundle/wasm-custom-tab-unavailable.html"},"region":{"startLine":2}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb19effef3c98c0ab66a74a44a137b48d84d8ac44305a45c93701e764fb9a777"}},{"ruleId":"AC3","level":"error","message":{"text":"\u003Chtml\u003E without a lang: The page declares no language, so assistive tech can\u0027t pick the right pronunciation. Add lang (e.g. lang=\u0022en\u0022)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/debug/diff-viewer/server.js"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bdf077eda4eb6764946ab9f994d4b49629ac6d34ba64d18f58a8f12821f566d"}},{"ruleId":"AC3","level":"warning","message":{"text":"Page without a main landmark: No \u003Cmain\u003E (or role=\u0022main\u0022) means no \u0022skip to content\u0022 target and a weaker landmark map. Wrap the primary content in \u003Cmain\u003E."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/debug/diff-viewer/server.js"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"391222a994cac52f605fc67f1404b30b250e4701ba195f20495de54c43cfb741"}},{"ruleId":"AC7","level":"warning","message":{"text":"Accessibility enforcement below the top rung: No accessibility enforcement found \u2014 your Biome config enables no a11y rules and there\u0027s no axe/pa11y/Lighthouse in tests or CI. Start by turning on Biome\u0027s own a11y rule group to catch issues at author time. What was searched, so you can tell an absence from a miss: the 471 markup file(s) this pass actually assessed, the linter configuration checked in beside them, and this repository\u0027s test and CI files \u2014 matched by name against the accessibility checkers this dimension carries. An audit run outside the repository, a hosted scanner, or a check whose name is not one of those, is not seen here."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d46019b86eff5ddad9db289e6802ac158899e980df54c34f67722442787ead62"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivetkit-swift~RivetKitSwiftUI \u2192 rivetkit-swift~RivetKitClient: \u0060Actor\u0060 (slice \u0027rivetkit-swift~RivetKitSwiftUI\u0027) depends on \u0060AnyEncodable\u0060 from slice \u0027rivetkit-swift~RivetKitClient\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-swift/Sources/RivetKitSwiftUI/Actor.swift"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"997aa0cb4add78a1a4f0c11257374dff63c2be55d7a191d16ea60db0fdce76e2"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivetkit-swift~RivetKitSwiftUI \u2192 rivetkit-swift~RivetKitClient: \u0060ActorOptions\u0060 (slice \u0027rivetkit-swift~RivetKitSwiftUI\u0027) depends on \u0060AnyEncodable\u0060 from slice \u0027rivetkit-swift~RivetKitClient\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-swift/Sources/RivetKitSwiftUI/ActorObservable.swift"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"62ed5b5e75176dcff0d744245591b3ea0d3bf796c608cdfda16941f266fd1b3e"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivetkit-swift~RivetKitSwiftUI \u2192 rivetkit-swift~RivetKitClient: \u0060ActorObservable\u0060 (slice \u0027rivetkit-swift~RivetKitSwiftUI\u0027) depends on \u0060ActorConnStatus\u0060 from slice \u0027rivetkit-swift~RivetKitClient\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-swift/Sources/RivetKitSwiftUI/ActorObservable.swift"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3a755bcb098f298f5a22c06bf6b5d8cfef4c3d676fae2b3acab95a2b5705587"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivetkit-swift~RivetKitSwiftUI \u2192 rivetkit-swift~RivetKitClient: \u0060RivetKitContext\u0060 (slice \u0027rivetkit-swift~RivetKitSwiftUI\u0027) depends on \u0060RivetKitClient\u0060 from slice \u0027rivetkit-swift~RivetKitClient\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-swift/Sources/RivetKitSwiftUI/Environment.swift"},"region":{"startLine":4}}}],"partialFingerprints":{"codehealthFindingId/v1":"f50d44de824c4cfa896d24d83d73bd78684db567c69e2394715749eefa0c915d"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivetkit-swift~examples~hello-world-swiftui~client~HelloWorldApp \u2192 rivetkit-swift~RivetKitSwiftUI: \u0060ContentView\u0060 (slice \u0027rivetkit-swift~examples~hello-world-swiftui~client~HelloWorldApp\u0027) depends on \u0060View\u0060 from slice \u0027rivetkit-swift~RivetKitSwiftUI\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-swift/examples/hello-world-swiftui/client/Sources/HelloWorldApp/ContentView.swift"},"region":{"startLine":4}}}],"partialFingerprints":{"codehealthFindingId/v1":"701415b8520a76e2dabb2db4dbb5eb8e532fd295e8683fdf7ef126fc535aaa30"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivetkit-swift~examples~hello-world-swiftui~client~HelloWorldApp \u2192 rivetkit-swift~RivetKitSwiftUI: \u0060CounterPanel\u0060 (slice \u0027rivetkit-swift~examples~hello-world-swiftui~client~HelloWorldApp\u0027) depends on \u0060View\u0060 from slice \u0027rivetkit-swift~RivetKitSwiftUI\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-swift/examples/hello-world-swiftui/client/Sources/HelloWorldApp/ContentView.swift"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"30d48f26fe1aa01707d7388279441c6b216b37def6818a04773592905f1217d7"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_api_builder \u2192 gasoline: \u0060ApiCtx\u0060 (slice \u0027rivet_api_builder\u0027) depends on \u0060StandaloneCtx\u0060 from slice \u0027gasoline\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-builder/src/context.rs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"e327bbfae1b7913b13d6660f89288b9d4f8c6214ef480328fd5bf6546a32c82c"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_api_builder \u2192 rivet_cache: \u0060ApiError\u0060 (slice \u0027rivet_api_builder\u0027) depends on \u0060Error\u0060 from slice \u0027rivet_cache\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-builder/src/error_response.rs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"aae682e6aa7c8b7a401f04b99420b6466808560f00f3e340b7187b42405635a1"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_api_builder \u2192 universaldb: \u0060ErrorResponse\u0060 (slice \u0027rivet_api_builder\u0027) depends on \u0060Value\u0060 from slice \u0027universaldb\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-builder/src/error_response.rs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b76e0fe75efce1d51424068ad62f0ae078040af96f6c919a59ddc1f417d3273"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_api_builder \u2192 universaldb: \u0060ErrorExt\u0060 (slice \u0027rivet_api_builder\u0027) depends on \u0060Value\u0060 from slice \u0027universaldb\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-builder/src/error_response.rs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc2384590ee301a01f605e5148401091de8611a8f35216d47e535b18c5754fa1"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_api_builder \u2192 rivet_config: \u0060GlobalApiCtx\u0060 (slice \u0027rivet_api_builder\u0027) depends on \u0060Config\u0060 from slice \u0027rivet_config\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-builder/src/global_context.rs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"689279da35b0e3f1ac1eb85010e49c3c8144c1f2c5c12d12b710f00e477dd431"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_api_builder \u2192 rivet_config: \u0060LoggingMiddlewareState\u0060 (slice \u0027rivet_api_builder\u0027) depends on \u0060Config\u0060 from slice \u0027rivet_config\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-builder/src/router.rs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bb7b7ae9a8c9be87ff7941bafcce77168b02935a800513233f4c6f28f6e31fd"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_api_peer \u2192 rivet_cache: \u0060CachePurgeRequest\u0060 (slice \u0027rivet_api_peer\u0027) depends on \u0060RawCacheKey\u0060 from slice \u0027rivet_cache\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-peer/src/internal.rs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f2d53dd5a646055d19837b515af52a9b0e3c7f6ca5a33d8fc2cb63d7aa3134f"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_api_peer \u2192 epoxy: \u0060GetEpoxyStateResponse\u0060 (slice \u0027rivet_api_peer\u0027) depends on \u0060ClusterConfig\u0060 from slice \u0027epoxy\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-peer/src/internal.rs"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"990f976ca6c9d26df5e880e69b58a561ae5544720478d7b5893f6a8759a51857"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_api_peer \u2192 epoxy: \u0060SetEpoxyStateRequest\u0060 (slice \u0027rivet_api_peer\u0027) depends on \u0060ClusterConfig\u0060 from slice \u0027epoxy\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-peer/src/internal.rs"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab3bc3c922e7b483110f901092e99d0a758c254cc07e023e9c93a34f7af9fdbe"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_api_peer \u2192 epoxy: \u0060GetEpoxyReplicaDebugResponse\u0060 (slice \u0027rivet_api_peer\u0027) depends on \u0060ClusterConfig\u0060 from slice \u0027epoxy\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-peer/src/internal.rs"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"928ac9f026e3f9eed2523f1fa18a6fbb8cdde23b8b5d2b33dff0ef472279c221"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_api_peer \u2192 epoxy: \u0060EpoxyReplicaDebugComputed\u0060 (slice \u0027rivet_api_peer\u0027) depends on \u0060ReplicaStatus\u0060 from slice \u0027epoxy\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-peer/src/internal.rs"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba86d0021da58e362450ae490e79c6114bb7eedef81887b2b86497e81096a8f2"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_api_peer \u2192 rivet_cli: \u0060CreateResponse\u0060 (slice \u0027rivet_api_peer\u0027) depends on \u0060Namespace\u0060 from slice \u0027rivet_cli\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-peer/src/namespaces.rs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ed767e00a27f64ab9d021f91e0fcda8574d0975f178da51652edcd77bd88c4a"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_api_public \u2192 rivet_api_builder: \u0060ApiCtx\u0060 (slice \u0027rivet_api_public\u0027) depends on \u0060ApiCtx\u0060 from slice \u0027rivet_api_builder\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-public/src/ctx.rs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a0642620c9d551d9696057ad83f292828f17c032d0284f99abfc2de4900b70d"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_api_public \u2192 rivet_api_types: \u0060ListResponse\u0060 (slice \u0027rivet_api_public\u0027) depends on \u0060Pagination\u0060 from slice \u0027rivet_api_types\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-public/src/runner_configs/list.rs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"1411b9969586696e4f8061fc87b4484df1e3dd523f73f31c42920c5f552777d6"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_api_types \u2192 rivet_types: \u0060CreateRequest\u0060 (slice \u0027rivet_api_types\u0027) depends on \u0060CrashPolicy\u0060 from slice \u0027rivet_types\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-types/src/actors/create.rs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"24f4c6bb58a5d0b2d2039b72068b2b7d1d721cb254a675be37b2a1b205af6ff3"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_api_types \u2192 pegboard: \u0060CreateResponse\u0060 (slice \u0027rivet_api_types\u0027) depends on \u0060Actor\u0060 from slice \u0027pegboard\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-types/src/actors/create.rs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f40e23a5bce52792c229e80b9dd5eed4d3684bdfe68fc09f4e78e30632ecf70"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_api_types \u2192 rivet_types: \u0060GetOrCreateRequest\u0060 (slice \u0027rivet_api_types\u0027) depends on \u0060CrashPolicy\u0060 from slice \u0027rivet_types\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-types/src/actors/get_or_create.rs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"c340682cb5d8f3870e8acd78dadd60efb168834a487c3021d207b727cf4b7c10"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_api_types \u2192 pegboard: \u0060GetOrCreateResponse\u0060 (slice \u0027rivet_api_types\u0027) depends on \u0060Actor\u0060 from slice \u0027pegboard\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-types/src/actors/get_or_create.rs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf011a3d1ea76314ad7a45d56b0d92501b7ca532ec19742ffc24c675df10291d"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_api_types \u2192 pegboard: \u0060ListResponse\u0060 (slice \u0027rivet_api_types\u0027) depends on \u0060Actor\u0060 from slice \u0027pegboard\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-types/src/actors/list.rs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"b02a90971d7a010930ea6581003d2f477ab29bbda7feefbb89de55cf95c8db57"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_api_types \u2192 rivet_api_util: \u0060ListResponse\u0060 (slice \u0027rivet_api_types\u0027) depends on \u0060Datacenter\u0060 from slice \u0027rivet_api_util\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-types/src/datacenters/list.rs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c09e832fe284925ec5219203f540bc4093ffb803f5d8a3ffb3cda0229b3e010"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_api_types \u2192 rivet_types: \u0060ListResponse\u0060 (slice \u0027rivet_api_types\u0027) depends on \u0060Envoy\u0060 from slice \u0027rivet_types\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-types/src/envoys/list.rs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"149c68d34cc59c5a30882ee453f58dd6b0a3b73041e07a32bfdf07b0a3e25d0b"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_api_types \u2192 rivet_cli: \u0060ListResponse\u0060 (slice \u0027rivet_api_types\u0027) depends on \u0060Namespace\u0060 from slice \u0027rivet_cli\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-types/src/namespaces/list.rs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"9712037c96775a5c6f2787db60e18e073466a7921c72270c4caabc8a25ab6943"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_api_types \u2192 universaldb: \u0060RunnerConfig\u0060 (slice \u0027rivet_api_types\u0027) depends on \u0060Value\u0060 from slice \u0027universaldb\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-types/src/namespaces/runner_configs.rs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"0af61e7b288d137767fa19b788a303126c256d302dc9a967992856e537b0e17b"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_api_types \u2192 rivet_types: \u0060ListQuery\u0060 (slice \u0027rivet_api_types\u0027) depends on \u0060RunnerConfigVariant\u0060 from slice \u0027rivet_types\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-types/src/runner_configs/list.rs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ee6c6d7ed9eaed05ec8acc48f6f53505649531ecc267cab793fb2f96bc68883"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_api_types \u2192 rivet_types: \u0060RunnerConfigResponse\u0060 (slice \u0027rivet_api_types\u0027) depends on \u0060RunnerPoolError\u0060 from slice \u0027rivet_types\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-types/src/runner_configs/mod.rs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b0f05dbeb1f346dbdc40578cdc9c6d10bcc8b18206e5bf743d96b417b784ee3"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_api_types \u2192 pegboard: \u0060ListResponse\u0060 (slice \u0027rivet_api_types\u0027) depends on \u0060Runner\u0060 from slice \u0027pegboard\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-types/src/runners/list.rs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"2322a2e311476313b20fbf7d553ea3b442f443d706b7c89e40779b9157699a18"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_api_util \u2192 rivet_cache: \u0060CachePurgeRequest\u0060 (slice \u0027rivet_api_util\u0027) depends on \u0060RawCacheKey\u0060 from slice \u0027rivet_cache\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/api-util/src/lib.rs"},"region":{"startLine":316}}}],"partialFingerprints":{"codehealthFindingId/v1":"201bf89a9b1f60589f0e30e972a0f840b4a17b2a3be649162217a0034148f8bc"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_auth \u2192 rivet_api_types: \u0060CheckInput\u0060 (slice \u0027rivet_auth\u0027) depends on \u0060TargetScope\u0060 from slice \u0027rivet_api_types\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/auth/src/check.rs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"44e8d9c35a61cbd1d1db638ec1b19c42c8537ba60370c6770f6af2c5391cb9dc"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_auth \u2192 rivet_auth_jwt: \u0060JwtCredential\u0060 (slice \u0027rivet_auth\u0027) depends on \u0060VerifiedJwt\u0060 from slice \u0027rivet_auth_jwt\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/auth/src/check.rs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"69949fc80257a020f92827a4437e25f20edfbaaab21ea1fc5328590c8a9a9a44"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_cache \u2192 rivet_config: \u0060CacheInner\u0060 (slice \u0027rivet_cache\u0027) depends on \u0060PubSub\u0060 from slice \u0027rivet_config\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/cache/src/inner.rs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"e58c20280f2d7eb330581d254b5c2c41b6e13350fa8bf84c3af17daf436ded9c"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_cache \u2192 rivet_config: \u0060InFlightLeaseGuard\u0060 (slice \u0027rivet_cache\u0027) depends on \u0060Cache\u0060 from slice \u0027rivet_config\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/cache/src/req_config.rs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f7802e4b64e5c370c2e892a07b8dd87d3112e713b7daba547328e01bbc1f7a0"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_cache \u2192 rivet_config: \u0060RequestConfig\u0060 (slice \u0027rivet_cache\u0027) depends on \u0060Cache\u0060 from slice \u0027rivet_config\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/cache/src/req_config.rs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"387db52990fa096a8d88a7e5ea91da1852608ba062885a16eb2e6c86f95539b2"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_cli \u2192 rivet_api_types: \u0060NamespacesResponse\u0060 (slice \u0027rivet_cli\u0027) depends on \u0060Pagination\u0060 from slice \u0027rivet_api_types\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/cli/src/cloud.rs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"24f951a34a08727905c3c8c3f31236c61fbc7e4f2f4f8dd034c09b0297504ed4"}},{"ruleId":"AX7","level":"warning","message":{"text":"Cross-slice coupling: rivet_cli \u2192 rivet_api_types: \u0060ManagedPoolsListResponse\u0060 (slice \u0027rivet_cli\u0027) depends on \u0060Pagination\u0060 from slice \u0027rivet_api_types\u0027."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/cli/src/cloud.rs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"be17bf59ad94507f81e7eb64035e91757582ada13a11dc9fa5ecb54f886c7704"}},{"ruleId":"AX8","level":"error","message":{"text":"Production project references a test project: gasoline \u2192 rivet-test-deps: \u0060gasoline\u0060 (production) references the test project \u0060rivet-test-deps\u0060. Production must never depend on test code \u2014 it pulls a unit-test framework and test fixtures into the shipped product and inverts the only correct direction (tests depend on production, never the reverse). Move any shared helper into a production support library, or invert the reference."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"86a6c1074ec3597997df2a515a0d1bd8347f54041731ef9c40e0d17f0131a51d"}},{"ruleId":"ED1","level":"error","message":{"text":"Blocking wait inside a handler: GameServer.arm_idle_timeout: \u0060GameServer.arm_idle_timeout\u0060 is an event/message handler that blocks the executor on a synchronous wait (\u0060block_on\u0060/\u0060blocking_recv\u0060/\u0060thread::sleep\u0060/a blocking \u0060recv()\u0060) \u2014 it stalls the handler and serialises throughput, and on an async runtime can starve the reactor. Either move the awaited work off the handler (\u0060tokio::spawn\u0060/\u0060Handle::current().spawn\u0060, if the result isn\u0027t needed inline) or make the handler itself \u0060async\u0060 so it can \u0060.await\u0060."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"container-runner/src/actor.rs"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"7aaea010076cd77db871b3bc8f02836bbdc639a328061735303060083d16a0c1"}},{"ruleId":"M2","level":"note","message":{"text":"ADRs not easily discoverable: 3 ADR-shaped document(s) detected by content \u2014 \u0060docs-internal/engine/sqlite/constraints-and-design-decisions.md\u0060, \u0060docs-internal/rivetkit-typescript/sqlite-ltx/archive/constraints.md\u0060, \u0060docs-internal/rivetkit-typescript/sqlite-ltx/archive/design-decisions.md\u0060. They are not under a conventional ADR folder (docs/adr/) and are not named NNNN-title.md, and this check found them by their decision signature rather than by where they live \u2014 so a reader who does not already know these paths has no route to them. Detected by content signature only: records kept outside the repository, or written without a Status/Decision/Consequences shape, are not visible to this check and are not counted here."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"ea921cf64dae701abd877090b3279ff10d03c2e3250e26c8c299d7c5665e0d3f"}},{"ruleId":"P2","level":"note","message":{"text":"Logging is not universal: Only 59/64 runnable modules use logging (modules with no entry point or server are excluded \u2014 they are libraries a runnable module hosts). Silent: \u0060.\u0060, \u0060.\u0060, \u0060rivetkit-typescript/packages/cli\u0060, \u0060rivetkit-typescript/packages/mcp-hub\u0060, \u0060rivetkit-typescript/packages/supabase\u0060."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"91a94e21d6d4d0e6a2003f94505b0b02b157176f0b24c4820f3f82b4447a97fe"}},{"ruleId":"P5","level":"warning","message":{"text":"No DR/backup evidence: A persistence guard (data volume / purge-protection) was found, but no backup, geo-recovery or RTO/RPO controls were evidenced \u2014 a volume that survives a container recreate is not a tested restore from catastrophic loss."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"5daabb38c90b07af65b8738cf94ce884e90a7d8fef810d341de5c186188c8fe0"}},{"ruleId":"P7","level":"warning","message":{"text":"Outbound HTTP without resilience: \u0060reqwest::Client::new(\u0060 makes an outbound HTTP call, and nothing bounds it: no timeout, deadline, retry or circuit breaker is set for it here, and the client has no process-wide default. A slow or failing dependency will hold this service\u0027s request, thread or connection until the call gives up on its own \u2014 or never, for a client with no default timeout. 5 of the 11 files that make outbound calls are unbounded; the first 5 are listed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"container-runner/src/proxy.rs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ed0999e32b7db9a5c005f7d17afc90ae2d2373d11e51bdc1122a1220d6a1e8a"}},{"ruleId":"P7","level":"warning","message":{"text":"Outbound HTTP without resilience: \u0060reqwest::Client::new(\u0060 makes an outbound HTTP call, and nothing bounds it: no timeout, deadline, retry or circuit breaker is set for it here, and the client has no process-wide default. A slow or failing dependency will hold this service\u0027s request, thread or connection until the call gives up on its own \u2014 or never, for a client with no default timeout."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/cli/src/cloud.rs"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a674d337dbe7cded888956bde8b731d17269687379264ba9b8bf89eb2069931"}},{"ruleId":"P7","level":"warning","message":{"text":"Outbound HTTP without resilience: \u0060hyper_util::client::legacy::Client::builder(\u0060 makes an outbound HTTP call, and nothing bounds it: no timeout, deadline, retry or circuit breaker is set for it here, and the client has no process-wide default. A slow or failing dependency will hold this service\u0027s request, thread or connection until the call gives up on its own \u2014 or never, for a client with no default timeout."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/pools/src/db/clickhouse.rs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"3209f5d0f9b312092df9167d5c49d9500da4cf99e973b8e2b3f98c43f35f7e58"}},{"ruleId":"P7","level":"warning","message":{"text":"Outbound HTTP without resilience: \u0060reqwest::Client::new(\u0060 makes an outbound HTTP call, and nothing bounds it: no timeout, deadline, retry or circuit breaker is set for it here, and the client has no process-wide default. A slow or failing dependency will hold this service\u0027s request, thread or connection until the call gives up on its own \u2014 or never, for a client with no default timeout."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/client/src/remote_manager.rs"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"81200612f03c3c6b5ad4a663081b57d89a8cc01bfc3433e21633940d0988328f"}},{"ruleId":"P7","level":"warning","message":{"text":"Outbound HTTP without resilience: \u0060fetch(\u0060 makes an outbound HTTP call, and nothing bounds it: no timeout, deadline, retry or circuit breaker is set for it here, and the client has no process-wide default. A slow or failing dependency will hold this service\u0027s request, thread or connection until the call gives up on its own \u2014 or never, for a client with no default timeout."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/mcp-hub/src/index.ts"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e1c000d2580cd7d97ff06cb7fa364146e18ce119d89ddb4083aff01e80bf7e4"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060startLocalKitchenSinkServer\u0060 is async and calls mkdtempSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/kitchen-sink/scripts/mock-agentic-loop.ts"},"region":{"startLine":512}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5e4db2e92cb63340ffe9d6b229907c413fe13fe67b9bd745fc9233816df7c63"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060stopLocalKitchenSinkServer\u0060 is async and calls rmSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/kitchen-sink/scripts/mock-agentic-loop.ts"},"region":{"startLine":573}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ca85fdfe2cc2c316d8c96e90ddd35a7b83bab989391ea7081dd4fa15f708680"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060startLocalEngine\u0060 is async and calls mkdtempSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/kitchen-sink/scripts/sqlite-cold-start-bench.ts"},"region":{"startLine":565}}}],"partialFingerprints":{"codehealthFindingId/v1":"028d0ab02b9a6bb2c0ca0f475f5f3787e653432c3e77c25d0f8be36b323a5a4f"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060stopLocalEngine\u0060 is async and calls rmSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/kitchen-sink/scripts/sqlite-cold-start-bench.ts"},"region":{"startLine":598}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4f4e3f8ad04fffe21bc5b5bcd23649147bc9340cfa8f311170ea52379ddc290"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060startEngine\u0060 is async and calls mkdtempSync, writeFileSync, rmSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/kitchen-sink/scripts/sqlite-memory-soak.ts"},"region":{"startLine":582}}}],"partialFingerprints":{"codehealthFindingId/v1":"494d362309949093a932df76878627aa351c148a5daaacb7cf52ec35d2085770"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060stopChild\u0060 is async and calls appendFileSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/kitchen-sink/scripts/sqlite-memory-soak.ts"},"region":{"startLine":824}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4957668f3f4dc58c009e5b54137b0a6078c1aaadcbfdc32a50335f1e3af9f09"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060stopEngine\u0060 is async and calls rmSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/kitchen-sink/scripts/sqlite-memory-soak.ts"},"region":{"startLine":848}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e252cfd1d4d6926fa623ba64238b40ca113b884bfc5fe5dbd5ad77178172687"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060main\u0060 is async and calls mkdirSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/kitchen-sink/scripts/sqlite-memory-soak.ts"},"region":{"startLine":1894}}}],"partialFingerprints":{"codehealthFindingId/v1":"b84facb1a582417a2e072b6580af3e8ceef6e255a279295ed8d5d660610930e5"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060startLocalEngine\u0060 is async and calls mkdtempSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/kitchen-sink/scripts/sqlite-realworld-bench.ts"},"region":{"startLine":989}}}],"partialFingerprints":{"codehealthFindingId/v1":"edc4840021a8b971dc422f9cf572dc88cf62ca909f6b725e679ce1901f8dd2c8"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060stopLocalEngine\u0060 is async and calls rmSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/kitchen-sink/scripts/sqlite-realworld-bench.ts"},"region":{"startLine":1050}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ad7ebc4561e494aa6da5efa129c992998c578cc3d3107e20fc4b94c7312a8a3"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060runMatrix\u0060 is async and calls mkdirSync, writeFileSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/kitchen-sink/scripts/sqlite-realworld-bench.ts"},"region":{"startLine":1513}}}],"partialFingerprints":{"codehealthFindingId/v1":"619c2598b896e6542e7b775d62fc4bfe1b6fa0bcb55035be0c4e9d8bb23603e9"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060main\u0060 is async and calls mkdirSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/kitchen-sink/scripts/sqlite-realworld-bench.ts"},"region":{"startLine":1562}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad42a15c1927ecc834c6bea97562f98e05fee42d917c28b0c4546e1c10cd0c7e"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060registerLegacyCustomKit\u0060 is async and calls existsSync, readFileSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/packages/icons/scripts/generate-manifest.js"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9420339786ee32d3d01aa74a478c3ea9e0eef8d8a51b1ec7e8b8bc84c3dfac7"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060main\u0060 is async and calls writeFileSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/packages/icons/scripts/generate-manifest.js"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"269438bfb099196e681125f3c374f6099585c303645c2ed15237fe1b235daf27"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060bundleWithEsbuild\u0060 is async and calls existsSync, rmSync, mkdirSync, writeFileSync, renameSync, statSync, readdirSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/packages/icons/scripts/vendor-icons.js"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd69fe3a945e8c9e3ee014f2fb54156f20e31d8217bdcc2724532d5301c1dcc8"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060startEngine\u0060 is async and calls mkdtempSync, mkdirSync, writeFileSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"integrations/workflow-world/scripts/conformance/run.ts"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"90a1d70524074ef65c7385aa0557f59c01eff39bf2bf3ea9f029555d4ccaae58"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060run\u0060 is async and calls rmSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"integrations/workflow-world/scripts/conformance/run.ts"},"region":{"startLine":254}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7d3ba729164b8eb812b1bcc6fc667f8b3c77b84749a18ca38c61f003a9cf984"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060startEngine\u0060 is async and calls mkdtempSync, mkdirSync, writeFileSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"integrations/workflow-world/scripts/integration/run.ts"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"943a33a1369b86342fb1c1c80d7725158e43e5ab08af2f2258568227c03d88a9"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060run\u0060 is async and calls rmSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"integrations/workflow-world/scripts/integration/run.ts"},"region":{"startLine":858}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1555e3a65a6c31217411653ee76bee092bfbb09b22d781e4b3bfc46ee9572f0"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060acquireEngineStartLock\u0060 is async and calls mkdirSync, rmSync, statSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/tests/shared-engine.ts"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"874acb80bfbbace39242df18eff692811cbfc4d7b243aa78af09375258a06614"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060spawnSharedEngine\u0060 is async and calls mkdtempSync, writeFileSync, rmSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/tests/shared-engine.ts"},"region":{"startLine":259}}}],"partialFingerprints":{"codehealthFindingId/v1":"298120867d011d4bb1eed33ea5e79340d87fb3ebdeecfae18876eaee3cb14b7d"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060getOrStartSharedTestEngine\u0060 is async and calls rmSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/tests/shared-engine.ts"},"region":{"startLine":375}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd5267bdd80f0a87402a7bdbbf79f147e5f616f8e12133d5a23e5523b4128992"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060releaseSharedTestEngine\u0060 is async and calls rmSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/tests/shared-engine.ts"},"region":{"startLine":437}}}],"partialFingerprints":{"codehealthFindingId/v1":"18e26b38c40750276444652b79d37d9059b0ed3cf3699501b53412006168a36f"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060cleanup\u0060 is async and calls rmSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/tests/driver/engine-restart-serverless.ts"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"85a46ec32199b738d8a1582186f4c04a245050db8390ae759710f8e45147c192"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060load\u0060 is async and calls readFileSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/sql-loader/src/hook.ts"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"119ab0f945b7661c0c07410d3f73de21e079eca67961bf167667b6fdb510ff49"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060filesFromHookInput\u0060 is async and calls readFileSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/format/agent-format.mjs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8e5ee173fc75adf6dc46d6d6563b8dba692b58e958047d49f9e88850c85a384"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplication concentrated across 4 sibling directories (14 clone groups): 14 duplicated blocks under the repository root have copies in at least two of the sibling directories engine, rivetkit-typescript, scripts, shared \u2014 12 of them are reported below, and 2 are counted here but not reported individually: those copies match on shape but no longer clear R10\u0027s bar for an individually reported row \u2014 either they kept neither their own names nor their values, or what was copied is too small to stand on its own (it reports near-exact duplication only, and only of substantial extent). What this row states is the concentration, which the detector measured over all 14 and which does not depend on how exactly each block\u0027s copies still match. That concentration is one structural fact, not 14 local ones: the siblings replicate behaviour none of them owns, which is the shape of a missing shared module \u2014 a common library every sibling imports \u2014 rather than 14 separate extractions. Check first whether the siblings are deliberately standalone deliverables (scaffold templates, demo apps that must stay copy-pasteable); where they are, the duplication is the design and the per-block rows are the ones to act on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/typescript/runner/src/mod.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"36ee8ca3a19a9a696be86e04ddc9a3c2f7c49d4811bbde5c7940d07974dd0678"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplication concentrated across 8 sibling directories (14 clone groups): 14 duplicated blocks under rivetkit-typescript/packages/ have copies in at least two of the sibling directories cli, cloudflare-workers, effect, engine-cli, rivetkit, supabase (\u002B2 more sibling(s) not listed) \u2014 11 of them are reported below, and 3 are counted here but not reported individually: those copies match on shape but no longer clear R10\u0027s bar for an individually reported row \u2014 either they kept neither their own names nor their values, or what was copied is too small to stand on its own (it reports near-exact duplication only, and only of substantial extent). What this row states is the concentration, which the detector measured over all 14 and which does not depend on how exactly each block\u0027s copies still match. That concentration is one structural fact, not 14 local ones: the siblings replicate behaviour none of them owns, which is the shape of a missing shared module \u2014 a common library every sibling imports \u2014 rather than 14 separate extractions. Check first whether the siblings are deliberately standalone deliverables (scaffold templates, demo apps that must stay copy-pasteable); where they are, the duplication is the design and the per-block rows are the ones to act on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/traces/scripts/compile-bare.ts"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0fcb37844c8166397b2b119dcd3d3e14c5f5056730c153fd302f7fafca65f9e"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplication concentrated across 9 sibling directories (12 clone groups): 12 duplicated blocks under rivetkit-typescript/packages/rivetkit/src/ have copies in at least two of the sibling directories actor, client, common, db, engine-client, inspector (\u002B3 more sibling(s) not listed) \u2014 7 of them are reported below, and 5 are counted here but not reported individually: those copies match on shape but no longer clear R10\u0027s bar for an individually reported row \u2014 either they kept neither their own names nor their values, or what was copied is too small to stand on its own (it reports near-exact duplication only, and only of substantial extent). What this row states is the concentration, which the detector measured over all 12 and which does not depend on how exactly each block\u0027s copies still match. That concentration is one structural fact, not 12 local ones: the siblings replicate behaviour none of them owns, which is the shape of a missing shared module \u2014 a common library every sibling imports \u2014 rather than 12 separate extractions. Check first whether the siblings are deliberately standalone deliverables (scaffold templates, demo apps that must stay copy-pasteable); where they are, the duplication is the design and the per-block rows are the ones to act on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/database/native-database.ts"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1252d051e80b8f93cab31224805f69f43789c5ff558104d3a8283f4c82a0d9a"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplication concentrated across 4 sibling directories (5 clone groups): 5 duplicated blocks under scripts/api/ have copies in at least two of the sibling directories actors, gateway, runner-configs, runners \u2014 4 of them are reported below, and 1 is counted here but not reported individually: those copies match on shape but no longer clear R10\u0027s bar for an individually reported row \u2014 either they kept neither their own names nor their values, or what was copied is too small to stand on its own (it reports near-exact duplication only, and only of substantial extent). What this row states is the concentration, which the detector measured over all 5 and which does not depend on how exactly each block\u0027s copies still match. That concentration is one structural fact, not 5 local ones: the siblings replicate behaviour none of them owns, which is the shape of a missing shared module \u2014 a common library every sibling imports \u2014 rather than 5 separate extractions. Check first whether the siblings are deliberately standalone deliverables (scaffold templates, demo apps that must stay copy-pasteable); where they are, the duplication is the design and the per-block rows are the ones to act on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/api/runner-configs/list.ts"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c7940663ae52dcddfa53a012e7859078ef02905b9e6bc00353615fefc74f0e9"}},{"ruleId":"R10","level":"warning","message":{"text":"Wholesale file copy (1074 identical lines \u00D7 2 files): engine/sdks/typescript/runner/src/mod.ts:1 \u00B7 rivetkit-typescript/packages/engine-runner/src/mod.ts:1 \u2014 these 2 files are line-for-line copies of one another \u2014 1074 lines are identical, in the same order, in every one of them \u2014 so this is one fact about the file set, not a block to extract. An edit made to one file and not the others changes behaviour silently, which is the failure a wholesale copy guarantees. Pick one file as the single source and derive the others from it (re-export it, spread it into the local overrides each variant genuinely needs, or generate the copies at build time) \u2014 the few lines that differ between the files are exactly the part each variant should still own. Check first whether the copies are deliberately standalone deliverables (a translation file seeded from its sibling and waiting to be translated); where they are, the duplication is the design, and the honest move is to mark the seeded file as untranslated rather than to let it pass as done."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/typescript/runner/src/mod.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"135c45c7adf9f7b87c3436024291ef67faf05f2c3b6b1a051afa83c4dd8aea5e"}},{"ruleId":"R10","level":"warning","message":{"text":"Wholesale file copy (607 identical lines \u00D7 2 files): engine/sdks/typescript/runner/src/tunnel.ts:1 \u00B7 rivetkit-typescript/packages/engine-runner/src/tunnel.ts:1 \u2014 these 2 files are line-for-line copies of one another \u2014 607 lines are identical, in the same order, in every one of them \u2014 so this is one fact about the file set, not a block to extract. An edit made to one file and not the others changes behaviour silently, which is the failure a wholesale copy guarantees. Pick one file as the single source and derive the others from it (re-export it, spread it into the local overrides each variant genuinely needs, or generate the copies at build time) \u2014 the few lines that differ between the files are exactly the part each variant should still own. Check first whether the copies are deliberately standalone deliverables (a translation file seeded from its sibling and waiting to be translated); where they are, the duplication is the design, and the honest move is to mark the seeded file as untranslated rather than to let it pass as done."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/typescript/runner/src/tunnel.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f641bf3f69afb7081d2d21a0ec4a7796bb996fb7790ad10e9f20e88f29967ba0"}},{"ruleId":"R10","level":"warning","message":{"text":"Wholesale file copy (216 identical lines \u00D7 2 files): engine/sdks/typescript/runner/src/stringify.ts:1 \u00B7 rivetkit-typescript/packages/engine-runner/src/stringify.ts:1 \u2014 these 2 files are line-for-line copies of one another \u2014 216 lines are identical, in the same order, in every one of them \u2014 so this is one fact about the file set, not a block to extract. An edit made to one file and not the others changes behaviour silently, which is the failure a wholesale copy guarantees. Pick one file as the single source and derive the others from it (re-export it, spread it into the local overrides each variant genuinely needs, or generate the copies at build time) \u2014 the few lines that differ between the files are exactly the part each variant should still own. Check first whether the copies are deliberately standalone deliverables (a translation file seeded from its sibling and waiting to be translated); where they are, the duplication is the design, and the honest move is to mark the seeded file as untranslated rather than to let it pass as done."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/typescript/runner/src/stringify.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"910de57724e69334ea76680c23f7b320fa622eaaaad075126c10ecdcddc6d0da"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (195 matched lines \u00D7 2 locations): rivetkit-typescript/packages/rivetkit/src/common/bare/actor-persist/v1.ts:4 \u00B7 rivetkit-typescript/packages/rivetkit/src/common/bare/actor-persist/v2.ts:4 \u2014 the two spans are one implementation copied and then locally edited \u2014 1125 tokens are still identical, in the same order in both files, with only local edits between them. The copies have already begun to drift, which is this row\u0027s finding: an edit made to one and not the other changes behaviour silently. Diff the two spans first to learn what genuinely differs, then extract the shared core into one module both sites use, passing the differences in as parameters \u2014 or, if one copy exists only because the other could not be imported from its context, make one of them the single source the other is generated or re-exported from. If one copy is no longer reachable, delete it rather than letting it shadow the live one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/bare/actor-persist/v1.ts"},"region":{"startLine":4}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb98be095dfa31ea0bfd50e61438be57e5b433bcf03902eef90b1f291176167d"}},{"ruleId":"R10","level":"warning","message":{"text":"Wholesale file copy (166 identical lines \u00D7 2 files): engine/sdks/typescript/runner/src/websocket-tunnel-adapter.ts:2 \u00B7 rivetkit-typescript/packages/engine-runner/src/websocket-tunnel-adapter.ts:2 \u2014 these 2 files are line-for-line copies of one another \u2014 166 lines are identical, in the same order, in every one of them \u2014 so this is one fact about the file set, not a block to extract. An edit made to one file and not the others changes behaviour silently, which is the failure a wholesale copy guarantees. Pick one file as the single source and derive the others from it (re-export it, spread it into the local overrides each variant genuinely needs, or generate the copies at build time) \u2014 the few lines that differ between the files are exactly the part each variant should still own. Check first whether the copies are deliberately standalone deliverables (a translation file seeded from its sibling and waiting to be translated); where they are, the duplication is the design, and the honest move is to mark the seeded file as untranslated rather than to let it pass as done."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/typescript/runner/src/websocket-tunnel-adapter.ts"},"region":{"startLine":2}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf6cc1b4f2ae7cce742562139911e2a06c81aadf6acbbf176dda36d8bbd2c00b"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (157 lines \u00D7 2 locations): integrations/workflow-world/scripts/conformance/run.ts:56 \u00B7 integrations/workflow-world/scripts/integration/run.ts:76 \u2014 the 2 copies are spread across 2 files, and the CITED SPAN is not a self-contained block \u2014 it runs from inside one construct into the next (the tail of a branch plus the head of the following one, a run of switch arms, the end of a declaration plus the list that follows it) rather than covering a whole unit. So do not lift these lines literally: no call can be substituted for a half-open construct. Extract the enclosing repeated UNIT instead \u2014 the whole function, component or branch these lines sit in \u2014 and where the repetition IS the construct (a run of switch arms, a stack of near-identical declarations) replace it with one table or registry looked up by key rather than a helper each arm calls. The copies still drift apart the first time only one of them is edited, which is why this is reported."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"integrations/workflow-world/scripts/conformance/run.ts"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"8382d5441584e09ccae1bd6ecc515e03590e3108c866261fc072d8eeea87e677"}},{"ruleId":"R10","level":"warning","message":{"text":"Wholesale file copy (141 identical lines \u00D7 2 files): engine/sdks/typescript/runner/src/actor.ts:1 \u00B7 rivetkit-typescript/packages/engine-runner/src/actor.ts:1 \u2014 these 2 files are line-for-line copies of one another \u2014 141 lines are identical, in the same order, in every one of them \u2014 so this is one fact about the file set, not a block to extract. An edit made to one file and not the others changes behaviour silently, which is the failure a wholesale copy guarantees. Pick one file as the single source and derive the others from it (re-export it, spread it into the local overrides each variant genuinely needs, or generate the copies at build time) \u2014 the few lines that differ between the files are exactly the part each variant should still own. Check first whether the copies are deliberately standalone deliverables (a translation file seeded from its sibling and waiting to be translated); where they are, the duplication is the design, and the honest move is to mark the seeded file as untranslated rather than to let it pass as done."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/typescript/runner/src/actor.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"395d043a98329967ed9aa8b6ec39ba0eb463c4e44a377e9c8367855d85cf1d44"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (115 matched lines \u00D7 2 locations): rivetkit-typescript/packages/workflow-engine/src/context.ts:2004 \u00B7 rivetkit-typescript/packages/workflow-engine/src/context.ts:2216 \u2014 the two spans are one implementation copied and then locally edited \u2014 546 tokens are still identical, in the same order in both spans, with only local edits between them. The copies have already begun to drift, which is this row\u0027s finding: an edit made to one and not the other changes behaviour silently. Diff the two spans first to learn what genuinely differs, then extract the shared core into one module both sites use, passing the differences in as parameters \u2014 or, if one copy exists only because the other could not be imported from its context, make one of them the single source the other is generated or re-exported from. If one copy is no longer reachable, delete it rather than letting it shadow the live one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/workflow-engine/src/context.ts"},"region":{"startLine":2004}}}],"partialFingerprints":{"codehealthFindingId/v1":"75638210a899364ea102db9cef4de02a872410dd197a433cd929b7811003df45"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (106 matched lines \u00D7 2 locations): rivetkit-typescript/packages/rivetkit/src/common/bare/actor-persist/v2.ts:93 \u00B7 rivetkit-typescript/packages/rivetkit/src/common/bare/transport/v1.ts:498 \u2014 the two spans are one implementation copied and then locally edited \u2014 528 tokens are still identical, in the same order in both files, with only local edits between them. The copies have already begun to drift, which is this row\u0027s finding: an edit made to one and not the other changes behaviour silently. Diff the two spans first to learn what genuinely differs, then extract the shared core into one module both sites use, passing the differences in as parameters \u2014 or, if one copy exists only because the other could not be imported from its context, make one of them the single source the other is generated or re-exported from. If one copy is no longer reachable, delete it rather than letting it shadow the live one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/bare/actor-persist/v2.ts"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"48a2852b2e6aca0fa19d2128d149fc9a0e1d7e992929a137e4e86c0ad656133b"}},{"ruleId":"R10","level":"warning","message":{"text":"Wholesale file copy (86 identical lines \u00D7 2 files): engine/sdks/typescript/runner/src/utils.ts:1 \u00B7 rivetkit-typescript/packages/engine-runner/src/utils.ts:1 \u2014 these 2 files are line-for-line copies of one another \u2014 86 lines are identical, in the same order, in every one of them \u2014 so this is one fact about the file set, not a block to extract. An edit made to one file and not the others changes behaviour silently, which is the failure a wholesale copy guarantees. Pick one file as the single source and derive the others from it (re-export it, spread it into the local overrides each variant genuinely needs, or generate the copies at build time) \u2014 the few lines that differ between the files are exactly the part each variant should still own. Check first whether the copies are deliberately standalone deliverables (a translation file seeded from its sibling and waiting to be translated); where they are, the duplication is the design, and the honest move is to mark the seeded file as untranslated rather than to let it pass as done."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/typescript/runner/src/utils.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c97c91317b370b164f1a817a71ebb3121dec1f9a3d320198aa61e863245e303"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (81 matched lines \u00D7 2 locations): rivetkit-typescript/packages/rivetkit/src/registry/runtime.ts:533 \u00B7 rivetkit-typescript/packages/rivetkit/src/registry/wasm-runtime.ts:382 \u2014 the two spans are one implementation copied and then locally edited \u2014 465 tokens are still identical, in the same order in both files, with only local edits between them. The copies have already begun to drift, which is this row\u0027s finding: an edit made to one and not the other changes behaviour silently. Diff the two spans first to learn what genuinely differs, then extract the shared core into one module both sites use, passing the differences in as parameters \u2014 or, if one copy exists only because the other could not be imported from its context, make one of them the single source the other is generated or re-exported from. If one copy is no longer reachable, delete it rather than letting it shadow the live one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/registry/runtime.ts"},"region":{"startLine":533}}}],"partialFingerprints":{"codehealthFindingId/v1":"bde4e6447491a4214ce3e97dac0cef87217c9ffa749582a11e16bc08f4b67781"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (70 lines \u00D7 2 locations): rivetkit-typescript/packages/rivetkit/src/common/bare/actor-persist/v3.ts:96 \u00B7 rivetkit-typescript/packages/rivetkit/src/common/bare/actor-persist/v4.ts:98 \u2014 the 2 copies sit in sibling files in one directory, so check first whether one of them (or an existing module there) already owns this behaviour and the others should call it; otherwise extract it into one module in that directory and have each site call it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/bare/actor-persist/v3.ts"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"766fbae9993e742664d98b164e2d8d15bcdfcd6f254b97d939414960c83ebd3b"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (66 lines \u00D7 2 locations): rivetkit-typescript/packages/rivetkit/src/actor/config.ts:1986 \u00B7 rivetkit-typescript/packages/rivetkit/src/actor/config.ts:2085 \u2014 all 2 copies are in the same file, and the SHAPE of this repetition could not be determined. It is not a run of declarations, a listing, a declaration header, a type body or a slice through a construct \u2014 and it was not measured as a run of executable statements either, so this row cannot tell you whether a function can stand where these lines are. Read the two spans before acting, because the move is opposite in the two cases. Where they are statements, the ordinary answer holds: give the shared part one home and call it from each site. Where they turn out to be declarations, a literal\u0027s entries, or the cases of an enumeration, there is no call site to call anything from, and collapsing them would delete what each copy pins \u2014 a shared base type, a generated set, or one exported constant each site refers to is the move instead, and sometimes the honest answer is that there is nothing to extract at all. Reported because the copies drift apart the first time only one of them is edited, which is true whichever of those they are."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/actor/config.ts"},"region":{"startLine":1986}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c0691bbe0268f7fc598c38b9257a051530754e1ee954f9b7b2f7b7db0ce0e33"}},{"ruleId":"R10","level":"warning","message":{"text":"Wholesale file copy (60 identical lines \u00D7 2 files): rivetkit-typescript/packages/traces/scripts/compile-bare.ts:12 \u00B7 rivetkit-typescript/packages/workflow-engine/scripts/compile-bare.ts:15 \u2014 these 2 files are line-for-line copies of one another \u2014 60 lines are identical, in the same order, in every one of them \u2014 so this is one fact about the file set, not a block to extract. An edit made to one file and not the others changes behaviour silently, which is the failure a wholesale copy guarantees. Pick one file as the single source and derive the others from it (re-export it, spread it into the local overrides each variant genuinely needs, or generate the copies at build time) \u2014 the few lines that differ between the files are exactly the part each variant should still own. Check first whether the copies are deliberately standalone deliverables (a translation file seeded from its sibling and waiting to be translated); where they are, the duplication is the design, and the honest move is to mark the seeded file as untranslated rather than to let it pass as done."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/traces/scripts/compile-bare.ts"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"fba4457b2747c50f55850ab52e39423cadb6563a02c1fda27af68e65c537757d"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (53 matched lines \u00D7 2 locations): rivetkit-typescript/packages/rivetkit/src/registry/napi-runtime.ts:977 \u00B7 rivetkit-typescript/packages/rivetkit/src/registry/wasm-runtime.ts:948 \u2014 the two spans are one implementation copied and then locally edited \u2014 290 tokens are still identical, in the same order in both files, with only local edits between them. The copies have already begun to drift, which is this row\u0027s finding: an edit made to one and not the other changes behaviour silently. Diff the two spans first to learn what genuinely differs, then extract the shared core into one module both sites use, passing the differences in as parameters \u2014 or, if one copy exists only because the other could not be imported from its context, make one of them the single source the other is generated or re-exported from. If one copy is no longer reachable, delete it rather than letting it shadow the live one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/registry/napi-runtime.ts"},"region":{"startLine":977}}}],"partialFingerprints":{"codehealthFindingId/v1":"981f36865bf18a5a7a5fbfff6477e10c6b08cb7b69f9fc7addfc8e7493afdc1f"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (52 lines \u00D7 2 locations): rivetkit-typescript/packages/rivetkit/src/inspector/client.browser.ts:293 \u00B7 rivetkit-typescript/packages/rivetkit/src/inspector/client.browser.ts:346 \u2014 all 2 copies are in the same file, and the CITED SPAN is not a self-contained block \u2014 it runs from inside one construct into the next (the tail of a branch plus the head of the following one, a run of switch arms, the end of a declaration plus the list that follows it) rather than covering a whole unit. So do not lift these lines literally: no call can be substituted for a half-open construct. Extract the enclosing repeated UNIT instead \u2014 the whole function, component or branch these lines sit in \u2014 and where the repetition IS the construct (a run of switch arms, a stack of near-identical declarations) replace it with one table or registry looked up by key rather than a helper each arm calls. The copies still drift apart the first time only one of them is edited, which is why this is reported."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/inspector/client.browser.ts"},"region":{"startLine":293}}}],"partialFingerprints":{"codehealthFindingId/v1":"47089e19e5ccaef8e8b1ab71cf30c80e9b97397a16897ba837af7c584c4351da"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (51 lines \u00D7 2 locations): rivetkit-typescript/packages/rivetkit/src/client/actor-handle.ts:214 \u00B7 rivetkit-typescript/packages/rivetkit/src/client/actor-handle.ts:767 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/client/actor-handle.ts"},"region":{"startLine":214}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b8b7367251971106cb2948c2c7bb7ef9a85e4b6de495a95013507f1d25e02ba"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (48 matched lines \u00D7 2 locations): rivetkit-typescript/packages/cli/index.js:6 \u00B7 rivetkit-typescript/packages/engine-cli/index.js:18 \u2014 the two spans are one implementation copied and then locally edited \u2014 263 tokens are still identical, in the same order in both files, with only local edits between them. The copies have already begun to drift, which is this row\u0027s finding: an edit made to one and not the other changes behaviour silently. Diff the two spans first to learn what genuinely differs, then extract the shared core into one module both sites use, passing the differences in as parameters \u2014 or, if one copy exists only because the other could not be imported from its context, make one of them the single source the other is generated or re-exported from. If one copy is no longer reachable, delete it rather than letting it shadow the live one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/cli/index.js"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"e999fea3a451736544f581475f6bf6524067d83be1c487fac365949b6a04567d"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (47 matched lines \u00D7 2 locations): rivetkit-typescript/packages/rivetkit/src/client/actor-conn.ts:196 \u00B7 rivetkit-typescript/packages/rivetkit/src/client/actor-handle.ts:96 \u2014 the two spans are one implementation copied and then locally edited \u2014 232 tokens are still identical, in the same order in both files, with only local edits between them. The copies have already begun to drift, which is this row\u0027s finding: an edit made to one and not the other changes behaviour silently. Diff the two spans first to learn what genuinely differs, then extract the shared core into one module both sites use, passing the differences in as parameters \u2014 or, if one copy exists only because the other could not be imported from its context, make one of them the single source the other is generated or re-exported from. If one copy is no longer reachable, delete it rather than letting it shadow the live one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/client/actor-conn.ts"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2c00043b5b6cb515004d03a4bcc51d9ecc8af1ed3f5a4bb2a9f07b7e1447e9d"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (47 matched lines \u00D7 2 locations): rivetkit-typescript/packages/rivetkit/src/workflow/driver.ts:325 \u00B7 rivetkit-typescript/packages/rivetkit/src/workflow/driver.ts:432 \u2014 the two spans are one implementation copied and then locally edited \u2014 347 tokens are still identical, in the same order in both spans, with only local edits between them. The copies have already begun to drift, which is this row\u0027s finding: an edit made to one and not the other changes behaviour silently. Diff the two spans first to learn what genuinely differs, then extract the shared core into one module both sites use, passing the differences in as parameters \u2014 or, if one copy exists only because the other could not be imported from its context, make one of them the single source the other is generated or re-exported from. If one copy is no longer reachable, delete it rather than letting it shadow the live one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/workflow/driver.ts"},"region":{"startLine":325}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ddd5b4eb118f7b628078bbb398d7f2fc964e5dc797a58fe84dbb37bfc57df5a"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (46 matched lines \u00D7 2 locations): rivetkit-typescript/packages/rivetkit/src/workflow/context.ts:259 \u00B7 rivetkit-typescript/packages/rivetkit/src/workflow/mod.ts:109 \u2014 the two spans are one implementation copied and then locally edited \u2014 108 tokens are still identical, in the same order in both files, with only local edits between them. The copies have already begun to drift, which is this row\u0027s finding: an edit made to one and not the other changes behaviour silently. Diff the two spans first to learn what genuinely differs, then extract the shared core into one module both sites use, passing the differences in as parameters \u2014 or, if one copy exists only because the other could not be imported from its context, make one of them the single source the other is generated or re-exported from. If one copy is no longer reachable, delete it rather than letting it shadow the live one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/workflow/context.ts"},"region":{"startLine":259}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ca00b8b2bd5881dccf9f810ec81fb5fe6f78c14ac4eaef467c27230983177b5"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (43 lines \u00D7 2 locations): rivetkit-typescript/packages/rivetkit/src/common/bare/actor-persist/v3.ts:179 \u00B7 rivetkit-typescript/packages/rivetkit/src/common/bare/actor-persist/v4.ts:181 \u2014 the 2 copies are spread across 2 files, and the CITED SPAN is not a self-contained block \u2014 it runs from inside one construct into the next (the tail of a branch plus the head of the following one, a run of switch arms, the end of a declaration plus the list that follows it) rather than covering a whole unit. So do not lift these lines literally: no call can be substituted for a half-open construct. Extract the enclosing repeated UNIT instead \u2014 the whole function, component or branch these lines sit in \u2014 and where the repetition IS the construct (a run of switch arms, a stack of near-identical declarations) replace it with one table or registry looked up by key rather than a helper each arm calls. The copies still drift apart the first time only one of them is edited, which is why this is reported."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/bare/actor-persist/v3.ts"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"8347cd132d1c0a6af74f3c9693995086b9842b31ef69d4864374144e5ae1e95a"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (40 lines \u00D7 3 locations): rivetkit-typescript/packages/rivetkit/src/common/bare/transport/v1.ts:127 \u00B7 rivetkit-typescript/packages/rivetkit/src/common/bare/transport/v1.ts:184 \u00B7 rivetkit-typescript/packages/rivetkit/src/common/bare/transport/v1.ts:231 \u2014 all 3 copies are in the same file, and the CITED SPAN is not a self-contained block \u2014 it runs from inside one construct into the next (the tail of a branch plus the head of the following one, a run of switch arms, the end of a declaration plus the list that follows it) rather than covering a whole unit. So do not lift these lines literally: no call can be substituted for a half-open construct. Extract the enclosing repeated UNIT instead \u2014 the whole function, component or branch these lines sit in \u2014 and where the repetition IS the construct (a run of switch arms, a stack of near-identical declarations) replace it with one table or registry looked up by key rather than a helper each arm calls. The copies still drift apart the first time only one of them is edited, which is why this is reported."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/bare/transport/v1.ts"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"1247800ceae0b2d62c7fff81909ae6a9e6f563fb85e91ed9ce191a144adf407a"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (38 lines \u00D7 2 locations): engine/sdks/typescript/runner/src/websocket.ts:6 \u00B7 rivetkit-typescript/packages/engine-runner/src/websocket.ts:6 \u2014 the 2 copies are spread across 2 directories, so the shared home is a decision rather than an obvious spot: check first whether one of them already owns this behaviour, and otherwise put the extracted module somewhere all of the sites already reach rather than making one of them depend on another."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/typescript/runner/src/websocket.ts"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"421378a704e1573494b6a571dfc3df56c423605b46fe20d1ab0ff7f30d05af2a"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (38 lines \u00D7 2 locations): rivetkit-typescript/packages/rivetkit/scripts/check-annotated-skips.ts:5 \u00B7 rivetkit-typescript/packages/rivetkit/scripts/check-wait-for-comments.ts:5 \u2014 the 2 copies sit in sibling files in one directory, so check first whether one of them (or an existing module there) already owns this behaviour and the others should call it; otherwise extract it into one module in that directory and have each site call it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/scripts/check-annotated-skips.ts"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7d1e1135cd603dd81da11b7c6ef277f6a4126c89d72b6377fa407200c737577"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (34 lines \u00D7 2 locations): rivetkit-typescript/packages/rivetkit/src/workflow/context.ts:132 \u00B7 rivetkit-typescript/packages/rivetkit/src/workflow/context.ts:167 \u2014 all 2 copies are in the same file, and the CITED SPAN is a run of DECLARATIONS inside a construct \u2014 the members of a type, or the entries of an object or array literal \u2014 with no statement anywhere in it. Do not read this as an extract-a-helper row: nothing here executes, so there is no call site, and a call expression cannot stand where a member declaration or a literal\u0027s entry was. What repeats is a SHAPE, and which shape decides the move. Where the copies declare the same members, the repetition is a missing common ancestor: give it a base type, an interface both extend, a generic instantiated twice, or \u2014 where the copies are a literal\u0027s entries rather than a type\u0027s members \u2014 one shared constant each site spreads or refers to, so the set is written once. Where they declare DIFFERENT members and only the form is shared \u2014 a decorator and its options, an annotation, a registration table\u0027s keys \u2014 the form is prescribed by a framework or a schema rather than copied, and the only collapse available is to generate the declarations from that schema; where you do not own the generator, this is the cost of the framework and there is nothing to extract. Check which of the two it is before acting: these copies still drift apart the first time only one of them is edited, which is why the repetition is reported, but the sentence to act on is not the same in both cases."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/workflow/context.ts"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb9876ab46e5bfceab692182e6dd355b480ef8208e78fd3e7be55c8979e7130d"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (33 lines \u00D7 2 locations): rivetkit-typescript/packages/rivetkit/src/common/bare/actor-persist/v3.ts:5 \u00B7 rivetkit-typescript/packages/rivetkit/src/common/bare/actor-persist/v4.ts:8 \u2014 the 2 copies are spread across 2 files, and the SHAPE of this repetition could not be determined. It is not a run of declarations, a listing, a declaration header, a type body or a slice through a construct \u2014 and it was not measured as a run of executable statements either, so this row cannot tell you whether a function can stand where these lines are. Read the two spans before acting, because the move is opposite in the two cases. Where they are statements, the ordinary answer holds: give the shared part one home and call it from each site. Where they turn out to be declarations, a literal\u0027s entries, or the cases of an enumeration, there is no call site to call anything from, and collapsing them would delete what each copy pins \u2014 a shared base type, a generated set, or one exported constant each site refers to is the move instead, and sometimes the honest answer is that there is nothing to extract at all. Reported because the copies drift apart the first time only one of them is edited, which is true whichever of those they are."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/bare/actor-persist/v3.ts"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"79f5d31945b2f063dd6e88a4ec3143113dca1239d43d2d633f9f3498625faaaa"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (33 lines \u00D7 2 locations): scripts/debug/decode_epoxy_changelog.js:12 \u00B7 scripts/debug/decode_runner_config.js:16 \u2014 the 2 copies are spread across 2 files, and the CITED SPAN is not a self-contained block \u2014 it runs from inside one construct into the next (the tail of a branch plus the head of the following one, a run of switch arms, the end of a declaration plus the list that follows it) rather than covering a whole unit. So do not lift these lines literally: no call can be substituted for a half-open construct. Extract the enclosing repeated UNIT instead \u2014 the whole function, component or branch these lines sit in \u2014 and where the repetition IS the construct (a run of switch arms, a stack of near-identical declarations) replace it with one table or registry looked up by key rather than a helper each arm calls. The copies still drift apart the first time only one of them is edited, which is why this is reported."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/debug/decode_epoxy_changelog.js"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d23f0c6b0292cf33b8f838027c38f10446ad6b929dd35bdbfae104759211e39"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (31 lines \u00D7 2 locations): rivetkit-typescript/packages/rivetkit/src/actor/config.ts:2161 \u00B7 rivetkit-typescript/packages/rivetkit/src/actor/definition.ts:167 \u2014 the 2 copies are spread across 2 files, and the SHAPE of this repetition could not be determined. It is not a run of declarations, a listing, a declaration header, a type body or a slice through a construct \u2014 and it was not measured as a run of executable statements either, so this row cannot tell you whether a function can stand where these lines are. Read the two spans before acting, because the move is opposite in the two cases. Where they are statements, the ordinary answer holds: give the shared part one home and call it from each site. Where they turn out to be declarations, a literal\u0027s entries, or the cases of an enumeration, there is no call site to call anything from, and collapsing them would delete what each copy pins \u2014 a shared base type, a generated set, or one exported constant each site refers to is the move instead, and sometimes the honest answer is that there is nothing to extract at all. Reported because the copies drift apart the first time only one of them is edited, which is true whichever of those they are."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/actor/config.ts"},"region":{"startLine":2161}}}],"partialFingerprints":{"codehealthFindingId/v1":"002e1e4ed74852523db031958382bce8370d42c82bddcd13407d165957936420"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (30 lines \u00D7 2 locations): rivetkit-typescript/packages/rivetkit/src/common/bare/actor-persist/v3.ts:52 \u00B7 rivetkit-typescript/packages/rivetkit/src/common/bare/actor-persist/v4.ts:54 \u2014 the 2 copies sit in sibling files in one directory, so check first whether one of them (or an existing module there) already owns this behaviour and the others should call it; otherwise extract it into one module in that directory and have each site call it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/bare/actor-persist/v3.ts"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a096f4aa32b06b30480ff3332ed37d1f4528a7a813dbe2919e7eec8e90aa1ee"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (30 lines \u00D7 2 locations): rivetkit-typescript/packages/rivetkit/src/workflow/context.ts:677 \u00B7 rivetkit-typescript/packages/rivetkit/src/workflow/context.ts:751 \u2014 all 2 copies are in the same file, and the CITED SPAN is not a self-contained block \u2014 it runs from inside one construct into the next (the tail of a branch plus the head of the following one, a run of switch arms, the end of a declaration plus the list that follows it) rather than covering a whole unit. So do not lift these lines literally: no call can be substituted for a half-open construct. Extract the enclosing repeated UNIT instead \u2014 the whole function, component or branch these lines sit in \u2014 and where the repetition IS the construct (a run of switch arms, a stack of near-identical declarations) replace it with one table or registry looked up by key rather than a helper each arm calls. The copies still drift apart the first time only one of them is edited, which is why this is reported."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/workflow/context.ts"},"region":{"startLine":677}}}],"partialFingerprints":{"codehealthFindingId/v1":"325f52b05d242ae4e6e2a643bdffe3445eb80e99e38e2b09610c644fa41eaa92"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (29 lines \u00D7 2 locations): rivetkit-typescript/packages/rivetkit/src/common/bare/actor-persist/v3.ts:234 \u00B7 rivetkit-typescript/packages/rivetkit/src/common/bare/actor-persist/v4.ts:236 \u2014 the 2 copies sit in sibling files in one directory, so check first whether one of them (or an existing module there) already owns this behaviour and the others should call it; otherwise extract it into one module in that directory and have each site call it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/bare/actor-persist/v3.ts"},"region":{"startLine":234}}}],"partialFingerprints":{"codehealthFindingId/v1":"264674e59df830fa62901be94a90b977f355d560eda73ca48f7138b1aa61da7b"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (28 lines \u00D7 23 locations): rivetkit-typescript/packages/effect/src/RivetError.ts:11 \u00B7 rivetkit-typescript/packages/effect/src/RivetError.ts:46 \u00B7 rivetkit-typescript/packages/effect/src/RivetError.ts:81 \u00B7 rivetkit-typescript/packages/effect/src/RivetError.ts:116 \u00B7 \u002B19 more site(s) not listed \u2014 all 23 copies are in the same file, and what repeats is a LIST OF ENTRIES rather than behaviour \u2014 the same entries written out more than once. Extract them into one shared, exported constant and spread that constant into each site, rather than into a function the sites call: a list like this often lives in declarative metadata (a decorator\u0027s options object, a static configuration table) that a build step must be able to read statically, where a function call is not allowed. Adding an entry to one copy and not the other is the failure this prevents."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/effect/src/RivetError.ts"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"f224cb998bb5ac18f905fbc1541dea71a2c40fff7680458559d17df742116d73"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (28 matched lines \u00D7 2 locations): rivetkit-typescript/packages/rivetkit/src/client/actor-handle.ts:920 \u00B7 rivetkit-typescript/packages/rivetkit/src/client/utils.ts:181 \u2014 the two spans are one implementation copied and then locally edited \u2014 133 tokens are still identical, in the same order in both files, with only local edits between them. The copies have already begun to drift, which is this row\u0027s finding: an edit made to one and not the other changes behaviour silently. Diff the two spans first to learn what genuinely differs, then extract the shared core into one module both sites use, passing the differences in as parameters \u2014 or, if one copy exists only because the other could not be imported from its context, make one of them the single source the other is generated or re-exported from. If one copy is no longer reachable, delete it rather than letting it shadow the live one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/client/actor-handle.ts"},"region":{"startLine":920}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c62efef201d263da4411bb0dfe9784517f08e0a9972ec16ea00721403c37f82"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (28 lines \u00D7 2 locations): rivetkit-typescript/packages/rivetkit/src/common/database/mod.ts:309 \u00B7 rivetkit-typescript/packages/rivetkit/src/db/drizzle.ts:275 \u2014 the 2 copies are spread across 2 files, and the CITED SPAN is not a self-contained block \u2014 it runs from inside one construct into the next (the tail of a branch plus the head of the following one, a run of switch arms, the end of a declaration plus the list that follows it) rather than covering a whole unit. So do not lift these lines literally: no call can be substituted for a half-open construct. Extract the enclosing repeated UNIT instead \u2014 the whole function, component or branch these lines sit in \u2014 and where the repetition IS the construct (a run of switch arms, a stack of near-identical declarations) replace it with one table or registry looked up by key rather than a helper each arm calls. The copies still drift apart the first time only one of them is edited, which is why this is reported."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/database/mod.ts"},"region":{"startLine":309}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3979f7878774d0edfc31685b18f36969a64bbe03494d15941f520dee3126f98"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (28 lines \u00D7 2 locations): scripts/api/runner-configs/list.ts:5 \u00B7 scripts/api/runners/list.ts:5 \u2014 the 2 copies are spread across 2 directories, so the shared home is a decision rather than an obvious spot: check first whether one of them already owns this behaviour, and otherwise put the extracted module somewhere all of the sites already reach rather than making one of them depend on another."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/api/runner-configs/list.ts"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"06f8cc3730fb10eafdac1f41e9e15fc59527488e990929719c276966adf774f0"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function main (cyclomatic 89, cognitive 177): main has cyclomatic complexity 89 and cognitive complexity 177; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/debug/logfmt_to_gantt.ts"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"0803d4f85fc70ccc77974703890dbb46ac6df3b22b14a6a275352a694135f210"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function (anonymous) (cyclomatic 87, cognitive 127): (anonymous) has cyclomatic complexity 87 and cognitive complexity 127; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"integrations/workflow-world/src/actors/workflow-run.ts"},"region":{"startLine":568}}}],"partialFingerprints":{"codehealthFindingId/v1":"54d6d01622a7cc99143ce7bda36b332249ee6e1b628832d0f64467dd5f41f016"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function (anonymous) (cyclomatic 72, cognitive 89): (anonymous) has cyclomatic complexity 72 and cognitive complexity 89; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/registry/native.ts"},"region":{"startLine":4148}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf75acb99e3ca0e9180d5cbaafe134fac53b71953e22ffb3c668979f3dc9a25e"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function assertJsonCompatValue (cyclomatic 42, cognitive 46): assertJsonCompatValue has cyclomatic complexity 42 and cognitive complexity 46; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/encoding.ts"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"33b29d0cd83b0736d1ea874f6e2fb2f0b5d892c44ca595ec0740050bdf5028fd"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function executeLoop (cyclomatic 33, cognitive 55): executeLoop has cyclomatic complexity 33 and cognitive complexity 55; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/workflow-engine/src/context.ts"},"region":{"startLine":1150}}}],"partialFingerprints":{"codehealthFindingId/v1":"6efd1a00c29a0dc97599a166000749c12c3c25250a0ca1bc3cf7d370946d9469"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function (anonymous) (cyclomatic 33, cognitive 29): (anonymous) has cyclomatic complexity 33 and cognitive complexity 29; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive sits below cyclomatic here, so much of the count is breadth \u2014 arms side by side rather than stacked \u2014 and splitting per arm would leave a function per arm; group the work between the checks into named steps instead. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/registry/config/index.ts"},"region":{"startLine":309}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e0b494eea585554e75cc468b487940c2fdd1ebd9647481d3a27a269156396bd"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function executeStep (cyclomatic 32, cognitive 47): executeStep has cyclomatic complexity 32 and cognitive complexity 47; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/workflow-engine/src/context.ts"},"region":{"startLine":790}}}],"partialFingerprints":{"codehealthFindingId/v1":"11044acc84133cef49968f9c10fa800c1afff7af1246dfb9fd884453470aae65"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function main (cyclomatic 32, cognitive 46): main has cyclomatic complexity 32 and cognitive complexity 46; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/skill-evals/src/index.ts"},"region":{"startLine":557}}}],"partialFingerprints":{"codehealthFindingId/v1":"110563af4517bd24b7eb265da69a3e336b91caf60e8b9aca98e8fe9d22a1cfd3"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function executeRace (cyclomatic 30, cognitive 44): executeRace has cyclomatic complexity 30 and cognitive complexity 44; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/workflow-engine/src/context.ts"},"region":{"startLine":2228}}}],"partialFingerprints":{"codehealthFindingId/v1":"5605b6c2e3f999652733631a7f73e76ec710dd8c5317251b51e5612f42f33125"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function buildNativeFactory (cyclomatic 29, cognitive 26): buildNativeFactory has cyclomatic complexity 29 and cognitive complexity 26; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive sits below cyclomatic here, so much of the count is breadth \u2014 arms side by side rather than stacked \u2014 and splitting per arm would leave a function per arm; group the work between the checks into named steps instead. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/registry/native.ts"},"region":{"startLine":4033}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a5f714d68a2caea5b5c53e6934ed623c8ade0929992bc4c0064479e36f52bf0"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function bumpPackageJsons (cyclomatic 28, cognitive 70): bumpPackageJsons has cyclomatic complexity 28 and cognitive complexity 70; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/publish/src/lib/version.ts"},"region":{"startLine":187}}}],"partialFingerprints":{"codehealthFindingId/v1":"406ba314f09d49b30b061ea30c80e9baf06f5341c3f4b8ea41dbffa15232bcf1"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function executeWorkflow (cyclomatic 26, cognitive 44): executeWorkflow has cyclomatic complexity 26 and cognitive complexity 44; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/workflow-engine/src/index.ts"},"region":{"startLine":953}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7c50fd56f6176cdf2d276ed574fe2f59251795fa3008c671b05350754b07770"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function encodeJsonCompatValue (cyclomatic 25, cognitive 27): encodeJsonCompatValue has cyclomatic complexity 25 and cognitive complexity 27; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/encoding.ts"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"537bf2f0bb5bd2c862cac4a23d68f3edd58a3f6c5aa5ad59e783d14fe58870ab"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function create (cyclomatic 23, cognitive 36): create has cyclomatic complexity 23 and cognitive complexity 36; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"integrations/workflow-world/src/index.ts"},"region":{"startLine":340}}}],"partialFingerprints":{"codehealthFindingId/v1":"f84774efc24cd6c2f5d55b6b2480e4d9061a55dfd5fcea5bce0fae1af5574b62"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function flush (cyclomatic 23, cognitive 29): flush has cyclomatic complexity 23 and cognitive complexity 29; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/workflow-engine/src/storage.ts"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ea91601dc172dbb53031daf4b967347239dd5a7450e3323ce4864a3b02f2dce"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function collectTurnText (cyclomatic 22, cognitive 50): collectTurnText has cyclomatic complexity 22 and cognitive complexity 50; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/skill-evals/src/index.ts"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4fbabdc4605062df28091692a051f95facff0937faa9b2daa59f5bd5ac9ed8e"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function convertExpr (cyclomatic 21, cognitive 27): convertExpr has cyclomatic complexity 21 and cognitive complexity 27; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/vbare-gen-converters/index.ts"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"d69f5f4072afc2c6df3af8bee42b6e61d894bbfff211d4d3e0a50d6e302ea29f"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function decodeOne (cyclomatic 21, cognitive 20): decodeOne has cyclomatic complexity 21 and cognitive complexity 20; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive sits below cyclomatic here, so much of the count is breadth \u2014 arms side by side rather than stacked \u2014 and splitting per arm would leave a function per arm; group the work between the checks into named steps instead. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/debug/decode_fdb_tuple.js"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"b23215987c1911080cc4d7622f1e3ad75d487bc089088ddc4b530513b6f95437"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function unwrapDeep (cyclomatic 20, cognitive 35): unwrapDeep has cyclomatic complexity 20 and cognitive complexity 35; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/registry/write-through-proxy.ts"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd8aadda7c8a1de592bf67fecd4e0f974273e94b9e050f116011b90f71ebd270"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function createPlatformServerlessRunner (cyclomatic 20, cognitive 18): createPlatformServerlessRunner has cyclomatic complexity 20 and cognitive complexity 18; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive sits below cyclomatic here, so much of the count is breadth \u2014 arms side by side rather than stacked \u2014 and splitting per arm would leave a function per arm; group the work between the checks into named steps instead. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/tests/platforms/shared-platform-harness.ts"},"region":{"startLine":480}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4814cee45072851e08738db4a0dc92cad1528ba28e830ce776f5cce6806a53d"}},{"ruleId":"R3","level":"warning","message":{"text":"Large Files: 47 file(s) over 400 lines (counted as significant lines \u2014 blank lines excluded \u2014 over production source only, tests excluded), largest first: rivetkit-typescript/packages/rivetkit/src/registry/native.ts (5324), rivetkit-typescript/packages/workflow-engine/src/context.ts (2389), rivetkit-typescript/packages/rivetkit/src/actor/config.ts (2345), engine/sdks/typescript/runner/src/mod.ts (1714), rivetkit-typescript/packages/engine-runner/src/mod.ts (1678), rivetkit-typescript/packages/rivetkit/src/client/actor-conn.ts (1443) (\u002B41 more)."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"cecee31b569df4f07e06db732f1ca037af27b5afef9023da51f9673d931a142f"}},{"ruleId":"R4","level":"warning","message":{"text":"This test file cannot be loaded: engine/sdks/typescript/envoy-protocol/tests/http-abort-golden.test.ts:2 imports \u0027../src/index\u0027, which names no file in this repository \u2014 and no rule in its .gitignore chain could cover one, so no build writes it either. The import throws as the runner collects this file, so none of its test cases run and nothing it was written to verify is verified. Restore the missing module or delete the test. It is excluded from the reachability measured above, because a file that cannot load reaches nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/typescript/envoy-protocol/tests/http-abort-golden.test.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbce2fdb6bdfbcc453b2b0fc873eb50e1f3f3771cbbd0135b7418c13154b0452"}},{"ruleId":"R4","level":"warning","message":{"text":"This test file cannot be loaded: frontend/src/app/billing/plan-badge.stories.tsx:5 imports \u0027./billing-plan-badge\u0027, which names no file in this repository \u2014 and no rule in its .gitignore chain could cover one, so no build writes it either (1 further unresolvable import(s) in the same file). The import throws as the runner collects this file, so none of its test cases run and nothing it was written to verify is verified. Restore the missing module or delete the test. It is excluded from the reachability measured above, because a file that cannot load reaches nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/app/billing/plan-badge.stories.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6744e1ed8b6ef598eba600d2c331fb9438ab75b3b6ef1d7b086d9caecf80ff90"}},{"ruleId":"R4","level":"warning","message":{"text":"This test file cannot be loaded: frontend/src/app/byoc/agent-instructions.test.ts:2 imports \u0027./agent-instructions\u0027, which names no file in this repository \u2014 and no rule in its .gitignore chain could cover one, so no build writes it either. The import throws as the runner collects this file, so none of its test cases run and nothing it was written to verify is verified. Restore the missing module or delete the test. It is excluded from the reachability measured above, because a file that cannot load reaches nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/app/byoc/agent-instructions.test.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"52dafda2c7e3f626e6cd6c8e1c99a10f68df286d2c9c39670d2f8a349f6b71ec"}},{"ruleId":"R4","level":"warning","message":{"text":"This test file cannot be loaded: frontend/src/app/byoc/cluster-config.test.ts:2 imports \u0027./cluster-config\u0027, which names no file in this repository \u2014 and no rule in its .gitignore chain could cover one, so no build writes it either. The import throws as the runner collects this file, so none of its test cases run and nothing it was written to verify is verified. Restore the missing module or delete the test. It is excluded from the reachability measured above, because a file that cannot load reaches nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/app/byoc/cluster-config.test.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"88545322b0e2b56ddcac95f707bb34f83151647ad500fcc6382e1b8e900be700"}},{"ruleId":"R4","level":"warning","message":{"text":"This test file cannot be loaded: frontend/src/app/byoc/setup-links.test.ts:2 imports \u0027../../content/byoc\u0027, which names no file in this repository \u2014 and no rule in its .gitignore chain could cover one, so no build writes it either. The import throws as the runner collects this file, so none of its test cases run and nothing it was written to verify is verified. Restore the missing module or delete the test. It is excluded from the reachability measured above, because a file that cannot load reaches nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/app/byoc/setup-links.test.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8becb8b04a8da24665d6ca4199976351a68cddb91353531504184bff7944807e"}},{"ruleId":"R4","level":"warning","message":{"text":"This test file cannot be loaded: frontend/src/app/env-variables.stories.tsx:5 imports \u0027./env-variables\u0027, which names no file in this repository \u2014 and no rule in its .gitignore chain could cover one, so no build writes it either. The import throws as the runner collects this file, so none of its test cases run and nothing it was written to verify is verified. Restore the missing module or delete the test. It is excluded from the reachability measured above, because a file that cannot load reaches nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/app/env-variables.stories.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e92e7d79be29e487ab252cdff15530c1a949b5a07bea6d490cc39c4c2466bad"}},{"ruleId":"R4","level":"warning","message":{"text":"This test file cannot be loaded: frontend/src/app/onboarding-skeleton.stories.tsx:3 imports \u0027./onboarding-skeleton\u0027, which names no file in this repository \u2014 and no rule in its .gitignore chain could cover one, so no build writes it either. The import throws as the runner collects this file, so none of its test cases run and nothing it was written to verify is verified. Restore the missing module or delete the test. It is excluded from the reachability measured above, because a file that cannot load reaches nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/app/onboarding-skeleton.stories.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a6f38c2d122cfd09e1dea344c094ca74e0fe1137c6148f5c5272b580f4d706f"}},{"ruleId":"R4","level":"warning","message":{"text":"This test file cannot be loaded: frontend/src/app/pool-switcher.stories.tsx:4 imports \u0027./pool-switcher\u0027, which names no file in this repository \u2014 and no rule in its .gitignore chain could cover one, so no build writes it either. The import throws as the runner collects this file, so none of its test cases run and nothing it was written to verify is verified. Restore the missing module or delete the test. It is excluded from the reachability measured above, because a file that cannot load reaches nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/app/pool-switcher.stories.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c49b6a0a0feeba8d7a52ccc243f2ed9cec25f466683c30bcb6655e44116b0d5c"}},{"ruleId":"R4","level":"warning","message":{"text":"This test file cannot be loaded: frontend/src/app/runner-config-table.stories.tsx:10 imports \u0027./runner-config-table\u0027, which names no file in this repository \u2014 and no rule in its .gitignore chain could cover one, so no build writes it either. The import throws as the runner collects this file, so none of its test cases run and nothing it was written to verify is verified. Restore the missing module or delete the test. It is excluded from the reachability measured above, because a file that cannot load reaches nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/app/runner-config-table.stories.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3696065dccba2d4abc340fccdd876b088ab7473ac3c26ca07ceea4258a9b04e"}},{"ruleId":"R4","level":"warning","message":{"text":"This test file cannot be loaded: frontend/src/app/runner-pool-error-popover.stories.tsx:6 imports \u0027./runner-pool-error-popover\u0027, which names no file in this repository \u2014 and no rule in its .gitignore chain could cover one, so no build writes it either. The import throws as the runner collects this file, so none of its test cases run and nothing it was written to verify is verified. Restore the missing module or delete the test. It is excluded from the reachability measured above, because a file that cannot load reaches nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/app/runner-pool-error-popover.stories.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"688338a1f32a0b1c170a98c8b56a47aaf221b9e9c21c794302cf4c661df17ee7"}},{"ruleId":"R4","level":"warning","message":{"text":"This test file cannot be loaded: frontend/src/app/serverless-connection-check.stories.tsx:4 imports \u0027./serverless-connection-check\u0027, which names no file in this repository \u2014 and no rule in its .gitignore chain could cover one, so no build writes it either. The import throws as the runner collects this file, so none of its test cases run and nothing it was written to verify is verified. Restore the missing module or delete the test. It is excluded from the reachability measured above, because a file that cannot load reaches nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/app/serverless-connection-check.stories.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"772546f7b4663f3327f0674ca71153554f9c058f46e0fbba1b5daf4c6fb016b5"}},{"ruleId":"R4","level":"warning","message":{"text":"This test file cannot be loaded: frontend/src/app/serverless-health-error.test.ts:2 imports \u0027./serverless-health-error\u0027, which names no file in this repository \u2014 and no rule in its .gitignore chain could cover one, so no build writes it either. The import throws as the runner collects this file, so none of its test cases run and nothing it was written to verify is verified. Restore the missing module or delete the test. It is excluded from the reachability measured above, because a file that cannot load reaches nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/app/serverless-health-error.test.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"df562cd84540f7da1820e03bdc0bcbd6ca16454678a08bdfe72f15298a1fa2be"}},{"ruleId":"R4","level":"warning","message":{"text":"This test file cannot be loaded: frontend/src/app/settings-pages/settings-card.stories.tsx:5 imports \u0027./settings-card\u0027, which names no file in this repository \u2014 and no rule in its .gitignore chain could cover one, so no build writes it either. The import throws as the runner collects this file, so none of its test cases run and nothing it was written to verify is verified. Restore the missing module or delete the test. It is excluded from the reachability measured above, because a file that cannot load reaches nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/app/settings-pages/settings-card.stories.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1481b03a1c94a7906aea2bdde91a005844f895b839c165bba813b5f21bd8a63a"}},{"ruleId":"R4","level":"warning","message":{"text":"This test file cannot be loaded: frontend/src/app/settings-pages/whats-new-panel.stories.tsx:5 imports \u0027./whats-new-panel\u0027, which names no file in this repository \u2014 and no rule in its .gitignore chain could cover one, so no build writes it either. The import throws as the runner collects this file, so none of its test cases run and nothing it was written to verify is verified. Restore the missing module or delete the test. It is excluded from the reachability measured above, because a file that cannot load reaches nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/app/settings-pages/whats-new-panel.stories.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"af69ec9b49afbe998ef1e1dccb6aabcc6f59a300805008078eabb7aa2f1e0a4f"}},{"ruleId":"R4","level":"warning","message":{"text":"This test file cannot be loaded: frontend/src/components/actors/actor-inspector-protocol.test.ts:6 imports \u0027./actor-inspector-context\u0027, which names no file in this repository \u2014 and no rule in its .gitignore chain could cover one, so no build writes it either. The import throws as the runner collects this file, so none of its test cases run and nothing it was written to verify is verified. Restore the missing module or delete the test. It is excluded from the reachability measured above, because a file that cannot load reaches nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/components/actors/actor-inspector-protocol.test.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d023cf4e4ed1e61ae5b63d8439e2ab44e3101f0e64c4eae1c495fb37d94d9c71"}},{"ruleId":"R4","level":"warning","message":{"text":"This test file cannot be loaded: frontend/src/components/actors/actor-schedules-tab.test.ts:3 imports \u0027./actor-schedules-format\u0027, which names no file in this repository \u2014 and no rule in its .gitignore chain could cover one, so no build writes it either. The import throws as the runner collects this file, so none of its test cases run and nothing it was written to verify is verified. Restore the missing module or delete the test. It is excluded from the reachability measured above, because a file that cannot load reaches nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/components/actors/actor-schedules-tab.test.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc78e0ced3ec8e8a4d97a5ac8f2c8032f55762229fc684630551c168ced20025"}},{"ruleId":"R4","level":"warning","message":{"text":"This test file cannot be loaded: frontend/src/components/actors/queries/index.test.ts:2 imports \u0027./index\u0027, which names no file in this repository \u2014 and no rule in its .gitignore chain could cover one, so no build writes it either. The import throws as the runner collects this file, so none of its test cases run and nothing it was written to verify is verified. Restore the missing module or delete the test. It is excluded from the reachability measured above, because a file that cannot load reaches nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/components/actors/queries/index.test.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"319a0378b16c3268396a7a2245f3e06618eef7f4252708732692a8e6c6ab010d"}},{"ruleId":"R4","level":"warning","message":{"text":"This test file cannot be loaded: frontend/src/components/actors/workflow/workflow-to-xyflow.test.ts:2 imports \u0027./workflow-example-data\u0027, which names no file in this repository \u2014 and no rule in its .gitignore chain could cover one, so no build writes it either (1 further unresolvable import(s) in the same file). The import throws as the runner collects this file, so none of its test cases run and nothing it was written to verify is verified. Restore the missing module or delete the test. It is excluded from the reachability measured above, because a file that cannot load reaches nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/components/actors/workflow/workflow-to-xyflow.test.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdb53bae400651f86bf4b2fdb8647b877f55d8ac21479d9208fc9e92ce86b575"}},{"ruleId":"R4","level":"warning","message":{"text":"This test file cannot be loaded: frontend/src/components/actors/workflow/xyflow-nodes.stories.tsx:14 imports \u0027./workflow-example-data\u0027, which names no file in this repository \u2014 and no rule in its .gitignore chain could cover one, so no build writes it either (2 further unresolvable import(s) in the same file). The import throws as the runner collects this file, so none of its test cases run and nothing it was written to verify is verified. Restore the missing module or delete the test. It is excluded from the reachability measured above, because a file that cannot load reaches nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/components/actors/workflow/xyflow-nodes.stories.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb0db4b15bac82cb6daa19bbf19cb7826e11b6cc7d2ad52125b53aeaec29bd7e"}},{"ruleId":"R4","level":"warning","message":{"text":"This test file cannot be loaded: frontend/src/components/lazy-icon.stories.tsx:5 imports \u0027./lazy-icon\u0027, which names no file in this repository \u2014 and no rule in its .gitignore chain could cover one, so no build writes it either. The import throws as the runner collects this file, so none of its test cases run and nothing it was written to verify is verified. Restore the missing module or delete the test. It is excluded from the reachability measured above, because a file that cannot load reaches nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/components/lazy-icon.stories.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5845f7882a828eededaf5614baffa786d50812132f520193ffb9ad257d13c971"}},{"ruleId":"R4","level":"warning","message":{"text":"This test file cannot be loaded: frontend/src/components/mcp/scope.test.ts:2 imports \u0027./scope\u0027, which names no file in this repository \u2014 and no rule in its .gitignore chain could cover one, so no build writes it either. The import throws as the runner collects this file, so none of its test cases run and nothing it was written to verify is verified. Restore the missing module or delete the test. It is excluded from the reachability measured above, because a file that cannot load reaches nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/components/mcp/scope.test.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c95f112dfe9ed74e30609323b8526017a4833fccee2f1a749cd7123d9f6227dc"}},{"ruleId":"R4","level":"warning","message":{"text":"This test file cannot be loaded: frontend/src/components/onboarding/agent-os/agent-os-onboarding.stories.tsx:4 imports \u0027./agent-select-step\u0027, which names no file in this repository \u2014 and no rule in its .gitignore chain could cover one, so no build writes it either (4 further unresolvable import(s) in the same file). The import throws as the runner collects this file, so none of its test cases run and nothing it was written to verify is verified. Restore the missing module or delete the test. It is excluded from the reachability measured above, because a file that cannot load reaches nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/components/onboarding/agent-os/agent-os-onboarding.stories.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"06ec4b30276f8644bd87150357ab516904981cfab209150bc98c7772f147bf56"}},{"ruleId":"R4","level":"warning","message":{"text":"This test file cannot be loaded: frontend/src/components/products/product-picker.stories.tsx:3 imports \u0027./product-picker\u0027, which names no file in this repository \u2014 and no rule in its .gitignore chain could cover one, so no build writes it either. The import throws as the runner collects this file, so none of its test cases run and nothing it was written to verify is verified. Restore the missing module or delete the test. It is excluded from the reachability measured above, because a file that cannot load reaches nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/components/products/product-picker.stories.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c936e59ce22e4123c228e80252550892e906f366facf2e8b86a936f3e24557c"}},{"ruleId":"R4","level":"warning","message":{"text":"This test file cannot be loaded: frontend/src/components/ui/icon-picker.stories.tsx:5 imports \u0027./icon-picker\u0027, which names no file in this repository \u2014 and no rule in its .gitignore chain could cover one, so no build writes it either. The import throws as the runner collects this file, so none of its test cases run and nothing it was written to verify is verified. Restore the missing module or delete the test. It is excluded from the reachability measured above, because a file that cannot load reaches nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/components/ui/icon-picker.stories.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c244126eaeac6f9d3e5e102ce32e2df220145b38d911f117f14a1fa4894cd83"}},{"ruleId":"R4","level":"warning","message":{"text":"This test file cannot be loaded: frontend/src/content/agent-prompts.test.ts:2 imports \u0027./agent-prompts\u0027, which names no file in this repository \u2014 and no rule in its .gitignore chain could cover one, so no build writes it either. The import throws as the runner collects this file, so none of its test cases run and nothing it was written to verify is verified. Restore the missing module or delete the test. It is excluded from the reachability measured above, because a file that cannot load reaches nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/content/agent-prompts.test.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9d7c5b21c45503e18ccd80b274b240046ec6b628b528ba5dad4fd35e72e5fe4"}},{"ruleId":"R4","level":"warning","message":{"text":"This test file cannot be loaded: frontend/src/lib/errors.test.ts:3 imports \u0027./errors\u0027, which names no file in this repository \u2014 and no rule in its .gitignore chain could cover one, so no build writes it either. The import throws as the runner collects this file, so none of its test cases run and nothing it was written to verify is verified. Restore the missing module or delete the test. It is excluded from the reachability measured above, because a file that cannot load reaches nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/lib/errors.test.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"73e17949fd9e5a2db684a5fc66ba25d3083bb206788dce4b904fc0e84645a3f0"}},{"ruleId":"R4","level":"warning","message":{"text":"This test file cannot be loaded: frontend/src/lib/format-value.test.ts:2 imports \u0027./format-value\u0027, which names no file in this repository \u2014 and no rule in its .gitignore chain could cover one, so no build writes it either. The import throws as the runner collects this file, so none of its test cases run and nothing it was written to verify is verified. Restore the missing module or delete the test. It is excluded from the reachability measured above, because a file that cannot load reaches nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/lib/format-value.test.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce82ef68914c83733957b44e9e9606395265c7da39f3c87bdaf38d43589e0a98"}},{"ruleId":"R4","level":"warning","message":{"text":"This test file cannot be loaded: rivetkit-typescript/packages/rivetkit/tests/driver/actor-db.test.ts:7 imports \u0027../../src/common/bare/generated/actor-runtime-socket-protocol/v1\u0027, which names no file in this repository \u2014 and no rule in its .gitignore chain could cover one, so no build writes it either. The import throws as the runner collects this file, so none of its test cases run and nothing it was written to verify is verified. Restore the missing module or delete the test. It is excluded from the reachability measured above, because a file that cannot load reaches nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/tests/driver/actor-db.test.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b95a8153eeebaec951f067c3d697e60669fcbbd93be52ec09fb1c6a5d7c52a89"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/typescript/runner/src/mod.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d90b2b55df0c9c8e76bd2071f3f29abfcb9a838589ab74eb6772a5c500c4c8a"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/typescript/runner/src/tunnel.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"74a8b26ad523f805b41f2632be7db8231224de86c98ad0b1342770945cfc7f52"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"integrations/workflow-world/scripts/integration/run.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b5fde9ef57e4bf53277962fd37a83ee43d002d326b4bf01ac2bf98bf299c6d9"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/skill-evals/src/index.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc82b7f26abcaa6b6676890f32d29d21bdd7f7684b8b431e9e0dc5a2c3df9814"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/mcp-hub/src/index.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b4b2858bcb0bdceefd25a7f0244428797f07db392510d672f74bf8088d03102"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/debug/logfmt_to_gantt.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"19d2ffc5aed2cf8d02b67ae73acf4897eb0ad3642c89da1eef2361b51cf0d588"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/vbare-gen-converters/index.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e782d7b5d4c554d224fc894a758ca4249f310ab09103cea8bab8ceb65bfb59d"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/publish/src/ci/bin.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f5a1a6a6cfe7303a8a6b52ac2717e53554e4a0c5115bc8adba360bbcdd0f923"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/publish/src/lib/version.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7dd07c2943358578044fc1a191c6dce3db6fc0c8322439d97397f572fd95f4c3"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/framework-base/src/mod.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9ac7105c507a1f9f0fee32303afed65d260a570f1be533b335837a528b9e35e"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"self-host/compose/template/src/docker-compose.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"667662cf78d49106bc36fd9d3a13c8d7b1b6ac1d61594d5a5bcfdecb234dfa6b"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/publish/src/lib/npm.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"792d5f874b94ea9ab1bbcc3d90006780acdf2098f292190aa1767e9c6020f8a7"}},{"ruleId":"R6","level":"warning","message":{"text":"The declared test suite includes a file that cannot be loaded: This repository declares test tooling, and the \u2713 above records that declaration \u2014 but engine/sdks/typescript/envoy-protocol/tests/http-abort-golden.test.ts and 27 other test file(s) in this workspace cannot be loaded at all: it imports a module that names no file in this repository, so the runner throws while collecting it and none of its cases execute. The wiring is present and the suite it points at does not run as written, which is why the tooling tick must not be read as a statement that the tests pass. Fix the unloadable file(s) \u2014 each one is reported with its failing import under Test Coverage \u2014 then the declared script exercises what it claims to."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/typescript/envoy-protocol/tests/http-abort-golden.test.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"66a1f2fb767f2c828874c7710eeae057991fec3c516826a4a6218a524c28cbde"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~407 LoC): no import path from any entry point (161 application, 68 tooling, 414 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (rivetkit-typescript/packages/rivetkit/src/common/actor-persist-versioned.ts) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/bare/actor-persist/v4.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a552b7eb096887dfabb60cdc2e495db6d5e1f0e528d6707e19d4ff91736943d"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~320 LoC): no import path from any entry point (161 application, 68 tooling, 414 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (rivetkit-typescript/packages/rivetkit/src/common/actor-persist-versioned.ts) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/bare/actor-persist/v2.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4dc3e34b153231ab751d18c30214fe3d5875db2b78b017cf196963e016d9e4b"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~284 LoC): no import path from any entry point (161 application, 68 tooling, 414 test roots considered), but 2 in-repo import(s) from 2 other file(s) do name it (rivetkit-typescript/packages/rivetkit/src/common/actor-persist-versioned.ts, rivetkit-typescript/packages/rivetkit/src/common/actor-persist.ts) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/bare/actor-persist/v3.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"22caca3cd022169092afe7a770581c551a59987f741b6884ae1275dfc03287f0"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~267 LoC): no import path from any entry point (161 application, 68 tooling, 414 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (rivetkit-typescript/packages/rivetkit/src/common/actor-persist-versioned.ts) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/bare/actor-persist/v1.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"62caab4682fb14dfa9c1b4f7987d846820bf82102ae7dbe5943311dbc633f74c"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~217 LoC): no import path from any entry point (161 application, 68 tooling, 414 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/actor-persist-versioned.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d97a339d418a75199a81d5669bd4cd02815344f32a45bf73d6aa45e3484a7472"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~177 LoC): no import path from any entry point (161 application, 68 tooling, 414 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/runtime/index.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e6404f462befc6605f2bf2e39d336737662677e72b59171c0317eefcddba4a4"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~83 LoC): no import path from any entry point (161 application, 68 tooling, 414 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/utils/router.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"67f29ee9852417ca3da89d095187d5c565aa10c08955fb9e1e4bb6175be94641"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~75 LoC): no import path from any entry point (161 application, 68 tooling, 414 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/react/src/mod.typecheck.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0986d425b6811b6fbc5e9efe4c7becd1b33226f3ce59b33b4e641d90a0eb05e2"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~64 LoC): no import path from any entry point (161 application, 68 tooling, 414 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (rivetkit-typescript/packages/rivetkit/src/dynamic/instance.ts) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/dynamic/isolate-runtime.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd3544fd3a7d65f2d4832233eca2e3e0df04399a61e073f4c95dbb7021b4254b"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~57 LoC): no import path from any entry point (161 application, 68 tooling, 414 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (rivetkit-typescript/packages/rivetkit/src/utils/router.ts) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/cors.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b07afe390bc5ba73e9c53f3006e376cbf2c38eecb76346ef311815dbd3b3ced1"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~54 LoC): no import path from any entry point (161 application, 68 tooling, 414 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/run/k8s/build-frontend-icons.mjs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2dd52a4d1ad22264606d7749f295df51afad15f98d12f25b54c8104ccca650e7"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~47 LoC): no import path from any entry point (161 application, 68 tooling, 414 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/scripts/drizzle-compat-smoke.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e2bf240fe60f4a71a73331fe69cc1479064d128c61766b0c49a0bcf78a51d9e"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~44 LoC): no import path from any entry point (161 application, 68 tooling, 414 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/eventsource.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"75c15c1f106fa349226f94a51fec02c34fcee143391c2bcdcae693ad4cabf5f0"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~32 LoC): no import path from any entry point (161 application, 68 tooling, 414 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/dynamic/instance.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ec1d9da468f1236af6e2233c74f56cd683a0b473e4a793d11b968d203b71be7"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~31 LoC): no import path from any entry point (161 application, 68 tooling, 414 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"integrations/workflow-world/src/runtime.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c41ebd45c15ec3249e0b9c3469dcc9a0ff3e5cc12ed88eb1ab5f389020679a89"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~27 LoC): no import path from any entry point (161 application, 68 tooling, 414 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/log-levels.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"900d7a1cd31bad8ec445c998084de373dbc94c12e0b88d6005111f1bba3e143a"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~26 LoC): no import path from any entry point (161 application, 68 tooling, 414 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/devtools-loader/serve-devtools.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fb851ebb5ecee3f708524e884bfbe2a1cd2c5a734883767ed7874dffc251383"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~24 LoC): no import path from any entry point (161 application, 68 tooling, 414 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"docker/compute-hello-world/server.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"94659485fea904230baf68a46d8ba067bc503cb2853cdca4acc1b85139b13ba1"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~19 LoC): no import path from any entry point (161 application, 68 tooling, 414 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/scripts/pack-devtools.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6870e46339e632b2c2625380ea1cca50ac1f2e306cbc7e9552be9a9a00b7aad"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~19 LoC): no import path from any entry point (161 application, 68 tooling, 414 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"self-host/compose/template/src/utils.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"17db64124b657cf400b5e2db2d624213dac273cedfcd89e993856f37834f9bb5"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~13 LoC): no import path from any entry point (161 application, 68 tooling, 414 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit-napi/scripts/actor-context-smoke.mjs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b99f86626614baa574553bd851b036a8cb032e3122a6e9cea354387fd1b1e49"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~6 LoC): no import path from any entry point (161 application, 68 tooling, 414 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"self-host/workers/vercel/route.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"80b23b435d41550888a7e0df79100ed6fdb28033b521f223b2f92ab9ae5f6111"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~3 LoC): no import path from any entry point (161 application, 68 tooling, 414 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/rivetkit/utils.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"733f4c26325cb298676990a59564b2a62d33b544812ae250928cd6ac18ae8ee4"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~2 LoC): no import path from any entry point (161 application, 68 tooling, 414 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/network.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"03db5afdc8f13c43681664cf214946e64ddffd512fe7e095baeb8f10fcf571b9"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~1 LoC): no import path from any entry point (161 application, 68 tooling, 414 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/actor-persist.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b633b8f960f0665e41a733a2aa6d3d3619daffb45adad5047765f877bb47cd54"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~1 LoC): no import path from any entry point (161 application, 68 tooling, 414 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/workflow-transport.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"07b1fd4b49b15605e46b33e389d531e6b8e93c36a955c26b668ea5157d735106"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~0 LoC): no import path from any entry point (161 application, 68 tooling, 414 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/client/test.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fdb87200777f979d86ffa081f610015de2a4986ced1480882b29cac8989f18df"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027makeTracesKey\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/actor/keys.ts"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"a781592c9ffc5fe7f5aae2c786baf9e544ae07ec2798a5be0c15df7e3140f114"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027tracesStoragePrefix\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/actor/keys.ts"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"3578d9fbd7e4c4a0cff004a310209f87dff0a95680b4b6bd510daa7c6d978407"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027queueStoragePrefix\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/actor/keys.ts"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f6da257427627b436e2ebbde745893cc3a2533bebb0a64de5da39974940a11e"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027queueMetadataKey\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/actor/keys.ts"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6535e645dac09d3459acd810bd82fe0d04a77b211679850cb41c2c345432ef2"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027queueMessagesPrefix\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/actor/keys.ts"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4ceef839efd394a3affe31c7c82e9cf5ba923f6f68766a328799755d876e9d4"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027makeConnKey\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/actor/keys.ts"},"region":{"startLine":187}}}],"partialFingerprints":{"codehealthFindingId/v1":"248836c90fd5914125387b48be05fbd660218da624135a742a05f95fd8729dc8"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027makeQueueMessageKey\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/actor/keys.ts"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"85f2c5b52776ed09f01f0afd4db2325b92ee08b40e39bc966264a459c2233370"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027decodeQueueMessageKey\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/actor/keys.ts"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"974a6d540f150d903f9993ef7990825bf4bcacacfe4a5cf33e43ca7f55e820bd"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027validateSchema\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/actor/schema.ts"},"region":{"startLine":232}}}],"partialFingerprints":{"codehealthFindingId/v1":"3320c13c617f7a79e0c0cff0c538f4659ba41ecdffe91824ab9f2cbb6f43ad77"}},{"ruleId":"R8","level":"warning","message":{"text":"Unused dependency \u0027zx\u0027: Declared in the root package.json but never imported anywhere in that package or its workspace members \u2014 no static import reaches it. Usually that is dead weight and attack surface, but two shapes are indistinguishable from source and are NOT dead: an optional or native peer that another dependency loads dynamically at runtime, and a package a build, docs or test step installs and invokes separately. Confirm which of the three this is before removing it."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"db4fa5a43477680758ec23fefc7b64ae0aa17bf61a5c69706452ebb6816a9339"}},{"ruleId":"R8","level":"warning","message":{"text":"Unused dependency \u0027tinybench\u0027: Declared in engine/sdks/typescript/test-runner/package.json but never imported anywhere in that package or its workspace members \u2014 no static import reaches it. Usually that is dead weight and attack surface, but two shapes are indistinguishable from source and are NOT dead: an optional or native peer that another dependency loads dynamically at runtime, and a package a build, docs or test step installs and invokes separately. Confirm which of the three this is before removing it."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"90824d3e853b558aba61fa170e4586aa731808f208cb901013504c2264df2edc"}},{"ruleId":"R8","level":"warning","message":{"text":"Unused dependency \u0027@codemirror/merge\u0027: Declared in frontend/package.json but never imported anywhere in that package or its workspace members \u2014 no static import reaches it. Usually that is dead weight and attack surface, but two shapes are indistinguishable from source and are NOT dead: an optional or native peer that another dependency loads dynamically at runtime, and a package a build, docs or test step installs and invokes separately. Confirm which of the three this is before removing it."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"79428377928aa213a63a6fb90eafca777979dc1bd1f4aa83bac8acf70296b34d"}},{"ruleId":"R8","level":"note","message":{"text":"Type-only dependency \u0027ws\u0027 in production deps: Every import is type-only \u2014 move it to devDependencies."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/typescript/test-runner/src/index.ts"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"7efc18654ab88418c6b9f5c05cd0dee92c07735a30c1e963c095f71584c7ef98"}},{"ruleId":"R8","level":"note","message":{"text":"Test-only dependency \u0027@rivet-gg/icons\u0027 in production deps: Only test files import it \u2014 move it to devDependencies."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/app/settings-pages/settings-card.stories.tsx"},"region":{"startLine":2}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a7cad258326d05cac76bde2c85e8f1376e3ff1313f66b1819b3f349aee6d10b"}},{"ruleId":"R9","level":"error","message":{"text":"Import cycle (2 files): engine/sdks/typescript/runner/src/mod.ts \u2192 engine/sdks/typescript/runner/src/tunnel.ts \u2192 engine/sdks/typescript/runner/src/mod.ts"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/sdks/typescript/runner/src/mod.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d37c534e9ba819c0d1f7c4357a2c57bdc6fe6e4587cc44f020e91a5204224bce"}},{"ruleId":"R9","level":"error","message":{"text":"Import cycle (2 files): rivetkit-typescript/packages/engine-runner/src/mod.ts \u2192 rivetkit-typescript/packages/engine-runner/src/tunnel.ts \u2192 rivetkit-typescript/packages/engine-runner/src/mod.ts"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/engine-runner/src/mod.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"db774cdaff2cafa6285a6df6c366b1ff1378c8905fb013b8b78d3a58f7c85fd7"}},{"ruleId":"R9","level":"error","message":{"text":"Import cycle (2 files): rivetkit-typescript/packages/rivetkit/src/agent-os/actor/cron.ts \u2192 rivetkit-typescript/packages/rivetkit/src/agent-os/actor/index.ts \u2192 rivetkit-typescript/packages/rivetkit/src/agent-os/actor/cron.ts (one verified cycle inside a mutually-dependent group of 8 files)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/agent-os/actor/cron.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8c3af58c66a88e388ce896f51a7ad6318592e4fe667457090b36e29ae787c00"}},{"ruleId":"R9","level":"error","message":{"text":"Import cycle (2 files): rivetkit-typescript/packages/rivetkit/src/client/actor-conn.ts \u2192 rivetkit-typescript/packages/rivetkit/src/client/client.ts \u2192 rivetkit-typescript/packages/rivetkit/src/client/actor-conn.ts (one verified cycle inside a mutually-dependent group of 3 files)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/client/actor-conn.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"70ed65618c9fe121771d59ff9dfca544996f66367a6984ee2dad7cfb0e113874"}},{"ruleId":"R9","level":"error","message":{"text":"Import cycle (4 files): rivetkit-typescript/packages/rivetkit/src/common/encoding.ts \u2192 rivetkit-typescript/packages/rivetkit/src/common/utils.ts \u2192 rivetkit-typescript/packages/rivetkit/src/utils/env-vars.ts \u2192 rivetkit-typescript/packages/rivetkit/src/utils.ts \u2192 rivetkit-typescript/packages/rivetkit/src/common/encoding.ts (one verified cycle inside a mutually-dependent group of 6 files)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/common/encoding.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"aff46f2605ba2b239759595e11a449e85059dd8ad3f098325378054112b5ae62"}},{"ruleId":"S1","level":"warning","message":{"text":"Third-party script without Subresource Integrity: \u0060https://analytics.ahrefs.com/analytics.js\u0060 is executed by this page with no Subresource Integrity. Whoever can answer that request \u2014 the CDN, anyone who compromises it, anyone on the network path \u2014 runs arbitrary script in this page\u0027s origin, with its session. The URL also names no version, so it resolves to whatever that origin serves at fetch time \u2014 the executed bytes can change with nobody touching this repository."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/index.html"},"region":{"startLine":4}}}],"partialFingerprints":{"codehealthFindingId/v1":"d37252b451395afcbbf7a228902e86f752882f9e600ae32be19064ef4404ebc2"}},{"ruleId":"S1","level":"note","message":{"text":"No security response headers detected: No Content-Security-Policy / X-Frame-Options / X-Content-Type-Options configuration found \u2014 defense in depth, even when a reverse proxy could set them. This is reported because \u0060Caddyfile\u0060 is committed to this repository and declares the server that serves it, so the configuration that would carry these headers is in this repository and was read in full. (\u22122.0 on this card.)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/Caddyfile"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d0384771f3c8a47d99726c6da24338622702f746cd91f7aa70f45cb1608fc9f"}},{"ruleId":"SC1","level":"warning","message":{"text":"NuGet dependencies are not locked: No packages.lock.json and no central package management \u2014 restores aren\u0027t reproducible or pinned (SSDF PW.4.4). Enable \u003CRestorePackagesWithLockFile\u003Etrue\u003C/RestorePackagesWithLockFile\u003E (commit the lockfile) or adopt Directory.Packages.props. Advisory \u2014 never scored."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0a97b4f69ccac509400ece7eedefb06d3ede0522cd4d8bcb5c068bea719545a6"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060!key?.startsWith(\u0022--\u0022) || value === undefined\u0060 appears character-identically in 3 files \u2014 .claude/skills/create-launch-post/scripts/render-launch-images.ts, .claude/skills/create-launch-post/scripts/render-technical-image.ts, .claude/skills/create-launch-post/scripts/render-tile-images.ts. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":".claude/skills/create-launch-post/scripts/render-launch-images.ts"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae0082961b3e1587cd4b21e1834a0f5960c8db6e2b9cd0a7508480cf15c49d40"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060(await rl.question(\u0022Namespace (default: default): \u0022)) || \u0022default\u0022\u0060 appears character-identically in 3 files \u2014 scripts/api/runner-configs/delete.ts, scripts/api/runner-configs/list.ts, scripts/api/runners/list.ts. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/api/runner-configs/delete.ts"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"052cfdfa4d6f0e3244d9216a1ef49a61611f0afbb170c889882dc81d48b1c6c4"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060codeGroup?.querySelector(\u0022[data-state=active] .code\u0022) ?.textContent || codeGroup?.querySelector(\u0022.code\u0022)?.textContent\u0060 appears character-identically in 2 files \u2014 frontend/packages/components/src/mdx/code-buttons.tsx, frontend/src/components/mdx/code-buttons.tsx. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/packages/components/src/mdx/code-buttons.tsx"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6ab1bd7c314154c1a73cb60a7a9f22ace31c612b6b2b30d9254166c65674ac2"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060columns \u0026\u0026 getResponsiveValue(columns, \u0022grid-cols\u0022)\u0060 appears character-identically in 2 files \u2014 frontend/packages/components/src/ui/helpers/grid-columns.ts, frontend/src/components/ui/helpers/grid-columns.ts. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/packages/components/src/ui/helpers/grid-columns.ts"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2cdd5a4a873a42c298d8b0890d9dd5bb748a541e733e0c51046a14a2a2c33d4"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060definition.type === \u0022select\u0022 \u0026\u0026 Array.isArray(definition.options)\u0060 appears character-identically in 2 files \u2014 frontend/packages/components/src/ui/filters.tsx, frontend/src/components/ui/filters.tsx. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/packages/components/src/ui/filters.tsx"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"0572e3c86d95be3c1617db9595d889f11056671435d5d8d7be5f047aa1ce4fe5"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060direction \u0026\u0026 getResponsiveValue(direction, \u0022flex\u0022)\u0060 appears character-identically in 2 files \u2014 frontend/packages/components/src/ui/helpers/flex-direction.ts, frontend/src/components/ui/helpers/flex-direction.ts. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/packages/components/src/ui/helpers/flex-direction.ts"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"41d2066b03ddafe42f79e0e5cd4c7564c90fc9cdeb86e951aa98823bea6827e0"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060flex \u0026\u0026 getResponsiveValue(flex, \u0022flex\u0022)\u0060 appears character-identically in 2 files \u2014 frontend/packages/components/src/ui/helpers/flex.ts, frontend/src/components/ui/helpers/flex.ts. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/packages/components/src/ui/helpers/flex.ts"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c97fc3c676c25e37032e41a81c19994ca26a7bfa365021a1080d0f4e03693e8"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060items \u0026\u0026 getResponsiveValue(items, \u0022items\u0022)\u0060 appears character-identically in 2 files \u2014 frontend/packages/components/src/ui/helpers/align-items.ts, frontend/src/components/ui/helpers/align-items.ts. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/packages/components/src/ui/helpers/align-items.ts"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"68b2bfcfaef5824799d39d75ad3b67e0c4064f7bc5a10c42d5a95feb587335e6"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060justify \u0026\u0026 getResponsiveValue(justify, \u0022justify\u0022)\u0060 appears character-identically in 2 files \u2014 frontend/packages/components/src/ui/helpers/justify-content.ts, frontend/src/components/ui/helpers/justify-content.ts. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/packages/components/src/ui/helpers/justify-content.ts"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"2948a6487944a7574ede09a97f7f73da6feeab4e96bd4b2839f81835b841207e"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060ls.engineCredentials.get(getConfig().apiUrl) || \u0022\u0022\u0060 appears character-identically in 2 files \u2014 frontend/src/app/data-providers/engine-data-provider.tsx, frontend/src/routes/_context.tsx. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/app/data-providers/engine-data-provider.tsx"},"region":{"startLine":822}}}],"partialFingerprints":{"codehealthFindingId/v1":"8304ac792d966a558eaf713a361728a689dc8fe4bb8e9b981fde6259d8ae8c8a"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060minH \u0026\u0026 getResponsiveValue(minH, \u0022min-h\u0022)\u0060 appears character-identically in 2 files \u2014 frontend/packages/components/src/ui/helpers/min-height.ts, frontend/src/components/ui/helpers/min-height.ts. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/packages/components/src/ui/helpers/min-height.ts"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae2f91fd9d40bb85d330f6713aca74b5fd83f38b7187eb7d0909779c8ef7e348"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060minW \u0026\u0026 getResponsiveValue(minW, \u0022min-w\u0022)\u0060 appears character-identically in 2 files \u2014 frontend/packages/components/src/ui/helpers/min-width.ts, frontend/src/components/ui/helpers/min-width.ts. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/packages/components/src/ui/helpers/min-width.ts"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"a62b9299844f0c446ff13273e0015cba3b2aa42632ace3628d363932b4222335"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060process.env.RIVET_ENDPOINT || (await rl.question(\u0022Rivet Endpoint (default: http://localhost:6420): \u0022)) || \u0022http://localhost:6420\u0022\u0060 appears character-identically in 4 files \u2014 scripts/api/actors/create.ts, scripts/api/runner-configs/delete.ts, scripts/api/runner-configs/list.ts, scripts/api/runners/list.ts. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/api/actors/create.ts"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"d085ca99154217d65646df53ddbcd85e484df5c91f9203e50b0b7ed0127635d1"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060process.env.RIVET_TOKEN || (await rl.question(\u0022Rivet Token (default: default): \u0022)).trim() || \u0022default\u0022\u0060 appears character-identically in 4 files \u2014 scripts/api/actors/create.ts, scripts/api/runner-configs/delete.ts, scripts/api/runner-configs/list.ts, scripts/api/runners/list.ts. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scripts/api/actors/create.ts"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1de9b24f76b7571137d62fb54d971bf78b3188bd4390997d67d68c0bec8cdb6"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060textAlign \u0026\u0026 getResponsiveValue(textAlign, \u0022text\u0022)\u0060 appears character-identically in 2 files \u2014 frontend/packages/components/src/ui/helpers/text-align.ts, frontend/src/components/ui/helpers/text-align.ts. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/packages/components/src/ui/helpers/text-align.ts"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"837decbac2cae614442ba780416cf0e5d0adccda66b361b8efcaad85fe469e48"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060typeof leafFullPath === \u0022string\u0022 \u0026\u0026 leafFullPath.startsWith(namespaceBase)\u0060 appears character-identically in 2 files \u2014 frontend/src/app/context-switcher.tsx, frontend/src/app/layout.tsx. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/app/context-switcher.tsx"},"region":{"startLine":753}}}],"partialFingerprints":{"codehealthFindingId/v1":"afc63564564ca12ee9ecf42761fc605e397d826bf76ca9dcb9bfc9c5d5cb9ddc"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060typeof opts === \u0022string\u0022 || typeof opts !== \u0022object\u0022 || opts === null || !(\u0022name\u0022 in opts)\u0060 appears character-identically in 2 files \u2014 rivetkit-typescript/packages/rivetkit/src/client/actor-conn.ts, rivetkit-typescript/packages/rivetkit/src/client/actor-handle.ts. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/client/actor-conn.ts"},"region":{"startLine":332}}}],"partialFingerprints":{"codehealthFindingId/v1":"24e0e3187a68e5369b6d42cbe777ec3ae0809c203db6c1ed547b65e0a93582fd"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060typeof value !== \u0022object\u0022 || value === null || Array.isArray(value)\u0060 appears character-identically in 2 files \u2014 rivetkit-typescript/packages/rivetkit/src/actor/actions.ts, rivetkit-typescript/packages/rivetkit/src/actor/config.ts. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/rivetkit/src/actor/actions.ts"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"5342aa9fa1ee5c761337e4eaf4ffcb003c9ae2acdcb8f872cca3980313b34771"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060typeof version === \u0022string\u0022 \u0026\u0026 version.startsWith(\u00220.0.0-\u0022)\u0060 appears character-identically in 2 files \u2014 rivetkit-typescript/packages/cli/index.js, rivetkit-typescript/packages/engine-cli/index.js. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-typescript/packages/cli/index.js"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"e41d89b68ab0701d9d2e794566bd1d32bee3be553dad12b2e319212edcb55cd1"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060value.trim() !== \u0022\u0022 \u0026\u0026 value.trim() === value\u0060 appears character-identically in 2 files \u2014 frontend/src/app/forms/create-namespace-form.tsx, frontend/src/app/forms/create-project-form.tsx. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"frontend/src/app/forms/create-namespace-form.tsx"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"67f49ba92501d310d7345a5602e5de59ec147d962389e45bfb26cd2e6cae2037"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060host == \u0022localhost\u0022 || host.ends_with(\u0022.localhost\u0022)\u0060 appears character-identically in 2 files \u2014 rivetkit-rust/packages/rivetkit-core/src/registry/mod.rs, rivetkit-rust/packages/rivetkit-core/src/registry/runner_config.rs. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"rivetkit-rust/packages/rivetkit-core/src/registry/mod.rs"},"region":{"startLine":369}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0d2dbfca9612a5b852df6c97a1f95e28cecc20a50307af4441d06d6d41db5e5"}},{"ruleId":"X9","level":"note","message":{"text":"Subsumed condition operand: \u0060err.contains(\u0022disk I/O\u0022)\u0060 can never decide this \u0060||\u0060 \u2014 every value satisfying \u0060err.contains(\u0022disk I/O\u0022)\u0060 also satisfies \u0060err.contains(\u0022I/O\u0022)\u0060, so the \u0060||\u0060 chain is already decided by the latter. The expression is equivalent to the chain without it, which means it is wider than it reads. Delete the dead operand, or narrow the surviving one if IT is the accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot-client/tests/inline/vfs.rs"},"region":{"startLine":3681}}}],"partialFingerprints":{"codehealthFindingId/v1":"124dce70ef1573e62cace2934190569b5636afd9114c497d6b8156e6c9b62d8b"}},{"ruleId":"X9","level":"note","message":{"text":"Subsumed condition operand: \u0060err.contains(\u0022disk I/O\u0022)\u0060 can never decide this \u0060||\u0060 \u2014 every value satisfying \u0060err.contains(\u0022disk I/O\u0022)\u0060 also satisfies \u0060err.contains(\u0022I/O\u0022)\u0060, so the \u0060||\u0060 chain is already decided by the latter. The expression is equivalent to the chain without it, which means it is wider than it reads. Delete the dead operand, or narrow the surviving one if IT is the accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/packages/depot-client/tests/inline/vfs.rs"},"region":{"startLine":3814}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d0892ef0097c70bd0b416dae8b9252e7181b3a3db4b8edaf7c476db01cbc6ee"}}],"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-125","guid":"98717707-96bf-ca5b-9568-8d1d257574c1","name":"CWE-125","shortDescription":{"text":"CWE-125"},"helpUri":"https://cwe.mitre.org/data/definitions/125.html"},{"id":"CWE-1357","guid":"e4d2e772-757e-0a5c-bd7d-77052949d866","name":"Reliance on Insufficiently Trustworthy Component","shortDescription":{"text":"Reliance on Insufficiently Trustworthy Component"},"helpUri":"https://cwe.mitre.org/data/definitions/1357.html"},{"id":"CWE-1395","guid":"800e09e7-c11a-8654-9fa6-86f398995fed","name":"Dependency on Vulnerable Third-Party Component","shortDescription":{"text":"Dependency on Vulnerable Third-Party Component"},"helpUri":"https://cwe.mitre.org/data/definitions/1395.html"},{"id":"CWE-16","guid":"659db3ea-affc-8453-8add-c1218fbfcb92","name":"Configuration","shortDescription":{"text":"Configuration"},"helpUri":"https://cwe.mitre.org/data/definitions/16.html"},{"id":"CWE-214","guid":"b10ad120-fb22-1351-9348-aa23b453e815","name":"CWE-214","shortDescription":{"text":"CWE-214"},"helpUri":"https://cwe.mitre.org/data/definitions/214.html"},{"id":"CWE-22","guid":"b68d9ca7-bdde-d057-a6cc-9f8b1e739552","name":"CWE-22","shortDescription":{"text":"CWE-22"},"helpUri":"https://cwe.mitre.org/data/definitions/22.html"},{"id":"CWE-250","guid":"52ee12e8-390a-7351-b1e6-388afa694e54","name":"CWE-250","shortDescription":{"text":"CWE-250"},"helpUri":"https://cwe.mitre.org/data/definitions/250.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-321","guid":"0ce564a5-a44c-3358-b3db-317712e6e019","name":"CWE-321","shortDescription":{"text":"CWE-321"},"helpUri":"https://cwe.mitre.org/data/definitions/321.html"},{"id":"CWE-345","guid":"d80d4b65-bbbe-b65d-958e-7ac466af18f9","name":"CWE-345","shortDescription":{"text":"CWE-345"},"helpUri":"https://cwe.mitre.org/data/definitions/345.html"},{"id":"CWE-353","guid":"09d7e902-d4ee-f05d-ae6c-0a1554d0c18f","name":"CWE-353","shortDescription":{"text":"CWE-353"},"helpUri":"https://cwe.mitre.org/data/definitions/353.html"},{"id":"CWE-426","guid":"7b39d500-c310-9a5d-9a3d-4c2bf49492a3","name":"CWE-426","shortDescription":{"text":"CWE-426"},"helpUri":"https://cwe.mitre.org/data/definitions/426.html"},{"id":"CWE-494","guid":"b8a65e0d-e459-4a55-a931-fc1136482375","name":"Download of Code Without Integrity Check","shortDescription":{"text":"Download of Code Without Integrity Check"},"helpUri":"https://cwe.mitre.org/data/definitions/494.html"},{"id":"CWE-506","guid":"401d6455-56e3-0552-9a39-f77461673e3f","name":"CWE-506","shortDescription":{"text":"CWE-506"},"helpUri":"https://cwe.mitre.org/data/definitions/506.html"},{"id":"CWE-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-532","guid":"1cd8877a-76e8-ce54-b40b-779af23364a0","name":"CWE-532","shortDescription":{"text":"CWE-532"},"helpUri":"https://cwe.mitre.org/data/definitions/532.html"},{"id":"CWE-540","guid":"1a9db5db-e5bb-ae5d-935a-d1b4e9ee080b","name":"CWE-540","shortDescription":{"text":"CWE-540"},"helpUri":"https://cwe.mitre.org/data/definitions/540.html"},{"id":"CWE-653","guid":"aa3e371b-590e-225d-a56c-cd490a1dca63","name":"CWE-653","shortDescription":{"text":"CWE-653"},"helpUri":"https://cwe.mitre.org/data/definitions/653.html"},{"id":"CWE-693","guid":"b9b141dc-018a-9c59-8953-1e3c4e020745","name":"CWE-693","shortDescription":{"text":"CWE-693"},"helpUri":"https://cwe.mitre.org/data/definitions/693.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-835","guid":"4d510828-22d0-5353-ad86-51ed0cae0b37","name":"CWE-835","shortDescription":{"text":"CWE-835"},"helpUri":"https://cwe.mitre.org/data/definitions/835.html"},{"id":"CWE-89","guid":"6d08fdad-37eb-c150-bbf0-d7d946863407","name":"SQL Injection","shortDescription":{"text":"SQL Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/89.html"},{"id":"CWE-937","guid":"16f316ae-415c-b354-a59b-1f7905f756e9","name":"Using Components with Known Vulnerabilities","shortDescription":{"text":"Using Components with Known Vulnerabilities"},"helpUri":"https://cwe.mitre.org/data/definitions/937.html"},{"id":"CWE-94","guid":"75e7f50c-6c2f-dd52-bf40-bf6c52b861fd","name":"Code Injection","shortDescription":{"text":"Code Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/94.html"}]}],"properties":{"codehealthPublication":{"public":true,"notice":"This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings \u2014 which rule fired, in which file, on which line, and how to fix it \u2014 are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.","securityFindingsRedacted":552,"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."]}]}