{"$schema":"https://json.schemastore.org/sarif-2.1.0.json","version":"2.1.0","runs":[{"tool":{"driver":{"name":"codehealth","informationUri":"https://codehealth.canine.dev","rules":[{"id":"D1","name":"Cyclomatic Complexity","shortDescription":{"text":"Cyclomatic Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D1"},{"id":"D2","name":"Cognitive Complexity","shortDescription":{"text":"Cognitive Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D2"},{"id":"D3","name":"God Classes","shortDescription":{"text":"God Classes"},"helpUri":"https://codehealth.canine.dev/dimensions/D3"},{"id":"D4","name":"Code Duplication","shortDescription":{"text":"Code Duplication"},"helpUri":"https://codehealth.canine.dev/dimensions/D4"},{"id":"D6","name":"Cohesion (LCOM4)","shortDescription":{"text":"Cohesion (LCOM4)"},"helpUri":"https://codehealth.canine.dev/dimensions/D6"},{"id":"D9","name":"Test Distribution","shortDescription":{"text":"Test Distribution"},"helpUri":"https://codehealth.canine.dev/dimensions/D9"},{"id":"D13","name":"Secret Scanning","shortDescription":{"text":"Secret Scanning"},"helpUri":"https://codehealth.canine.dev/dimensions/D13","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D15","name":"Churn \u00D7 Complexity Hotspots","shortDescription":{"text":"Churn \u00D7 Complexity Hotspots"},"helpUri":"https://codehealth.canine.dev/dimensions/D15"},{"id":"D17","name":"Explicit Debt","shortDescription":{"text":"Explicit Debt"},"helpUri":"https://codehealth.canine.dev/dimensions/D17"},{"id":"D19","name":"Documentation Quality","shortDescription":{"text":"Documentation Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D19"},{"id":"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":"D34","name":"Knowledge Freshness","shortDescription":{"text":"Knowledge Freshness"},"helpUri":"https://codehealth.canine.dev/dimensions/D34"},{"id":"D35","name":"Change Coupling","shortDescription":{"text":"Change Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D35"},{"id":"D36","name":"Supply-chain Provenance \u0026 Signing","shortDescription":{"text":"Supply-chain Provenance \u0026 Signing"},"helpUri":"https://codehealth.canine.dev/dimensions/D36","relationships":[{"target":{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1357","CWE-494"]}},{"id":"D37","name":"Vulnerability-disclosure Policy","shortDescription":{"text":"Vulnerability-disclosure Policy"},"helpUri":"https://codehealth.canine.dev/dimensions/D37","relationships":[{"target":{"id":"CWE-1059","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1059"]}},{"id":"AX10","name":"Code composition","shortDescription":{"text":"Code composition"},"helpUri":"https://codehealth.canine.dev/dimensions/AX10"},{"id":"AX3","name":"Project dependency cycles","shortDescription":{"text":"Project dependency cycles"},"helpUri":"https://codehealth.canine.dev/dimensions/AX3"},{"id":"AX4","name":"Dependency direction","shortDescription":{"text":"Dependency direction"},"helpUri":"https://codehealth.canine.dev/dimensions/AX4"},{"id":"AX9","name":"CQS / query purity","shortDescription":{"text":"CQS / query purity"},"helpUri":"https://codehealth.canine.dev/dimensions/AX9"},{"id":"M1","name":"Documentation (README)","shortDescription":{"text":"Documentation (README)"},"helpUri":"https://codehealth.canine.dev/dimensions/M1"},{"id":"M2","name":"Architecture documentation","shortDescription":{"text":"Architecture documentation"},"helpUri":"https://codehealth.canine.dev/dimensions/M2"},{"id":"M3","name":"Folder \u0026 project structure","shortDescription":{"text":"Folder \u0026 project structure"},"helpUri":"https://codehealth.canine.dev/dimensions/M3"},{"id":"M4","name":"Documentation accuracy","shortDescription":{"text":"Documentation accuracy"},"helpUri":"https://codehealth.canine.dev/dimensions/M4"},{"id":"P1","name":"CI/CD gates","shortDescription":{"text":"CI/CD gates"},"helpUri":"https://codehealth.canine.dev/dimensions/P1"},{"id":"P12","name":"CI test-gate honesty","shortDescription":{"text":"CI test-gate honesty"},"helpUri":"https://codehealth.canine.dev/dimensions/P12"},{"id":"P3","name":"Security \u0026 performance tooling","shortDescription":{"text":"Security \u0026 performance tooling"},"helpUri":"https://codehealth.canine.dev/dimensions/P3"},{"id":"P6","name":"Release Hygiene","shortDescription":{"text":"Release Hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/P6"},{"id":"X9","name":"Subsumed condition operand","shortDescription":{"text":"Subsumed condition operand"},"helpUri":"https://codehealth.canine.dev/dimensions/X9"}]}},"results":[{"ruleId":"D1","level":"warning","message":{"text":"ObjectCache::flush (cyclomatic 25): ObjectCache::flush 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":"src/object_cache.rs"},"region":{"startLine":473}}}],"partialFingerprints":{"codehealthFindingId/v1":"89c4404762cdf0963c496e6e71a764bf5d8dc93431e34e3a915e24084ef8228e"}},{"ruleId":"D1","level":"warning","message":{"text":"Iter::next_back (cyclomatic 19): Iter::next_back 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":"src/tree.rs"},"region":{"startLine":2088}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc8c9d1302782ac7372046266b59eaf7d23807dce7a189c6a2b4497cfcb2fda8"}},{"ruleId":"D1","level":"warning","message":{"text":"Tree::apply_batch (cyclomatic 18): Tree::apply_batch 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":"src/tree.rs"},"region":{"startLine":1377}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c96c3b847c6747302466e93e4b39da37b1433e3415e0cf2ca404d1e2e6ce862"}},{"ruleId":"D1","level":"warning","message":{"text":"Heap::write_batch (cyclomatic 17): Heap::write_batch 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":"src/heap.rs"},"region":{"startLine":883}}}],"partialFingerprints":{"codehealthFindingId/v1":"06f58738dcf7069b4c0260140ab1c4762008d822c6e4d0963a4032875d9ff046"}},{"ruleId":"D2","level":"warning","message":{"text":"ObjectCache::flush (cognitive 60): ObjectCache::flush has cognitive complexity 60 (threshold 15). Drivers by points: if/else 22 (50 pts), loops 4 (5 pts), match/switch 2 (5 pts) (nesting depth added 32). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/object_cache.rs"},"region":{"startLine":473}}}],"partialFingerprints":{"codehealthFindingId/v1":"a97430b171152dd530624c2e8b12d41742f31624fb6726f4db336f24185cc321"}},{"ruleId":"D2","level":"warning","message":{"text":"Heap::write_batch (cognitive 34): Heap::write_batch has cognitive complexity 34 (threshold 15). Drivers by points: if/else 13 (26 pts), match/switch 4 (5 pts), loops 3 (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":"src/heap.rs"},"region":{"startLine":883}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3cd06096c598c9010ff6c23699f252bf4797591d06578927e9cc3b150e697ea"}},{"ruleId":"D2","level":"warning","message":{"text":"Tree::apply_batch (cognitive 34): Tree::apply_batch has cognitive complexity 34 (threshold 15). Drivers by points: if/else 12 (28 pts), loops 6 (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":"src/tree.rs"},"region":{"startLine":1377}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8c1699b8bb95178e051771763f8a0958fac83a3cf78b445dd3ba336acb143e6"}},{"ruleId":"D2","level":"warning","message":{"text":"Iter::next_back (cognitive 33): Iter::next_back has cognitive complexity 33 (threshold 15). Drivers by points: if/else 9 (22 pts), match/switch 3 (7 pts), loops 2 (3 pts), boolean chains 1 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/tree.rs"},"region":{"startLine":2088}}}],"partialFingerprints":{"codehealthFindingId/v1":"84159801af706cef70d5eec087ec3b3489540c60d9486aa25138b53cab9c43f9"}},{"ruleId":"D2","level":"warning","message":{"text":"sled::metadata_store::enumerate_logs_and_snapshot (cognitive 33): sled::metadata_store::enumerate_logs_and_snapshot has cognitive complexity 33 (threshold 15). Drivers by points: if/else 13 (31 pts), loops 2 (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":"src/metadata_store.rs"},"region":{"startLine":678}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce090ad7a625feb2da898244b9830f80abc1cd25d056b8a3f46577471cb84b18"}},{"ruleId":"D2","level":"warning","message":{"text":"Tree::page_in (cognitive 29): Tree::page_in has cognitive complexity 29 (threshold 15). Drivers by points: if/else 11 (23 pts), match/switch 1 (4 pts), boolean chains 1, loops 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/tree.rs"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed7d254a5c331d89a9ef2c159cae8420291c277c1c27fe789233483c44ae0d3c"}},{"ruleId":"D2","level":"warning","message":{"text":"ObjectCache::mark_access_and_evict (cognitive 19): ObjectCache::mark_access_and_evict has cognitive complexity 19 (threshold 15). Drivers by points: if/else 11 (18 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":"src/object_cache.rs"},"region":{"startLine":397}}}],"partialFingerprints":{"codehealthFindingId/v1":"4333df7f21410755fe73aff858160e891ae6e89fb900b50ab5c9e3b8e9108033"}},{"ruleId":"D2","level":"warning","message":{"text":"Iter::next (cognitive 19): Iter::next has cognitive complexity 19 (threshold 15). Drivers by points: if/else 6 (13 pts), loops 2 (3 pts), match/switch 1 (2 pts), boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/tree.rs"},"region":{"startLine":2044}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e97c5464197db1986e43dc9168aea2146d7b61487cdd0c799202062657ceb6b"}},{"ruleId":"D2","level":"warning","message":{"text":"sled::metadata_store::read_snapshot_and_apply_logs (cognitive 16): sled::metadata_store::read_snapshot_and_apply_logs has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (12 pts), loops 3 (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":"src/metadata_store.rs"},"region":{"startLine":753}}}],"partialFingerprints":{"codehealthFindingId/v1":"54845ec8b3858c13e8710ce38c90bdbca45eca96fdbe0a6e5295513d8d70187e"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ObjectCache.flush: MethodTooLong \u2014 flush runs 283 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 183 over it, 2.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":"src/object_cache.rs"},"region":{"startLine":473}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b25dda556e75370fcb61ef7c22d4fa50074cf50063f9113f7827844ad9f095f"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Tree: ClassTooLong \u2014 906 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 34 methods, 5 blocks, lines 27-2191. The bar is 400 significant lines; this is 506 over it, 2.27\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/tree.rs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"59474f35c0050c19340edbb59b25532045d7b58b73f9328859b066b3f4fea9ee"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/tree.rs: FileTooLong \u2014 1098 significant 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: Tree (5 blocks, 27-2191). The bar is 500 significant lines; this is 598 over it, 2.20\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":"src/tree.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"91f2c4112e51b10845c2e6c2a6eba2f13eaf54f428b48a5a398600cc6c0275ba"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Heap.write_batch: MethodTooLong \u2014 write_batch runs 147 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 47 over it, 1.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":"src/heap.rs"},"region":{"startLine":883}}}],"partialFingerprints":{"codehealthFindingId/v1":"f56c9db43d2c6fcf08a7a2a49fa28e72a1700ea51bab34825439aa24fc387232"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/heap.rs: FileTooLong \u2014 698 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 198 over it, 1.40\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/heap.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"07ef889e230017b80cc4127ad9f7c8749c83649b5b9d627f9e9e18c6e46ea83f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/object_cache.rs: FileTooLong \u2014 672 significant 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: ObjectCache (3 blocks, 141-910). The bar is 500 significant lines; this is 172 over it, 1.34\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":"src/object_cache.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"34560d1ddf8cf0990881b243392be14140bfa4f4616ace5d530a87ae68a4d781"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Tree.page_in: MethodTooLong \u2014 page_in 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":"src/tree.rs"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"2056de59257d8dc3d75c0e4bf0640e52b9ad9fd99963038fb8e4a1d175fe828c"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: ObjectCache: ClassTooLong \u2014 501 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 14 methods, 3 blocks, lines 141-910. The bar is 400 significant lines; this is 101 over it, 1.25\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/object_cache.rs"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"c60327183d000d1f103bca10c3f349db58209598f539e78bfbc020557e5af42b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Tree: TooManyMethods \u2014 34 methods. The bar is 30 methods; this is 4 over it, 1.13\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/tree.rs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"650c62ed16e27769c836caf2e2ca6dd95d500ee7520f3c8776e200a044d79e0f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/metadata_store.rs: FileTooLong \u2014 535 significant 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 35 over it, 1.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":"src/metadata_store.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0426d6e79aa1101914a1165605129c1d562aecea07b1e59086aa6904a45c63af"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): src/heap.rs:609-629 | src/metadata_store.rs:168-188 \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":"src/heap.rs"},"region":{"startLine":609}}}],"partialFingerprints":{"codehealthFindingId/v1":"e09335a35d97e5af237109e8f571fc515a1120a278aa976a276653f402efddd0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): src/tree.rs:834-853 | src/tree.rs:1095-1114 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/tree.rs"},"region":{"startLine":834}}}],"partialFingerprints":{"codehealthFindingId/v1":"d762f241cd48c98f91b4ec771b564f285fd6ad4931d49c5bf40f1fb246577358"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): src/db.rs:62-77 | src/tree.rs:49-64 \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":"src/db.rs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"31af6eef04cb1fced139475f7b9e6fdc5916066d33e0bd469f608bd3405d7954"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): src/heap.rs:833-839 | src/metadata_store.rs:196-202 | src/object_cache.rs:282-288 \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":"src/heap.rs"},"region":{"startLine":833}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ba06227ede4a2b673fdd50580c70987a7b3a9071ae8334102ba1f660ca0ee27"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): src/tree.rs:888-900 | src/tree.rs:1142-1154 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/tree.rs"},"region":{"startLine":888}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d7bb1e3a214d3e5a63bc9b8c9d43211f6fdd2a341e7a4a6d6e42ca3a6c43f7c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): src/tree.rs:845-856 | src/tree.rs:960-971 | src/tree.rs:1106-1117 \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":"src/tree.rs"},"region":{"startLine":845}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b8d3494b3a42d655f8d2b22a232840c14d31673c6c80eeb5aa2eb61747df685"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): src/tree.rs:1769-1780 | src/tree.rs:1883-1894 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/tree.rs"},"region":{"startLine":1769}}}],"partialFingerprints":{"codehealthFindingId/v1":"85771a24ce36b978f03e0b36024639e815d956ff2316ef4566bfca1bda769afc"}},{"ruleId":"D9","level":"note","message":{"text":"Inverted test pyramid: Only 5 % of tests are unit tests (5 unit vs 101 integration, 0 BDD); a broader unit base gives faster, more localised feedback."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"3fc0c6fc621cd18b83a2d2c03ea6976b61fb4769f62dc21043f0af4cad912d10"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO determine why this rare situation occurs and better \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/tree.rs"},"region":{"startLine":291}}}],"partialFingerprints":{"codehealthFindingId/v1":"e94abeeb491cc0ba54ccc5d1470dbc8fb45241771ad7ff83b6455adb046dd5c2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO determine why this rare situation occurs and better \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/tree.rs"},"region":{"startLine":675}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e617c0feb62363c014a0ea4a2f84ac243421186ccd170e392bb4bcdaf351a24"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO evaluate whether this is correct, as page_in performs \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/tree.rs"},"region":{"startLine":1408}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a6af13bb8c296cbd84202e2bdc9266b092fd2aa33faa609f2f81f6395dcbcbe"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO add debug event verifier here assert_eq!(0, last_oid_at_location); \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/object_location_mapper.rs"},"region":{"startLine":234}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7ba7e3d784ed877754516023eecb4abdf3d4d2e4da33c8570956b57c4335950"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO test that with a testing event log \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/object_location_mapper.rs"},"region":{"startLine":292}}}],"partialFingerprints":{"codehealthFindingId/v1":"152a6c28ab20b4a893fb5d45b092d03fdecc71e9d989cf0db9457c9dc2cdb248"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO our own object was evicted, so \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/object_cache.rs"},"region":{"startLine":415}}}],"partialFingerprints":{"codehealthFindingId/v1":"d64235255cf7faa0588706370ede65211ac7db9ff7dfdd04f2113bfd1cc67461"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO NOCOMMIT \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/metadata_store.rs"},"region":{"startLine":272}}}],"partialFingerprints":{"codehealthFindingId/v1":"66de124d215656bfb90c4b619b3a76e28653c7f2b3fa0418df75f4fb086fb0a3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO NOCOMMIT \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/heap.rs"},"region":{"startLine":716}}}],"partialFingerprints":{"codehealthFindingId/v1":"b59fd959f1bc6d26eb261e7ba9f3d546bae13efa470df4e55fecdf3c6d7f4b3c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO only break if UnexpectedEof, otherwise propagate \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/metadata_store.rs"},"region":{"startLine":502}}}],"partialFingerprints":{"codehealthFindingId/v1":"f08fa4bc11c0e33335a01ec922202a7b1a35151913b0444880f3ae6a46d8a13f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO make all writes wrapped in a Tearable wrapper that splits writes \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/lib.rs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb88a6013925586288b2f67d8e83084085e030a66d5e5f84cb6149979cc69539"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO test concurrent drop_tree when other threads are still using it \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/lib.rs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f4bb3f1b1f0513022c942b3e986756e03bdb8837802a799daf01247f7ba1642"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO list trees test for recovering empty collections \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/lib.rs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"42691b31995e2727d583bd89dd65b00a614905cac0b28ead941fb3cf95b895a6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO set explicit max key and value sizes w/ corresponding heap \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/lib.rs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"c071eefaf3992c44374683e2e5687d5fe50f2b56427a60721c7c49f139b5a037"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO add failpoints to writepath \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/lib.rs"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"6426e82e1af409552c0f712877515f176b3c449541d0dc4db78b0b7607d78d5f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO handle prefix encoding \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/lib.rs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce5a795459e8e07e366479a0179858f51b55edbc379db420510cd73ff9e1080c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (minor) remove cache access for removed node in merge function \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/lib.rs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"01175b4e0659ba9e49202951e0cb90b0c5ce5ebc8a5e747c145899fda8201560"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO index\u002Blog hybrid - tinylsm key -\u003E object location \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/lib.rs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"08fc9f9a9485a9d907f76b926369481fab51730f69c642551d013051f2441e95"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO multi-collection batch \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/lib.rs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"86607ae0cb01d32cd64a9aea2eaec7b007ffc286329de9c7c90fb4c8c9b19223"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO skim inlining output of RUSTFLAGS=\u0022-Cremark=all -Cdebuginfo=1\u0022 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/lib.rs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"da48984a1ebd2fd2a067ae3326a433e52f83b3b340a3c92acb91bbfb0bf9e2c3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO bug hiding: if the crash_iter test panics, the test doesn\u0027t fail as expected \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/lib.rs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6a1c9d3300ef58f93151dc21cc21c94575af8fe4f9fe3a7c0b67db2d9ac8ffe"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO event log assertion for testing heap location bidirectional referential integrity, \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/lib.rs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"907fbfe916349aef30065ececf816c3d5b6cdd03a357272dc981df02b52042f9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO ensure nothing \u0022from the future\u0022 gets copied into earlier epochs during GC \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/lib.rs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e7370e9f750f14da8e5312bfdca2dce287cead9f3f47fffb63d9cfc39db5837"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO collection_id on page_in checks - it needs to be pinned w/ heap\u0027s EBR? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/lib.rs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"904dce3f65c3137c4f65bbcf02c7855d88dfa6bbf213cfbd09ef0b7056aeaa19"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO put aborts behind feature flags for hard crashes \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/lib.rs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"d15d78d922d88893b5c5dec7160aee2ea7d0ad540e645d36ff23343cc6234f43"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO re-enable transaction tests in test_tree.rs \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/lib.rs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"3579f093ddc2dc45059b38726f351b1c538faf12158d8dca2ddc4871bcf30783"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO force writers to flush when some number of dirty epochs have built up \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/lib.rs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"726a9488507a777d35408ae24e90b71ee11c57159c486c8fe7380fdabd5cff36"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO serialize flush batch in parallel \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/lib.rs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"d03323ad9f7fd4e13a97e9875eadbe0e886c911836a1ce796a2abc48373452aa"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO concurrent serialization of NotYetSerialized dirty objects \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/lib.rs"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"64f2f389a157e350dfb91643df7c242bb26368abc721fcb98347e718c176b61e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO make the Arc\u003COption\u003CBox\u003CLeaf just a single pointer chase w/ custom container \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/lib.rs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"b34045f7b863041369a886abca11583fc7d1495d182472c4a3aa04c5586f1d22"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO allow waiting flusher to start collecting dirty pages as soon \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/lib.rs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b0c77d90a91e292caf1aa987fbc6c966da14bc674cbc47f78ebdded69b1e367"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO measure space savings vs cost of zstd in metadata store \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/lib.rs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"5bb50bbbfd583ffbfa8fd4508296f34a5ac930c8258df1defb5f92a7174e6b9d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO make EBR and index fanout consts as small as possible to reduce memory usage \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/lib.rs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"55f0db0b49a3a42d049a8d0573a8fe4a878ba1a470aab6df3daaf1965cbc1605"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO make leaf fanout as small as possible while retaining perf \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/lib.rs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cd1262bfa8e68dfb872ef95b3e3076b37744841ed92e88a5e308dc4592c05e1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO dynamically sized fanouts for reducing fragmentation \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/lib.rs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"7baf4cc8cb80de0ad402a376f2df01362f4a1f1bc9edc65e5d3ef1688fcd77ec"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO transactions \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/lib.rs"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"9494505451f5a2143a0d3a293b9fdd50ba798337e9de62507e77803e83391cca"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO implement create exclusive \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/lib.rs"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8088fc2b81213d3869a75767b16c65e0a3bade8b48aa5977325b5ee29ca31c1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO temporary trees for transactional in-memory coordination \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/lib.rs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"907b912c0528d1c7aac39e53c21ae0f19603ef06aa6a80a35b9bf3eadaa2aebb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO corrupted data extraction binary \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/lib.rs"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ac0d70e3d6165e8301060de6cdfd00bab872bc80e0b27ecabf35d32c465cc7d"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME BUG 3: failed to read 64 bytes at offset 192 from file with len 192 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/heap.rs"},"region":{"startLine":419}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fb8482f2602bb1104bc1a9fc669dc425ce4bc005271d0b851f5edfba276d559"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO evaluate impact : cost ratio of this sort \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/heap.rs"},"region":{"startLine":976}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ce4bd431790c3c2edfd294592699b313fd0921c5993aacbe99960aa35c893f1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO surface stats \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/heap.rs"},"region":{"startLine":1072}}}],"partialFingerprints":{"codehealthFindingId/v1":"e35cd75a2ddbecedd59dfa7cb2ecfbda5ddb0b96359d588ebb92a53c34fc24c4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO reevaluate - assert!(!*mu); \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/flush_epoch.rs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"948aeb44e9703895d82f99eed43136556b63a0585d2a37c17779d696d3395089"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO assert!(stats.cache.heap.truncated_file_bytes \u003E 0); \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/test_tree.rs"},"region":{"startLine":1331}}}],"partialFingerprints":{"codehealthFindingId/v1":"10105193984f130401d154f60122373a231b80310572ac8306ff2644605e7408"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME BUG 2 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/crash_tests/crash_sequential_writes.rs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"17d31e291ca2a54e45ce93bb8dcf8c01b769bf85579c60aaa85ed89142c4fd06"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME BUG 1 count 2 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/crash_tests/crash_batches.rs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"b71525ce5ca983ba173f34b44b88793332b39fd0f9f35e5fca5b2ade8445d200"}},{"ruleId":"D22","level":"warning","message":{"text":"Inconsistent entry point for opening a database. \u0060sled.open\u0060 is a convenience function that likely uses default config, while \u0060Db.open_with_config\u0060 requires explicit configuration. This creates two different ways to achieve the same primary goal (opening a DB) with different signatures and implied defaults.: Deprecate \u0060sled.open\u0060 in favor of \u0060Config::new().path(...).open()\u0060 or ensure \u0060Db.open_with_config\u0060 is the only documented entry point, or rename \u0060sled.open\u0060 to \u0060sled.open_with_defaults\u0060 to clarify intent. (signatures: Db.open_with_config(config: Config): Result | sled.open(path: P): Result)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"27c91ef6835035e0eb38ffb9b1033ca5065f719666faad57cef328faefaf2241"}},{"ruleId":"D22","level":"warning","message":{"text":"Redundant existence check. \u0060contains_key\u0060 is a common pattern, but in Rust, \u0060get\u0060 returning \u0060Option\u0060 is the idiomatic way to check existence. Having both \u0060get\u0060 and \u0060contains_key\u0060 (which likely just calls \u0060get\u0060 and checks for \u0060Some\u0060) adds API surface without significant benefit, especially since \u0060get\u0060 is already present.: Remove \u0060contains_key\u0060 and rely on \u0060get\u0060 returning \u0060Option\u0060. If \u0060contains_key\u0060 is kept for performance reasons (avoiding allocation of \u0060Option\u0060), document it clearly, but typically \u0060get\u0060 suffices. (signatures: Tree.get(key: K): Result | Tree.contains_key(key: K): Result)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"44492b4b945010d9cc7666ff4898927dad6666d326c89ed6494f7fffa7922356"}},{"ruleId":"D22","level":"warning","message":{"text":"Confusingly similar names for potentially inverse operations. \u0060update_and_fetch\u0060 suggests updating first then fetching the new value, while \u0060fetch_and_update\u0060 suggests fetching the old value then updating. While the order of words might imply the return value (fetch=return old, update=return new), the naming is not immediately intuitive and risks confusion with standard \u0060fetch_update\u0060 patterns in other libraries (like \u0060std::collections::HashMap\u0060\u0027s \u0060entry\u0060 API).: Rename to \u0060update_then_get\u0060 (returns new value) and \u0060get_then_update\u0060 (returns old value) or use \u0060fetch_update\u0060 and \u0060update_fetch\u0060 to align with common Rust naming conventions for atomic-like operations. (signatures: Tree.update_and_fetch(key: K, f: F): Result | Tree.fetch_and_update(key: K, f: F): Result)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"7f2e1ef3dae2265a4fda54a343c771090b51e52af0b3a221ec4cf1cac264d05f"}},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d5b8f11381d61a58459ffc7c595fd52d09c03c711894a63a9578043d2338412b"},"taxa":[{"id":"CWE-829","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"55a9feee9774121f2f799f78815f48406c361b20f27615a6b6c4aa576c312700"},"taxa":[{"id":"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":"67bf8f011650fe8a50379f5798aca37ad37177e0a7b235bc97eb3dd53c62c434"},"taxa":[{"id":"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":"33c6571213025612a66af61e8ccd7cdd3d9eb4554c14a99f5fb3469475785b93"},"taxa":[{"id":"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":"048871090f1c175eb1d34116b2147bf3a72741b37c29c7ced0c6e574455cbfe1"},"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":"929889218fe2adba5577454da6e2fffb54a21f38de62c057ea511bf22abbc080"},"taxa":[{"id":"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":"8a09be642eddaeccc3b7747d20ca12b4e5e143682e88c838d9eb5c0b3f5ea630"},"taxa":[{"id":"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":"b6f5a8d544eb90772c9d616f1c172c060dff9815ca9868a789654065d3ba95bc"},"taxa":[{"id":"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":"5737efc06c6e8974d9eca5116fd6fad508959b148616caec8005de3fc2426593"},"taxa":[{"id":"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":"5c69b484ec756d4916e14a04ee03cf6c5312e79e0e01be5125617bdb0aab9252"},"taxa":[{"id":"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":"53315474bb32001c95429eb87437f2f6d6b5dc02b7dabcb3440cf7a4f84d5346"},"taxa":[{"id":"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":"d951e19574a6bab28d2c3237c4d3902a5e18818e2a792861b89ffcb9f927b73c"},"taxa":[{"id":"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":"dec15bae94e963c666882db643a571f2501ca37dcfecf6208b0872d727057426"},"taxa":[{"id":"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":"fa6ba155c0f051f7038e8c57740b929e1c1908592e9302c693b1a39a624ea28d"},"taxa":[{"id":"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":"6645ecdca7c4db486822dba45a38fb7808c956094a6ca4308e8f4bf7879757f5"},"taxa":[{"id":"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":"1d10d46489d4964ffb6ecda8f3b426031d59ec7f660235dbee1f3f1d23d3adc0"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"1651527fcff7213da991a35665cbf6cf1708d5350636e4e5058d3a3134c8df65"},"taxa":[{"id":"CWE-1104","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-1329","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3ac27dd932e788f2be5a22d00593014a4ec285d4ac6bb9b385a9920b60398842"},"taxa":[{"id":"CWE-1104","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"8765ee8aa670d274dfb9af69acb8344ac3b6c2c7df79fa7317f83dc55eb2876b"},"taxa":[{"id":"CWE-1104","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"eacc45e3ae65307eb2a833939abb69960aa8b865a265e9d0f3818d40a4275f79"},"taxa":[{"id":"CWE-1104","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-1329","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: db.rs \u2194 event_verifier.rs: \u0060src/db.rs\u0060 and \u0060src/event_verifier.rs\u0060 change together 62% of the time (8 of the 13 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency between them. They sit in the same directory, but in this ecosystem each file is its own module \u2014 a sibling reference still needs an import \u2014 so the missing import edge is real: the coupling runs through shared behaviour, not a declared dependency. If they duplicate structure, extract the common part into one unit; otherwise the coupling is hidden and worth breaking. You can check this without leaving the row: of the 8 shared commits counted here, the most recent 3 are \u0060bd65e8e0\u0060 Increase the strictness of the event verifier and fix a variety of su\u2026; \u006026479428\u0060 Thread significantly more event verification into the writepath; \u0060ce51eeb5\u0060 Standardize naming on ObjectId. Include CollectionId and low key in O\u2026 \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/db.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d666f80515802d13e5c9a97caf51b83c7a37df0f88522bcf0fe1b7e40fc4bb66"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: db.rs \u2194 metadata_store.rs: \u0060src/db.rs\u0060 and \u0060src/metadata_store.rs\u0060 change together 54% of the time (15 of the 28 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency between them. They sit in the same directory, but in this ecosystem each file is its own module \u2014 a sibling reference still needs an import \u2014 so the missing import edge is real: the coupling runs through shared behaviour, not a declared dependency. If they duplicate structure, extract the common part into one unit; otherwise the coupling is hidden and worth breaking. You can check this without leaving the row: of the 15 shared commits counted here, the most recent 3 are \u00606634e601\u0060 Reduce reliance on some external crates; \u00601a29b92f\u0060 Add a lot more assertions, rely on a full Mutex in a couple places fo\u2026; \u0060ffbdade4\u0060 Add significantly more stats to the read and write paths. \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/db.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1336f1bcf045e5169172ac84e2ffa0d22a2d1efdcd36f8e8f5f59b09633aa3ef"}},{"ruleId":"D36","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9658270ba49f37ed04e99ab1263b6393cd42aed8bdfb7aafd9fa1070f5491895"}},{"ruleId":"M2","level":"note","message":{"text":"No ADRs: No Architecture Decision Records found \u2014 no conventional ADR directory, no numbered \u0060NNNN-title\u0060 documents in any markup this check reads, and nothing ADR-shaped by content. Design rationale recorded elsewhere (a design-notes tree, a mailing list, pull-request discussion) is not visible to this check and is not re-findable per decision, so a future maintainer cannot ask why one choice was made and get an answer."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"670b3d6e36a756d63097d0dfbf90afd5fc761308800b9354894a07c3f4e4aa14"}},{"ruleId":"M4","level":"note","message":{"text":"README/code drift: README advertises a RAG / ML engine, but no ML/RAG code or dependency exists \u2014 searched for: \u0060rag\u0060, \u0060langchain\u0060, \u0060llamaindex\u0060, \u0060pinecone\u0060, \u0060weaviate\u0060, \u0060qdrant\u0060, \u0060embeddings\u0060. Each was matched case- and separator-insensitively against file and directory NAMES anywhere in the tree, and against the CONTENTS of manifest files (package.json, *.csproj, *.props, *.slnx, *.yml, Dockerfile); the README\u0027s own prose never counts, so a claim is never refuted by merely being made. Nothing outside that search was read \u2014 a footprint living only in a submodule, in a file type not listed here, or under a name none of those terms matches is not seen, and this row is then wrong."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"343bbbd51ceb8de7a9ff88d79f7c797abf9b5921f8727b67b4d0f4f8a22c5e49"}}],"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-1059","guid":"a2381a08-60f6-9554-a8b8-f3018cfaaca5","name":"Insufficient Technical Documentation","shortDescription":{"text":"Insufficient Technical Documentation"},"helpUri":"https://cwe.mitre.org/data/definitions/1059.html"},{"id":"CWE-1104","guid":"4c918cb5-b2a6-6c55-9963-a44ee464305e","name":"CWE-1104","shortDescription":{"text":"CWE-1104"},"helpUri":"https://cwe.mitre.org/data/definitions/1104.html"},{"id":"CWE-1329","guid":"f70f1c3f-4ccf-cb5e-bdd3-03ba4868d36d","name":"CWE-1329","shortDescription":{"text":"CWE-1329"},"helpUri":"https://cwe.mitre.org/data/definitions/1329.html"},{"id":"CWE-1357","guid":"e4d2e772-757e-0a5c-bd7d-77052949d866","name":"Reliance on Insufficiently Trustworthy Component","shortDescription":{"text":"Reliance on Insufficiently Trustworthy Component"},"helpUri":"https://cwe.mitre.org/data/definitions/1357.html"},{"id":"CWE-259","guid":"ae9ad959-fbb6-9d5e-892d-3dca66da0b69","name":"Use of Hard-coded Password","shortDescription":{"text":"Use of Hard-coded Password"},"helpUri":"https://cwe.mitre.org/data/definitions/259.html"},{"id":"CWE-353","guid":"09d7e902-d4ee-f05d-ae6c-0a1554d0c18f","name":"CWE-353","shortDescription":{"text":"CWE-353"},"helpUri":"https://cwe.mitre.org/data/definitions/353.html"},{"id":"CWE-494","guid":"b8a65e0d-e459-4a55-a931-fc1136482375","name":"Download of Code Without Integrity Check","shortDescription":{"text":"Download of Code Without Integrity Check"},"helpUri":"https://cwe.mitre.org/data/definitions/494.html"},{"id":"CWE-522","guid":"71fb233e-ce6a-ae57-9419-ef8373540b09","name":"CWE-522","shortDescription":{"text":"CWE-522"},"helpUri":"https://cwe.mitre.org/data/definitions/522.html"},{"id":"CWE-77","guid":"332c8ade-6612-9f56-a06b-d8d90b1a8750","name":"Command Injection","shortDescription":{"text":"Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/77.html"},{"id":"CWE-78","guid":"2e31ceaf-c7ae-2e5e-9661-cfb1362789cf","name":"OS Command Injection","shortDescription":{"text":"OS Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/78.html"},{"id":"CWE-79","guid":"fd45580b-e8c4-fc5e-8c2f-aa8fab0b4dbf","name":"Cross-site Scripting (XSS)","shortDescription":{"text":"Cross-site Scripting (XSS)"},"helpUri":"https://cwe.mitre.org/data/definitions/79.html"},{"id":"CWE-798","guid":"5e8f057d-fee3-995a-a0cb-9fc5b0d174d1","name":"Use of Hard-coded Credentials","shortDescription":{"text":"Use of Hard-coded Credentials"},"helpUri":"https://cwe.mitre.org/data/definitions/798.html"},{"id":"CWE-829","guid":"13c33925-97fb-5a5e-b40c-56d328b8a4d7","name":"CWE-829","shortDescription":{"text":"CWE-829"},"helpUri":"https://cwe.mitre.org/data/definitions/829.html"},{"id":"CWE-89","guid":"6d08fdad-37eb-c150-bbf0-d7d946863407","name":"SQL Injection","shortDescription":{"text":"SQL Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/89.html"},{"id":"CWE-94","guid":"75e7f50c-6c2f-dd52-bf40-bf6c52b861fd","name":"Code Injection","shortDescription":{"text":"Code Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/94.html"}]}],"properties":{"codehealthPublication":{"public":true,"notice":"This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings \u2014 which rule fired, in which file, on which line, and how to fix it \u2014 are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.","securityFindingsRedacted":21,"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."]}]}