{"$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":"D3","name":"God Classes","shortDescription":{"text":"God Classes"},"helpUri":"https://codehealth.canine.dev/dimensions/D3"},{"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":"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":"D11","name":"Test Reliability","shortDescription":{"text":"Test Reliability"},"helpUri":"https://codehealth.canine.dev/dimensions/D11"},{"id":"D12","name":"Dependency Hygiene","shortDescription":{"text":"Dependency Hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/D12"},{"id":"D13","name":"Secret Scanning","shortDescription":{"text":"Secret Scanning"},"helpUri":"https://codehealth.canine.dev/dimensions/D13","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"A07:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"],"owasp":"A07:2025"}},{"id":"D14","name":"License Compliance","shortDescription":{"text":"License Compliance"},"helpUri":"https://codehealth.canine.dev/dimensions/D14"},{"id":"D15","name":"Churn \u00D7 Complexity Hotspots","shortDescription":{"text":"Churn \u00D7 Complexity Hotspots"},"helpUri":"https://codehealth.canine.dev/dimensions/D15"},{"id":"D16","name":"Bus Factor","shortDescription":{"text":"Bus Factor"},"helpUri":"https://codehealth.canine.dev/dimensions/D16"},{"id":"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":"D27","name":"Navigability","shortDescription":{"text":"Navigability"},"helpUri":"https://codehealth.canine.dev/dimensions/D27"},{"id":"D28","name":"Secrets (history)","shortDescription":{"text":"Secrets (history)"},"helpUri":"https://codehealth.canine.dev/dimensions/D28","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"A07:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"],"owasp":"A07:2025"}},{"id":"D29","name":"Static Analysis (SAST)","shortDescription":{"text":"Static Analysis (SAST)"},"helpUri":"https://codehealth.canine.dev/dimensions/D29","relationships":[{"target":{"id":"CWE-79","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-89","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-94","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-77","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"A05:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-79","CWE-89","CWE-78","CWE-94","CWE-77"],"owasp":"A05:2025"}},{"id":"D30","name":"Dependency Vulnerabilities","shortDescription":{"text":"Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D30","relationships":[{"target":{"id":"CWE-1395","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-937","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1395","CWE-937"],"owasp":"A03:2025"}},{"id":"D31","name":"IaC \u0026 Container Security","shortDescription":{"text":"IaC \u0026 Container Security"},"helpUri":"https://codehealth.canine.dev/dimensions/D31","relationships":[{"target":{"id":"CWE-1032","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-732","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-16","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"A02:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1032","CWE-732","CWE-16"],"owasp":"A02:2025"}},{"id":"D34","name":"Knowledge Freshness","shortDescription":{"text":"Knowledge Freshness"},"helpUri":"https://codehealth.canine.dev/dimensions/D34"},{"id":"D35","name":"Change Coupling","shortDescription":{"text":"Change Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D35"},{"id":"D36","name":"Supply-chain Provenance \u0026 Signing","shortDescription":{"text":"Supply-chain Provenance \u0026 Signing"},"helpUri":"https://codehealth.canine.dev/dimensions/D36","relationships":[{"target":{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1357","CWE-494"],"owasp":"A03:2025"}},{"id":"D39","name":"IL Efficiency","shortDescription":{"text":"IL Efficiency"},"helpUri":"https://codehealth.canine.dev/dimensions/D39"},{"id":"D43","name":"Malicious Dependencies","shortDescription":{"text":"Malicious Dependencies"},"helpUri":"https://codehealth.canine.dev/dimensions/D43","relationships":[{"target":{"id":"CWE-506","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"A08:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-506"],"owasp":"A08:2025"}},{"id":"D44","name":"Platform End-of-Life","shortDescription":{"text":"Platform End-of-Life"},"helpUri":"https://codehealth.canine.dev/dimensions/D44"},{"id":"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":"AX6","name":"Interface segregation","shortDescription":{"text":"Interface segregation"},"helpUri":"https://codehealth.canine.dev/dimensions/AX6"},{"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":"ED5","name":"Idempotency","shortDescription":{"text":"Idempotency"},"helpUri":"https://codehealth.canine.dev/dimensions/ED5"},{"id":"ES1","name":"Fold determinism","shortDescription":{"text":"Fold determinism"},"helpUri":"https://codehealth.canine.dev/dimensions/ES1"},{"id":"ES2","name":"Immutable events","shortDescription":{"text":"Immutable events"},"helpUri":"https://codehealth.canine.dev/dimensions/ES2"},{"id":"GD1","name":"Unfinished \u0026 placeholder code","shortDescription":{"text":"Unfinished \u0026 placeholder code"},"helpUri":"https://codehealth.canine.dev/dimensions/GD1"},{"id":"M1","name":"Documentation (README)","shortDescription":{"text":"Documentation (README)"},"helpUri":"https://codehealth.canine.dev/dimensions/M1"},{"id":"M2","name":"Architecture documentation","shortDescription":{"text":"Architecture documentation"},"helpUri":"https://codehealth.canine.dev/dimensions/M2"},{"id":"M3","name":"Folder \u0026 project structure","shortDescription":{"text":"Folder \u0026 project structure"},"helpUri":"https://codehealth.canine.dev/dimensions/M3"},{"id":"M4","name":"Documentation accuracy","shortDescription":{"text":"Documentation accuracy"},"helpUri":"https://codehealth.canine.dev/dimensions/M4"},{"id":"P1","name":"CI/CD gates","shortDescription":{"text":"CI/CD gates"},"helpUri":"https://codehealth.canine.dev/dimensions/P1"},{"id":"P10","name":"Library API \u0026 versioning","shortDescription":{"text":"Library API \u0026 versioning"},"helpUri":"https://codehealth.canine.dev/dimensions/P10"},{"id":"P12","name":"CI test-gate honesty","shortDescription":{"text":"CI test-gate honesty"},"helpUri":"https://codehealth.canine.dev/dimensions/P12"},{"id":"P2","name":"Observability","shortDescription":{"text":"Observability"},"helpUri":"https://codehealth.canine.dev/dimensions/P2"},{"id":"P3","name":"Security \u0026 performance tooling","shortDescription":{"text":"Security \u0026 performance tooling"},"helpUri":"https://codehealth.canine.dev/dimensions/P3"},{"id":"P4","name":"Deployment \u0026 Rollback","shortDescription":{"text":"Deployment \u0026 Rollback"},"helpUri":"https://codehealth.canine.dev/dimensions/P4"},{"id":"P6","name":"Release Hygiene","shortDescription":{"text":"Release Hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/P6"},{"id":"PF1","name":"Benchmark discipline","shortDescription":{"text":"Benchmark discipline"},"helpUri":"https://codehealth.canine.dev/dimensions/PF1"},{"id":"PF2","name":"Allocation hygiene","shortDescription":{"text":"Allocation hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/PF2"},{"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":"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":"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":"X20","name":"Mistyped argument guard","shortDescription":{"text":"Mistyped argument guard"},"helpUri":"https://codehealth.canine.dev/dimensions/X20"},{"id":"X23","name":"Unguarded diagnostic materialisation","shortDescription":{"text":"Unguarded diagnostic materialisation"},"helpUri":"https://codehealth.canine.dev/dimensions/X23"},{"id":"X27","name":"Collection changed while being enumerated","shortDescription":{"text":"Collection changed while being enumerated"},"helpUri":"https://codehealth.canine.dev/dimensions/X27"},{"id":"X28","name":"Index access outside its own emptiness guard","shortDescription":{"text":"Index access outside its own emptiness guard"},"helpUri":"https://codehealth.canine.dev/dimensions/X28"},{"id":"X31","name":"Test-only surface in a production module","shortDescription":{"text":"Test-only surface in a production module"},"helpUri":"https://codehealth.canine.dev/dimensions/X31"},{"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":"D3","level":"warning","message":{"text":"FileTooLong: Expressions/CheckExpressions.fs: FileTooLong \u2014 8853 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 78 functions. The bar is 500 significant lines; this is 8353 over it, 17.71\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/fcs-fable/src/Compiler/Checking/Expressions/CheckExpressions.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2793b67628c6abedea2cbed5449d1e322f329d4f71ff2e3d92cab9db14757cdd"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: TypedTree/TypedTreeOps.fs: FileTooLong \u2014 8516 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 826 functions. The bar is 500 significant lines; this is 8016 over it, 17.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":"src/fcs-fable/src/Compiler/TypedTree/TypedTreeOps.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd03117cfe5389730ce293905c1f1ed75aa3e77176eaddf401ad7b3cfe08a5f9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Beam/Replacements.fs: FileTooLong \u2014 5596 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 114 functions. The bar is 500 significant lines; this is 5096 over it, 11.19\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/Fable.Transforms/Beam/Replacements.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7925a7af6d5cffac7a7a3753f0854e9ee70fe29aa8b6338b91f7282333ef47e0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Rust/Fable2Rust.fs: FileTooLong \u2014 4558 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 4058 over it, 9.12\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/Fable.Transforms/Rust/Fable2Rust.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"086453e5f424599081ead46bfc3e86290fe7af19c56a735cd7b20c75ef39fa95"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Fable.Transforms/Replacements.fs: FileTooLong \u2014 4328 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 177 functions. The bar is 500 significant lines; this is 3828 over it, 8.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":"src/Fable.Transforms/Replacements.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d22eefdae1fe831fd9c3e37c96f34d191666098306bb4e19f95d14517ee04ee"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: AbstractIL/il.fs: FileTooLong \u2014 4223 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 189 functions. The bar is 500 significant lines; this is 3723 over it, 8.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":"src/fcs-fable/src/Compiler/AbstractIL/il.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8fb68204bc057aaed16a669a207ba65eba7123cc2b1f7586cefb8ece9b1df10e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: ILBinaryWriter: TooManyFunctions \u2014 246 functions. The bar is 30 functions; this is 216 over it, 8.20\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/AbstractIL/ilwrite.fs"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"58fef18b0d3f67942affa81f3974656f0f6044789f3727953a532fb0e2b79bf0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Checking/CheckDeclarations.fs: FileTooLong \u2014 4087 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 3587 over it, 8.17\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/fcs-fable/src/Compiler/Checking/CheckDeclarations.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"92e9fc4c118119d17438534be54206c14fae91d0953294117b017675e6a65be6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: AbstractIL/ilread.fs: FileTooLong \u2014 3994 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 3494 over it, 7.99\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/AbstractIL/ilread.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c02e9ed5156e51dade446cec37995b66d0e36a02637267b7e84050f85766ee62"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Babel/Fable2Babel.fs: FileTooLong \u2014 3969 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 3469 over it, 7.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":"src/Fable.Transforms/Babel/Fable2Babel.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b47c9f079b5e8d288babe63e37587a7f4400db9dadee7a9bbf809942d687f436"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Checking/NameResolution.fs: FileTooLong \u2014 3838 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 64 functions. The bar is 500 significant lines; this is 3338 over it, 7.68\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/Checking/NameResolution.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a34dce8a166754abd960e6e5ee8a6cce00790952b47349f0f4f10fcdb64e8c6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/array.rs: FileTooLong \u2014 3799 significant 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 140 free functions. The bar is 500 significant lines; this is 3299 over it, 7.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":"src/fable-library-py/src/array.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5f51733bf9cbca6a635df0ecc2b5b4f391544533c86fd875b60bd86293c1c31"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Python/Fable2Python.Transforms.fs: FileTooLong \u2014 3789 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 111 functions. The bar is 500 significant lines; this is 3289 over it, 7.58\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Fable.Transforms/Python/Fable2Python.Transforms.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b74e5bcd35a68614b5d4e4e7c091146a9693603a548a562fe8599d528835a394"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Python/Replacements.fs: FileTooLong \u2014 3757 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 160 functions. The bar is 500 significant lines; this is 3257 over it, 7.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":"src/Fable.Transforms/Python/Replacements.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"85babf1edb0dae197fe320f8ddc9525772c61e35d6aa4cb19815fb7709c14dc6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Interactive/fsi.fs: FileTooLong \u2014 3602 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 3102 over it, 7.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":"src/fcs-fable/src/Compiler/Interactive/fsi.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8de98fc0d844cb475fe6b76e42b5dac103f92a69d5f01bdc3f5398e23570d163"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Dart/Replacements.fs: FileTooLong \u2014 3588 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 152 functions. The bar is 500 significant lines; this is 3088 over it, 7.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":"src/Fable.Transforms/Dart/Replacements.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"000c2afef4c53340f702cd84c43aa0a453bf13b9324b2d1d5e590f107e2941a6"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: Util: TooManyFunctions \u2014 212 functions. The bar is 30 functions; this is 182 over it, 7.07\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Fable.Transforms/Rust/Fable2Rust.fs"},"region":{"startLine":1330}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2835152b94c3b7cf686e74df25f1e2aa0ba29ebb2b0f5c53b028bbaee2dbdb5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: AbstractIL/ilwrite.fs: FileTooLong \u2014 3395 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 2895 over it, 6.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":"src/fcs-fable/src/Compiler/AbstractIL/ilwrite.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5346f946066a81ccd31bb5451279676e60faf97e238d5e0becf6fa4d7bdc873"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: TypedTree/TypedTree.fs: FileTooLong \u2014 3387 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 2887 over it, 6.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":"src/fcs-fable/src/Compiler/TypedTree/TypedTree.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b1cfa30239d52b704d47ef62c2b3319ea1e06af7d371e6ea9afdd7e4c4cb899"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Optimize/Optimizer.fs: FileTooLong \u2014 3162 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 2662 over it, 6.32\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/fcs-fable/src/Compiler/Optimize/Optimizer.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8103f355ea59222ade68f3d86e432ac7f961f13b723aff1d940de306f39ef60d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: TypedTree/TypedTreePickle.fs: FileTooLong \u2014 3143 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 2643 over it, 6.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":"src/fcs-fable/src/Compiler/TypedTree/TypedTreePickle.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a474687031193fe495423dd4079f81721f04f594c6d38bb0965c464af3da2465"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Service/FSharpCheckerResults.fs: FileTooLong \u2014 3142 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 2642 over it, 6.28\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/fcs-fable/src/Compiler/Service/FSharpCheckerResults.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebaa15c5dc663882dc594e3d878a8657ae20baa0f2cb3b04604b406329b8b31a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Rust/Replacements.fs: FileTooLong \u2014 3002 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 159 functions. The bar is 500 significant lines; this is 2502 over it, 6.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":"src/Fable.Transforms/Rust/Replacements.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"da9bd1ae5e03109e547d51f70cde56ffe6b38c78ffe5e1995d7abb0c8c966858"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Checking/ConstraintSolver.fs: FileTooLong \u2014 2955 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 35 functions. The bar is 500 significant lines; this is 2455 over it, 5.91\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/fcs-fable/src/Compiler/Checking/ConstraintSolver.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"55e92408686ac6b21d131368000be335ff9289a93f88a9678db484311c191362"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Fable.Transforms/FSharp2Fable.Util.fs: FileTooLong \u2014 2774 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 2274 over it, 5.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":"src/Fable.Transforms/FSharp2Fable.Util.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcf3c84a2ad9c20dc35ee2cd7f38d2c54f5f192de794fff16662401f51ae0fe4"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Beam/Fable2Beam.fs: FileTooLong \u2014 2708 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 2208 over it, 5.42\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/Fable.Transforms/Beam/Fable2Beam.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"00c3433690f61c16a58c83d8ad3f94f5e12dbc1a4d883bd64745ad830ea8b617"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: FSharpArray: ClassTooLong \u2014 2056 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 138 methods, 2 blocks, lines 21-3589. The bar is 400 significant lines; this is 1656 over it, 5.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":"src/fable-library-py/src/array.rs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"51c3b63f9dff1b5b21f437cffe37957940189044359b55d27b30dd5bc8d56661"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Symbols/Symbols.fs: FileTooLong \u2014 2427 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 1927 over it, 4.85\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/Symbols/Symbols.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2cdc584956bf5224237aed1e1757c77a944b50ab4d04712019a45a50cb566e36"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Dart/Fable2Dart.fs: FileTooLong \u2014 2416 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 119 functions. The bar is 500 significant lines; this is 1916 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":"src/Fable.Transforms/Dart/Fable2Dart.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"edc41fa1e320039541b12c1606fb54702773c2053102472ba94a4b9d74d1af49"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Fable.Transforms/FSharp2Fable.fs: FileTooLong \u2014 2329 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"src/Fable.Transforms/FSharp2Fable.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d850f45ce7a4faa778205b63fab0aafe782bf655842a6d0693faaf350be0eb10"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FSharpArray: TooManyMethods \u2014 138 methods. The bar is 30 methods; this is 108 over it, 4.60\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-py/src/array.rs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8934345b1a95bcf019d52e02423d8d3eb84638c647f2186b663ce37b92fb22a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Expressions/CheckComputationExpressions.fs: FileTooLong \u2014 2243 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 1743 over it, 4.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":"src/fcs-fable/src/Compiler/Checking/Expressions/CheckComputationExpressions.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfdd31c98e72c8d5bbebe018a6e440f315cfab8f90db11c546e2186935bb82cd"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Checking/NicePrint.fs: FileTooLong \u2014 2229 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 58 functions. The bar is 500 significant lines; this is 1729 over it, 4.46\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/Checking/NicePrint.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ab179aa31453bc2775228ba238574a91b30efd4b9028ccd83b9b465fbed4cd9"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: Util: TooManyFunctions \u2014 128 functions. The bar is 30 functions; this is 98 over it, 4.27\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Fable.Transforms/Babel/Fable2Babel.fs"},"region":{"startLine":1041}}}],"partialFingerprints":{"codehealthFindingId/v1":"52096a6c267d33b3c547628f89a394bb3d851255f27f7209cafea0559288bf6f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: AST/Rust.AST.State.fs: FileTooLong \u2014 2103 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 1603 over it, 4.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":"src/Fable.Transforms/Rust/AST/Rust.AST.State.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a15aa0e4adcc11de532bd61b02b10e6cdc2b6e8204e85ed866abbefd4273f90"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Service/ServiceParsedInputOps.fs: FileTooLong \u2014 1973 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 1473 over it, 3.95\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/fcs-fable/src/Compiler/Service/ServiceParsedInputOps.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1236e525442879c664ea6ad7ac7a4c3029cd9449cc41297e38be7e9fa0949e08"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Driver/CompilerImports.fs: FileTooLong \u2014 1946 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 1446 over it, 3.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":"src/fcs-fable/src/Compiler/Driver/CompilerImports.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"57b72f9fcd67b1219ac12f3339eb1267fb5307871c06a6794294aa959e02a635"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Checking/PostInferenceChecks.fs: FileTooLong \u2014 1907 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 1407 over it, 3.81\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/fcs-fable/src/Compiler/Checking/PostInferenceChecks.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd5443dac6e58e6f98b2d7729a87ee4fa7d4d2da386b98c0d149b8f22ef3d62d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Driver/CompilerDiagnostics.fs: FileTooLong \u2014 1882 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 1382 over it, 3.76\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/fcs-fable/src/Compiler/Driver/CompilerDiagnostics.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f6045970801661aaf72e36d8901087024fc96bb4ff54904140033fa747f13cc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Driver/CompilerOptions.fs: FileTooLong \u2014 1855 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 1355 over it, 3.71\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/fcs-fable/src/Compiler/Driver/CompilerOptions.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"81178267db3d9294b04332754b4cc7c25c714ba7c6b720827e5acc8f842db13c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: TypedTree/TypedTree.fsi: FileTooLong \u2014 1831 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 1331 over it, 3.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":"src/fcs-fable/src/Compiler/TypedTree/TypedTree.fsi"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba6a20ff7c7d70de9cf2b8256268c8318eaa2ff0f86db2f07bf2d91e36579540"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Service/TransparentCompiler.fs: FileTooLong \u2014 1806 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 1306 over it, 3.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":"src/fcs-fable/src/Compiler/Service/TransparentCompiler.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d4ce590aaa425a520f952e156e7c6c5bde49fc1c35507ea94b15f2b07b5adba"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: AbstractIL/ilreflect.fs: FileTooLong \u2014 1765 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 105 functions. The bar is 500 significant lines; this is 1265 over it, 3.53\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/AbstractIL/ilreflect.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"71a504b7c47cc756c21d943e4378170c30108ee785d99a0a30af6008aa063cca"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: SyntaxTree/LexFilter.fs: FileTooLong \u2014 1720 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 1220 over it, 3.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":"src/fcs-fable/src/Compiler/SyntaxTree/LexFilter.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e39adcde077cd6713fb788a28ca9afa7c4244398aa51671a7cb8068706d49ef"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Checking/infos.fs: FileTooLong \u2014 1712 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 1212 over it, 3.42\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/fcs-fable/src/Compiler/Checking/infos.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"84ac3ce4d8c8cc897fff1f4acaddab05de68d15dbb4fb1bb696a96c04ea2c85e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: TypeInfo: TooManyFunctions \u2014 100 functions. The bar is 30 functions; this is 70 over it, 3.33\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Fable.Transforms/Rust/Fable2Rust.fs"},"region":{"startLine":371}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e6c1b2413d93c2d78860b176b1735743a8226c7a04f1338252b030913bf0702"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Service/ServiceLexing.fs: FileTooLong \u2014 1614 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 1114 over it, 3.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":"src/fcs-fable/src/Compiler/Service/ServiceLexing.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecad01246ba447b94d3e3f62403679fc1948ed01c9a7324ec19f7ac3da622234"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: TypedTree/TcGlobals.fs: FileTooLong \u2014 1605 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 1105 over it, 3.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":"src/fcs-fable/src/Compiler/TypedTree/TcGlobals.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"606133fbc78f2e16b5a5259db3316d6190a0580a2953f25f6e210d51ba52d448"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Checking/MethodCalls.fs: FileTooLong \u2014 1586 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 1086 over it, 3.17\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/fcs-fable/src/Compiler/Checking/MethodCalls.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a23e8c7ac919c6da565b84c0720c649901158f5c2e5b6def75eac775bd25915"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Fable.Transforms/Transforms.Util.fs: FileTooLong \u2014 1580 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 110 functions. 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":"src/Fable.Transforms/Transforms.Util.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"adf5c4533f059892b5a491c139fd3f1876ab1a54a4fb6e0c50a078b9d3a93c43"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Fable.Transforms/Replacements.Util.fs: FileTooLong \u2014 1490 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 66 functions. The bar is 500 significant lines; this is 990 over it, 2.98\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/Fable.Transforms/Replacements.Util.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1832dca79c54e5d6971d751956f2d7cbab1453145f48aca08ffc19724744b62c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: Util: TooManyFunctions \u2014 88 functions. The bar is 30 functions; this is 58 over it, 2.93\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Fable.Transforms/FSharp2Fable.Util.fs"},"region":{"startLine":2001}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc6a59d0181015eb0cbab21adde4ea8fba415ac4803f0c29e076f4e2ec914d1c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Php/Fable2Php.fs: FileTooLong \u2014 1460 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 34 functions. The bar is 500 significant lines; this is 960 over it, 2.92\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/Fable.Transforms/Php/Fable2Php.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6aef8e937470af4aee7e9d631555ea70ca9eb95a18593b0eebd9bba8d5c8b9f0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Python/Fable2Python.Util.fs: FileTooLong \u2014 1437 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 97 functions. The bar is 500 significant lines; this is 937 over it, 2.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":"src/Fable.Transforms/Python/Fable2Python.Util.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd12a572b6ece3f7673dd0e5ff287e0b83a0d7ab8b6858be15b1417f6f6672c9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: AST/Rust.AST.Symbols.fs: FileTooLong \u2014 1417 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 917 over it, 2.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":"src/Fable.Transforms/Rust/AST/Rust.AST.Symbols.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"45bc78407731dce9b0604cfd3616d2620a6953426a7ce318df457a756fb51016"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: SyntaxTree/SyntaxTree.fs: FileTooLong \u2014 1377 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 877 over it, 2.75\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/fcs-fable/src/Compiler/SyntaxTree/SyntaxTree.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf087014e9a14e5f4136ed7931c53b30ee4c0dcc1abd86eb06ebd69a85a858f6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Driver/ParseAndCheckInputs.fs: FileTooLong \u2014 1344 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 844 over it, 2.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":"src/fcs-fable/src/Compiler/Driver/ParseAndCheckInputs.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"74f657aa6246e2efb904914aff1f529b8a9809bd06d73638b5fd4b60c3805659"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: TypedTreeBasics: TooManyFunctions \u2014 80 functions. The bar is 30 functions; this is 50 over it, 2.67\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/TypedTree/TypedTreeBasics.fs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f82f44ea07e12bf81238bb919838098d3dbf36c297a58c53ebc6c22288700ec"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Fable.Cli/Main.fs: FileTooLong \u2014 1333 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 833 over it, 2.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":"src/Fable.Cli/Main.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"10ef9ed52db3325a8e996bbe1febd15b81659c18d8cb05393dcc434f801729d6"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: fable_library_rust::BigInt::BigInt_: TooManyFunctions \u2014 78 free functions. The bar is 30 free functions; this is 48 over it, 2.60\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-rust/src/BigInt.rs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"d824ea5c91f6c8e6dfc9acdbd76b4d5f2f175afc395901b25836de97d0ee3605"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Babel/BabelPrinter.fs: FileTooLong \u2014 1298 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 74 functions. The bar is 500 significant lines; this is 798 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":"src/Fable.Transforms/Babel/BabelPrinter.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f98f02c92510c31cd89f7f1cd20c0b87b9ebf999af9fc2451d1f69007c0ce884"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: TypedTree/TypedTreeOps.fsi: FileTooLong \u2014 1283 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 783 over it, 2.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":"src/fcs-fable/src/Compiler/TypedTree/TypedTreeOps.fsi"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a7558e36f054a8380cbf8335f3b9d8a994dbd6f370416d06e28c90b81535e0e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Service/IncrementalBuild.fs: FileTooLong \u2014 1240 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 740 over it, 2.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":"src/fcs-fable/src/Compiler/Service/IncrementalBuild.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"30b2174fd306f3a159d0c7ba76a4ebc1f87ce69fae443743217f32772224010f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Service/BackgroundCompiler.fs: FileTooLong \u2014 1238 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 738 over it, 2.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":"src/fcs-fable/src/Compiler/Service/BackgroundCompiler.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"648a8063f6f97b87c1730ea2d892e6c395750b4f1f340a80f95f88b399c19851"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Service/ServiceParseTreeWalk.fs: FileTooLong \u2014 1233 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 733 over it, 2.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":"src/fcs-fable/src/Compiler/Service/ServiceParseTreeWalk.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"de28dbc017d9711048a1c607b51cebf335a12e1d924fcb2d101c5a029fb33209"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Checking/AugmentWithHashCompare.fs: FileTooLong \u2014 1223 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 723 over it, 2.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":"src/fcs-fable/src/Compiler/Checking/AugmentWithHashCompare.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad04114ae38dc20358d73eabee53b45c77ba3bcd0092e3db56b9d26c06990ec9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Utilities/sformat.fs: FileTooLong \u2014 1214 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 714 over it, 2.43\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/fcs-fable/src/Compiler/Utilities/sformat.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"15fb0547ac6d7330c3512c79336185b28a0f05c5f60f0a6fb3aa367e368deb9f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: fable_library_rust::Decimal::Decimal_: TooManyFunctions \u2014 72 free functions. The bar is 30 free functions; this is 42 over it, 2.40\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-rust/src/Decimal.rs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d612c5c6c110067c0ef891b0493a8297fe6a7ac38ea3fdf658aa4e02c075053"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Driver/CompilerConfig.fs: FileTooLong \u2014 1192 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 692 over it, 2.38\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/Driver/CompilerConfig.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7cf3850722545d932e0848ccb7531e903e1df84357d80205fed91b86e924ec3"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PhpCompiler: TooManyMethods \u2014 70 methods. The bar is 30 methods; this is 40 over it, 2.33\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Fable.Transforms/Php/Fable2Php.fs"},"region":{"startLine":1947}}}],"partialFingerprints":{"codehealthFindingId/v1":"2cfb1b17f9750bb8cd00f5b8135053d42053aaf19f7d2737edf1684b07feb6c8"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: Date.dateToStringWithCustomFormat: FunctionTooLong \u2014 dateToStringWithCustomFormat runs 232 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 132 over it, 2.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":"src/fable-library-ts/Date.ts"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b817acf9a1131ffaff1044ccb6901df6d8f1182172b8b24555427b122f55897"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Checking/PatternMatchCompilation.fs: FileTooLong \u2014 1155 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 655 over it, 2.31\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/Checking/PatternMatchCompilation.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1400ca78b0e94a3ff2d76d1c86600ab63b87b8cb067ee937f9cf2334e08358a5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Symbols/Exprs.fs: FileTooLong \u2014 1151 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 48 functions. The bar is 500 significant lines; this is 651 over it, 2.30\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/fcs-fable/src/Compiler/Symbols/Exprs.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb1d97c6831db060c120333761e22ec4a6b989158f4df6eedace258368c7e6c5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: Exprs: TooManyFunctions \u2014 68 functions. The bar is 30 functions; this is 38 over it, 2.27\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Fable.Transforms/Rust/AST/Rust.AST.Helpers.fs"},"region":{"startLine":702}}}],"partialFingerprints":{"codehealthFindingId/v1":"08c3f01daca04885e4361ed35b87cf389168c4d579948c3a3ac63d796bda42ef"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/strings.rs: FileTooLong \u2014 1129 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 54 free functions. The bar is 500 significant lines; this is 629 over it, 2.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":"src/fable-library-py/src/strings.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"668353dd6ace92cb2634709f2daed99a43add9453b9b992094404e0f0f6e70fd"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/Seq.fs: FileTooLong \u2014 1119 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 128 functions. The bar is 500 significant lines; this is 619 over it, 2.24\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-rust/src/Seq.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"12c9c90165b0048e75bb5fb2ffdf7f74f50339737e86508967e71b35279b01c7"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DateTime: TooManyMethods \u2014 67 methods. The bar is 30 methods; this is 37 over it, 2.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":"src/fable-library-rust/src/DateTime.rs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"93a973b635d8cd084e5a1bf73508318c18298011569b3dc074ef83b66ee5fecf"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: fable_library_rust::Convert::Convert_: TooManyFunctions \u2014 64 free functions. The bar is 30 free functions; this is 34 over it, 2.13\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-rust/src/Convert.rs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"664d03a149869e9a1c2fa60d899a4d2f8e56d5105cdc382a9f764c7f869a2d9f"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: DateTimeFormat.dateToStringWithCustomFormat: FunctionTooLong \u2014 dateToStringWithCustomFormat runs 212 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 112 over it, 2.12\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/DateTimeFormat.ts"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6b10d25c3972a25d58b113ab9e2e6881f436d414865e09bea9564a27cd24cea"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TransparentCompiler: TooManyMethods \u2014 63 methods. The bar is 30 methods; this is 33 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":"src/fcs-fable/src/Compiler/Service/TransparentCompiler.fs"},"region":{"startLine":410}}}],"partialFingerprints":{"codehealthFindingId/v1":"4aa38e06dfbc150b3b2f62cbddb3de59e36788f5e6520d331358173da41c52cb"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: QuotationPickler: TooManyFunctions \u2014 63 functions. The bar is 30 functions; this is 33 over it, 2.10\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/TypedTree/QuotationPickler.fs"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa99b46035a9d63943f21a642adf9e48fa3c45680027bcace2fc57157b99eb74"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Float32: TooManyMethods \u2014 63 methods. The bar is 30 methods; this is 33 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":"src/fable-library-py/src/floats.rs"},"region":{"startLine":619}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b44a32d6d0f57b8d61fbc6dbe0be3f6e4390546a5125a80c42fffa719cd05a5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Float64: TooManyMethods \u2014 63 methods. The bar is 30 methods; this is 33 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":"src/fable-library-py/src/floats.rs"},"region":{"startLine":620}}}],"partialFingerprints":{"codehealthFindingId/v1":"02d4a9bfabe79f7c49bf00b8db25089cbb25b356ddb64a0106422e8ca0c82dce"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Checking/QuotationTranslator.fs: FileTooLong \u2014 1039 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 539 over it, 2.08\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/Checking/QuotationTranslator.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7e2350c5e28bdd37ead143deabab2dfec3c5e8f54df02078232f3cd1dce62f7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: AST/Rust.AST.Helpers.fs: FileTooLong \u2014 1031 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 531 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":"src/Fable.Transforms/Rust/AST/Rust.AST.Helpers.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbc5c87162a3087ffd0f0e2f71b34c1d902a55c7be1065b94271432144b67c3e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Service/ServiceDeclarationLists.fs: FileTooLong \u2014 1017 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 517 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":"src/fcs-fable/src/Compiler/Service/ServiceDeclarationLists.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"baeae8a0d7e62e5af9e1f25c2b13bc6bafc934e4ce3a24f87902bdaba4b51b81"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: fable_library_rust::Char::Char_: TooManyFunctions \u2014 61 free functions. The bar is 30 free functions; this is 31 over it, 2.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":"src/fable-library-rust/src/Char.rs"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea397b32cbca66e392081e6ab807676d7a78454e69dd1c0e6ce6edaea3a06936"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DateTimeOffset: TooManyMethods \u2014 61 methods. The bar is 30 methods; this is 31 over it, 2.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":"src/fable-library-rust/src/DateTimeOffset.rs"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"b734085b6a5c7efd5681c25464a93bfca1e64014405ddddea12b5de34a772fdb"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Utilities/TaggedCollections.fs: FileTooLong \u2014 1011 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 511 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":"src/fcs-fable/src/Compiler/Utilities/TaggedCollections.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1eed2193f849def9b4db2cbdee8bb7f253131401c9cf50c5c488842b91daa25"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: fable-library-beam/Seq.fs: FileTooLong \u2014 1010 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 123 functions. The bar is 500 significant lines; this is 510 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":"src/fable-library-beam/Seq.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"da6ae00e59e6017ce356420ca322abe8f6118fed5a3d9614b1c08874517632c3"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: fable-library-ts/Seq.fs: FileTooLong \u2014 1010 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 123 functions. The bar is 500 significant lines; this is 510 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":"src/fable-library-ts/Seq.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"90f6df94735414a5ccbaea4f80524ac792d954aaf547bcc7ccafc27056bd400d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: fable-library-beam/fable_string.erl: FileTooLong \u2014 1004 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 134 functions. The bar is 500 significant lines; this is 504 over it, 2.01\u00D7 the bar. In this language a module is exactly one source file, so its length cannot be moved into sibling files of the same module. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no one module has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-beam/fable_string.erl"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5cd71dea42cb04e90912dbea2ca2d4b1f8136ae4d4c5eef0f7d0c0c90c7edd4"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: TypedTree/TypeProviders.fs: FileTooLong \u2014 1001 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 32 functions. The bar is 500 significant lines; this is 501 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":"src/fcs-fable/src/Compiler/TypedTree/TypeProviders.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b14fe17ce2b21b8abc70707d90b2113700b0db287e2ceb885f6dbc37d279d1f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: fable_date_offset: TooManyFunctions \u2014 60 functions. The bar is 30 functions; this is 30 over it, 2.00\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-beam/fable_date_offset.erl"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"03fb6a6c60294520991fa8b649bb5ec48ad44a6eb2c095635d558408bac8736a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: fable-library-dart/Seq.fs: FileTooLong \u2014 989 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 120 functions. The bar is 500 significant lines; this is 489 over it, 1.98\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/fable-library-dart/Seq.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3718deee1d2de4a829941f8b6e4738961ab8038ccba41421d54950ed48d808a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: fable_library_rust::Native::Native_: TooManyFunctions \u2014 59 free functions. The bar is 30 free functions; 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":"src/fable-library-rust/src/Native.rs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"0daab34e95da026343ba269d44ae5fd09cff6574814fae30bab8549e8efed43f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: AbstractIL/ilbinary.fs: FileTooLong \u2014 975 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 475 over it, 1.95\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/fcs-fable/src/Compiler/AbstractIL/ilbinary.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4cc96c1a2fbec406871bf1d27454f628734ab31ee25d5bf20fe53ecbe1ca9270"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: fable-library-ts/Array.fs: FileTooLong \u2014 970 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 139 functions. The bar is 500 significant lines; this is 470 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":"src/fable-library-ts/Array.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"674ce7ce706a50f95ff52325fd20a1430e0b8a8c208569a8de751e40467f095d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Utilities/illib.fs: FileTooLong \u2014 942 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 40 functions. The bar is 500 significant lines; this is 442 over it, 1.88\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/Utilities/illib.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2dd5449e8e1c8e965660f0a7ee72f9ae1e9bda5378ecf6922420be0fe750a8c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: AbstractIL/ilnativeres.fs: FileTooLong \u2014 934 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 434 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":"src/fcs-fable/src/Compiler/AbstractIL/ilnativeres.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"001967227f77fcc549f3a8a1a2dfb9a50c11a3a2af6586e9fab089a0d1d3f430"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: quotation_: TooManyFunctions \u2014 55 functions. The bar is 30 functions; this is 25 over it, 1.83\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-rust/src/Quotation.fs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"85937a32a63f6e9774e77156f2e0004d8bc6eedc35dfbb7a973e2690fcd72d66"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: SetTreeModule: TooManyFunctions \u2014 54 functions. The bar is 30 functions; this is 24 over it, 1.80\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-dart/Set.fs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc68dd37b4916dd992c8077af79c34dc6912e3c2101fbb2881962ab6808ed6d1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: SetTreeModule: TooManyFunctions \u2014 54 functions. The bar is 30 functions; this is 24 over it, 1.80\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-py/fable_library/Set.fs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5578be84c4b033dee327c9aaf1a54e4f8e88e8462d2a6138fced53da508db80"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: SetTreeModule: TooManyFunctions \u2014 54 functions. The bar is 30 functions; this is 24 over it, 1.80\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Set.fs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fc088c5bbb907d925a39aab9ead042609e339150ebbd1dcc8348b844a9e6d82"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TimeSpan: TooManyMethods \u2014 54 methods. The bar is 30 methods; this is 24 over it, 1.80\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-rust/src/TimeSpan.rs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"1435edf3a7180a931d999e8eea722c49efea2c613105b237a93b4389ff81ccf3"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Dart/DartPrinter.fs: FileTooLong \u2014 896 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 33 functions. The bar is 500 significant lines; this is 396 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":"src/Fable.Transforms/Dart/DartPrinter.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"39033dde8f17738a823063ca2cec7913662e3dfaf29e1136449428f2127baac6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: fable-library-dart/Array.fs: FileTooLong \u2014 890 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 127 functions. The bar is 500 significant lines; this is 390 over it, 1.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":"src/fable-library-dart/Array.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"46cb5f16073b622f0e58574b28c16085df353cc4519427f86845162cd41e3a70"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Driver/fsc.fs: 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":"src/fcs-fable/src/Compiler/Driver/fsc.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f487cef2c93069914b77a9d39209ecf1881d7143c5895dd987d5dbbd3dae4f1e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: MapTreeModule: TooManyFunctions \u2014 53 functions. The bar is 30 functions; this is 23 over it, 1.77\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-dart/Map.fs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e28dbe9a37467cfcb989b3d744299b9184cb145e70d5630f11d5977f889ed55"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: MapTreeModule: TooManyFunctions \u2014 53 functions. The bar is 30 functions; this is 23 over it, 1.77\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-py/fable_library/Map.fs"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"892f726060a483fa567bee922a4c95eea833d98c8a73e1c896a28646bdc84089"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: MapTreeModule: TooManyFunctions \u2014 53 functions. The bar is 30 functions; this is 23 over it, 1.77\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Map.fs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6db5b51f0c33c312963f4ee3734845e911ee482d54f02bd0061b59047863ace"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: ResizeArrayModule: TooManyFunctions \u2014 53 functions. The bar is 30 functions; this is 23 over it, 1.77\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/Utilities/ResizeArray.fs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"47e6f90b4502e48dc5582abf40dbd02df8bcb8ac72f2ee0d25670c75c4df78f2"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: fable_quotation: TooManyFunctions \u2014 53 functions. The bar is 30 functions; this is 23 over it, 1.77\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-beam/fable_quotation.erl"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa2e76abcddb63a2313f3540b0f32ee7cd2594f26c89e16559c83f3373fd80a3"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Checking/InfoReader.fs: FileTooLong \u2014 883 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 37 functions. The bar is 500 significant lines; this is 383 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":"src/fcs-fable/src/Compiler/Checking/InfoReader.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"42cc4838f85dfb9f7e0d3d88e34ed67465705b89d77c0a177782eb77ee775d47"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Utilities/FileSystem.fs: FileTooLong \u2014 876 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 376 over it, 1.75\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/fcs-fable/src/Compiler/Utilities/FileSystem.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0a509a0d54491df3f77e16fd55a72cc6ef3b6ac369ba56985b911b21c85b023"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: fable_library/Seq.fs: FileTooLong \u2014 869 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 112 functions. The bar is 500 significant lines; this is 369 over it, 1.74\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/fable-library-py/fable_library/Seq.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c3ae6d9158e8b63a93afd14d7d2d27bfdacfc1483571b25490945b0e10056d2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: SyntaxTree/SyntaxTreeOps.fs: FileTooLong \u2014 867 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 100 functions. The bar is 500 significant lines; this is 367 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":"src/fcs-fable/src/Compiler/SyntaxTree/SyntaxTreeOps.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"00eb162821e4d8b5da59b03977ec1ad04dfd9d352b50707fa850b5b2bd201966"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: fable_utils: TooManyFunctions \u2014 52 functions. The bar is 30 functions; this is 22 over it, 1.73\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-beam/fable_utils.erl"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a35fa56fc6bf39db62263e134e4fcbb383d5f17d133abeb49f073e26b23f675"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/Array.fs: FileTooLong \u2014 866 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 136 functions. The bar is 500 significant lines; this is 366 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":"src/fable-library-rust/src/Array.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc0d64c50bf23a203b81b3b1603a767d5ba8dfcb35b0654829b4a37558d5aba7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Python/PythonPrinter.fs: FileTooLong \u2014 859 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 71 functions. The bar is 500 significant lines; this is 359 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":"src/Fable.Transforms/Python/PythonPrinter.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4936e9c600061ada0acd8755b49cf19ebb512e670013894ef140021e14d4153"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: SyntaxTree/ParseHelpers.fs: FileTooLong \u2014 859 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 40 functions. The bar is 500 significant lines; this is 359 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":"src/fcs-fable/src/Compiler/SyntaxTree/ParseHelpers.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff3bed5808dd69db180d4be4b4f9d6c4fd2522366f4669bf0df6d7a95d097d18"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: fable_library_rust::NativeArray::NativeArray_: TooManyFunctions \u2014 51 free functions. The bar is 30 free functions; 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":"src/fable-library-rust/src/NativeArray.rs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"e42d2c8e051c5115396c483f1e6d632ae04049a70f11931d706d6ed18e6dccbf"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Service/ServiceStructure.fs: FileTooLong \u2014 839 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 339 over it, 1.68\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/Service/ServiceStructure.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"005554de682a0d9056d88f305e0d40ba96b6da356af05f76d54580827ef12c4d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/Map.fs: FileTooLong \u2014 832 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 63 functions. The bar is 500 significant lines; this is 332 over it, 1.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":"src/fable-library-rust/src/Map.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0ac1ff0a2783795f1d365b7bf67510e8d30a2f18cdddd8e0a349d72a27625c7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Fable.Compiler/ProjectCracker.fs: FileTooLong \u2014 831 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 331 over it, 1.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":"src/Fable.Compiler/ProjectCracker.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb4048a51385387a53f77e2c87ebf9ac6bf4a7c06e8d0c8383b9923ffd683829"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: AST/Rust.AST.Types.fs: FileTooLong \u2014 829 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 329 over it, 1.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":"src/Fable.Transforms/Rust/AST/Rust.AST.Types.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"92be701d250444b92d47e4fec6e5c868d6b4f1d63ae15edb6fca6db3eff26448"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Fable.Transforms/FableTransforms.fs: FileTooLong \u2014 822 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 322 over it, 1.64\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/Fable.Transforms/FableTransforms.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc02a1397832735e90edf8ddb2645e2262d87086d4b85ad53003207fe4c064cc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Service/SynExpr.fs: FileTooLong \u2014 822 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 322 over it, 1.64\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/fcs-fable/src/Compiler/Service/SynExpr.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ecc4b072c3cd4635495753eb8504d6f5295404b13e74d7c9aa8c660e34f9919"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: RowElementTags: TooManyFunctions \u2014 49 functions. The bar is 30 functions; this is 19 over it, 1.63\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/AbstractIL/ilwrite.fs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2f3297ab1a00c5b2b3138e1ac56049b6dd39f468de426b45ad638eed59807a7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Symbols/SymbolHelpers.fs: FileTooLong \u2014 812 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 312 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":"src/fcs-fable/src/Compiler/Symbols/SymbolHelpers.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"61753d6e35d60f5bfe9d11e8c8ac9e2ed9cc32aef63f923c5df0356e2ea3024e"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: NativeArray: ClassTooLong \u2014 643 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 22 methods, 3 blocks, lines 118-1183. The bar is 400 significant lines; this is 243 over it, 1.61\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/fable-library-py/src/native_array.rs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"786474349228a4da6426b2f0987c6713460e423f90038fe8b6e483b192de0d7b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FSharpSet: TooManyMethods \u2014 48 methods. The bar is 30 methods; this is 18 over it, 1.60\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Set.fs"},"region":{"startLine":705}}}],"partialFingerprints":{"codehealthFindingId/v1":"10da2dbd259e3b956fe1f15fc7bad5a32c456bf1cf1abe9db5d45b8c8be2f707"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Fable.Compiler/Util.fs: FileTooLong \u2014 788 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 288 over it, 1.58\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Fable.Compiler/Util.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1af48a2a1772bdab4036a61ec67a0f1faf9b5fa7946de0a1e6dbcfa128c1fd5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: fable_timespan: TooManyFunctions \u2014 47 functions. The bar is 30 functions; this is 17 over it, 1.57\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-beam/fable_timespan.erl"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bb9896701ba45666ad69da66ff4b68c59c1696d9213d7ea987108447a168ce2"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Int8: 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":"src/fable-library-py/src/ints.rs"},"region":{"startLine":1029}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d216e9dea158a01a9634a2ccbac751200df38c2523422002655161b516a6147"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: UInt8: 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":"src/fable-library-py/src/ints.rs"},"region":{"startLine":1031}}}],"partialFingerprints":{"codehealthFindingId/v1":"72d3c3d9efb6670c20987483a9b75903c79c628f1873b19792c124b443efbf1f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Int16: 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":"src/fable-library-py/src/ints.rs"},"region":{"startLine":1033}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1211ab15ae13213d23627d95601124a0647d5524977a5e84196c653cb04203c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: UInt16: 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":"src/fable-library-py/src/ints.rs"},"region":{"startLine":1035}}}],"partialFingerprints":{"codehealthFindingId/v1":"4dd2dbc44172c92f5ffe33132a3e0d986d2964170fd2403358dcf15994b8a5e3"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Int32: 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":"src/fable-library-py/src/ints.rs"},"region":{"startLine":1037}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b0f9ca883e0bfc4f5a09153d8e93015de01368466e2fd2a94ae533ba3c016d2"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: UInt32: 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":"src/fable-library-py/src/ints.rs"},"region":{"startLine":1039}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4a43538ec1ac37f159e7547cb0746c2636904b74e8530e77a36c6aa66f9c9f9"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Int64: 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":"src/fable-library-py/src/ints.rs"},"region":{"startLine":1041}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5a5da441ea594164c7fb8da7168aab907dee499e3443e992751a33cc88fc736"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: UInt64: 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":"src/fable-library-py/src/ints.rs"},"region":{"startLine":1043}}}],"partialFingerprints":{"codehealthFindingId/v1":"934d05560dbbb694b1b8c314e47e57349fec84e7289da6b3a176626d477eaef9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: fable-library-ts/List.fs: FileTooLong \u2014 774 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 116 functions. The bar is 500 significant lines; this is 274 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":"src/fable-library-ts/List.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"91824f05e4274a583e6acbc17cb8cb7a50bb6555bbd4d6f5943c911a4487e64b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: fable_library/List.fs: FileTooLong \u2014 768 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 116 functions. 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":"src/fable-library-py/fable_library/List.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc0c5ef3b69f45b42cb60222d460f0679aa2e221ba6c0a48832fb45436df6241"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/native_array.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 84% of them inside a single declaration: NativeArray (3 blocks, 118-1183). 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":"src/fable-library-py/src/native_array.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef5ff3bbfe457643fc8170d328fc4b1e33dbc0e9d96f5edc7a68f35bfdc19c2d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/List.fs: FileTooLong \u2014 761 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 127 functions. The bar is 500 significant lines; this is 261 over it, 1.52\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/fable-library-rust/src/List.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"af11887123c202e9d009099bc849b2b8883b32e71dc9cee357a40a965083a2f0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: SyntaxTree/PrettyNaming.fs: FileTooLong \u2014 754 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 44 functions. The bar is 500 significant lines; this is 254 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":"src/fcs-fable/src/Compiler/SyntaxTree/PrettyNaming.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3153ca53651bef4932852d869aa5d9c683f945f0f33d06bc6a13a8e611083c84"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Optimize/InnerLambdasToTopLevelFuncs.fs: FileTooLong \u2014 751 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 251 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":"src/fcs-fable/src/Compiler/Optimize/InnerLambdasToTopLevelFuncs.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"36e2f22d4c45f38c32323e0975dcbeaacc646e16e649f8b734d6b66cd8af84e2"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: Helpers: TooManyFunctions \u2014 45 functions. The bar is 30 functions; this is 15 over it, 1.50\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Fable.Transforms/FSharp2Fable.Util.fs"},"region":{"startLine":587}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f612e8013c50c374a3087e591abf9fd7b6ad7ae37abc0844388a75586b79b2a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FSharpMap: 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":"src/fable-library-ts/Map.fs"},"region":{"startLine":678}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6bb2452e72e355bbfb662e41bdd8a7a6e688e6b6771a69a4f5a9714eba7871c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: fable_library_rust::Rune::Rune_: TooManyFunctions \u2014 45 free functions. The bar is 30 free functions; 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":"src/fable-library-rust/src/Rune.rs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"9cb01c5654d0b8a24379688f83b97f2166bbfca8221bdd183b00eb4695f98920"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: fable-library-dart/List.fs: FileTooLong \u2014 750 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 116 functions. The bar is 500 significant lines; this is 250 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":"src/fable-library-dart/List.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0400276010159a6e10eab9c83de2f4e643ba28a1ec50e898032471553db9da0b"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: fable_library_core::array::register_array_module: FunctionTooLong \u2014 fable_library_core::array::register_array_module 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":"src/fable-library-py/src/array.rs"},"region":{"startLine":5613}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c0be00ba958ec4009985eb61dccf5c81ecabc69a953f8343ddc2b1910f18f48"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Facilities/DiagnosticsLogger.fs: FileTooLong \u2014 749 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 61 functions. The bar is 500 significant lines; this is 249 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":"src/fcs-fable/src/Compiler/Facilities/DiagnosticsLogger.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b0edd154e7865198f36c41a5f1d4a12961ee3d5e772e47f83eec264d3bb7903"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: fable-library-ts/Set.fs: FileTooLong \u2014 735 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 235 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":"src/fable-library-ts/Set.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d84a0ac90850ebf54c179dbc46ca5747ef5817e96026aef3f9e683823be33bb"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: Set: TooManyFunctions \u2014 44 functions. The bar is 30 functions; this is 14 over it, 1.47\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Set.fs"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"e892f31c2f1495ea2b7b3101e23cb40edb8daa47ff5b11dd89f4615d4affeaaa"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: Extras: TooManyFunctions \u2014 44 functions. The bar is 30 functions; this is 14 over it, 1.47\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/Utilities/lib.fs"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"f107383a7fea2611816663b42fb356a86830269b1d7ee096af8af5362452f27b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: fable_reflection: TooManyFunctions \u2014 44 functions. The bar is 30 functions; this is 14 over it, 1.47\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-beam/fable_reflection.erl"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2645953fff2924610fad89898efd419b1a5ce5d340de3a97d03df901226c0be4"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Service/ServiceInterfaceStubGenerator.fs: FileTooLong \u2014 733 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"src/fcs-fable/src/Compiler/Service/ServiceInterfaceStubGenerator.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"29d6a547f34dc9cdce06cf1049c1ba61d4ffd274231d26b6cdb9e8186b0f9d05"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: String.format: FunctionTooLong \u2014 format runs 146 significant lines (blank, comment-only and punctuation-only lines excluded) 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":"src/fable-library-ts/String.ts"},"region":{"startLine":369}}}],"partialFingerprints":{"codehealthFindingId/v1":"5346ddc34c17566444dc6039edfa7f8937851db4726ae7e2abebc131b73c61d3"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Service/ServiceNavigation.fs: FileTooLong \u2014 725 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 225 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":"src/fcs-fable/src/Compiler/Service/ServiceNavigation.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"694a04617a0d83ecb13c6664bd470857c36d3149f2aaa2272eb889b89f6ddb13"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: fable-library-ts/Map.fs: FileTooLong \u2014 722 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 222 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":"src/fable-library-ts/Map.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"10193af614399edd7679af3e8248b41137c6846fbc828e54cb3f9bac3b0dbd9f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: BackgroundCompiler: 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":"src/fcs-fable/src/Compiler/Service/BackgroundCompiler.fs"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3324adfcb3a622a30c4f5432efb8a20c0e24a254332f04e249e0e82b2bfdfd3"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Python/Python.AST.fs: FileTooLong \u2014 716 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 81 functions. The bar is 500 significant lines; this is 216 over it, 1.43\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/Fable.Transforms/Python/Python.AST.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b468b24ccb16ff156e58c86216d1179b997a7aca3d5d2b6dc720f68c1954b82"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: fable-library-beam/fable_date.erl: FileTooLong \u2014 716 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 85 functions. The bar is 500 significant lines; this is 216 over it, 1.43\u00D7 the bar. In this language a module is exactly one source file, so its length cannot be moved into sibling files of the same module. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no one module has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-beam/fable_date.erl"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"839185c8d04de304df1ea23e69acd6b9cc605750c0e9889477983188150a73bc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: fable_library/Map.fs: FileTooLong \u2014 709 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 209 over it, 1.42\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/fable-library-py/fable_library/Map.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"211c3628e828ec1bd2aeb2de975ef94b3aa80501083634f251071aa5115d1ffc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: fable_library/Set.fs: FileTooLong \u2014 705 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 205 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":"src/fable-library-py/fable_library/Set.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"223e1fb6436dacd6f9a784c5f531cef2c14b27f7a11c9fc1d52f006e140f4407"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: fable-library-dart/Map.fs: FileTooLong \u2014 702 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 202 over it, 1.40\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-dart/Map.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"42c623e614faf381bbbda5d9ae556e2ec30dff6f0d60457024fd54fa9991d553"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Fable.AST/Fable.fs: FileTooLong \u2014 701 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 201 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/Fable.AST/Fable.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"faf1cbd5c1794c5e6148a622876c45a52933dc62fa6a80a341a08b689565a576"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: Adapters: TooManyFunctions \u2014 42 functions. The bar is 30 functions; this is 12 over it, 1.40\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Fable.Transforms/Rust/AST/Rust.AST.Adapters.fs"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"945331e222d407f458b4a4868003c89498bf3372e16e995ce3851fa370a48927"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: fcs-fable/FSStrings.fs: FileTooLong \u2014 695 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 195 over it, 1.39\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/fcs-fable/FSStrings.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cea4bfee74bdf069a069d5c67b26bb3ce4a2681f6f8721f82c43bd4ad14ad91"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Optimize/LowerStateMachines.fs: FileTooLong \u2014 692 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 192 over it, 1.38\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/Optimize/LowerStateMachines.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5dfbed12e913264f111ee242ec035ae1d808174b8603be12b368ba1630e378cb"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/Set.fs: FileTooLong \u2014 688 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 64 functions. The bar is 500 significant lines; this is 188 over it, 1.38\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-rust/src/Set.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"48d8cdad4388215c51ebe6ec95a0824ba64da99bcd22d518ed1827e7e2b383f9"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ProvidedType: TooManyMethods \u2014 41 methods. The bar is 30 methods; this is 11 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":"src/fcs-fable/src/Compiler/TypedTree/TypeProviders.fs"},"region":{"startLine":337}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fd7afe1ff9104c00b0d33ac80da45280a8673fe8fd5a214c47e688b194ee96f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: fable-library-beam/fable_list.erl: FileTooLong \u2014 680 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 104 functions. The bar is 500 significant lines; this is 180 over it, 1.36\u00D7 the bar. In this language a module is exactly one source file, so its length cannot be moved into sibling files of the same module. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no one module has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-beam/fable_list.erl"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"de5003ce9b5afbb0ac84153aa28f90c9ea0432143859a7bce92e8841814c7c44"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Service/FSharpParseFileResults.fs: FileTooLong \u2014 675 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 175 over it, 1.35\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/Service/FSharpParseFileResults.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"08e4ca572bebba64b25b613cc84bc90d5eaec8fd3c1817abf4322819a51caaf9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: AbstractIL/ilwritepdb.fs: FileTooLong \u2014 674 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 174 over it, 1.35\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/AbstractIL/ilwritepdb.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7de3e0d54124c5d38ee79824af79982778f9c47221aa91a6070b299a4f0c270a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: PublishUtils: TooManyFunctions \u2014 40 functions. The bar is 30 functions; this is 10 over it, 1.33\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Fable.PublishUtils/PublishUtils.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"199b528c971b94b953b74bd7d8d97c7382adf9d600f955afa326270b18a66de2"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: Set: TooManyFunctions \u2014 40 functions. The bar is 30 functions; this is 10 over it, 1.33\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-py/fable_library/Set.fs"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c2f29bab9ed97253e6ef302b8470f99bc123122a5e564f95d24548bdd27cbe8"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Regex: TooManyMethods \u2014 40 methods. The bar is 30 methods; this is 10 over it, 1.33\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-rust/src/RegExp.rs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0c91ce0aadb1daf2ac00230986fed6ad9ec44354b7693ad3235a69eea492f67"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: fable-library-dart/Set.fs: FileTooLong \u2014 660 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 160 over it, 1.32\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/fable-library-dart/Set.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6668ef7185f65ca588c81772d273e1b7108fe24b35d57d4a3a2e15b66f7d13b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: fable_library/date.py: FileTooLong \u2014 656 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 156 over it, 1.31\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-py/fable_library/date.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"543f5ccb2cb78a39c9de484471a0e33fede656b16a06bab3e4768e1ac1369a15"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: Naming: TooManyFunctions \u2014 39 functions. The bar is 30 functions; this is 9 over it, 1.30\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Fable.Transforms/Global/Naming.fs"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"e92238aaaac0ffb3001622e84d9c951fdea1259393a8ff3c7d7977295165320c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: StringBuilder: TooManyMethods \u2014 39 methods. The bar is 30 methods; this is 9 over it, 1.30\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-py/fable_library/System.Text.fs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"04cfee153d42017b0bd90a4b4258380bc96f574854ffbe70183ce1abd027368a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Fable.Core/Fable.Core.JS.fs: FileTooLong \u2014 650 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 150 over it, 1.30\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/Fable.Core/Fable.Core.JS.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"847149dcb29100ed70d35fc7b3d367728ca3b1e5e3aec7e483950fcbb62b9575"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: fable-library-ts/Util.ts: FileTooLong \u2014 642 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 142 over it, 1.28\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/fable-library-ts/Util.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bba6dc6ee7b60bce27c35fcecf07a052f4739dae0c198e454c3917210ab96ad8"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Checking/MethodOverrides.fs: FileTooLong \u2014 640 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 140 over it, 1.28\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/fcs-fable/src/Compiler/Checking/MethodOverrides.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4be7979539159586636fddd54428ce16f508fc8066abda3197f94528751bf79d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: fable-library-ts/Date.ts: FileTooLong \u2014 639 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 139 over it, 1.28\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/fable-library-ts/Date.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3bcc98095f0579d9d1ea15ce3cc75ad8da874a69f58e8ac536f6fc6ffa6874d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Checking/CheckPatterns.fs: FileTooLong \u2014 638 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 138 over it, 1.28\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/fcs-fable/src/Compiler/Checking/CheckPatterns.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a94348d07fc11d32b9119d43873f35be8b84ed919088924e48ffee5f87c8ec1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Checking/import.fs: FileTooLong \u2014 637 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 137 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":"src/fcs-fable/src/Compiler/Checking/import.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0c675ddfd03d3c4c01fcfb5af8f0901db8a8aa285c313aa72f378e82a3d2dfc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/Main.fs: FileTooLong \u2014 636 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 37 functions. The bar is 500 significant lines; this is 136 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":"src/fable-standalone/src/Main.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f95f94b0fc6eae6d464a96086c1517a098a024aec8de41cccdbdcc1633bc510b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Expressions/CheckExpressions.fsi: FileTooLong \u2014 635 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"src/fcs-fable/src/Compiler/Checking/Expressions/CheckExpressions.fsi"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9588212b19d80584dbd32bca5ee67848d825291c5213c4a5e8fb9fbfb9480112"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FSharpSet: TooManyMethods \u2014 38 methods. The bar is 30 methods; this is 8 over it, 1.27\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-py/fable_library/Set.fs"},"region":{"startLine":705}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ba609962ec88a11e235d02be36b21c543c92a5ad56053f7acc7969118ad6af7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Babel/Babel.fs: FileTooLong \u2014 630 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 76 functions. The bar is 500 significant lines; this is 130 over it, 1.26\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Fable.Transforms/Babel/Babel.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d1880208165419503d08834b8cbedc95ad89d7e504f976d538d70d6edea5a30"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: StringBuilder: 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":"src/fable-library-ts/System.Text.fs"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"577d5f949d02f006f769d614997638ff7227f23f9458369738a8feddfcbc4f04"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ConcurrentDictionary\u00602: 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":"src/fcs-fable/System.Collections.Concurrent.fs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"d371d29d73addd5d340775ef5ed4c23336429f9c86a099b1ea39491c8ffd3806"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Checking/TailCallChecks.fs: FileTooLong \u2014 611 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"src/fcs-fable/src/Compiler/Checking/TailCallChecks.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7656bfd50e213ad2cb35e01dfc4fbaf3dd033d86d3e566c562afb5dd6a9565c0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Python/Fable2Python.Annotation.fs: FileTooLong \u2014 607 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 45 functions. The bar is 500 significant lines; this is 107 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":"src/Fable.Transforms/Python/Fable2Python.Annotation.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"681b3a2e7fb0d2fa383b5ecda5db08f00dadf01349f16d569051503d5b347190"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Checking/CheckIncrementalClasses.fs: FileTooLong \u2014 604 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 104 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":"src/fcs-fable/src/Compiler/Checking/CheckIncrementalClasses.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3da9e7feca4e5916f43edbc8a6c23eddb839cfc6bd24c7394219092a3128576"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Service/FSharpProjectSnapshot.fs: FileTooLong \u2014 602 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 102 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":"src/fcs-fable/src/Compiler/Service/FSharpProjectSnapshot.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2446ee6cf621335cae8b965de291251a1d136c9dde1a878107c3224fd39d43aa"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: Annotation: TooManyFunctions \u2014 36 functions. The bar is 30 functions; this is 6 over it, 1.20\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Fable.Transforms/Babel/Fable2Babel.fs"},"region":{"startLine":559}}}],"partialFingerprints":{"codehealthFindingId/v1":"90b2da691aa5cf8d759bc2d11eacaefac34f1e74deaf1854736aa31da15b54cb"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/Format.rs: FileTooLong \u2014 598 significant 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 98 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":"src/fable-library-rust/src/Format.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"350134a76e545480da47ccd8102c99f297b97e380eff5c5710aeae46d8d96652"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: GraphChecking/FileContentMapping.fs: FileTooLong \u2014 587 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 87 over it, 1.17\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/fcs-fable/src/Compiler/Driver/GraphChecking/FileContentMapping.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"768aa1286af0ee0a4b8e373d1f9404f175f8acdeb0ddb3f4965192184ef935d3"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: List: TooManyMethods \u2014 35 methods. The bar is 30 methods; this is 5 over it, 1.17\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-php/List.php"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7456672633c65c8ed8862607eb5c2a56c1f7c39b2e7f1369d73205d4357b5cab"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: Helpers: TooManyFunctions \u2014 35 functions. The bar is 30 functions; this is 5 over it, 1.17\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Native.fs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1e64d42d4c05f04291ac68b50f69ec5d7fea0c173c2ef59efc24d4a514b1c7a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TcGlobals: TooManyMethods \u2014 35 methods. The bar is 30 methods; this is 5 over it, 1.17\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/TypedTree/TcGlobals.fs"},"region":{"startLine":187}}}],"partialFingerprints":{"codehealthFindingId/v1":"62d34debac7323a3771788155ab8264aad744fa85e7977c2dc25329537d2aaa7"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: TaggedTextModule: TooManyFunctions \u2014 35 functions. The bar is 30 functions; this is 5 over it, 1.17\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/Utilities/sformat.fs"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"b07ebe19943eb9d27e118904855e9e58cef44938c65bfde01cbf05bb850f060b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: fable_async: TooManyFunctions \u2014 35 functions. The bar is 30 functions; this is 5 over it, 1.17\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-beam/fable_async.erl"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9431acf0effb1170281628a826e6bbfb2516c661536623fbf92b5267cb876047"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: fable_decimal: TooManyFunctions \u2014 35 functions. The bar is 30 functions; this is 5 over it, 1.17\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-beam/fable_decimal.erl"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff258b5fb0073f0a367096abfaeae804a73a6a244add2366b73d91d507315216"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Checking/SignatureConformance.fs: FileTooLong \u2014 581 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 81 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":"src/fcs-fable/src/Compiler/Checking/SignatureConformance.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"787a35d65e919b06f939ef01f74e0588825fec8b65ea8a72b51d3fb6d0200c7c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: fable_library/util.py: FileTooLong \u2014 578 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 78 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":"src/fable-library-py/fable_library/util.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"430a5230526210d48e1e3b0b07995a8de4afd42d5dcad7b1d8a4cd34a25e6b10"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FsEnt: 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/Fable.Transforms/FSharp2Fable.Util.fs"},"region":{"startLine":348}}}],"partialFingerprints":{"codehealthFindingId/v1":"097902fc5c34de4be5ac5c49cf637c08fa5b3e78c376dfc20c7fe038d745b2d6"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FSharpMap: 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/fable-library-py/fable_library/Map.fs"},"region":{"startLine":679}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a5ec771df9c7d75452c9ca1c2b53a69d20d13a130d79d657df90c82a594f99b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: FSharpSymbolPatterns: TooManyFunctions \u2014 34 functions. The bar is 30 functions; this is 4 over it, 1.13\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/Symbols/SymbolPatterns.fs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f5677b477710590a8aa7d68c68110228f53ae93f88e8cc5225b84292781fb17"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: fable_library_rust::BitConverter::BitConverter_: TooManyFunctions \u2014 34 free functions. The bar is 30 free functions; 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/fable-library-rust/src/BitConverter.rs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7b77046615855a8b43316e8f61bd67ca878c77d4097e92f378da0ddd9f8ac5f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/ints.rs: FileTooLong \u2014 562 significant 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 62 over it, 1.12\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/fable-library-py/src/ints.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"aeb0a2047aa14bef1d0bb6e50e21e499794fa5630a5877013eb0699923da4043"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: fable-library-beam/fable_regex.erl: FileTooLong \u2014 553 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 61 functions. The bar is 500 significant lines; this is 53 over it, 1.11\u00D7 the bar. In this language a module is exactly one source file, so its length cannot be moved into sibling files of the same module. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no one module has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-beam/fable_regex.erl"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"efe106bc836e70175906b8bdcb85bb25312497f01c1ffcab6c64811ba25f0c72"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/floats.rs: FileTooLong \u2014 551 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 51 over it, 1.10\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/fable-library-py/src/floats.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"eec7c4695849ad4668ed015190e7ef34864fd70074e7c2af382292ef51920f4e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PythonCompiler: TooManyMethods \u2014 33 methods. The bar is 30 methods; this is 3 over it, 1.10\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Fable.Transforms/Python/PythonCompiler.fs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"d319533c1ff4eafbff76c8412f69705e9aa46a74e758bd1639b70ce595fc6752"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Dictionary: TooManyMethods \u2014 33 methods. The bar is 30 methods; this is 3 over it, 1.10\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/MutableMap.fs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"b331e9f42bdb2e0b89a1fe7647ba89a93ee4b68ef5b42739f22e922a96a63499"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FsiDynamicCompiler: TooManyMethods \u2014 33 methods. The bar is 30 methods; this is 3 over it, 1.10\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/Interactive/fsi.fs"},"region":{"startLine":1681}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d729fbc843539f5e237fb78095471198110f99307661c22804ffceb3d722e4c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: AST/Rust.AST.Impl.fs: FileTooLong \u2014 550 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 50 over it, 1.10\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/Fable.Transforms/Rust/AST/Rust.AST.Impl.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c47b6d114405c3b72ee51da9c5dd9bbd61b703d0f44e883a4544ba3ff446c2c3"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: DependencyManager/DependencyProvider.fs: FileTooLong \u2014 534 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 34 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/fcs-fable/src/Compiler/DependencyManager/DependencyProvider.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9d23404f17bdb86e051ce07149d717067bfe1dbcc528e8f3996315d2aa94a81"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: SetModule: TooManyFunctions \u2014 32 functions. The bar is 30 functions; this is 2 over it, 1.07\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-dart/Set.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d89076bbc9c4c7b82cd0a66dbef2413495aa6809b0c8be9c638dddc35210240e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: LayoutModule: TooManyFunctions \u2014 32 functions. The bar is 30 functions; this is 2 over it, 1.07\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/Utilities/sformat.fs"},"region":{"startLine":269}}}],"partialFingerprints":{"codehealthFindingId/v1":"09178a1587d8c95dbacf092d6fccf21116b844548276be18af1104ca58e2101d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: fable-library-ts/String.ts: FileTooLong \u2014 530 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 30 over it, 1.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":"src/fable-library-ts/String.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb5a84a5ba9ba52275c0f4805ca4658c36c077aa5219cc8a78f13d4ffc6bdb5d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Driver/ScriptClosure.fs: FileTooLong \u2014 524 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 24 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":"src/fcs-fable/src/Compiler/Driver/ScriptClosure.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4dfc7c9ed1f2319500ac43bdfdd4dca0e6c4f7e8ce95ef293ed7998cd8d997ae"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Driver/StaticLinking.fs: FileTooLong \u2014 517 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 17 over it, 1.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":"src/fcs-fable/src/Compiler/Driver/StaticLinking.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f964cf2c96cef3747ef83c56c35ac061f1a8153021bdd5ae6368fda5fedb308"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FsMemberFunctionOrValue: 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":"src/Fable.Transforms/FSharp2Fable.Util.fs"},"region":{"startLine":257}}}],"partialFingerprints":{"codehealthFindingId/v1":"c218b2191a74a3d791959e5d51f9b544c952a2c254e498832c6e3d97069e80a8"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: Items: TooManyFunctions \u2014 31 functions. The bar is 30 functions; this is 1 over it, 1.03\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Fable.Transforms/Rust/AST/Rust.AST.Helpers.fs"},"region":{"startLine":1359}}}],"partialFingerprints":{"codehealthFindingId/v1":"8dda4eb85b6cd4907706445de19169b85840d6f48001f613c7d252bc2b5ef378"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: MapModule: TooManyFunctions \u2014 31 functions. The bar is 30 functions; this is 1 over it, 1.03\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-dart/Map.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea3324432d44ad6a6aa89e27f725da39b75d4d721b9511c05dee610bd2f79e2f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: Map: TooManyFunctions \u2014 31 functions. The bar is 30 functions; this is 1 over it, 1.03\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-py/fable_library/Map.fs"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecfe3dc7e2006ad5766a21d0285bec1860f957ca9fa29f4cf6d1ce86b1012bc3"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: Helpers: TooManyFunctions \u2014 31 functions. The bar is 30 functions; this is 1 over it, 1.03\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-py/fable_library/Native.fs"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"676f995c0e497b5e5d521ae4e2143dffa7e0cb1c5f2f76dee99b009c03dacb8a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: Map: TooManyFunctions \u2014 31 functions. The bar is 30 functions; this is 1 over it, 1.03\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Map.fs"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a0a490f9a4627cbdc08d89f508afcb22381e097afdac423ee82d855da3182f1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/String.rs: FileTooLong \u2014 516 significant 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 96 free functions. The bar is 500 significant lines; this is 16 over it, 1.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":"src/fable-library-rust/src/String.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"334d5d761a6ea52884aab98e45fdc1c12bd350962cddbdc461fb80dee9a0705b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Optimize/DetupleArgs.fs: FileTooLong \u2014 515 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 15 over it, 1.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":"src/fcs-fable/src/Compiler/Optimize/DetupleArgs.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc6638af7ccf456582285b23c2a71876fc3e7b197a72ec3c77127f9d332ad9cf"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: AbstractIL/ilsupp.fs: 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":"src/fcs-fable/src/Compiler/AbstractIL/ilsupp.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"af5d0106758d55a87a4a251dd1829cefcf1e81139903a80d695429014dfba4f1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Driver/FxResolver.fs: FileTooLong \u2014 506 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 6 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":"src/fcs-fable/src/Compiler/Driver/FxResolver.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"38e02755fabd575567d1db5b04bc65dff30490ee76caad980c5301801ed9c7a3"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Driver/CompilerConfig.fsi: FileTooLong \u2014 503 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 3 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":"src/fcs-fable/src/Compiler/Driver/CompilerConfig.fsi"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d292b80ad2d623dcaa0c85af1f100dc1dcd7813c9548ac059b78cbf9fcd55006"}},{"ruleId":"D8","level":"warning","message":{"text":"Coverage not measured \u2014 .NET and JavaScript/TypeScript suite: Coverage NOT MEASURED: the .NET half could not be measured \u2014 the repository wires up no coverage collector for \u0060--collect:\u0022XPlat Code Coverage\u0022\u0060 to use; the JavaScript/TypeScript half could not be measured \u2014 the jest suite in tests/React/ ran and not one test passed (No tests found, exiting with code 1), so the coverage would describe the failed run, not the code. This repository\u0027s production source spans both ecosystems, and no partial figure is published as if it were the whole: 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":"D11","level":"error","message":{"text":"Test suite declares a test script but contains no test files: tests/React/: The jest suite in tests/React/ was installed and launched successfully, and the runner then found no test files to run \u2014 No tests found, exiting with code 1. The package declares a test script, so it reads as a tested package to anyone who checks its manifest, but there is nothing behind the declaration: no test case exists, so it cannot detect a regression and its presence overstates how much of this repository is tested. The ask is the owner\u0027s: write the first test for this package, or remove the test script from a package that has none. This is not a report that the tests FAIL \u2014 there are none."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"b9ac0e77b6bcb3a1a19e2ebe63d4715de144b1ead56e4e4ed88e2e5a85a82159"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated (npm): @asamuzakjp/css-color: @asamuzakjp/css-color 3.2.0 \u2192 7.1.7 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"db145c665fc839bd4a7921758b7f2bd4dfede61a4e7ac6f39b7f7e6a663d8bca"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated (npm): @types/jsdom: @types/jsdom 21.1.7 \u2192 30.0.0 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"ee430fc786b6e5c11b037caae1afdf2fac4323629d314fbdf2549c136bededb8"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated (npm): ansi-escapes: ansi-escapes 4.3.2 \u2192 7.3.0 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"cb864b5a719c6cd252b067a603d4af72a641d7111495b8da2f522c4011acc673"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated (npm): bl: bl 3.0.1 \u2192 7.0.13 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"275147abaeaed1c0d8d2d11c232fc0edae02af0e109dab285c1e8d93697b38e5"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated (npm): camelcase: camelcase 6.3.0 \u2192 10.0.0 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"490e459530b9df8c4204a031797609a99f9e1ae30112df1eec654c25f2785e6c"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated (npm): chokidar: chokidar 3.6.0 \u2192 6.0.0 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"fd4da6f7d1fda8965f0d98c13ee2d0977ac9dc15af0096adef57bca9020eb800"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated (npm): commander: commander 2.20.3 \u2192 15.0.0 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"c6f6ebb1f0abdf05f71fa15f260c42ca0f704e27c0c0faf8734a17facc962523"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated (npm): data-urls: data-urls 5.0.0 \u2192 8.0.0 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"e0a42b607457c03301bdd2fad9784fb44b754cfd9de24f4afd871c201bc5047f"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated (npm): escape-string-regexp: escape-string-regexp 2.0.0 \u2192 5.0.0 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"4b00b93219d0ddbcad0f819957860beee25942c9efbdc097f314447c34f2b1a0"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated (npm): execa: execa 5.1.1 \u2192 10.2.0 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"ae5afaac7795fadafb2e990e51a59566df5d7224ae59f46504358ec25c9f70e2"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated (npm): find-up: find-up 4.1.0 \u2192 8.0.0 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"915eb9dbbfc69c9d228f8a27a5e8df4c39558346409be105195aea4c970ff15e"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated (npm): get-stream: get-stream 6.0.1 \u2192 9.0.1 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"2385f674067e5feb4137d6e319b60838ee3c3509a419cb0e79c7e39614c7253f"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated (npm): html-encoding-sniffer: html-encoding-sniffer 4.0.0 \u2192 7.0.0 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"8295c8a885d1b645ca476ecfeb8b0aee590e9752171b3357f3d87073fab39a64"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated (npm): human-signals: human-signals 2.1.0 \u2192 8.0.1 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"f7392362be6c95c283def860fed4ea2d3cd6e28da0c954825cf1d4e3d5f2f879"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated (npm): js-tokens: js-tokens 4.0.0 \u2192 10.0.0 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d6e74d6d6de5fd9962be1ee89e9a1f826010bb13c72bd030582e1eaef537aa79"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated (npm): jsdom: jsdom 26.1.0 \u2192 30.1.3 available."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/React/package.json"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"087c5823224f25c04fa8030528ac618eeb2a3255ed241afb3824e6d90c37ec09"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated (npm): json-parse-even-better-errors: json-parse-even-better-errors 2.3.1 \u2192 6.0.0 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"727b3c1eb297e4cc259f1d4ed2e291f5b07caca6443db89bf9ac4a103672b124"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated (npm): locate-path: locate-path 5.0.0 \u2192 8.0.0 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"1fe28cd640a269a0d606dace3dafe7ae2011194825139b2226bfb6009ee8d643"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated (npm): mimic-fn: mimic-fn 2.1.0 \u2192 5.0.0 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"636e5de65a3c2c123fad0adcc06f42f891ecea1f3c2e57c771cf324f6bd103aa"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated (npm): onetime: onetime 5.1.2 \u2192 8.0.0 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"834a37f09bde46d7b14c8b5f94da21461756e262bef29ef3464bd9d30deab1db"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated (npm): p-limit: p-limit 3.1.0 \u2192 7.3.3 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"28e3cee4fa01eb3ec5d706db649801bd0b19d037ddf9d4bb40738694e3777463"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated (npm): p-locate: p-locate 4.1.0 \u2192 7.0.0 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"b954f08d590b7779149ff23978d033ca1d1396346836756c99e3a4867e1dc91c"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated (npm): parse-json: parse-json 5.2.0 \u2192 8.3.0 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"fc76c13dc1b526a2eb081c867975bdf5152b53438bd482910de5d9765b9e75d1"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated (npm): pkg-dir: pkg-dir 4.2.0 \u2192 9.0.0 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"85d0174ab4a9031ff06c78618c769454a031fbf4bc9c35eebf814ef5c323e9fd"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated (npm): string-length: string-length 4.0.2 \u2192 7.0.1 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"93371bd49784cf0f52b5f3512d8888ba8bbbebd258748cd1a0f4dbca61d02698"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated (npm): through2: through2 0.6.5 \u2192 5.0.12 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"4b2c05c37043b5a30344b5b79a5d1493c03cbd74bc6ab4a3e354a892807e58c5"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated (npm): type-fest: type-fest 0.21.3 \u2192 5.10.0 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"087e93f802cd59ac6823bdd86820bc1276a689c06b26b57bbd4992c3bfb01003"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated (npm): whatwg-url: whatwg-url 14.2.0 \u2192 17.3.0 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"c661d0f8a474f2c51fb01dda475642316ca5a560e8e2b76561511b4d2879a98d"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated (npm): which: which 2.0.2 \u2192 7.0.0 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"7dbbb6e905634e5c333144195daac8ed86debc4390610896529c43b70e6eabab"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated (npm): write-file-atomic: write-file-atomic 5.0.1 \u2192 8.0.0 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"db97ba738f071a21e9442bb634854bac82fa9f76c85502f6ebab2b8d05ffbcbc"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated: FSharp.Core: FSharp.Core 4.7.2 \u2192 10.1.402 available (referenced by Fable.Core)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Fable.Core/Fable.Core.fsproj"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d786622a5a51c413d17c083863ecf70b0beb28c60b56d7175aae07d9ab7998f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Fable.Transforms/Beam/Replacements.fs: src/Fable.Transforms/Beam/Replacements.fs changed 21 times in last 90 days, max cyclomatic complexity 264 in Replacements.tryCall at line 5781. 21 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/Fable.Transforms/Beam/Replacements.fs\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":"src/Fable.Transforms/Beam/Replacements.fs"},"region":{"startLine":5781}}}],"partialFingerprints":{"codehealthFindingId/v1":"bab98f3f65a78a7dbd318bbd0d79508fe27460740f74eaf8cccec1005d3448df"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Fable.Transforms/Rust/Replacements.fs: src/Fable.Transforms/Rust/Replacements.fs changed 16 times in last 90 days, max cyclomatic complexity 103 in Replacements.strings at line 1374. 13 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/Fable.Transforms/Rust/Replacements.fs\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":"src/Fable.Transforms/Rust/Replacements.fs"},"region":{"startLine":1374}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ced636a661846607ad6f102868f7f928f121a58ec74cf7da82cb820af2b304b"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Fable.Transforms/Rust/Fable2Rust.fs: src/Fable.Transforms/Rust/Fable2Rust.fs changed 21 times in last 90 days, max cyclomatic complexity 57 in TypeInfo.transformType at line 1150. 16 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/Fable.Transforms/Rust/Fable2Rust.fs\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":"src/Fable.Transforms/Rust/Fable2Rust.fs"},"region":{"startLine":1150}}}],"partialFingerprints":{"codehealthFindingId/v1":"9abbcf8d24b6c98840d57722b73917d80f5ac6fc78ddb50cb4ae2418ec2fccf5"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Fable.Transforms/Python/Replacements.fs: src/Fable.Transforms/Python/Replacements.fs changed 12 times in last 90 days, max cyclomatic complexity 92 in Replacements.operators at line 1148. 7 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/Fable.Transforms/Python/Replacements.fs\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":"src/Fable.Transforms/Python/Replacements.fs"},"region":{"startLine":1148}}}],"partialFingerprints":{"codehealthFindingId/v1":"78720c8ccb0b24ceba10d6a384484f5d33d9ad0c0ab3cb2037f435d2cdfcdfbd"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Fable.Transforms/Beam/Fable2Beam.fs: src/Fable.Transforms/Beam/Fable2Beam.fs changed 9 times in last 90 days, max cyclomatic complexity 122 in Compiler.transformExpr at line 316. 8 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/Fable.Transforms/Beam/Fable2Beam.fs\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":"src/Fable.Transforms/Beam/Fable2Beam.fs"},"region":{"startLine":316}}}],"partialFingerprints":{"codehealthFindingId/v1":"e227b2625a7c224ef466ee22d449a6cb9e957f84eac21c5e89b114b21d888e4f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Fable.Transforms/Replacements.fs: src/Fable.Transforms/Replacements.fs changed 12 times in last 90 days, max cyclomatic complexity 86 in Replacements.operators at line 1499. 7 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/Fable.Transforms/Replacements.fs\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":"src/Fable.Transforms/Replacements.fs"},"region":{"startLine":1499}}}],"partialFingerprints":{"codehealthFindingId/v1":"c102ae6af5081f7b9a3c0044ace590669ba6c9e75931fd6fda13327475ca053a"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Fable.Transforms/Python/Fable2Python.Transforms.fs: src/Fable.Transforms/Python/Fable2Python.Transforms.fs changed 12 times in last 90 days, max cyclomatic complexity 66 in Transforms.transformOperation at line 930. 7 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/Fable.Transforms/Python/Fable2Python.Transforms.fs\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":"src/Fable.Transforms/Python/Fable2Python.Transforms.fs"},"region":{"startLine":930}}}],"partialFingerprints":{"codehealthFindingId/v1":"80010d74adb8ff02f6d24ae37b401f5d9e0bd4b912d1e1c6ff040c4f315ca1fa"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Fable.Transforms/Babel/Fable2Babel.fs: src/Fable.Transforms/Babel/Fable2Babel.fs changed 12 times in last 90 days, max cyclomatic complexity 54 in Util.transformValue at line 1710. 7 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/Fable.Transforms/Babel/Fable2Babel.fs\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":"src/Fable.Transforms/Babel/Fable2Babel.fs"},"region":{"startLine":1710}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb496567154f8e8dd07b79c7aa372693f33304a29a79d1c0eacedb4fec9d71d2"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Fable.Transforms/Python/Fable2Python.Util.fs: src/Fable.Transforms/Python/Fable2Python.Util.fs changed 6 times in last 90 days, max cyclomatic complexity 102 in Util.makeInteger at line 1020. 4 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/Fable.Transforms/Python/Fable2Python.Util.fs\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":"src/Fable.Transforms/Python/Fable2Python.Util.fs"},"region":{"startLine":1020}}}],"partialFingerprints":{"codehealthFindingId/v1":"baf683adbb9817c08936320831c849526fd43fc68f9c5bd01f4c733913eda407"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Fable.Transforms/Dart/Replacements.fs: src/Fable.Transforms/Dart/Replacements.fs changed 7 times in last 90 days, max cyclomatic complexity 78 in Replacements.operators at line 975. 3 of those changes were fix/bug commits, and the other 4 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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/Fable.Transforms/Dart/Replacements.fs\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":"src/Fable.Transforms/Dart/Replacements.fs"},"region":{"startLine":975}}}],"partialFingerprints":{"codehealthFindingId/v1":"833d34766ee6df62cab116c0a86532c41a200fbb5d82c5e7ff08afeedea770ac"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/fable-standalone/src/Worker/Worker.fs: src/fable-standalone/src/Worker/Worker.fs changed 12 times in last 90 days, max cyclomatic complexity 43 in Main.loop at line 339. 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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/fable-standalone/src/Worker/Worker.fs\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":"src/fable-standalone/src/Worker/Worker.fs"},"region":{"startLine":339}}}],"partialFingerprints":{"codehealthFindingId/v1":"0280a8548cfcbda702891951c42b9a98199664727ba38c50e58a10dde99b3967"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/fable-standalone/src/Main.fs: src/fable-standalone/src/Main.fs changed 13 times in last 90 days, max cyclomatic complexity 37 in Main.toSemanticClass at line 467. 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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/fable-standalone/src/Main.fs\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":"src/fable-standalone/src/Main.fs"},"region":{"startLine":467}}}],"partialFingerprints":{"codehealthFindingId/v1":"ead11ec241b58aea2a0d172a31d4992e701a9844c844644bf9f5a9bc6452d051"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Fable.Transforms/Transforms.Util.fs: src/Fable.Transforms/Transforms.Util.fs changed 8 times in last 90 days, max cyclomatic complexity 54 in AST.getSubExpressions at line 1762. 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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/Fable.Transforms/Transforms.Util.fs\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":"src/Fable.Transforms/Transforms.Util.fs"},"region":{"startLine":1762}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4e881a60894a3c7b63c2c9a7854c6050c2431215beef20894126c1e7d5768a9"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Fable.Transforms/FSharp2Fable.Util.fs: src/Fable.Transforms/FSharp2Fable.Util.fs changed 13 times in last 90 days, max cyclomatic complexity 27 in TypeHelpers.makeTypeFromDef at line 1648. 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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/Fable.Transforms/FSharp2Fable.Util.fs\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":"src/Fable.Transforms/FSharp2Fable.Util.fs"},"region":{"startLine":1648}}}],"partialFingerprints":{"codehealthFindingId/v1":"93101bafdcd763d5a5c4db0e910a7d3ba27b3573a608079610638fdcaeb71226"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Fable.Cli/Main.fs: src/Fable.Cli/Main.fs changed 7 times in last 90 days, max cyclomatic complexity 48 in Main.compilationCycle at line 1491. 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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/Fable.Cli/Main.fs\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":"src/Fable.Cli/Main.fs"},"region":{"startLine":1491}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c98bf599a5f68f89c40b99dd46727b6ca5d3a76d4b3af074c27f737a4cf537f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Fable.Transforms/Dart/Fable2Dart.fs: src/Fable.Transforms/Dart/Fable2Dart.fs changed 6 times in last 90 days, max cyclomatic complexity 44 in Util.transformValue at line 826. 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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/Fable.Transforms/Dart/Fable2Dart.fs\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":"src/Fable.Transforms/Dart/Fable2Dart.fs"},"region":{"startLine":826}}}],"partialFingerprints":{"codehealthFindingId/v1":"932f3b34f5258add04c91875c411f1da4dba43ae68870a60443d678d710d4582"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Fable.Transforms/Python/Fable2Python.Reflection.fs: src/Fable.Transforms/Python/Fable2Python.Reflection.fs changed 6 times in last 90 days, max cyclomatic complexity 44 in Reflection.transformTypeInfo at line 117. 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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/Fable.Transforms/Python/Fable2Python.Reflection.fs\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":"src/Fable.Transforms/Python/Fable2Python.Reflection.fs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a3d627280542f86da8b668ab07b07afad791090e4f4b541607d4de3507d9415"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Fable.Transforms/Beam/Fable2Beam.Util.fs: src/Fable.Transforms/Beam/Fable2Beam.Util.fs changed 4 times in last 90 days, max cyclomatic complexity 58 in Util.containsThisValue at line 199. 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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/Fable.Transforms/Beam/Fable2Beam.Util.fs\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":"src/Fable.Transforms/Beam/Fable2Beam.Util.fs"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"d98e7b33ac8a55f0f7845772fe4cf4e45ac1ef3d64851f1adc61e975a17612cd"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/fable-library-ts/String.ts: src/fable-library-ts/String.ts changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 72 in String.format at line 369. 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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/fable-library-ts/String.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":"src/fable-library-ts/String.ts"},"region":{"startLine":369}}}],"partialFingerprints":{"codehealthFindingId/v1":"0210e9a74da5bb5f5808c932f566d19153a577005ba6b58998a90ecd84b46e4f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Fable.Transforms/Php/Fable2Php.fs: src/Fable.Transforms/Php/Fable2Php.fs changed 2 times in last 90 days, max cyclomatic complexity 99 in Fable2Php.convertExpr at line 936. 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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/Fable.Transforms/Php/Fable2Php.fs\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":"src/Fable.Transforms/Php/Fable2Php.fs"},"region":{"startLine":936}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ee6b401679a3866caa068f8ba5d5d3ab0972322ebc8144f0daacf854aad6f5b"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/fable-library-rust/src/Quotation.fs: src/fable-library-rust/src/Quotation.fs changed 4 times in last 90 days, max cyclomatic complexity 49 in quotation_.evaluate at line 437. 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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/fable-library-rust/src/Quotation.fs\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":"src/fable-library-rust/src/Quotation.fs"},"region":{"startLine":437}}}],"partialFingerprints":{"codehealthFindingId/v1":"45db383287fef7965721cfe8acb554278a7538a6c5d5b980c4e445640045e5f7"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Fable.Compiler/ProjectCracker.fs: src/Fable.Compiler/ProjectCracker.fs changed 5 times in last 90 days, max cyclomatic complexity 38 in ProjectCracker.getFullProjectOpts at line 894. 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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/Fable.Compiler/ProjectCracker.fs\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":"src/Fable.Compiler/ProjectCracker.fs"},"region":{"startLine":894}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cdaa8eab2f6cf29cd741cc047eba171f548c2a0ca6fd41b34b2c63f697265dd"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Fable.Transforms/Replacements.Util.fs: src/Fable.Transforms/Replacements.Util.fs changed 6 times in last 90 days, max cyclomatic complexity 24 in Util.|UniversalFableCoreHelpers|_| at line 1308. 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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/Fable.Transforms/Replacements.Util.fs\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":"src/Fable.Transforms/Replacements.Util.fs"},"region":{"startLine":1308}}}],"partialFingerprints":{"codehealthFindingId/v1":"b07f495ec2d38cf4d0937fa6666f089d908b187368079346e47d4804aa018c26"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Fable.Transforms/Beam/ErlangPrinter.fs: src/Fable.Transforms/Beam/ErlangPrinter.fs changed 2 times in last 90 days, max cyclomatic complexity 58 in Output.printExpr at line 100. 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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/Fable.Transforms/Beam/ErlangPrinter.fs\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":"src/Fable.Transforms/Beam/ErlangPrinter.fs"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"35fa6411f3a3b97e83cf26ef6921e321a04ea083ac14e87ef89d1d1dd1d8da37"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Fable.Compiler/MSBuildCrackerResolver.fs: src/Fable.Compiler/MSBuildCrackerResolver.fs changed 4 times in last 90 days, max cyclomatic complexity 20 in MSBuildCrackerResolverModule.mkOptionsFromDesignTimeBuildAux at line 202. 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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/Fable.Compiler/MSBuildCrackerResolver.fs\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":"src/Fable.Compiler/MSBuildCrackerResolver.fs"},"region":{"startLine":202}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8bd4ad507ba9521f8c3eeb8df20e4934f77711ca367aeda1f0aea1357c14035"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Fable.Build/Main.fs: src/Fable.Build/Main.fs changed 2 times in last 90 days, max cyclomatic complexity 37 in Main.main at line 126. 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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/Fable.Build/Main.fs\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":"src/Fable.Build/Main.fs"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c9022d853700f622025fa4b03b6f89cbe62a34eb7a0c2a0f659637395a8b302"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Fable.Cli/Entry.fs: src/Fable.Cli/Entry.fs changed 2 times in last 90 days, max cyclomatic complexity 27 in Runner.Run at line 231. 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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/Fable.Cli/Entry.fs\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":"src/Fable.Cli/Entry.fs"},"region":{"startLine":231}}}],"partialFingerprints":{"codehealthFindingId/v1":"d04a99e1032db571595c9b1bbbec7e4623b13e62ca264b9ad715f313978904d9"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Fable.Transforms/FableTransforms.fs: src/Fable.Transforms/FableTransforms.fs changed 3 times in last 90 days, max cyclomatic complexity 18 in FableTransforms.isTailRecursive at line 68. 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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/Fable.Transforms/FableTransforms.fs\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":"src/Fable.Transforms/FableTransforms.fs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"bab28b960e5d1af54476d5732aa22ad864ecfb7b52d8dfe1103733c143baf037"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/fable-compiler-js/src/app.fs: src/fable-compiler-js/src/app.fs changed 2 times in last 90 days, max cyclomatic complexity 17 in App.parseFiles at line 220. 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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/fable-compiler-js/src/app.fs\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":"src/fable-compiler-js/src/app.fs"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"53729569de199626f081960775f268b0a6b6550c2ec74e197275785662df63d7"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Fable.Transforms/Global/Naming.fs: src/Fable.Transforms/Global/Naming.fs changed 2 times in last 90 days, max cyclomatic complexity 16 in Naming.escapeString at line 511. 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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/Fable.Transforms/Global/Naming.fs\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":"src/Fable.Transforms/Global/Naming.fs"},"region":{"startLine":511}}}],"partialFingerprints":{"codehealthFindingId/v1":"091e1fc424d7bfae9587d1a678c818f7a2f4bbecea8ca97c26fe62009ee536b4"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: src/fable-library-rust/src/Native.rs: src/fable-library-rust/src/Native.rs changed 9 times in last 90 days and 7 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 6 (its worst body is fable_library_rust::Native::Native_::compare at line 399), 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(rust): Remove trailing comma from macro args (#5031)\u201D; \u201Cfix(rust): Use common null storage (#4995)\u201D; \u201Cfix(rust): Remove reflection registration on boxing (#4983)\u201D; \u201Cfix(rust): Fix IEnumerable casting, interop and type testing (#4946)\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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/fable-library-rust/src/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":"src/fable-library-rust/src/Native.rs"},"region":{"startLine":399}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f07732ebff90214410abaea686b49936a8fd3da6513e6f9fd789e8821b236d8"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: src/fable-library-py/fable_library/async_.py: src/fable-library-py/fable_library/async_.py changed 8 times in last 90 days and 7 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 7 (its worst body is async_.call_on_owner_loop at line 85), 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(python): preserve reusable replies and unit continuations (#5082)\u201D; \u201Cfix(js/ts/python): preserve cancelled cleanup and generic unit callbacks (#5062)\u201D; \u201Cfix(python): settle cancelled tasks awaited by async workflows (#5064)\u201D; \u201Cfix(js/ts/python): settle cancelled delays and finalizers once (#5038)\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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/fable-library-py/fable_library/async_.py\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":"src/fable-library-py/fable_library/async_.py"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"6add3bb0d934d058a631197cbe4acd391d4b6a69730d30afba99957226d26fbe"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: src/fable-library-rust/src/Reflection.rs: src/fable-library-rust/src/Reflection.rs changed 7 times in last 90 days and 5 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 14 (its worst body is fable_library_rust::Reflection::Reflection_::canonical_type_name at line 78), 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(rust): Remove reflection registration on boxing (#4983)\u201D; \u201Cfix(rust): Support reflection for no_std (#4941)\u201D; \u201Cfix(rust): Fix interface casting, move reflection into declarations (#4939)\u201D; \u201Cfix(rust): Observables and Events cleanup (#4908)\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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/fable-library-rust/src/Reflection.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":"src/fable-library-rust/src/Reflection.rs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec872e602d107508cb48555ef2761c7aea053226382caaf34285f03d5042c638"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: src/fable-library-ts/Async.ts: src/fable-library-ts/Async.ts changed 6 times in last 90 days and 5 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 9 (its worst body is Async.runParallel at line 194), 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(js/ts): respect maxDegreeOfParallelism and cancel on failure in Async.Parallel (#5098)\u201D; \u201Cfix(js/ts): add missing Async and Task members, cancel timed-out StartChild, bind Async in task { } (#5097)\u201D; \u201Cfix(js/ts/python): preserve cancelled cleanup and generic unit callbacks (#5062)\u201D; \u201Cfix(js/ts/python): settle cancelled delays and finalizers once (#5038)\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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/fable-library-ts/Async.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":"src/fable-library-ts/Async.ts"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"a92c8d88ff6e41ce17d122cd17121773df674a6f3b5b5e88bec18dd83e4fe9ca"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: src/Fable.Transforms/State.fs: src/Fable.Transforms/State.fs changed 6 times in last 90 days and 4 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 10 (its worst body is ImplFile.From at line 216), 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(standalone): warn and skip plugins instead of throwing (#5114)\u201D; \u201Cfix(all): recompile dependents on signature change in watch (#5084)\u201D; \u201Cfix(all): find a core entity recorded under a facade assembly (#4903)\u201D; \u201Cfix(all): say why an inline member\u0027s body could not be found (#4901)\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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/Fable.Transforms/State.fs\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":"src/Fable.Transforms/State.fs"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"09d2f5a729d728ccde2cd304dc3a65e516b47dad6d6ab96e5600e9aa3d7a0942"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: src/fable-library-py/fable_library/async_builder.py: src/fable-library-py/fable_library/async_builder.py changed 5 times in last 90 days and 4 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 5 (its worst body is CancellationToken.cancel at line 64), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix(js/ts/python): preserve cancelled cleanup and generic unit callbacks (#5062)\u201D; \u201Cfix(python): settle cancelled tasks awaited by async workflows (#5064)\u201D; \u201Cfix(js/ts/python): settle cancelled delays and finalizers once (#5038)\u201D; \u201Cfix(js/ts/python): synchronize cancellation registrations (#5036)\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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/fable-library-py/fable_library/async_builder.py\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":"src/fable-library-py/fable_library/async_builder.py"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b83367f57197a8363c71410d77c304823034bee762e95129ed12239a0aba367"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: src/Fable.Transforms/Beam/Prelude.fs: src/Fable.Transforms/Beam/Prelude.fs changed 4 times in last 90 days and 4 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 13 (its worst body is ToString.toStringByType at line 691), 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(beam): disambiguate property accessors from ordinary methods (#5049)\u201D; \u201Cfix(beam): prevent identifier collisions and atom overflow (#5017)\u201D; \u201Cfix(beam): honor custom ToString in %O (#4994)\u201D; \u201Cfix(beam): escape quotes and backslashes in quoted atoms (#4866)\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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/Fable.Transforms/Beam/Prelude.fs\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":"src/Fable.Transforms/Beam/Prelude.fs"},"region":{"startLine":691}}}],"partialFingerprints":{"codehealthFindingId/v1":"4cb6706627ffac10000e73e2e779baba0ba511c0e0e37141080157dfd7cc5936"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: src/fable-library-rust/src/Async.rs: src/fable-library-rust/src/Async.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 6 (its worst body is Task::poll at line 485), 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(rust): Cleanup AsyncBuilder and TaskBuilder (#4936)\u201D; \u201Cfix(rust): Async perf: stop the async runtime sleeping, and add Parallel (#4920)\u201D; \u201Crevert: \u0022feat(rust): Observables, Events and IEnumerable (PR 6 of 7 Rust impro\u2026\u0022\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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/fable-library-rust/src/Async.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":"src/fable-library-rust/src/Async.rs"},"region":{"startLine":485}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d9b039ac282f0bffb48f1386e79101e614a97ddcfe852f043d1ecc4ceabd23e"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: src/Fable.Transforms/Rust/AST/Rust.AST.Helpers.fs: src/Fable.Transforms/Rust/AST/Rust.AST.Helpers.fs 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 14 (its worst body is Literals.normalizeStringLiteral at line 340), 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(rust): Add main function for no_std (#5054)\u201D; \u201Cfix(rust): Remove trailing comma from macro args (#5031)\u201D; \u201Cfix(rust): Add support for System.Text.Rune (#4997)\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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/Fable.Transforms/Rust/AST/Rust.AST.Helpers.fs\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":"src/Fable.Transforms/Rust/AST/Rust.AST.Helpers.fs"},"region":{"startLine":340}}}],"partialFingerprints":{"codehealthFindingId/v1":"84009f4c2c23ce57e3ced1cce7593072ce0e4b30fa0f77b8340aad1f4e350e22"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: src/fable-library-py/fable_library/decimal_.py: src/fable-library-py/fable_library/decimal_.py 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 6 (its worst body is decimal_.from_parts at line 117), 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(python): use the .NET range for Decimal.MaxValue and Decimal.MinValue (#4967)\u201D; \u201Cfix(python): round a float to .NET\u0027s precision when converting to decimal\u201D; \u201Cfix(python): implement Decimal.GetBits and the bits constructors\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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/fable-library-py/fable_library/decimal_.py\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":"src/fable-library-py/fable_library/decimal_.py"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"d685814ae7e275605c48019fbe2a85df7fc84dd781ca93bf0f4b0c86625feeb1"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: src/fable-library-py/fable_library/mailbox_processor.py: src/fable-library-py/fable_library/mailbox_processor.py changed 3 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 4 (its worst body is MailboxProcessor.__process_events at line 155), 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(python): preserve reusable replies and unit continuations (#5082)\u201D; \u201Cfix(js/ts/python): preserve cancelled cleanup and generic unit callbacks (#5062)\u201D; \u201Cfix(js/ts/python): settle cancelled delays and finalizers once (#5038)\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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/fable-library-py/fable_library/mailbox_processor.py\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":"src/fable-library-py/fable_library/mailbox_processor.py"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"61bfe11c05bba3a20bfb67e44980aa551f3b390b06fe6dfc980f3427acfd5582"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: src/fable-library-ts/AsyncBuilder.ts: src/fable-library-ts/AsyncBuilder.ts changed 3 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 7 (its worst body is AsyncBuilder.TryFinally at line 202), 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(js/ts/python): preserve cancelled cleanup and generic unit callbacks (#5062)\u201D; \u201Cfix(js/ts/python): settle cancelled delays and finalizers once (#5038)\u201D; \u201Cfix(js/ts/python): synchronize cancellation registrations (#5036)\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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/fable-library-ts/AsyncBuilder.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":"src/fable-library-ts/AsyncBuilder.ts"},"region":{"startLine":202}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce00983f0f3ba5c94c560fad03007c197a27650bf689fb4c01b0ca9a240ad430"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: src/fable-library-rust/src/Event.rs: src/fable-library-rust/src/Event.rs changed 3 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 3 (its worst body is fable_library_rust::Event::Event_::split at line 351), 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(rust): Remove trailing comma from macro args (#5031)\u201D; \u201Cfix(rust): Observables and Events cleanup (#4908)\u201D; \u201Crevert: \u0022feat(rust): Observables, Events and IEnumerable (PR 6 of 7 Rust impro\u2026\u0022\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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/fable-library-rust/src/Event.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":"src/fable-library-rust/src/Event.rs"},"region":{"startLine":351}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e64e0a1bdb271ea53da732f6dad9a30333e9c3e399e484a41f4fda9004ef99a"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: src/fable-library-rust/src/Observable.rs: src/fable-library-rust/src/Observable.rs changed 3 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 5 (its worst body is fable_library_rust::Observable::Observable_::merge at line 302), 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(rust): Remove trailing comma from macro args (#5031)\u201D; \u201Cfix(rust): Observables and Events cleanup (#4908)\u201D; \u201Crevert: \u0022feat(rust): Observables, Events and IEnumerable (PR 6 of 7 Rust impro\u2026\u0022\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-24..2026-10-22, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-24 23:00:25 \u002B02:00\u0027 --until=\u00272026-10-22 23:00:25 \u002B02:00\u0027 --full-history --no-merges -- src/fable-library-rust/src/Observable.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":"src/fable-library-rust/src/Observable.rs"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"a762cc8dc496d3d561327f31814e7a8b638706290c4227c4c8ebd80a91e1cd03"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #1: If anonymized user #1 becomes unavailable, 40 significant file(s) lose their only recent owner: src/Fable.Transforms/Beam/Fable2Beam.fs, src/fcs-fable/src/Compiler/Driver/CompilerImports.fs, src/Fable.Transforms/Rust/AST/Rust.AST.Types.fs, src/fable-library-py/src/native_array.rs, src/fable-library-py/fable_library/Map.fs, src/Fable.Transforms/Beam/Prelude.fs, src/fable-library-beam/fable_date.erl, src/Fable.Transforms/Beam/Fable2Beam.Util.fs (\u002B32 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"31a2598bdf06a497b7e2afc0dd3e5c3357cbb56573218dd46cdd1a4d7517dfbd"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #2: If anonymized user #2 becomes unavailable, 10 significant file(s) lose their only recent owner: src/fable-library-rust/src/Array.fs, src/fable-library-rust/src/String.rs, src/fable-library-rust/src/NativeArray.rs, src/fable-library-rust/src/TimeSpan.rs, src/fable-library-rust/src/Interop.rs, src/fable-library-rust/src/HashSet.rs, src/fable-library-rust/src/HashMap.rs, src/fable-library-ts/MutableMap.fs (\u002B2 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"b694fb69cad5d77fea13ecb356203a79d3219ba5fd68a381303cec087e7f9154"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #3: If anonymized user #3 becomes unavailable, 6 significant file(s) lose their only recent owner: src/fable-library-dart/quotation.dart, src/fable-library-ts/BitConverter.ts, src/fable-library-ts/Observable.ts, src/fable-library-ts/Event.ts, src/fable-library-rust/src/QuotationTypes.fs, src/fable-library-rust/src/Interfaces.fs. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"c0fd8e4da821aa3cdb801e9073acf88278bd33886806e52bbb636b7db0ca2359"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #4: If anonymized user #4 becomes unavailable, 6 significant file(s) lose their only recent owner: src/fable-standalone/src/Worker/Worker.fs, src/fcs-fable/TcImports_shim.fs, src/fable-standalone/src/Interfaces.fs, src/fable-standalone/src/Worker/Shared.fs, src/fable-library-ts/Numeric.ts, src/Fable.Build/Quicktest/TypeScript.fs. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"b5dd2532ebe77a40cdb35736f099107ffe98f3f371ceff9a24b0845c7f9e53c6"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #5: If anonymized user #5 becomes unavailable, 3 significant file(s) lose their only recent owner: src/fable-library-dart/Async.dart, src/fable-library-dart/String.dart, src/fable-library-dart/AsyncBuilder.dart. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"9ed6fafe570fdb4f0fc3fa31288afaf7d52a3977e43882341c977ee8f0cb28a8"}},{"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 (67 single-owned of 492 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; 492 of the 625 production source files in this repository met that bar). They are anonymized user #6 (1 file(s)) \u2014 spread or document their files in the same way, at lower priority than the named off-boarding risks above. The files folded here: src/Fable.Core/Fable.Core.JsInterop.fs."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6eac528f2429e724e1a97ed868f79eefbcf1888dab4af9a9e673429369bb5b2f"}},{"ruleId":"D20","level":"note","message":{"text":"No ADRs found: No ADRs found. No recognised ADR directory (\u0060docs/adr/\u0060, \u0060docs/decisions/\u0060, \u0060adr/\u0060, \u0060docs/rfcs/\u0060, an \u0060ADR0001/\u0060 folder, or their siblings) exists anywhere in this tree. What was searched, so you can tell an empty log from a search that missed one: every directory under the tree (build output, dependencies and VCS metadata excepted), for a document that is either any non-index page inside a recognised ADR directory, whatever its name and however deeply nested (\u0060docs/adr/use-postgres.md\u0060, \u0060docs/adr/2024/0001-x.md\u0060); or a file anywhere whose name is ADR-shaped (\u00600001-use-postgres.md\u0060, \u0060adr-012-caching.md\u0060); or, when neither turned anything up, a document carrying the decision-record signature (an \u0022Architecture Decision Record\u0022 heading, or Status / Context / Decision / Consequences as section headings). A decision log that clears none of these \u2014 unnumbered files outside any recognised directory, without those headings \u2014 is not seen by this check and this row is then wrong. If that is your case, say so rather than renaming anything; otherwise, consider recording architectural decisions in \u0060docs/adr/\u0060."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d2bea044ff79d7d275f5a91a6e2f548586178eaf480274c33960ad020c854631"}},{"ruleId":"D22","level":"warning","message":{"text":"Redundant and confusing null-handling factory methods. \u0027Create\u0027 returns MaybeNull, \u0027CreateNonNull\u0027 presumably throws or asserts, and \u0027CreateWithNullCheck\u0027 is ambiguous about its return type and behavior compared to \u0027Create\u0027. It is unclear if \u0027CreateWithNullCheck\u0027 is a safer wrapper around \u0027Create\u0027 or a distinct validation step.: Unify into \u0027TryCreate\u0027 (returns MaybeNull) and \u0027Create\u0027 (throws on null). Remove \u0027CreateWithNullCheck\u0027 or rename it to \u0027CreateWithValidation\u0027 if it performs extra checks beyond nullity. (signatures: ProvidedType.Create(ctxt, x): MaybeNull | ProvidedType.CreateNonNull(ctxt, x) | ProvidedType.CreateWithNullCheck(ctxt, name, x: MaybeNull))"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0de224ee47384f94e76fcd55e7d359fcd31c974f037ddf394c75edb60005ae5b"}},{"ruleId":"D22","level":"warning","message":{"text":"Inconsistent naming for untainting operations. \u0027PUntaint\u0027 is a method on the instance, while \u0027PUntaintNoFailure\u0027 takes a function argument. The \u0027NoFailure\u0027 suffix is non-standard and unclear. It is not obvious if \u0027PUntaint\u0027 can fail or if \u0027PUntaintNoFailure\u0027 is a variant that handles errors differently.: Rename \u0027PUntaintNoFailure\u0027 to \u0027PUntaintWithFallback\u0027 or \u0027PUntaintSafe\u0027 if it handles exceptions, or remove it if \u0027PUntaint\u0027 is the only intended path. Clarify the failure mode of \u0027PUntaint\u0027. (signatures: Tainted.PUntaint() | Tainted.PUntaintNoFailure(f))"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"ecd2fd4568de3385cec355d01c3220234f99d8f1758a4b6d43aff51d2ac58fa1"}},{"ruleId":"D22","level":"warning","message":{"text":"Inconsistent use of \u0027Try\u0027 prefix and return types. Some methods return \u0027Tainted\u0027 directly (implying they might throw or wrap), while others return \u0027Tainted\u0027 but are named \u0027Try...\u0027. \u0027unmarshal\u0027 is a distinct operation but lacks the \u0027Try\u0027 prefix despite likely being fallible. The distinction between \u0027TryTypeMember\u0027 and \u0027TryTypeMemberNonNull\u0027 is unclear without documentation.: Standardize on \u0027TryXxx\u0027 returning \u0027option\u003CTainted\u003E\u0027 or \u0027MaybeNull\u003CTainted\u003E\u0027 for all fallible operations. Rename \u0027unmarshal\u0027 to \u0027TryUnmarshal\u0027 if it can fail, or ensure it is documented as infallible. (signatures: TypeProviders.unmarshal(t: Tainted) | TypeProviders.TryTypeMember(): Tainted | TypeProviders.TryTypeMemberArray() | TypeProviders.TryTypeMemberNonNull(): Tainted | TypeProviders.TryResolveProvidedType())"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"e858970b217d1f5bcc75d07e50c6545bdb03056c882081e0f8588d567cb5aef5"}},{"ruleId":"D26","level":"note","message":{"text":"Projects may be oversized for their cohesion: 7 of 35 project(s) overshoot their size bounds, lowering Project Cohesion to 6.1/10. The most over is \u0060src/fcs-fable/src/Compiler\u0060 (183252 LoC, 1384 module-visible types across 16 directories). Review these for cohesion \u2014 draw the boundary inside the module first (group each responsibility into its own package or directory and keep the cross-boundary members non-public), since splitting a published package moves types between packages and breaks consumers."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d5a94650dc74886a0f1f08eb9fb6775f1fc395279ef7e901c970c9d26f767a72"}},{"ruleId":"D27","level":"note","message":{"text":"Scattered collaborators: 100 % of calls cross a namespace and only 0 % of collaborators are co-located \u2014 group each feature\u0027s code into a vertical slice so a call\u0027s collaborators sit together."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"5aad4a4530bac3928d3a065a664be89d023ecfc865f9bf79ac05754b3bffe322"}},{"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":"45621adc5dc829f645bc31f2d71b58b2ae0424bd95acb2f4f7005499e9be4941"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"4ff348071e36462951e4da1e0de4dba02a2a6706bdfdf52d07f67167cb7ef277"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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"}},{"id":"A08:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"da153fe4866d3484644d5d7c724a1b31116a98ba47d118121b2d77dba30c251a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"a928dfc7c704d255101d8fc44c853b60152f8ed54d1ea1998e9d924a45296084"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"1b0af3888a1880c6d053448f16b241b366be57a1bf8e5c1cf8f8bf91ac1d9154"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"8a301a1275de5e39c2ec0cbd57522617e489a482a6481e0cedb1faab2b457736"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"71eac3133932904fbfa4e05b201cbc4cb7f2c16cd18ffb73ca38198a8a838de5"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"b335f8f799a9b086e08780a62de4370620b0a2d79f7c8101e687144df4e9192e"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"0348d6c0d8b8711ad43b25333f07d69574eaf489043002c88f3dded5dc925919"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"14fc425c5ac2a41757d6169387970f4e02ce546f2add09dff4590f236cc5c727"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"c50f39dd471cb3d74d763b3d75b14773f680ed5251990197e002001b0b4d13fc"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"e377cda0c366c7ec21f77dc2c2e79c77303619349684653e0f4f355597bf87ed"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"316f31bc1911c8a06ed6fa4d289aa133257a4a7f9e3278149014410ba4e38bfa"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"52cf74c663adb508712c07fdcbd73c67cd4e62ecd0daf0d7878f2abd69e0b923"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"475982979802ebc3b2ccbc3560f7a16093c7ec4024bdf085ee954dc57874eeb7"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"972820e26b02bef62b226c5afa39a40bb38c18c4772998cd5c3891d8ecdf2636"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"b6377123a30f79080f6807acb5db14e16976e2808c91f8014b17cc546e2d0782"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"bf8c5bd204f0da3c325fa0df19397abb72570c04385d80793f9dc4883b7d7c82"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"5e74f95843ed6f4d994c6f8deabb3dd49dc22f2e7a3da1fd5483daa842635c89"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"8ce550e1dab52600b67f3ec2b7d718e0cd866ded1f3de21f2ace4017cf415598"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"9e3b61bcf8d76fa83da685f50fe4c54f53ee63d6cadec3436ba2b59809fbc291"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"95384c1d0ab5164e8e8b68ef4500fa3cc2809580e2d4586513a584c3b90c90a9"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"be1f8b160a39c3e0626268453855b47952c7a7a1d49304ed8d3a88d750260eba"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"ce988175a9307760062bc4e6bebba4654af2f18109853a6b657d3c2051b70acc"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"f518a7ed588f9b34d969bc416d992cbde20c531c490b34db43a9810be0bf6d22"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"cace462ab8133bc827b9a513ea05ace1a2f04049840dc12ede65f115b34edde9"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"172c84702ec434fd7d55c4ee37891ed74a8f5d68c950d496493681c6aa191387"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"573713949c9d1820440f04a0a2c6a26f0a879f57956775995c825eef274e8692"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"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"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}},{"id":"CICD-SEC-6","toolComponent":{"name":"OWASP Top 10 CI/CD Security Risks","guid":"3c9b2a6e-5d14-4f7b-8e02-6a1d9c4b7f35"}}]},{"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":"01f8c0171baa113a7802229984e8b0e8b1224488339c4f22fc4301078f8812da"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"824bf92e0507861418a8af3ca62b3c01a9355d932564d50e7911b7774740354a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"2a8c245b8076b6eca893a43d00ab91cf0a21e36425820c3b313dfb76b1e535e6"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"5fe2e430accd4e56a317da2cede4294ccd4af35baf5e44cfe482bb7f4fa55829"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"32d0f7ddd8e537bd80d0ca1f5357a3e7944580bf8cb4274114ba90366b643d11"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"e8c3ae63bce1ff1d935d8ca93b69c5f66612dc2c1b31d8d5991c95cabdde7401"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"d5dfedc812d352fe801a9cc55a509839187b511997b47c6d7e08a13e11888033"},"taxa":[{"id":"CWE-269","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}},{"id":"CICD-SEC-4","toolComponent":{"name":"OWASP Top 10 CI/CD Security Risks","guid":"3c9b2a6e-5d14-4f7b-8e02-6a1d9c4b7f35"}}]},{"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":"793e7cf300a27e6b9b3c0ceacc2624721e8ae2f4bab94a4185820153c4313e23"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"899fb78993217870177abe148176ab9db5b17013afd4d37314b43543983f3a48"},"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"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}},{"id":"CICD-SEC-6","toolComponent":{"name":"OWASP Top 10 CI/CD Security Risks","guid":"3c9b2a6e-5d14-4f7b-8e02-6a1d9c4b7f35"}}]},{"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":"86bb8fd820dd21756fa85ee7b9be1c8ef106bdf220177e528e2fccf71b7b4b69"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"9ca7013ed7cf6b30c459571dff8aa2b731de6ac6aa003d29486132a1575e7666"},"taxa":[{"id":"CWE-269","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}},{"id":"CICD-SEC-4","toolComponent":{"name":"OWASP Top 10 CI/CD Security Risks","guid":"3c9b2a6e-5d14-4f7b-8e02-6a1d9c4b7f35"}}]},{"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":"6d68dcc4579de531945455f176e35fca5796494de6fd6b593acab33bd9ff814b"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"6f0654c9e40962e05e1b97c5a2ab97398e22d4eca2e667b91262186234ae5409"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"36ee7e809445b7dcaed5bf680b23a61802632670f39cafd5385163a813a0faa5"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"80b3a84986cc18f56c7128a23f49b6b06b21661953b396174b8001e50a354c5f"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"59392b7f2ead3859e1ec154ad3fd52bf662ad7209348f206158f1cf765693ec5"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"8b19a868e5507583de9d529711202b5685861bce20bdfa40b066e54b094f0648"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"6ef8587007e1acfa5d4d58b0b38996e81f410db986539acf7f1305826d7a7ccf"},"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"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}},{"id":"CICD-SEC-6","toolComponent":{"name":"OWASP Top 10 CI/CD Security Risks","guid":"3c9b2a6e-5d14-4f7b-8e02-6a1d9c4b7f35"}}]},{"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":"2523ff898482aa7bbee6b29093a77b05960ea8d7a482e0d28a26291713d4b950"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"50d8ade9519a58f1df83880217031c6732fec547e5e82ab0b89e9ba1ddd70e00"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"1033e81807e44c384290f622819a4e5492a089144453a0c3b625ad5ab24d5cea"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"c0e00eebc10bab83f5aea2983147dc737058a3939df7f0bef03d0a60e22892f9"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"35e70186446d4643c31efcacf94d1b8c3ce272b668cf6814b79253f9f51276bc"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"5cdf2571cd12177f3bc99b03f57ef4cc8de9d1762a9c5517c127dc9197bbcb70"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"e5a5c372286c8fc2638da0c3e3c71c8a9d14ef5ac0cab40b134cf749e81fdb1a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"2150717c6701d48df8315ad19cb6c8279baad0904d37a52f1b3cb52e0ddf3e0d"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"5f6394d2cf11022ae73ddcc3880f1e9a30371516f3c1c60fa9ebde77d35f4c28"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"7140f8a6cc5ee83a8690482262e7f251fd6054668c778d467fc0bb02ab8337f0"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"312c2cd9041ccf455439443e5dfecbae1876f824765a497d558c9992e01d2e25"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"79802ce287ef2cb8c4daf0b7ab7d6d322db5107cf36f5190cff4082208dbae5e"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"b988bc82f7ddb24d232ca82f8334768f964b975872762d87732c388f656bbed3"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"123dfe66053c31ef8ba43f16b9c2b09baf5b2fc09cb7ef789a1d957aa99dc839"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"cd45d69a96ffa33d162aa48a0c957e0e15a6027c983be0a00ad1e0ac7b706ebc"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"f5246bd48c381a20858eeb947501064da2b1954e514fb428415445fc90d3d4ff"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"c94d9c08d05b9e64fabb83851ba400ae323672a50b939b13afa7a06515ab38ae"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"c3b0e26a76b5028b64b9bbcba6f29f677c8d4571118b50f15a84b920d2b27022"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"bb9f97b7e8927ffdb1ad9390c406e663d5a5cbe2860790f0c3a33d61c51ff64d"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"19858607a268f9fabf4e887f4c9a764c816f813118bcd1b889077aea47513204"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"c465faccd51f33ab88fe29286ed6cbaa62c606a5adf63430a1f2ed87b4214e32"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"b05156da76fd301830c71fc5a4a3d1a2bc5efff66d856faae7a16ee3026f787e"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"e0050ddd9d68107f11d6097fefb0b2f195301c07d2fce8d148038de96c4b9270"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"478918ea858658dbcf364f06295b6397b38c3d879256f6e0595b525bfd027c15"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"a856319bab9a807ff88d6eb4a292b8c67c626c95f79e682bb17e0fd6148144e4"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"594f241c5f122a9bd4d0f5cc93fe3ee9e498cae45147d28e00b6825ec4298267"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"0f22af4340a6730b34b81bbddc923ec359f4074252590d8bc351e5642503f75e"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"d4a47ed4fd9ba140ed2ed23f92f630c58d3336b30895cb513ef033b029d1c621"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"ff0e94e1dc6ecd8191e9f41a7a304d89be849425486108f942419cce526a373d"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"dae65d2b6a50cc78bac5c04d7ee40ba1de32953e0c93b7950fc1a558e99eba7e"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"2817cd6d03a7c39740460271f17d0ec439ef61da222814a7ca839579d9644c55"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"0a33c8f586fbdaed2d9105ad371c9b8e7cf97213da6eeab8de10ca2b2fccf3c7"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"9aa0e40788ac7385835a61b80a3dc52863c0b113ca6d501ddc9b1e15d02429f8"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"d35997f70aa1b8c2a4e0eb89efe0d21f4ae5a63fc3841514179e2f116c3ba8f7"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"4ba109569da57c258b76be335b291ad20570bd8f678ebdf9357a8f9f97310264"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"c39142148c13f69bbf83408b8bd3a958c8f9b47daaafbf38f615a8c9cc926aae"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"1ec8e54acdcc9a0474a654b7762c2c84d2c40741d434a4471b70f1abcb40b07f"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"8e7e80607170b93409f1ba5e3239f6c0047ea05430275824b46183fe5462be92"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"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":"0790a402945238d33c272b56da845900e479ec28f6f0dbc4db73c5ccf58ac7b1"},"taxa":[{"id":"CWE-250","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A06:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6ed059458dc0d864f79fffc2c8cd3f09ac2213f256b255ba1e07734350228541"},"taxa":[{"id":"CWE-829","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A08:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6dd34843ec57c4b9cfa9c3518a7f6ca25efdb3fd8eec0b794a50ea9fb3ae5a8d"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A05:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"427f73e04b3ab6ce7d26b7dd2c1304e0362c4808f80bc12c61adf25c7cd198d0"},"taxa":[{"id":"CWE-1333","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A02:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"15df1005faf9e20245efefa412739725ec4bbe1584f6be6d0fed592e06fe6851"},"taxa":[{"id":"CWE-1333","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A02:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6c89993a1ea03beb84f6b69a0440aa089477476a8d8a2e55c2799b42491c3a09"},"properties":{"dependency":{"package":"braces","version":"3.0.3","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":"8a7ebda48bf9a9895fb5dae407d5174939e3b3cd7d2c9a652f4c0a88c80aa8ad"},"properties":{"dependency":{"package":"js-yaml","version":"5.2.2","advisory":"[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":"d1a4b1960e029a108d3935b6d1d28c8e87e48a9fef0e276c8c7e74afde168e3e"},"properties":{"dependency":{"package":"smol-toml","version":"1.7.2","advisory":"[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":"8c7d1077e4a00749199d4f937c10098ae6dac026a670c7633bdc6377a9b072fd"},"properties":{"dependency":{"package":"katex","version":"0.16.47","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"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":"3b1568673c97a5ce9b1ec5a08dba083d705b7ca92047378b6f33333438b27491"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D31","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"0aaa8350a93cd4dc600d851b9874c163373477ae3324a481b0c1bcbb4b8dfced"}},{"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":"3260ff93174f49ae10f5552a0329814b77c91960ca91a54cd36b784f53bff409"}},{"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":"cd1e1916692d4d5f458efae18df368376314f217f352881cf1d4fa6cc083eb6d"}},{"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":"a0253cdb433485d93f1259fe935cad7c5df0486a99bae72ae65dbbacb158f6f3"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A08:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}},{"id":"CICD-SEC-3","toolComponent":{"name":"OWASP Top 10 CI/CD Security Risks","guid":"3c9b2a6e-5d14-4f7b-8e02-6a1d9c4b7f35"}}]},{"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":"e2ea8d71c605461c03407931678449a3ade13c072012dca8345b53f8a4247ea9"}},{"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":"c8d9e8dea76346a025fdfc27902d6a3e52e59aed79f1cbb538da7ca7a0cd5179"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A08:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}},{"id":"CICD-SEC-3","toolComponent":{"name":"OWASP Top 10 CI/CD Security Risks","guid":"3c9b2a6e-5d14-4f7b-8e02-6a1d9c4b7f35"}}]},{"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":"c8fabc3976c8b044562b70ba3683fad9c3470ac613f97d07fda341fdcfa04d33"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A08:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}},{"id":"CICD-SEC-3","toolComponent":{"name":"OWASP Top 10 CI/CD Security Risks","guid":"3c9b2a6e-5d14-4f7b-8e02-6a1d9c4b7f35"}}]},{"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":"05836be219829ad71de843a69bdb2e4939172177ee15ccb3f18c905ae68d2f85"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A08:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}},{"id":"CICD-SEC-3","toolComponent":{"name":"OWASP Top 10 CI/CD Security Risks","guid":"3c9b2a6e-5d14-4f7b-8e02-6a1d9c4b7f35"}}]},{"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":"837e019ceae69078065c02fd8c6fd1c102f0ec9f0ee638a83aa984e4e93e8ff2"}},{"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":"b68f1e951330a0bf01acb8711f7b93bb4aa7e0e0328a288736fd5cc30e44b1e2"}},{"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":"4f49a1557ee359f9d2d6dc6b740bbbaea8ce772a83457d7bfd8b1b91883a7e06"}},{"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":"efceb5967722e3b75c8dcd8f08bd1ce2aa3b7360cb8b59e86124891a545aa26a"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/AbstractIL/ilwrite.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa8492f13e3a8316cc179e1c521c4c2cd423a1019b7a46a65af6d4a4b5af5ee5"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/Checking/infos.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd5e9e258ba7c8879b8443d92fa744feeed531b206c048fb2c12e2eb96d97ae9"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/Symbols/Exprs.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"eba11c9bc867d3f596f5287ee8981f80e87434674d7b65b0e3f9f6ead66de0b9"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/Optimize/InnerLambdasToTopLevelFuncs.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fe41a1d2d3ad4ff508278050acdb5ba8f051f7621dc2f7c15ed292a04e80782"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/Checking/SignatureConformance.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"effe381a48b75a1baa210ecbea70e1193524d367d94a1d9485457c7c17fd07e5"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-dart/List.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8697eb6cf3b1d7ee0962125308ba5c701d82243bdef427a86850840c45e5adb7"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Fable.PublishUtils/PublishUtils.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bde8d45d498871f55298c1db957aafddfb67f3c3d7e7e5cc86cf3d1a31f517b6"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-php/Set.php"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"45cd68bad6f8f39ac3183ac3f540a60543e40ab3c03f589e207d07c4d570066f"}},{"ruleId":"D34","level":"note","message":{"text":"Further orphaned files (smaller): 25 smaller file(s) also have no living knowledge \u2014 folded into the freshness score and metrics rather than raised one row each \u2014 most significant first: src/fcs-fable/service_slim.fs, src/Fable.Transforms/Php/PhpPrinter.fs, src/fcs-fable/src/Compiler/Checking/AccessibilityLogic.fs, src/fcs-fable/src/Compiler/TypedTree/QuotationPickler.fs, src/fcs-fable/src/Compiler/Service/ServiceAssemblyContent.fs, src/fcs-fable/src/Compiler/Utilities/lib.fs, src/fable-library-dart/Date.dart, src/fable-library-php/Map.php (and 17 more) (33 orphaned of 495 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; 495 of the 625 production source files in this repository met that bar). Attach the read to the next change that touches one of them: have a second person review that change, and leave behind a short comment or test recording what the file is for, so the knowledge comes back at the cost of a change you were making anyway."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"ce861fd78f6935114d3a342cb90ad25870f984e1042954fcbbe27c0e23be3658"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/service_slim.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"451d4e41965311cee29e8e5e8f724287fcc453d4508abd50cd40937dd4a09c05"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Fable.Transforms/Php/PhpPrinter.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd2a11d4659347079128a2d98a1269413ac9bedb2d7a509c17e7681ba4ebfe74"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/Checking/AccessibilityLogic.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1015a7f100d0f6beb8e7039495bba119c16793b2890aa006de92a7bba428609f"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/TypedTree/QuotationPickler.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c51fa8926f1b84e64834b5cf954678203d4ab1c933cbd4240a95a3e90d70a1b9"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/Service/ServiceAssemblyContent.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7c7a9050d49e4f032f23f2fa88f8b3e2c8c5023d7bea53ecb88cc9cee0f8495"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/Utilities/lib.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"45ebcc614e8ba720edf0868484dd1f0c593d2ac049cc20e0828c79f9d6908dfe"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-dart/Date.dart"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e26f3abc5656794ee3e5ecdf9f1c01bd74e868fecafaa50bb3b71bed5b3f14c7"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-php/Map.php"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a0b07e7da336a7f19f18386c88a6ac41c50548c54c28a0e3218cbdef7ad8537"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-php/List.php"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"60cb5732facf7a98251a9821bb4a04ef1126c25b8e5bee8f581b3038f50972be"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/Optimize/LowerLocalMutables.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7422ca31ae922a10884ae4d801449f271110add8fa92585609e2082680976d73"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/Symbols/SymbolPatterns.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"92040bd6953b996ad6d03ee435369a91babba9548f25c4baff197a895a8879a7"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/TypedTree/tainted.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5c72f58eff5a424857be185e4453d36d754967f01ace9f960f496dc1abab9ff"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Uri.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ba656766282f8da166afdc25a81ffd474d7c88e7df5690d83ee0dd3608619eb"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/Service/ExternalSymbol.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d0599af877be1fb4cc432c012d2b40713b26a97cd4113ac5d254b940826f0fc"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-dart/RegExp.dart"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ff0a382ab153fef63b5ff0a00271ce8f63c1edf537dbd2f78b7216e6e9bf11e"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/Utilities/EditDistance.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b33d11212fde67cff7ce569ec35a612065e8cea50df56f277e9ff7fccaca87d"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/ast_print.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5bb9fe771df12f838df41479943c428163bfaadea109023d594fd66ee8610a14"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-php/Serialization.php"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d507556e64ca5c9ee632c423236ae3580e7128751f727f9072c29fdeb358fdaf"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-php/Util.php"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0681992c0bb0bbebe30ce015cef08cbf6b323a1f633dc09c0515dd8a71d1924"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Fable.Transforms/Printer.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a0a3a76e487fb080ef3e5f96007b612e650220d7178d00c0ee746d4397d7bd4"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/tools/ASTViewer/ASTViewer.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"355d90ea934fbe87ca706611a14a700fd60db1f0eb025fe2e50248952d34b6de"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/Facilities/ReferenceResolver.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa28a3d36cbfbb0392a90ac82631b804bd9f6103bc43905a91a1d489e1f1e419"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Fable.AST/Common.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8fc85715739c8862926bae9d381a0456cc1b7acac9652a95f59522e3ecb9d3f8"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-php/Seq.php"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5bee3d68ebeda85baced7a1bc1b9234d028fc7a8a4ae9a22b003297e3564d500"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned file: No one still active in this repository holds living knowledge of this file: everyone who made a meaningful change to it has gone quiet, or what the current team did to it (moves, reformatting, log-level or import edits, renames) never needed understanding it. If it breaks, no one currently understands it. Attach the read to the next change that touches it: have a second person review that change, and leave behind a short comment or test recording what the file is for."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/Service/SemanticClassificationKey.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7ac10731e36e86150eb3bb37ee3fabbdcd2e13a4832636dde9f09e8a9f83c4f"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: Replacements.fs \u2194 Mutable.rs: \u0060src/Fable.Transforms/Rust/Replacements.fs\u0060 (context Fable.Transforms) and \u0060src/fable-library-rust/src/Mutable.rs\u0060 (context fable-library-rust) sit in DIFFERENT parts of the tree yet change together 82% of the time (18 of the 22 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) \u2014 the bounded-context boundary may be in the wrong place, or one context is leaking into the other. This is the behavioural boundary violation a static scan can\u0027t see. You can check this without leaving the row: of the 18 shared commits counted here, the most recent 3 are \u006093c2df5b\u0060 fix(rust): Fix IEnumerable casting, interop and type testing (#4946); \u0060974f63e2\u0060 [Rust] Updated derived traits mapping (#3944); \u00607d064ae6\u0060 [Rust] Support lazy values \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Fable.Transforms/Rust/Replacements.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"32018df73d94c9dc168af04002d482380a7ffabd38809848e8a12d6b5124e470"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: Replacements.fs \u2194 Option.fs: \u0060src/Fable.Transforms/Rust/Replacements.fs\u0060 (context Fable.Transforms) and \u0060src/fable-library-rust/src/Option.fs\u0060 (context fable-library-rust) sit in DIFFERENT parts of the tree yet change together 73% of the time (8 of the 11 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) \u2014 the bounded-context boundary may be in the wrong place, or one context is leaking into the other. This is the behavioural boundary violation a static scan can\u0027t see. You can check this without leaving the row: of the 8 shared commits counted here, the most recent 3 are \u0060e381f0a4\u0060 [Rust] Add support for null strings (#4033); \u0060aaad817f\u0060 [Rust] - Initial support for null values (#4023); \u006088f0c4c3\u0060 [Rust] fable-library-rust update (#2932) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Fable.Transforms/Rust/Replacements.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7e9b6e3d45bae09e75e63813e74d40eea64ba88257cf02e6919ebb6cc59873d"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: Replacements.fs \u2194 double.py: \u0060src/Fable.Transforms/Python/Replacements.fs\u0060 (context Fable.Transforms) and \u0060src/fable-library-py/fable_library/double.py\u0060 (context fable-library-py) sit in DIFFERENT parts of the tree yet change together 57% of the time (8 of the 14 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) \u2014 the bounded-context boundary may be in the wrong place, or one context is leaking into the other. This is the behavioural boundary violation a static scan can\u0027t see. You can check this without leaving the row: of the 8 shared commits counted here, the most recent 3 are \u0060383bb93c\u0060 fix(python): match .NET NaN and signed-zero semantics in comparison, \u2026; \u00604c67c82a\u0060 [Python] Fix type annotations for curried functions and numeric types\u2026; \u0060c27608b7\u0060 [Python] misc iteration on pyo3 strings \u002B\u002B (#4130) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Fable.Transforms/Python/Replacements.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2f1f5b0533368e2252d0d46f6f56f17410b79417fdcadcee5ae43884259ffa6"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: DartPrinter.fs \u2194 Util.dart: \u0060src/Fable.Transforms/Dart/DartPrinter.fs\u0060 (context Fable.Transforms) and \u0060src/fable-library-dart/Util.dart\u0060 (context fable-library-dart) sit in DIFFERENT parts of the tree yet change together 53% of the time (9 of the 17 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) \u2014 the bounded-context boundary may be in the wrong place, or one context is leaking into the other. This is the behavioural boundary violation a static scan can\u0027t see. You can check this without leaving the row: of the 9 shared commits counted here, the most recent 3 are \u0060f391f7a9\u0060 [Dart] Fix more arithmetic tests (#4461); \u0060b7c178a3\u0060 Dart: Enable more option tests; \u0060de89ab1c\u0060 Dart fixes \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Fable.Transforms/Dart/DartPrinter.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2631dbfb33722925418287addea3dad6a50fe38a402e1545bb2767b1f79e8bf"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: HashMap.rs \u2194 HashSet.rs: \u0060src/fable-library-rust/src/HashMap.rs\u0060 and \u0060src/fable-library-rust/src/HashSet.rs\u0060 change together 100% of the time (14 of the 14 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency between them. They sit in the same directory, but in this ecosystem each file is its own module \u2014 a sibling reference still needs an import \u2014 so the missing import edge is real: the coupling runs through shared behaviour, not a declared dependency. If they duplicate structure, extract the common part into one unit; otherwise the coupling is hidden and worth breaking. You can check this without leaving the row: of the 14 shared commits counted here, the most recent 3 are \u00602594fdda\u0060 [Rust] Fix missing HashSet implementations and tests (#4523); \u006080527585\u0060 Support Rust 2024 language edition (#4063); \u0060974f63e2\u0060 [Rust] Updated derived traits mapping (#3944) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-rust/src/HashMap.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"decaf5ef640cbc7f93a7fe17eee27734b264d7250187e4a73660978ae3957d88"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: MutableMap.fs \u2194 MutableSet.fs: \u0060src/fable-library-ts/MutableMap.fs\u0060 and \u0060src/fable-library-ts/MutableSet.fs\u0060 change together 91% of the time (10 of the 11 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). They sit in the same directory, and in this ecosystem sibling files there normally share one namespace/package \u2014 so a direct reference between them needs no import and this pass cannot see whether one exists. Read the pair before acting: if one file only DECLARES what the other consumes (a constants/types file beside its user), the co-change is definitional and the question is whether the split earns its keep; if they duplicate structure, extract the common part into a shared function or type they both call; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 10 shared commits counted here, the most recent 3 are \u0060aea61b56\u0060 fix(js/ts): Fix Dictionary.Remove and HashSet.Remove to remove empty \u2026; \u0060a3adc60d\u0060 Cleanup ident handling (at that commit the files were still \u0060src/fable-library/MutableMap.fs\u0060 and \u0060src/fable-library/MutableSet.fs\u0060); \u0060bc6075e8\u0060 Fix #2417: overloads with struct tuple (at that commit the files were still \u0060src/fable-library/MutableMap.fs\u0060 and \u0060src/fable-library/MutableSet.fs\u0060) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/MutableMap.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"885126e4ffe7fb78a8e0a5e67b41708ee63f25a05336fdbe24e16ee721b19074"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: Array.fs \u2194 List.fs: \u0060src/fable-library-rust/src/Array.fs\u0060 and \u0060src/fable-library-rust/src/List.fs\u0060 change together 79% of the time (31 of the 39 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). They sit in the same directory, and in this ecosystem sibling files there normally share one namespace/package \u2014 so a direct reference between them needs no import and this pass cannot see whether one exists. Read the pair before acting: if one file only DECLARES what the other consumes (a constants/types file beside its user), the co-change is definitional and the question is whether the split earns its keep; if they duplicate structure, extract the common part into a shared function or type they both call; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 31 shared commits counted here, the most recent 3 are \u0060a3386bc8\u0060 [Rust] Add missing Random implementations and tests (#4478); \u0060e381f0a4\u0060 [Rust] Add support for null strings (#4033); \u006009117e0b\u0060 [Rust] Updated some collections equality (#3945) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-rust/src/Array.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"be97c85e8ffeb28dbaa445859c8f6ceb77e8315e7f3a8513a651d6b94b774d60"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: Interfaces.fs \u2194 Native.rs: \u0060src/fable-library-rust/src/Interfaces.fs\u0060 and \u0060src/fable-library-rust/src/Native.rs\u0060 change together 70% of the time (7 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) 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 7 shared commits counted here, the most recent 3 are \u00608a551bc9\u0060 feat(rust): System.Uri (PR 7 of 7 Rust improvements) (#4790); \u0060c97042bf\u0060 revert: \u0022feat(rust): Observables, Events and IEnumerable (PR 6 of 7 R\u2026; \u006020175eea\u0060 feat(rust): Observables, Events and IEnumerable (PR 6 of 7 Rust impro\u2026 \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-rust/src/Interfaces.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d76f99d3c5d2ed2016d1bd19acf9b682c7560b69764bfca41a27537e1aa5f853"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: numeric.py \u2194 string_.py: \u0060src/fable-library-py/fable_library/numeric.py\u0060 and \u0060src/fable-library-py/fable_library/string_.py\u0060 change together 70% of the time (7 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) 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 7 shared commits counted here, the most recent 3 are \u0060c27608b7\u0060 [Python] misc iteration on pyo3 strings \u002B\u002B (#4130); \u0060b31d07d4\u0060 [Python] Add task RunSynchronously (#3145) (at that commit the file was still \u0060src/fable-library-py/fable_library/string.py\u0060); \u00608512b275\u0060 [Python] typing fixes (#3068) (at that commit the file was still \u0060src/fable-library-py/fable_library/string.py\u0060) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-py/fable_library/numeric.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"20d652823c88f3cd44432b30a77bd0659bc5a4205844b8f991f3d990fcf3b5a0"}},{"ruleId":"D35","level":"warning","message":{"text":"Change-coupling hub: Option.fs \u2192 Array.fs, List.fs, Native.rs: \u0060src/fable-library-rust/src/Option.fs\u0060 changes together with 3 other files \u2014 \u0060src/fable-library-rust/src/Array.fs\u0060, \u0060src/fable-library-rust/src/List.fs\u0060, \u0060src/fable-library-rust/src/Native.rs\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":"src/fable-library-rust/src/Option.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"53a2d76a17bf9fd5a9a1a0dbd84a8ee5227f85d93687e68360762b4974fde167"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: HashSet.rs \u2194 String.rs: \u0060src/fable-library-rust/src/HashSet.rs\u0060 and \u0060src/fable-library-rust/src/String.rs\u0060 change together 50% of the time (7 of the 14 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency between them. They sit in the same directory, but in this ecosystem each file is its own module \u2014 a sibling reference still needs an import \u2014 so the missing import edge is real: the coupling runs through shared behaviour, not a declared dependency. If they duplicate structure, extract the common part into one unit; otherwise the coupling is hidden and worth breaking. You can check this without leaving the row: of the 7 shared commits counted here, the most recent 3 are \u006080527585\u0060 Support Rust 2024 language edition (#4063); \u00606db7ed04\u0060 [Rust] Enabled some Comparison tests (#3442); \u00606708396d\u0060 [Rust] Added Default for array, string, hashmap, hashset, guid (#3165) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-rust/src/HashSet.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a695b547eed5a29e38b05836320ab604b878b821814e6075b670d9a951ef786"}},{"ruleId":"D36","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"eb00976a698a5d68999b7ee6d27206fd374e916853e7ff1ead5eed42386f043f"},"taxa":[{"id":"CICD-SEC-9","toolComponent":{"name":"OWASP Top 10 CI/CD Security Risks","guid":"3c9b2a6e-5d14-4f7b-8e02-6a1d9c4b7f35"}}]},{"ruleId":"D36","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"90f83b4fa27db32740afe9540c905f3c0499caed87f61049a8a903ecc95b41c3"},"taxa":[{"id":"CICD-SEC-8","toolComponent":{"name":"OWASP Top 10 CI/CD Security Risks","guid":"3c9b2a6e-5d14-4f7b-8e02-6a1d9c4b7f35"}}]},{"ruleId":"D36","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d657599f6f99da1927d3377533dfc0888b34c4d84aa7d5579841fd72d0e39bce"},"taxa":[{"id":"CICD-SEC-6","toolComponent":{"name":"OWASP Top 10 CI/CD Security Risks","guid":"3c9b2a6e-5d14-4f7b-8e02-6a1d9c4b7f35"}}]},{"ruleId":"D36","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4f1e7684f8281bd255ddef97105c7055c2ebae06964c8745716b83e174debe83"}},{"ruleId":"D44","level":"warning","message":{"text":"End-of-life runtime: .NET net9.0: src/quicktest-beam/quicktest.fsproj declares .NET net9.0 as this project\u0027s target framework, and .NET 9 STS, support ended 2026-05-12. An unsupported runtime receives no security patches, so every vulnerability disclosed in it since 2026-05-12 is present and unfixable without moving off it. This is a migration rather than an upgrade: there is no newer release of a runtime that has ended."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/quicktest-beam/quicktest.fsproj"},"region":{"startLine":4}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf833dd2e60d7abeaab60bf3ef76eff2806e8ec26408f1f9382eb19e6e5923da"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: MutableArray (19 required operations): \u0060MutableArray\u0060 declares 19 required operations under just 15 distinct name(s): \u0060every\u0060, \u0060fill\u0060, \u0060filter\u0060, \u0060find\u0060, \u0060findIndex\u0060, \u0060forEach\u0060, \u0060indexOf\u0060, \u0060join\u0060, \u0060lastIndexOf\u0060, \u0060reduce\u0060, \u0060reduce\u0060, \u0060reduce\u0060, \u0060reduceRight\u0060, \u0060reduceRight\u0060, \u0060reduceRight\u0060, \u0060reverse\u0060, \u0060slice\u0060, \u0060some\u0060, \u0060sort\u0060. Counted over its REQUIRED operations \u2014 a method signature or a function-typed property with no \u0060?\u0060, once per signature; optional members and data properties are not counted, because no implementer is forced to write them. That is an OVERLOAD SET, not 19 separate responsibilities: a caller binds to 15 operation(s) and uses the overload it selected, so the Interface-Segregation harm does NOT apply on the caller\u0027s side and splitting this into role-interfaces would scatter one operation without relieving anything. The burden that does remain is the IMPLEMENTER\u0027s \u2014 all 19 signatures must be written and kept in step. Reduce it by collapsing overloads (optional or default parameters, or an options object) rather than by segregating the interface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f2ad2b2f36ab9edff9e9bb42f183c980e34f36bb032ff6fedd5598ce14959d5"}},{"ruleId":"M1","level":"warning","message":{"text":"README may be stale: 261 code files changed in the last 6 months but the README was not touched \u2014 it may no longer reflect the system."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"e973e7a8d5d866995cbf78b120250fe7f132bf928812d48ca62e69aba11b9910"}},{"ruleId":"M2","level":"note","message":{"text":"No ADRs: No Architecture Decision Records found \u2014 no conventional ADR directory, no numbered \u0060NNNN-title\u0060 documents in any markup this check reads, and nothing ADR-shaped by content. Design rationale recorded elsewhere (a design-notes tree, a mailing list, pull-request discussion) is not visible to this check and is not re-findable per decision, so a future maintainer cannot ask why one choice was made and get an answer."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"670b3d6e36a756d63097d0dfbf90afd5fc761308800b9354894a07c3f4e4aa14"}},{"ruleId":"M4","level":"note","message":{"text":"README/code drift: README.md runs \u0060./build.cmd\u0060, but \u0060build.cmd\u0060 does not exist. Checked without a model against the repository: its files and folders, the scripts and dependencies of every package.json, the projects, namespaces, package references and target frameworks of the .NET build, the SDK and Node pins, and the identifiers of every file that is not a document; the documents\u0027 own text never counts. A footprint generated at build time, read only by a platform, or living outside this repository is not seen, and this row is then wrong."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"README.md"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"b85864071a30ab325207b0475304e4f6aa1b79c8e2996b50e4173a6d35a328ea"}},{"ruleId":"P10","level":"note","message":{"text":"Large public API surface: 145/169 types (86%) declared in the published library are public. For a library, every public type is a stability contract \u2014 keep implementation types off the surface and expose only the intended API."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"ed2ba843444ae377c17142f58f714e281e4bd3f183ab100ee1fbef389875d3e6"}},{"ruleId":"P2","level":"note","message":{"text":"Logging is not universal: Only 4/12 runnable modules use logging (modules with no entry point or server are excluded \u2014 they are libraries a runnable module hosts). Silent: \u0060src/Fable.Build\u0060, \u0060src/fable-compiler-js\u0060, \u0060src/fable-compiler-js/src\u0060, \u0060src/fcs-fable/codegen\u0060, \u0060src/fcs-fable/src/Compiler\u0060 and 3 more."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"91a94e21d6d4d0e6a2003f94505b0b02b157176f0b24c4820f3f82b4447a97fe"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060Parallel\u0060 holds an async function that calls .Wait() \u2014 a blocking call inside async code stalls the thread-pool thread the workflow runs on, and every continuation queued behind it for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/Facilities/DiagnosticsLogger.fs"},"region":{"startLine":1069}}}],"partialFingerprints":{"codehealthFindingId/v1":"20fa8b46045383fd5c7248d9df251f72b9440c0eb7661deef0603fc50b945361"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060GetOrComputeValue\u0060 holds an async function that calls .Wait() \u2014 a blocking call inside async code stalls the thread-pool thread the workflow runs on, and every continuation queued behind it for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fcs-fable/src/Compiler/Facilities/BuildGraph.fs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"03500ce9fbd084a782947f96951b5b8cf1dbc34497adbb61a31e94f12987c9d2"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (139 matched lines \u00D7 2 locations): src/fable-library-ts/Date.ts:691 \u00B7 src/fable-library-ts/DateOffset.ts:110 \u2014 the two spans are one implementation copied and then locally edited \u2014 972 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":"src/fable-library-ts/Date.ts"},"region":{"startLine":691}}}],"partialFingerprints":{"codehealthFindingId/v1":"5979f775dd2d329cae4923e458dbb25867c3fc301282c9df801b1ff47cb606f3"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (69 lines \u00D7 2 locations): src/fable-library-ts/Date.ts:605 \u00B7 src/fable-library-ts/DateTimeFormat.ts:513 \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":"src/fable-library-ts/Date.ts"},"region":{"startLine":605}}}],"partialFingerprints":{"codehealthFindingId/v1":"7aaff22885d9d0a7eac0dcda73a8e8180c56566908fb1fde8dc24e105d1bc336"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (57 lines \u00D7 2 locations): src/fable-library-ts/Date.ts:303 \u00B7 src/fable-library-ts/DateTimeFormat.ts:292 \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":"src/fable-library-ts/Date.ts"},"region":{"startLine":303}}}],"partialFingerprints":{"codehealthFindingId/v1":"f01efed20452e2a3d3acc3bc00c8363226a5a0aa8e6fa9fc128bd503c145db2f"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (36 lines \u00D7 2 locations): src/fable-library-ts/TimeSpan.ts:143 \u00B7 src/fable-library-ts/TimeSpanTemporal.ts:225 \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":"src/fable-library-ts/TimeSpan.ts"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"853b291ace89edc57fae33b23219c1f6bbf02d47d69615a89a72883996a5995e"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (35 lines \u00D7 2 locations): src/fable-library-ts/DateOnly.ts:76 \u00B7 src/fable-library-ts/DateOnlyTemporal.ts:99 \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":"src/fable-library-ts/DateOnly.ts"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb6265c27b274d4eccbdfc0c82d40af36282ad85677aa2b1e620100bf095c130"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (34 lines \u00D7 2 locations): src/fable-library-ts/Date.ts:58 \u00B7 src/fable-library-ts/DateTimeFormat.ts:73 \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":"src/fable-library-ts/Date.ts"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"5cb69efdaa9019fd4d433c3cc046d59723c17baa23004b481c72b9da1666f90a"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 3 locations): src/fable-library-ts/Date.ts:177 \u00B7 src/fable-library-ts/Date.ts:210 \u00B7 src/fable-library-ts/Date.ts:242 \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":"src/fable-library-ts/Date.ts"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b1e4a56717fde48f78ee1b7f65bd346043ef2dbef9d9e3e7561b43d3dac3796"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 3 locations): src/fable-library-ts/DateTimeFormat.ts:178 \u00B7 src/fable-library-ts/DateTimeFormat.ts:211 \u00B7 src/fable-library-ts/DateTimeFormat.ts:243 \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":"src/fable-library-ts/DateTimeFormat.ts"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"1375173960abcaff08cecc542cd04b3082ff353f27e178a13c1986ebfc876ad5"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2 locations): src/fable-library-ts/Util.ts:410 \u00B7 src/fable-library-ts/Util.ts:449 \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":"src/fable-library-ts/Util.ts"},"region":{"startLine":410}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba7072b8f0fa8f74772f27536813e6060ba00a4345ec56992be6764eeb28437c"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2 locations): src/fable-library-ts/Date.ts:156 \u00B7 src/fable-library-ts/DateTimeFormat.ts:157 \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":"src/fable-library-ts/Date.ts"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"bca2a604cec064aba04caff324c39b01e868b07af9ef738b621f83db8be14d1a"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2 locations): src/fable-library-ts/Observable.ts:76 \u00B7 src/fable-library-ts/Observable.ts:93 \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":"src/fable-library-ts/Observable.ts"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"461f650c82a0a60d20ce448e53d641816b408c802332298fc71133094b4d82f5"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (14 matched lines \u00D7 2 locations): src/fable-library-ts/Uri.ts:101 \u00B7 src/fable-library-ts/Uri.ts:127 \u2014 the two spans are one implementation copied and then locally edited \u2014 57 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":"src/fable-library-ts/Uri.ts"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"8df6f5cd43317c4e3c7ad8baf565fd5b06e255819d18dd70bb8bcf27b0692849"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2 locations): src/fable-library-ts/TimeSpan.ts:184 \u00B7 src/fable-library-ts/TimeSpanTemporal.ts:267 \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":"src/fable-library-ts/TimeSpan.ts"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"dff992f8391ba0a65daab188ac83ef3fb09955e8217706b5ce6d87105d70e951"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 4 locations): src/fable-library-ts/BitConverter.ts:21 \u00B7 src/fable-library-ts/BitConverter.ts:35 \u00B7 src/fable-library-ts/BitConverter.ts:49 \u00B7 src/fable-library-ts/BitConverter.ts:63 \u2014 all 4 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":"src/fable-library-ts/BitConverter.ts"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"afbf66101bd17f7fd37cc8916fc280bbd3e0265609d5afd1104fefdebc7527a1"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2 locations): src/fable-library-ts/Date.ts:103 \u00B7 src/fable-library-ts/Date.ts:226 \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":"src/fable-library-ts/Date.ts"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"a25d9730bb3fe66e5a30fe03e55437592e8a846677ac6b1675a30bbcc681fa86"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2 locations): src/fable-library-ts/DateTimeFormat.ts:121 \u00B7 src/fable-library-ts/DateTimeFormat.ts:227 \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":"src/fable-library-ts/DateTimeFormat.ts"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"5496a7c6f03601475137fffec561bad1188cd38971114eca7ede6f5565ae9f49"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2 locations): src/fable-library-ts/Encoding.ts:108 \u00B7 src/fable-library-ts/Encoding.ts:143 \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":"src/fable-library-ts/Encoding.ts"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"f429c29e4a6dfa95744b562a695e52506818f56c86e487dc21c46c144575336c"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3 locations): src/fable-library-ts/TimeOnly.ts:99 \u00B7 src/fable-library-ts/TimeSpan.ts:167 \u00B7 src/fable-library-ts/TimeSpanTemporal.ts:249 \u2014 the 3 copies are spread across 3 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":"src/fable-library-ts/TimeOnly.ts"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"1739a460983f4d5e3c74a428f40b77de017d5445e3b25ab14e72fa0c78b9bf36"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (12 matched lines \u00D7 2 locations): src/fable-library-ts/TimeOnly.ts:7 \u00B7 src/fable-library-ts/TimeOnlyTemporal.ts:38 \u2014 the two spans are one implementation copied and then locally edited \u2014 65 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":"src/fable-library-ts/TimeOnly.ts"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"00e4a6468950f12669c35bccb13a0d73b03ce5c1adb6c33388af52be22b5c0de"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2 locations): src/fable-library-ts/TimeSpan.ts:18 \u00B7 src/fable-library-ts/TimeSpanTemporal.ts:60 \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":"src/fable-library-ts/TimeSpan.ts"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4bc5a540c9245196f1f6cd50aedb9ba15e3f4eac5d416ed334cb7d002f32d02"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2 locations): src/fable-library-ts/Char.ts:81 \u00B7 src/fable-library-ts/Char.ts:93 \u2014 all 2 copies are in the same file, and the CITED SPAN is a run of MODULE-LEVEL DECLARATIONS \u2014 bindings the module declares and exports \u2014 rather than statements with a call site. Do not read this as an extract-a-helper row: a call expression cannot stand where a declaration was, and putting one there would delete the names themselves, which are what the rest of the codebase imports. What actually repeats here is the INITIALISER \u2014 the same expression shape written once per binding. So give that expression one name (a small helper the initialisers call, or a shared base value they are each derived from) and keep every binding under the name it already has. Where the run is an enumeration \u2014 one binding per distinct thing, differing precisely in the thing each one names \u2014 the repetition IS the enumeration and collapsing it would delete entries; consider instead whether the set belongs in one exported table the individual names are read out of. Reported because the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Char.ts"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a1485988de5a5fa72ea691a182aac4737242faa8e84525ba65b38ba7d59e14e"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3 locations): src/fable-library-ts/Date.ts:409 \u00B7 src/fable-library-ts/Date.ts:513 \u00B7 src/fable-library-ts/DateTimeFormat.ts:436 \u2014 the 3 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":"src/fable-library-ts/Date.ts"},"region":{"startLine":409}}}],"partialFingerprints":{"codehealthFindingId/v1":"64c5fbb106e17203fe3bd213a0a56e50726930d11881f9968c7dec6e434fdf56"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2 locations): src/fable-library-ts/DateTimeOffsetTemporal.ts:302 \u00B7 src/fable-library-ts/DateTimeTemporal.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":"src/fable-library-ts/DateTimeOffsetTemporal.ts"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e02ec405b108ead1b3e4107327fdfa42a89752513d2dfb480643b0f017198dd"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2 locations): src/fable-library-ts/AsyncBuilder.ts:209 \u00B7 src/fable-library-ts/AsyncBuilder.ts:218 \u2014 both copies are in the same file, so extract the block into one function there 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/fable-library-ts/AsyncBuilder.ts"},"region":{"startLine":209}}}],"partialFingerprints":{"codehealthFindingId/v1":"487463c4eeb595acafbf9432e0fa43b98af91780b306d00d371c447baf336473"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2 locations): src/fable-library-ts/Date.ts:472 \u00B7 src/fable-library-ts/Date.ts:491 \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":"src/fable-library-ts/Date.ts"},"region":{"startLine":472}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb4faa30b580130c6cf0a734730fe9f044acb3bec0f2f92386cc29020fea35d6"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2 locations): src/fable-library-ts/Numeric.ts:57 \u00B7 src/fable-library-ts/Numeric.ts:67 \u2014 both copies are in the same file, so extract the block into one function there 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/fable-library-ts/Numeric.ts"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"06e2f1ee218294aaacd793a6e0f8e5ada40f05f46b6969b75f3bf57f0d32fc40"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2 locations): src/fable-library-ts/String.ts:83 \u00B7 src/fable-library-ts/String.ts:93 \u2014 both copies are in the same file, so extract the block into one function there 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/fable-library-ts/String.ts"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"33ee0d457746ce175368f21220f29e7e3a562f455fd659ae70fb3b610a133b71"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (9 matched lines \u00D7 2 locations): src/fable-library-ts/Types.ts:130 \u00B7 src/fable-library-ts/Types.ts:146 \u2014 the two spans are one implementation copied and then locally edited \u2014 94 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":"src/fable-library-ts/Types.ts"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e7086eed4193ee7bebc0da79672d3a970ce1a1afd9079649a9cca1be6131f11"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 5 locations): src/fable-library-ts/Char.ts:136 \u00B7 src/fable-library-ts/Char.ts:146 \u00B7 src/fable-library-ts/Char.ts:156 \u00B7 src/fable-library-ts/Char.ts:166 \u00B7 \u002B1 more site(s) not listed \u2014 all 5 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":"src/fable-library-ts/Char.ts"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"917ef87f37e518449e9eba5fd6b8358e43108fa06c3acc217cd9caed5744c07a"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2 locations): src/fable-library-ts/CollectionUtil.ts:52 \u00B7 src/fable-library-ts/CollectionUtil.ts:103 \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":"src/fable-library-ts/CollectionUtil.ts"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1395447121980f5b03f470aedb488eebbb67667706d3c9a743229465a6d74ef"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2 locations): src/fable-library-ts/DateTimeFormat.ts:381 \u00B7 src/fable-library-ts/DateTimeFormat.ts:391 \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":"src/fable-library-ts/DateTimeFormat.ts"},"region":{"startLine":381}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d82923171045aba9008b6242e6fcbce4ce7f04298fec5a388c0d0134cdcc481"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2 locations): src/fable-library-ts/Reflection.ts:345 \u00B7 src/fable-library-ts/Reflection.ts:353 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Reflection.ts"},"region":{"startLine":345}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee04e24ac4c3ef3b1abd22272ea65d7ab1cbca360e948c51b14eeff75f421ee4"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2 locations): src/fable-library-ts/lib/big.js:593 \u00B7 src/fable-library-ts/lib/big.js:732 \u2014 both copies are in the same file, so extract the block into one function there 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/fable-library-ts/lib/big.js"},"region":{"startLine":593}}}],"partialFingerprints":{"codehealthFindingId/v1":"e293885116cf6e82647d9c546198363c61f1f608cd04c2692cbb51b33466c8ec"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2 locations): src/fable-library-ts/CollectionUtil.ts:77 \u00B7 src/fable-library-ts/CollectionUtil.ts:107 \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":"src/fable-library-ts/CollectionUtil.ts"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1584a1ea0d3b10e441a402632a50660cc55908dfac91fba6351554f38fb2a62"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2 locations): src/fable-library-ts/CollectionUtil.ts:146 \u00B7 src/fable-library-ts/Util.ts:713 \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":"src/fable-library-ts/CollectionUtil.ts"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"707f4e9e9bc61c4ef6a95d112aa155d845ab2202fc70f8fdda1f59287675cecf"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2 locations): src/fable-library-ts/AsyncBuilder.ts:184 \u00B7 src/fable-library-ts/TaskBuilder.ts:17 \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":"src/fable-library-ts/AsyncBuilder.ts"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"85ef4c55604e0deb63fe567b061f765b99fd13808020af3ab8dd1a6eb178d32c"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 10 locations): src/fable-library-ts/BitConverter.ts:92 \u00B7 src/fable-library-ts/BitConverter.ts:98 \u00B7 src/fable-library-ts/BitConverter.ts:105 \u00B7 src/fable-library-ts/BitConverter.ts:111 \u00B7 \u002B6 more site(s) not listed \u2014 all 10 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":"src/fable-library-ts/BitConverter.ts"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"e796ac4f8b79e2db5d1eb8ccfc820c5345afc26c1e876afa011f049922e6b8e1"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 8 locations): src/fable-library-ts/BitConverter.ts:108 \u00B7 src/fable-library-ts/BitConverter.ts:114 \u00B7 src/fable-library-ts/BitConverter.ts:120 \u00B7 src/fable-library-ts/BitConverter.ts:126 \u00B7 \u002B4 more site(s) not listed \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":"src/fable-library-ts/BitConverter.ts"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"036d60019dee701ff5836dc48d8168e08fb9cad559484e494ec7b994c3cc2b94"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2 locations): src/fable-library-ts/Date.ts:741 \u00B7 src/fable-library-ts/DateTimeTemporal.ts:222 \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":"src/fable-library-ts/Date.ts"},"region":{"startLine":741}}}],"partialFingerprints":{"codehealthFindingId/v1":"99dab31113a42ab605ffd1f8d21b99f2cd44d5d700811b98445b946599852b0a"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2 locations): src/fable-library-ts/DateTimeTemporal.ts:31 \u00B7 src/fable-library-ts/TimeSpanTemporal.ts:5 \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":"src/fable-library-ts/DateTimeTemporal.ts"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"3023b1a671f0cbf5261b319a0e6980eee92f9fcf64b0a65b0a264a9f520dab56"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2 locations): src/fable-library-ts/String.ts:735 \u00B7 src/fable-library-ts/String.ts:741 \u2014 both copies are in the same file, so extract the block into one function there 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/fable-library-ts/String.ts"},"region":{"startLine":735}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed1cea527dd34f6a16456848e84613847e51ac1ae66ffd6738df466d7f46448f"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 14 locations): src/fable-library-ts/Util.ts:799 \u00B7 src/fable-library-ts/Util.ts:813 \u00B7 src/fable-library-ts/Util.ts:827 \u00B7 src/fable-library-ts/Util.ts:841 \u00B7 \u002B10 more site(s) not listed \u2014 all 14 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":"src/fable-library-ts/Util.ts"},"region":{"startLine":799}}}],"partialFingerprints":{"codehealthFindingId/v1":"fafbc571b4796df2098bbd9bd1f758809d5cf5eea176a249eabf4f1048d6e58f"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function dateToStringWithCustomFormat (cyclomatic 65, cognitive 87): dateToStringWithCustomFormat has cyclomatic complexity 65 and cognitive complexity 87; 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":"src/fable-library-ts/Date.ts"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"c444db548e8e5d7fb1e88a01a099cbe48b21f108b8d46a76aad98e33e91dd0a8"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function (anonymous) (cyclomatic 61, cognitive 104): (anonymous) has cyclomatic complexity 61 and cognitive complexity 104; 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":"src/fable-library-ts/String.ts"},"region":{"startLine":379}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5d2264a9e75511c0e2c299a2d18de9bff569154caf8fdd38651c8128a5cf231"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function dateToStringWithCustomFormat (cyclomatic 58, cognitive 76): dateToStringWithCustomFormat has cyclomatic complexity 58 and cognitive complexity 76; 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":"src/fable-library-ts/DateTimeFormat.ts"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"83f90806df52c0aaa28c33f009c62b9bf534ea11c50fad8a13b54bd3e159f5c4"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function divide (cyclomatic 34, cognitive 78): divide has cyclomatic complexity 34 and cognitive complexity 78; 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":"src/fable-library-ts/lib/big.js"},"region":{"startLine":419}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecd6a1d62e0aa5909c478d9dde2cef6f55574d3326dc53caf0b1cedf92e8d481"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function round (cyclomatic 32, cognitive 33): round has cyclomatic complexity 32 and cognitive complexity 33; 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":"src/fable-library-ts/lib/big.js"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fd81fe983f4a07ab3a8eec2ecb649247222aea4c12d3b1ef88169716345d838"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function formatReplacement (cyclomatic 29, cognitive 41): formatReplacement has cyclomatic complexity 29 and cognitive complexity 41; 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":"src/fable-library-ts/String.ts"},"region":{"startLine":229}}}],"partialFingerprints":{"codehealthFindingId/v1":"92607eeb49cdc19686b04666909fceba57ce7a6fe30991606508367a9a6c4520"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function parseRaw (cyclomatic 26, cognitive 49): parseRaw has cyclomatic complexity 26 and cognitive complexity 49; 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":"src/fable-library-ts/Date.ts"},"region":{"startLine":605}}}],"partialFingerprints":{"codehealthFindingId/v1":"7aa1cd1526946f3548085a9e9f0f325fce89b4769c641e13a7a0b5c5c9bda31e"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function parseRaw (cyclomatic 26, cognitive 49): parseRaw has cyclomatic complexity 26 and cognitive complexity 49; 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":"src/fable-library-ts/DateTimeFormat.ts"},"region":{"startLine":513}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3ea617d440494fe7573c581a9ba6b09209116387b750e0b8799b17cceca569f"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function walk (cyclomatic 24, cognitive 28): walk has cyclomatic complexity 24 and cognitive complexity 28; 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":"src/fable-library-ts/quotation.ts"},"region":{"startLine":550}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d60beb76fc9fb279faeab5229e2bc38286c8d66f1c9da5476cb39a1d9d5aeb6"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function evaluate (cyclomatic 22, cognitive 26): evaluate has cyclomatic complexity 22 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 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":"src/fable-library-ts/quotation.ts"},"region":{"startLine":411}}}],"partialFingerprints":{"codehealthFindingId/v1":"abfb008915f3347e7e8f9a4003f0bf11d9cd554e07a65d0ac62f9a70a82b5370"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function sub (cyclomatic 21, cognitive 34): sub has cyclomatic complexity 21 and cognitive complexity 34; 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":"src/fable-library-ts/lib/big.js"},"region":{"startLine":579}}}],"partialFingerprints":{"codehealthFindingId/v1":"44194c73c05ce66022c05ebcd7794d8f51d3b23aead44b28bbf3fbf4b0274358"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function parse (cyclomatic 21, cognitive 30): parse has cyclomatic complexity 21 and cognitive complexity 30; 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":"src/fable-library-ts/TimeSpanTemporal.ts"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b0b879144ff721aedaad7b094f5b775c28687df577c1e059068725b53e3aad9"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function split (cyclomatic 20, cognitive 37): split has cyclomatic complexity 20 and cognitive complexity 37; 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":"src/fable-library-ts/String.ts"},"region":{"startLine":678}}}],"partialFingerprints":{"codehealthFindingId/v1":"2cb4b5fb5d3a88d2b65db0ef76d686b8940b47e60e6404df61410549e2fa28d7"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function parse (cyclomatic 20, cognitive 27): parse has cyclomatic complexity 20 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":"src/fable-library-ts/TimeSpan.ts"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"9092b93d4802a75fd200eb2503e41d41ecf1075bc2c23826231ee566b6cf5828"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function exprToString (cyclomatic 20, cognitive 26): exprToString has cyclomatic complexity 20 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 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":"src/fable-library-ts/quotation.ts"},"region":{"startLine":518}}}],"partialFingerprints":{"codehealthFindingId/v1":"bded36cb587fe9d46790dd370a87c35632e0c0549c84b3e5f743ee88903d9af0"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function sub (cyclomatic 20, cognitive 21): sub has cyclomatic complexity 20 and cognitive complexity 21; 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":"src/fable-library-ts/quotation.ts"},"region":{"startLine":604}}}],"partialFingerprints":{"codehealthFindingId/v1":"a26ac263f7ad4db3d6f92b99c8b4e0c354b7497320027ce09c0f74c937f4f544"}},{"ruleId":"R3","level":"warning","message":{"text":"src/fable-library-ts/lib/big.js: 879 lines of code: src/fable-library-ts/lib/big.js has 879 significant lines (blank lines excluded), over the 400-line bar, and contains logic \u2014 a file this long is usually several responsibilities in one module."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/lib/big.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"00e68b95775846fdc70df2a3860862a0c9e118a4296e5668007e0ba9988df01d"}},{"ruleId":"R3","level":"warning","message":{"text":"src/fable-library-ts/Util.ts: 863 lines of code: src/fable-library-ts/Util.ts has 863 significant lines (blank lines excluded), over the 400-line bar, and contains logic \u2014 a file this long is usually several responsibilities in one module."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"39d5c6e005ff22d43a7fdeb76e93c875d4d5beb5afb31be6eef2f464acc85f3e"}},{"ruleId":"R3","level":"warning","message":{"text":"src/fable-library-ts/Date.ts: 815 lines of code: src/fable-library-ts/Date.ts has 815 significant lines (blank lines excluded), over the 400-line bar, and contains logic \u2014 a file this long is usually several responsibilities in one module."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Date.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ecf3140c453e5ce799cae9caaeff5f07ed4a9e3eb3667f91b65c97945d95547"}},{"ruleId":"R3","level":"warning","message":{"text":"src/fable-library-ts/String.ts: 702 lines of code: src/fable-library-ts/String.ts has 702 significant lines (blank lines excluded), over the 400-line bar, and contains logic \u2014 a file this long is usually several responsibilities in one module."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/String.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b3796e0d2bac5dd74afbb5ed99944a1e2c38c2a48070eb6405241c706ddfcec"}},{"ruleId":"R3","level":"warning","message":{"text":"src/fable-library-ts/quotation.ts: 617 lines of code: src/fable-library-ts/quotation.ts has 617 significant lines (blank lines excluded), over the 400-line bar, and contains logic \u2014 a file this long is usually several responsibilities in one module."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/quotation.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b4cd89b8a43d21da949eb87cdd563900c3308e6cf54fa01841935eb9acfd5f4"}},{"ruleId":"R3","level":"warning","message":{"text":"src/fable-library-ts/DateTimeFormat.ts: 545 lines of code: src/fable-library-ts/DateTimeFormat.ts has 545 significant lines (blank lines excluded), over the 400-line bar, and contains logic \u2014 a file this long is usually several responsibilities in one module."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/DateTimeFormat.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa217150d93612b70a7872b5f0cdc5ddfe1e7b219f49a1e9187b1b95a17b63e1"}},{"ruleId":"R3","level":"warning","message":{"text":"src/fable-library-ts/Reflection.ts: 538 lines of code: src/fable-library-ts/Reflection.ts has 538 significant lines (blank lines excluded), over the 400-line bar, and contains logic \u2014 a file this long is usually several responsibilities in one module."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Reflection.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8693f3b58117fd338821d3132b2a8ad85a2a7c36293e3619a85b7d7b1a39fcb3"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~72 LoC): no import path from any entry point (3 application, 4 tooling, 14 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":"src/fable-compiler-js/src/util.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"465c205ca25d3c1d6acf70596c3c7cf25ce5caed6054cfe7bbfe0c24afe3e526"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~31 LoC): no import path from any entry point (3 application, 4 tooling, 14 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":"src/fable-standalone/src/Worker/util.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"35bc95ee56c37270c2010a1ef5f53114f4772ec9e4fa23d7155a7cd13b54971e"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027ICollection\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad7048157a1095ebbf551988542ba9e31144b1a1da3cdff873984b2e3f3f87f8"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027isMutableArray\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef53ea468997d124727e203d6d7d6f3658d4da772d2ab8343cb3d6f3b5fa875b"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027isIterable\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"367a96517385fe4410433fd7c94b68d2524ffd46ee21aa06478d9008730bbee6"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027disposeSafe\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"f84c986bec5b025841ce74a2a9b4f1c5e2242fb0b1a68dffe79591700bc798f8"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027getEnumerator\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee14b53940c8db1f5fa36f57428e39b8420a74a2f2bc829a7a8bbf9c21b4591e"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027enumerableToIterator\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":233}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce3b9a4c8d16c16a6e72b46f42fc0d210a207f56533b2db357d18ffeee7564c6"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027comparerFromEqualityComparer\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":279}}}],"partialFingerprints":{"codehealthFindingId/v1":"5cfe7fe0ce1ebba6913211190457438728390bc0a32449e18550da2a85525c0c"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027assertEqual\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":296}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0a19dd311e47f643cbd396e9a10de0f8909cb83a613ff3a2a3e61af546de415"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027assertNotEqual\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":305}}}],"partialFingerprints":{"codehealthFindingId/v1":"43998deda30ed8f0c75210e12d82bd30a122cb1558da2fab530403bb9cab92a8"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027lazyFromValue\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":338}}}],"partialFingerprints":{"codehealthFindingId/v1":"a77735b7fd9504aef495c9a5477692bd755f00bc652fa70e49b4d1c34c004492"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027int16ToString\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":358}}}],"partialFingerprints":{"codehealthFindingId/v1":"db40cf944f0a90f77c23d954eede04988f5db89278bf56e71c5735727c47e610"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027int32ToString\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":363}}}],"partialFingerprints":{"codehealthFindingId/v1":"eaa919f18d45188b8148858544eca369cd08ccaa989c0f6030cb122e7c50ee86"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027int64ToString\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":368}}}],"partialFingerprints":{"codehealthFindingId/v1":"00642db676074beeb54ceb9595d506760e6fc0263d26885336bfa21eaec402c6"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027fastStructuralHash\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":486}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa4e715dc3702dfbb423e2e45ce123b44e416c8218e224073f416e8865047a50"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027safeHash\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":491}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a4be941e1adf3548396470550b626fcf8a2c4423e62a8136d3a5e4ce7c2b347"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027physicalEquals\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":526}}}],"partialFingerprints":{"codehealthFindingId/v1":"5abae5ce48c4060dd4392a0744e6e292449e86d26cff047c000b9295e05816b0"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027clamp\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":640}}}],"partialFingerprints":{"codehealthFindingId/v1":"a43400dcd1b26f55b99e45f0eaf9470af9c9cf6b5eee64edd953a06444418a53"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027createAtom\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":644}}}],"partialFingerprints":{"codehealthFindingId/v1":"eec94626eb07740fdef4f5645524d64728ff6647fab1aa8155556317ea3fdb5d"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027createObj\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":655}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ecf769ff096f9d51002bd7e367f9fb192923e65f7c5e5448eb9f7e03df5de56"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027jsOptions\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":663}}}],"partialFingerprints":{"codehealthFindingId/v1":"c22cb01fa1d7cef452e4574320e7af609c2fe805ffaca245fa5ca00d82dbab04"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027round\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":669}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2fb9d9f2052bd7de0f7d9bd7761614d916eb42ae10516bd105393943b0033ce"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027sign\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":679}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbd82819b788248f05513a679ca20f1ad865fbc6862e0507a17ca4b4266cb94b"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027unescapeDataString\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":683}}}],"partialFingerprints":{"codehealthFindingId/v1":"e58b41c0399caf5e64dec9e2fc652c57afe7a7288bb0c64768a30bfacd6f7bb4"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027escapeDataString\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":687}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b3c8c77c2f405fc3dbc8a8bfe21b23ca423bd487422db68255b150aa151f243"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027escapeUriString\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":694}}}],"partialFingerprints":{"codehealthFindingId/v1":"c639d2d54e3144799a6da70b569e8653b1bc2f31dc830849223eca768620aaf7"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027uncurry2\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":730}}}],"partialFingerprints":{"codehealthFindingId/v1":"97e6ddb74a78b425fb5f6ebcba282fdf532f5565582a5795df867c236a2d54f2"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027curry2\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":737}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f95cc3125009ab0d1b02e684f037dbaea328323574251b9683b2cb48b6b4c29"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027uncurry3\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":741}}}],"partialFingerprints":{"codehealthFindingId/v1":"44d5ff9c366b37fcce809f4f004eb5fc2f64a363c1ddde084765cf2881c9eba7"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027curry3\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":748}}}],"partialFingerprints":{"codehealthFindingId/v1":"96c81281fd1a14c173293af770a774176749cf63e90ca99682790f78ca63cdf1"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027uncurry4\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":753}}}],"partialFingerprints":{"codehealthFindingId/v1":"704fdfce230988b49fe8d5a828a0fb9c07f8ead2582c2dd7f44bafe44825d5eb"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027curry4\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":762}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd47ae6e20e38897ffb4a738cc029424dcd76204be0bd12141ad9944a5793fa8"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027uncurry5\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":767}}}],"partialFingerprints":{"codehealthFindingId/v1":"4589cc08ef3535511818f30acd302b31622fe8433a8b7e5da5ec8e7017ef632a"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027curry5\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":776}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b30f5470a198eb9876370ed98f15f10acf1ff6dde88f585c1fbaeddb363eb6c"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027uncurry6\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":781}}}],"partialFingerprints":{"codehealthFindingId/v1":"70aedfe49d98f90380a089a5f8d3e7be7bd5700129b624373d43305c38cc4e69"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027curry6\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":790}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4c4993ee8b978ebf5d7693ac02f40c7b4195541513afdcaa2b669f756bd56db"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027uncurry7\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":795}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a6974e679819e611e5115177c4c2951d11082f23372c6d9b9fe823358fa0652"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027curry7\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":804}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0b53daf49c9038e43d0d42107c7082ed03b54933a19783813a598ac52a0163d"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027uncurry8\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":809}}}],"partialFingerprints":{"codehealthFindingId/v1":"63b6febe8b14435cf00292a80d4727c10973c5605acd3f5baec47f9b13b1e6e7"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027curry8\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":818}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce4a5dc28724f97a3c0755fbaf025b5234f6dc591ef3eee9ab8ab5270f096475"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027uncurry9\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":823}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e3468a776116c9945e1a508b7e142d3d9ec103f2f4aecc2d6eb4e284d85df57"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027curry9\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":832}}}],"partialFingerprints":{"codehealthFindingId/v1":"46e70f7bb7d7b839b32ce944b171d0f4121dd96bb556013a087735a6f92ad219"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027uncurry10\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":837}}}],"partialFingerprints":{"codehealthFindingId/v1":"406104a0d99f21ee93b9621fa6de8274596d7d50c9ba6e7c29f4597781e1ab03"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027curry10\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":846}}}],"partialFingerprints":{"codehealthFindingId/v1":"f72552ac7d46aa670bf36cf1bfe25494494364dc9b7950926770309b40f4fd75"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027uncurry11\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":851}}}],"partialFingerprints":{"codehealthFindingId/v1":"f06f2c0d2b9b1b9c5ea23f71f4c075f5197a4232beb3f71d8d0ea81ed2e29cd8"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027curry11\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":860}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd5016fab6a2cc01c852e9c7b684648f52808db258fa10b1da128293d5e6bac9"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027uncurry12\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":865}}}],"partialFingerprints":{"codehealthFindingId/v1":"41231982a1ad6c6bde03656d8b741b1e872c2b15c1c6f2a5f4d1e95038018ea6"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027curry12\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":874}}}],"partialFingerprints":{"codehealthFindingId/v1":"b694a10c2bb3f49b479a5a762b0e63d5718ddfcc319de80672639069ea445a3c"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027uncurry13\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":879}}}],"partialFingerprints":{"codehealthFindingId/v1":"5adfb242a0dfc07fc44b93921ea5934d07347a695e42fce0a1009431a1ce9f5c"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027curry13\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":888}}}],"partialFingerprints":{"codehealthFindingId/v1":"26c8b7f34fd5d16ba2c8567685381c7d76c3f42ccd0b5798d78362499e15ce01"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027uncurry14\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":893}}}],"partialFingerprints":{"codehealthFindingId/v1":"447f4938b25eb1573db8ba611bbde17dc00bb449759f8b16f93b314ad693b91d"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027curry14\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":902}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a8d70c2b3c41c61ef75af7f40a5b77a3f64aae6ebbb61e17253169375d7619c"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027uncurry15\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":907}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b7047ca50ee5179bf45966139e0d6de5943a99529b0ce6c8603fc20e59b9bbb"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027curry15\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":916}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3127f4568bf97e48cf6ce6e23fcfbe038b1c1cd1b461da82c02fe5bac7da174"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027uncurry16\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":921}}}],"partialFingerprints":{"codehealthFindingId/v1":"510a6eb81bc6a39fe142e1aa540e4bf45d91561d35dec7a34a459e88593d7384"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027curry16\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":930}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c9af2bc7a4448322a945189a083f2ddab59f3b5bf87949344acb8648645a32f"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027uncurry17\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":935}}}],"partialFingerprints":{"codehealthFindingId/v1":"f14c615c442e5b2accbfe35c2c7361b9199db46d15a5a07a5d771ddf270d0fd2"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027curry17\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":944}}}],"partialFingerprints":{"codehealthFindingId/v1":"04c5766ac8a692439c7bf9fd5bc52ae75d4ca27453ddba8adbad1b8fb013f364"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027uncurry18\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":949}}}],"partialFingerprints":{"codehealthFindingId/v1":"5349fa4a9683ab767e5ef2bb32e0b514ff7379599220ea4d9c0e1f988c265b89"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027curry18\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":958}}}],"partialFingerprints":{"codehealthFindingId/v1":"a54a96e46e5582418c112e0df76ad1dc9f539dd8544f5a3e66d36c0287a3be4e"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027uncurry19\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":963}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b61eb8f959bb00f2d9f19835d4a6aa31ee7556f25d6ec4822cae124333dd7fb"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027curry19\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":972}}}],"partialFingerprints":{"codehealthFindingId/v1":"feb6f30c34c0c1b3b7a06965a1a2bfbf1147664923fb8ded186f6b9d2f8f1192"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027uncurry20\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":977}}}],"partialFingerprints":{"codehealthFindingId/v1":"801a1ccf8bf4c2f6658458edeb07070d7b258dc62b53f2d8856f5ce91c1e206a"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027curry20\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":986}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d8c59c631eb8626dd445ef485f2567252f50fa8689dd10ec853411535e0945a"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027copyToArray\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/Util.ts"},"region":{"startLine":992}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbda6d7f9aadc3ffa6239c5b67f1222dcc554fa12b249df396a6b9f684d2f764"}},{"ruleId":"R8","level":"warning","message":{"text":"Unused dependency \u0027ghreleases\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":"0e0ce5435f7fc5089c6adc57726db36b879bf775eed17b574b478cec6ec108ad"}},{"ruleId":"R8","level":"warning","message":{"text":"Unused dependency \u0027@fable-org/fable-metadata\u0027: Declared in src/fable-compiler-js/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":"b37e605f9036d5597c90bb23ad9989552fe342bc423d88d869cb4d35d1701909"}},{"ruleId":"R8","level":"warning","message":{"text":"Unused dependency \u0027@fable-org/fable-standalone\u0027: Declared in src/fable-compiler-js/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":"fd8fcdf154e0e434f21c25b9ea40e6c6c4da5af66e246519569054ab03cfd897"}},{"ruleId":"R9","level":"error","message":{"text":"Import cycle (2 files): src/fable-library-ts/BigInt.ts \u2192 src/fable-library-ts/Decimal.ts \u2192 src/fable-library-ts/BigInt.ts"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/fable-library-ts/BigInt.ts"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5e0bd483950d3bc1c24d54cb6427942d610b04cd29fa2e82a61a69fcb81b83c"}},{"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(ilMethRef.CallingConv.IsInstance || ilMethRef.CallingConv.IsInstanceExplicit) \u0026\u0026 not args.IsEmpty\u0060 appears character-identically in 2 files \u2014 src/fcs-fable/src/Compiler/Checking/PostInferenceChecks.fs, src/fcs-fable/src/Compiler/Checking/TailCallChecks.fs. 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":"src/fcs-fable/src/Compiler/Checking/PostInferenceChecks.fs"},"region":{"startLine":1521}}}],"partialFingerprints":{"codehealthFindingId/v1":"a975da7731238a4a2c9b0b3b5dcb6625c2a18b4f7de89ff94e00d3d1e27a2f7c"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060(stepGreaterThanZero \u0026\u0026 comparedWithLast \u003C= 0) || (not stepGreaterThanZero \u0026\u0026 comparedWithLast \u003E= 0)\u0060 appears character-identically in 4 files \u2014 src/fable-library-beam/Range.fs, src/fable-library-dart/Range.fs, src/fable-library-py/fable_library/Range.fs, src/fable-library-ts/Range.fs. 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":"src/fable-library-beam/Range.fs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce792b25e1d894bd8ddcd6eb35f7d17e6c41e4035f359452e66b9fddc4b88822"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060array1.Length \u003C\u003E array2.Length || array2.Length \u003C\u003E array3.Length\u0060 appears character-identically in 2 files \u2014 src/fable-library-dart/Array.fs, src/fable-library-ts/Array.fs. 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":"src/fable-library-dart/Array.fs"},"region":{"startLine":687}}}],"partialFingerprints":{"codehealthFindingId/v1":"bca6d70a5a14dc69d05d0c5ae47490a0d71c9c870cebe74d7903eebbb80be347"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060ctx.UsedNames.RootScope.Contains(name) || ctx.UsedNames.CurrentDeclarationScope.Contains(name)\u0060 appears character-identically in 4 files \u2014 src/Fable.Transforms/Babel/Fable2Babel.fs, src/Fable.Transforms/Dart/Fable2Dart.fs, src/Fable.Transforms/Python/Fable2Python.Util.fs, src/Fable.Transforms/Rust/Fable2Rust.fs. 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":"src/Fable.Transforms/Babel/Fable2Babel.fs"},"region":{"startLine":1114}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9bcd355ec8a5b3a4d1a6d280179d15461113535a765bc26d76c1c723593973d"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060ctx.UsedNames.RootScope.Contains(name) || ctx.UsedNames.DeclarationScopes.Contains(name)\u0060 appears character-identically in 3 files \u2014 src/Fable.Transforms/Babel/Fable2Babel.fs, src/Fable.Transforms/Dart/Fable2Dart.fs, src/Fable.Transforms/Rust/Fable2Rust.fs. 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":"src/Fable.Transforms/Babel/Fable2Babel.fs"},"region":{"startLine":1103}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3024d26ce1b4cef96eaf40f94faf1645c239e9c23f0a45c735988ec1cf510ea"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060entries.Length \u003E 1 \u0026\u0026 not isValidGetterSetterPair\u0060 appears character-identically in 2 files \u2014 src/Fable.Transforms/Babel/Fable2Babel.fs, src/Fable.Transforms/Python/Fable2Python.Transforms.fs. 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":"src/Fable.Transforms/Babel/Fable2Babel.fs"},"region":{"startLine":4910}}}],"partialFingerprints":{"codehealthFindingId/v1":"63f28fbbe1e3d18afb49987388ca77dc7e9a2f0d56f6431fb2ada1c09b400556"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060fullName.StartsWith(\u0022Fable.Core.\u0022, StringComparison.Ordinal) \u0026\u0026 fullName.EndsWith(\u0022Attribute\u0022, StringComparison.Ordinal)\u0060 appears character-identically in 2 files \u2014 src/Fable.Transforms/Dart/Replacements.fs, src/Fable.Transforms/Replacements.fs. 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":"src/Fable.Transforms/Dart/Replacements.fs"},"region":{"startLine":4182}}}],"partialFingerprints":{"codehealthFindingId/v1":"93aa839e0be0aa7ae6ce1ca24cd21fe641c7d895be704714b7f3b366ce2fb589"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060g.checkNullness \u0026\u0026 g.langFeatureNullness\u0060 appears character-identically in 4 files \u2014 src/fcs-fable/src/Compiler/Checking/CheckFormatStrings.fs, src/fcs-fable/src/Compiler/Checking/Expressions/CheckExpressions.fs, src/fcs-fable/src/Compiler/CodeGen/EraseUnions.fs, src/fcs-fable/src/Compiler/CodeGen/IlxGen.fs. 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":"src/fcs-fable/src/Compiler/Checking/CheckFormatStrings.fs"},"region":{"startLine":451}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe8491af26cccfc837e678faef19e66c3d24cf65424b656bc03962c24ec5cafb"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060g.langFeatureNullness \u0026\u0026 g.checkNullness\u0060 appears character-identically in 4 files \u2014 src/fcs-fable/src/Compiler/Checking/PostInferenceChecks.fs, src/fcs-fable/src/Compiler/Checking/import.fs, src/fcs-fable/src/Compiler/CodeGen/IlxGen.fs, src/fcs-fable/src/Compiler/CodeGen/IlxGenSupport.fs. 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":"src/fcs-fable/src/Compiler/Checking/PostInferenceChecks.fs"},"region":{"startLine":2602}}}],"partialFingerprints":{"codehealthFindingId/v1":"405ba9881c36c85a5f2eb7a5bb09e2c844f056cb9546c89329987eac3d3895bf"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060i \u003C buf.Count \u0026\u0026 len \u002B buf[i].Length \u003C= index\u0060 appears character-identically in 4 files \u2014 src/fable-library-dart/System.Text.fs, src/fable-library-py/fable_library/System.Text.fs, src/fable-library-rust/src/System.Text.fs, src/fable-library-ts/System.Text.fs. 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":"src/fable-library-dart/System.Text.fs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c1d0dccdb4985d782feb2e9dc9bdd4127e268d88281b15e4770ed67bad12861"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060if (isDone || i \u003C index) \u0026\u0026 e.MoveNext()\u0060 appears character-identically in 5 files \u2014 src/fable-library-beam/Seq.fs, src/fable-library-dart/Seq.fs, src/fable-library-py/fable_library/Seq.fs, src/fable-library-rust/src/Seq.fs. 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":"src/fable-library-beam/Seq.fs"},"region":{"startLine":1251}}}],"partialFingerprints":{"codehealthFindingId/v1":"bda88e6b81896a2b49cc30b9c692bf24cee737c44e4d956992e95a3ca98be22a"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060not found \u0026\u0026 e1.MoveNext() \u0026\u0026 e2.MoveNext()\u0060 appears character-identically in 5 files \u2014 src/fable-library-beam/Seq.fs, src/fable-library-dart/Seq.fs, src/fable-library-py/fable_library/Seq.fs, src/fable-library-rust/src/Seq.fs. 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":"src/fable-library-beam/Seq.fs"},"region":{"startLine":542}}}],"partialFingerprints":{"codehealthFindingId/v1":"09eb7fa07bc7bbfce85ad4d8fad6622913ac95179ddeade0ab44e02620ac24ef"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060not minfo.IsDispatchSlot \u0026\u0026 not minfo.IsVirtual \u0026\u0026 minfo.IsInstance\u0060 appears character-identically in 2 files \u2014 src/fcs-fable/src/Compiler/Checking/ConstraintSolver.fs, src/fcs-fable/src/Compiler/Checking/PostInferenceChecks.fs. 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":"src/fcs-fable/src/Compiler/Checking/ConstraintSolver.fs"},"region":{"startLine":2217}}}],"partialFingerprints":{"codehealthFindingId/v1":"73fe155f67299167ca2c0b58799a08d428d381857b99ae6ae4701620cea25c96"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060path.Contains(\u0022*\u0022) || path.Contains(\u0022?\u0022)\u0060 appears character-identically in 2 files \u2014 src/Fable.Compiler/ProjectCracker.fs, src/fable-compiler-js/src/Platform.fs. 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":"src/Fable.Compiler/ProjectCracker.fs"},"region":{"startLine":442}}}],"partialFingerprints":{"codehealthFindingId/v1":"cec2005db9730824603774ff0fda0cccd3e37fd72214919b1c432d1d8316355b"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060result.StdOut.Length \u003E 0 || result.StdError.Length \u003E 0\u0060 appears character-identically in 2 files \u2014 src/fcs-fable/src/Compiler/Driver/ScriptClosure.fs, src/fcs-fable/src/Compiler/Interactive/fsi.fs. 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":"src/fcs-fable/src/Compiler/Driver/ScriptClosure.fs"},"region":{"startLine":440}}}],"partialFingerprints":{"codehealthFindingId/v1":"7acfcadcfe50004d47630965fab5ba21a44a3f57e800b847d3250cde4848a2f1"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060source1.Length \u003C\u003E source2.Length || source2.Length \u003C\u003E source3.Length\u0060 appears character-identically in 3 files \u2014 src/fable-library-dart/Array.fs, src/fable-library-rust/src/Array.fs, src/fable-library-ts/Array.fs. 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":"src/fable-library-dart/Array.fs"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"6099e5414ea772eede48421e5aef5738c7f80e3a203f94e8507f9c57a141f56f"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060t.HasTypeDefinition \u0026\u0026 t.TypeDefinition.TryFullName.IsSome\u0060 appears character-identically in 2 files \u2014 src/Fable.Cli/Printers.fs, src/fcs-fable/ast_print.fs. 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":"src/Fable.Cli/Printers.fs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf716c7474340098c179090ebbbda8805c80f8450768e2f6c108f87ee0add8b7"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060tc.IsIsReferenceType || tc.IsSupportsNull\u0060 appears character-identically in 2 files \u2014 src/fcs-fable/src/Compiler/CodeGen/IlxGen.fs, src/fcs-fable/src/Compiler/TypedTree/TypedTreeOps.fs. 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":"src/fcs-fable/src/Compiler/CodeGen/IlxGen.fs"},"region":{"startLine":5703}}}],"partialFingerprints":{"codehealthFindingId/v1":"83de239d0a5439465a72c2427e38bb4ec13613eec6f29dabe9530744fa8757c2"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060tcConfigB.utf8output \u0026\u0026 Console.OutputEncoding \u003C\u003E Encoding.UTF8\u0060 appears character-identically in 2 files \u2014 src/fcs-fable/src/Compiler/Driver/fsc.fs, src/fcs-fable/src/Compiler/Interactive/fsi.fs. 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":"src/fcs-fable/src/Compiler/Driver/fsc.fs"},"region":{"startLine":533}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7125170df0d24f33cc218e16f4c8c740b70ce50296f99618a98936e9140a5d1"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060tcState.CreatesGeneratedProvidedTypes || hasTypeProviderAssemblyAttrib\u0060 appears character-identically in 2 files \u2014 src/fcs-fable/src/Compiler/Service/IncrementalBuild.fs, src/fcs-fable/src/Compiler/Service/TransparentCompiler.fs. 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":"src/fcs-fable/src/Compiler/Service/IncrementalBuild.fs"},"region":{"startLine":851}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c1057e07296b305e0e346a287688e340d3450174c24d2bffb3502c89c26512e"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060ty.IsArray || ty.IsByRef || ty.IsPointer\u0060 appears character-identically in 2 files \u2014 src/fcs-fable/src/Compiler/Utilities/sformat.fs, src/fcs-fable/src/Compiler/Utilities/sr.fs. 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":"src/fcs-fable/src/Compiler/Utilities/sformat.fs"},"region":{"startLine":464}}}],"partialFingerprints":{"codehealthFindingId/v1":"e78d69e5be7cefd59e160d5c25e7f5eaf1894722e788c8fdf7e4ab68b7014bfd"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060tycon.IsRecordTycon || tycon.IsStructOrEnumTycon\u0060 appears character-identically in 2 files \u2014 src/fcs-fable/src/Compiler/Checking/AugmentWithHashCompare.fs, src/fcs-fable/src/Compiler/TypedTree/TypedTreeOps.fs. 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":"src/fcs-fable/src/Compiler/Checking/AugmentWithHashCompare.fs"},"region":{"startLine":1430}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc0d9ad5354aaad2d36e7281aa3d6e711b991d317354a71e7d229adff0f64258"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060tycon.IsStructRecordOrUnionTycon || tycon.IsStructOrEnumTycon\u0060 appears character-identically in 2 files \u2014 src/fcs-fable/src/Compiler/TypedTree/TypedTreeBasics.fs, src/fcs-fable/src/Compiler/TypedTree/TypedTreeOps.fs. 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":"src/fcs-fable/src/Compiler/TypedTree/TypedTreeBasics.fs"},"region":{"startLine":292}}}],"partialFingerprints":{"codehealthFindingId/v1":"b69d13f18ad3ec8a50c43bd57855f4561f5e4a1295d3b5839e8f1af8c7fcb80b"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060v.IsInstanceMember \u0026\u0026 not v.IsInstanceMemberInCompiledCode \u0026\u0026 not v.IsExtensionMember\u0060 appears character-identically in 2 files \u2014 src/Fable.Cli/Printers.fs, src/fcs-fable/ast_print.fs. 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":"src/Fable.Cli/Printers.fs"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7bc1bf56dd3b8ced36d499628b7d0ba345bcc3990e299f93e78836a66a70993"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060v.IsModuleValueOrMember \u0026\u0026 not v.IsMember\u0060 appears character-identically in 2 files \u2014 src/Fable.Cli/Printers.fs, src/fcs-fable/ast_print.fs. 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":"src/Fable.Cli/Printers.fs"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7c84d9c5f43164a0adb4d610488ff2eccb0ff7af3528f85083481ca683065d4"}}],"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-1333","guid":"11a336ce-63de-c45c-845e-29ca1e8df13d","name":"CWE-1333","shortDescription":{"text":"CWE-1333"},"helpUri":"https://cwe.mitre.org/data/definitions/1333.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-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-269","guid":"70e1f5f6-81e5-4e5a-ba40-b541c3a346e2","name":"Improper Privilege Management","shortDescription":{"text":"Improper Privilege Management"},"helpUri":"https://cwe.mitre.org/data/definitions/269.html"},{"id":"CWE-353","guid":"09d7e902-d4ee-f05d-ae6c-0a1554d0c18f","name":"Missing Support for Integrity Check","shortDescription":{"text":"Missing Support for Integrity Check"},"helpUri":"https://cwe.mitre.org/data/definitions/353.html"},{"id":"CWE-494","guid":"b8a65e0d-e459-4a55-a931-fc1136482375","name":"Download of Code Without Integrity Check","shortDescription":{"text":"Download of Code Without Integrity Check"},"helpUri":"https://cwe.mitre.org/data/definitions/494.html"},{"id":"CWE-506","guid":"401d6455-56e3-0552-9a39-f77461673e3f","name":"Embedded Malicious Code","shortDescription":{"text":"Embedded Malicious Code"},"helpUri":"https://cwe.mitre.org/data/definitions/506.html"},{"id":"CWE-522","guid":"71fb233e-ce6a-ae57-9419-ef8373540b09","name":"Insufficiently Protected Credentials","shortDescription":{"text":"Insufficiently Protected Credentials"},"helpUri":"https://cwe.mitre.org/data/definitions/522.html"},{"id":"CWE-732","guid":"1da27e8f-b330-7650-ab63-bd61953eae5d","name":"Incorrect Permission Assignment for Critical Resource","shortDescription":{"text":"Incorrect Permission Assignment for Critical Resource"},"helpUri":"https://cwe.mitre.org/data/definitions/732.html"},{"id":"CWE-77","guid":"332c8ade-6612-9f56-a06b-d8d90b1a8750","name":"Improper Neutralization of Special Elements used in a Command (\u0027Command Injection\u0027)","shortDescription":{"text":"Improper Neutralization of Special Elements used in a Command (\u0027Command Injection\u0027)"},"helpUri":"https://cwe.mitre.org/data/definitions/77.html"},{"id":"CWE-78","guid":"2e31ceaf-c7ae-2e5e-9661-cfb1362789cf","name":"Improper Neutralization of Special Elements used in an OS Command (\u0027OS Command Injection\u0027)","shortDescription":{"text":"Improper Neutralization of Special Elements used in an OS Command (\u0027OS Command Injection\u0027)"},"helpUri":"https://cwe.mitre.org/data/definitions/78.html"},{"id":"CWE-79","guid":"fd45580b-e8c4-fc5e-8c2f-aa8fab0b4dbf","name":"Improper Neutralization of Input During Web Page Generation (\u0027Cross-site Scripting\u0027)","shortDescription":{"text":"Improper Neutralization of Input During Web Page Generation (\u0027Cross-site Scripting\u0027)"},"helpUri":"https://cwe.mitre.org/data/definitions/79.html"},{"id":"CWE-798","guid":"5e8f057d-fee3-995a-a0cb-9fc5b0d174d1","name":"Use of Hard-coded Credentials","shortDescription":{"text":"Use of Hard-coded Credentials"},"helpUri":"https://cwe.mitre.org/data/definitions/798.html"},{"id":"CWE-829","guid":"13c33925-97fb-5a5e-b40c-56d328b8a4d7","name":"Inclusion of Functionality from Untrusted Control Sphere","shortDescription":{"text":"Inclusion of Functionality from Untrusted Control Sphere"},"helpUri":"https://cwe.mitre.org/data/definitions/829.html"},{"id":"CWE-89","guid":"6d08fdad-37eb-c150-bbf0-d7d946863407","name":"Improper Neutralization of Special Elements used in an SQL Command (\u0027SQL Injection\u0027)","shortDescription":{"text":"Improper Neutralization of Special Elements used in an SQL Command (\u0027SQL Injection\u0027)"},"helpUri":"https://cwe.mitre.org/data/definitions/89.html"},{"id":"CWE-937","guid":"16f316ae-415c-b354-a59b-1f7905f756e9","name":"Using Components with Known Vulnerabilities","shortDescription":{"text":"Using Components with Known Vulnerabilities"},"helpUri":"https://cwe.mitre.org/data/definitions/937.html"},{"id":"CWE-94","guid":"75e7f50c-6c2f-dd52-bf40-bf6c52b861fd","name":"Improper Control of Generation of Code (\u0027Code Injection\u0027)","shortDescription":{"text":"Improper Control of Generation of Code (\u0027Code Injection\u0027)"},"helpUri":"https://cwe.mitre.org/data/definitions/94.html"}]},{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61","version":"2025","organization":"OWASP Foundation","informationUri":"https://top10.owasp.org/2025/","isComprehensive":false,"shortDescription":{"text":"The OWASP Top 10:2025 web application security risks."},"taxa":[{"id":"A02:2025","guid":"668dee9e-41bc-6354-97d0-fdf8f40c50c1","name":"Security Misconfiguration","shortDescription":{"text":"Security Misconfiguration"},"helpUri":"https://top10.owasp.org/2025/A02_2025-Security_Misconfiguration/"},{"id":"A03:2025","guid":"168e227c-7735-2e57-bc6e-997affe644c5","name":"Software Supply Chain Failures","shortDescription":{"text":"Software Supply Chain Failures"},"helpUri":"https://top10.owasp.org/2025/A03_2025-Software_Supply_Chain_Failures/"},{"id":"A05:2025","guid":"87e86033-3231-8458-8e4a-5cb82743553a","name":"Injection","shortDescription":{"text":"Injection"},"helpUri":"https://top10.owasp.org/2025/A05_2025-Injection/"},{"id":"A06:2025","guid":"491554d7-b8e4-9652-91a9-53700dc92ece","name":"Insecure Design","shortDescription":{"text":"Insecure Design"},"helpUri":"https://top10.owasp.org/2025/A06_2025-Insecure_Design/"},{"id":"A07:2025","guid":"334ddd78-539d-d35c-83dd-253647eb7eaf","name":"Authentication Failures","shortDescription":{"text":"Authentication Failures"},"helpUri":"https://top10.owasp.org/2025/A07_2025-Authentication_Failures/"},{"id":"A08:2025","guid":"84b0c297-710e-9a5f-9335-936ecb260c36","name":"Software or Data Integrity Failures","shortDescription":{"text":"Software or Data Integrity Failures"},"helpUri":"https://top10.owasp.org/2025/A08_2025-Software_or_Data_Integrity_Failures/"}]},{"name":"OWASP Top 10 CI/CD Security Risks","guid":"3c9b2a6e-5d14-4f7b-8e02-6a1d9c4b7f35","organization":"OWASP Foundation","informationUri":"https://owasp.org/www-project-top-10-ci-cd-security-risks/","isComprehensive":false,"shortDescription":{"text":"The OWASP Top 10 CI/CD Security Risks."},"taxa":[{"id":"CICD-SEC-3","guid":"458c83a6-ebf7-cf55-8cc3-b4d949bbf271","name":"Dependency Chain Abuse","shortDescription":{"text":"Dependency Chain Abuse"},"helpUri":"https://owasp.github.io/www-project-top-10-ci-cd-security-risks/CICD-SEC-03-Dependency-Chain-Abuse"},{"id":"CICD-SEC-4","guid":"c859d8ea-8b24-a157-9406-94929c10397a","name":"Poisoned Pipeline Execution (PPE)","shortDescription":{"text":"Poisoned Pipeline Execution (PPE)"},"helpUri":"https://owasp.github.io/www-project-top-10-ci-cd-security-risks/CICD-SEC-04-Poisoned-Pipeline-Execution"},{"id":"CICD-SEC-6","guid":"f2ee2486-b260-2952-a41f-6b67fa713940","name":"Insufficient Credential Hygiene","shortDescription":{"text":"Insufficient Credential Hygiene"},"helpUri":"https://owasp.github.io/www-project-top-10-ci-cd-security-risks/CICD-SEC-06-Insufficient-Credential-Hygiene"},{"id":"CICD-SEC-8","guid":"b6b2dacf-a168-4957-876e-a8c73ee00eb0","name":"Ungoverned Usage of 3rd Party Services","shortDescription":{"text":"Ungoverned Usage of 3rd Party Services"},"helpUri":"https://owasp.github.io/www-project-top-10-ci-cd-security-risks/CICD-SEC-08-Ungoverned-Usage-of-3rd-Party-Services"},{"id":"CICD-SEC-9","guid":"b3d36727-0395-5b51-94c4-5e173d62eab3","name":"Improper Artifact Integrity Validation","shortDescription":{"text":"Improper Artifact Integrity Validation"},"helpUri":"https://owasp.github.io/www-project-top-10-ci-cd-security-risks/CICD-SEC-09-Improper-Artifact-Integrity-Validation"}]}],"properties":{"codehealthPublication":{"public":true,"notice":"This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings \u2014 which rule fired, in which file, on which line, and how to fix it \u2014 are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.","securityFindingsRedacted":113,"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."]}]}