{"$schema":"https://json.schemastore.org/sarif-2.1.0.json","version":"2.1.0","runs":[{"tool":{"driver":{"name":"codehealth","informationUri":"https://codehealth.canine.dev","rules":[{"id":"D1","name":"Cyclomatic Complexity","shortDescription":{"text":"Cyclomatic Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D1"},{"id":"D2","name":"Cognitive Complexity","shortDescription":{"text":"Cognitive Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D2"},{"id":"D3","name":"God Classes","shortDescription":{"text":"God Classes"},"helpUri":"https://codehealth.canine.dev/dimensions/D3"},{"id":"D4","name":"Code Duplication","shortDescription":{"text":"Code Duplication"},"helpUri":"https://codehealth.canine.dev/dimensions/D4"},{"id":"D5","name":"Coupling","shortDescription":{"text":"Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D5"},{"id":"D6","name":"Cohesion (LCOM4)","shortDescription":{"text":"Cohesion (LCOM4)"},"helpUri":"https://codehealth.canine.dev/dimensions/D6"},{"id":"D7","name":"Architectural Integrity","shortDescription":{"text":"Architectural Integrity"},"helpUri":"https://codehealth.canine.dev/dimensions/D7"},{"id":"D8","name":"Code Coverage","shortDescription":{"text":"Code Coverage"},"helpUri":"https://codehealth.canine.dev/dimensions/D8"},{"id":"D9","name":"Test Distribution","shortDescription":{"text":"Test Distribution"},"helpUri":"https://codehealth.canine.dev/dimensions/D9"},{"id":"D10","name":"Test Quality","shortDescription":{"text":"Test Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D10"},{"id":"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"},{"id":"D14","name":"License Compliance","shortDescription":{"text":"License Compliance"},"helpUri":"https://codehealth.canine.dev/dimensions/D14"},{"id":"D15","name":"Churn \u00D7 Complexity Hotspots","shortDescription":{"text":"Churn \u00D7 Complexity Hotspots"},"helpUri":"https://codehealth.canine.dev/dimensions/D15"},{"id":"D16","name":"Bus Factor","shortDescription":{"text":"Bus Factor"},"helpUri":"https://codehealth.canine.dev/dimensions/D16"},{"id":"D17","name":"Explicit Debt","shortDescription":{"text":"Explicit Debt"},"helpUri":"https://codehealth.canine.dev/dimensions/D17"},{"id":"D18","name":"Solution Shape","shortDescription":{"text":"Solution Shape"},"helpUri":"https://codehealth.canine.dev/dimensions/D18"},{"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":"D23","name":"Boundary Type-Coupling","shortDescription":{"text":"Boundary Type-Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D23"},{"id":"D24","name":"Comment Value","shortDescription":{"text":"Comment Value"},"helpUri":"https://codehealth.canine.dev/dimensions/D24"},{"id":"D25","name":"ADR Conformance","shortDescription":{"text":"ADR Conformance"},"helpUri":"https://codehealth.canine.dev/dimensions/D25"},{"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"},{"id":"D29","name":"Static Analysis (SAST)","shortDescription":{"text":"Static Analysis (SAST)"},"helpUri":"https://codehealth.canine.dev/dimensions/D29"},{"id":"D30","name":"Dependency Vulnerabilities","shortDescription":{"text":"Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D30"},{"id":"D31","name":"IaC \u0026 Container Security","shortDescription":{"text":"IaC \u0026 Container Security"},"helpUri":"https://codehealth.canine.dev/dimensions/D31"},{"id":"D32","name":"Data Compliance (PII/GDPR)","shortDescription":{"text":"Data Compliance (PII/GDPR)"},"helpUri":"https://codehealth.canine.dev/dimensions/D32"},{"id":"D33","name":"JS/npm Dependency Vulnerabilities","shortDescription":{"text":"JS/npm Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D33"},{"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"},{"id":"D37","name":"Vulnerability-disclosure Policy","shortDescription":{"text":"Vulnerability-disclosure Policy"},"helpUri":"https://codehealth.canine.dev/dimensions/D37"},{"id":"D38","name":"OSV Dependency Vulnerabilities","shortDescription":{"text":"OSV Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D38"}]}},"results":[{"ruleId":"D1","level":"warning","message":{"text":"IdentityGenerator.TransformSyntaxNode (cyclomatic 162): IdentityGenerator.TransformSyntaxNode has cyclomatic complexity 162 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/IdentityGenerator.cs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"4da475c39c848935e7d7a0cd6b41e3fa3cdd79ca1a51e934b10a96696dd20889"}},{"ruleId":"D1","level":"warning","message":{"text":"WrapperValueObjectGenerator.TransformSyntaxNode (cyclomatic 144): WrapperValueObjectGenerator.TransformSyntaxNode has cyclomatic complexity 144 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/WrapperValueObjectGenerator.cs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"6dc54d692a2c6c8acb3343af5b680c314166e88105b3a30702055b7a26bfdf7a"}},{"ruleId":"D1","level":"warning","message":{"text":"WrapperValueObjectGenerator.GenerateSource (cyclomatic 119): WrapperValueObjectGenerator.GenerateSource has cyclomatic complexity 119 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/WrapperValueObjectGenerator.cs"},"region":{"startLine":251}}}],"partialFingerprints":{"codehealthFindingId/v1":"85996cc4f0c4972e46431c2914d1e1920ff896a85af2098ca1658bfc6f63aa99"}},{"ruleId":"D1","level":"warning","message":{"text":"IdentityGenerator.GenerateSource (cyclomatic 108): IdentityGenerator.GenerateSource has cyclomatic complexity 108 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/IdentityGenerator.cs"},"region":{"startLine":287}}}],"partialFingerprints":{"codehealthFindingId/v1":"50e55fcee2ebe7c7246e507e5cf7c2436cf79b119b64fc88bd7444277cfa8885"}},{"ruleId":"D1","level":"warning","message":{"text":"DummyBuilderGenerator.GenerateSource (cyclomatic 58): DummyBuilderGenerator.GenerateSource has cyclomatic complexity 58 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/DummyBuilderGenerator.cs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"426dd684f7a0cd80eba0ee4ab318d136646243a76d5dd9db29433748809e41ed"}},{"ruleId":"D1","level":"warning","message":{"text":"ValueObjectGenerator.GenerateSource (cyclomatic 55): ValueObjectGenerator.GenerateSource has cyclomatic complexity 55 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/ValueObjectGenerator.cs"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"54afb13ddaefcd981bbe32b1efb602d23e4874a50c05b3c6fe78b004ac7ef42c"}},{"ruleId":"D1","level":"warning","message":{"text":"ValueObjectGenerator.TransformSyntaxNode (cyclomatic 48): ValueObjectGenerator.TransformSyntaxNode has cyclomatic complexity 48 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/ValueObjectGenerator.cs"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"8aae56c80d298dbdf262591819bf350c2ceb76a44c357c017db75174eab5acc6"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeSymbolExtensions.CreateDummyInstantiationExpression (cyclomatic 31): TypeSymbolExtensions.CreateDummyInstantiationExpression has cyclomatic complexity 31 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/TypeSymbolExtensions.cs"},"region":{"startLine":639}}}],"partialFingerprints":{"codehealthFindingId/v1":"50513e878889668faf463e9c40e9315c733106b8a9f18eee9da5fde22cab12c9"}},{"ruleId":"D1","level":"warning","message":{"text":"EnumerableComparer.EnumerableEquals (cyclomatic 28): EnumerableComparer.EnumerableEquals has cyclomatic complexity 28 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Comparisons/EnumerableComparer.cs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"737287178c53cacc076474e9348afff8877ee4b0c934d5a5cda13c8b416fda20"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeSymbolExtensions.CreateEqualityExpression (cyclomatic 25): TypeSymbolExtensions.CreateEqualityExpression has cyclomatic complexity 25 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/TypeSymbolExtensions.cs"},"region":{"startLine":549}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9910a18e6c7a67b5f309b2025aec783dd83df462db3a8691cf765dd20f447e7"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeSymbolExtensions.CreateHashCodeExpression (cyclomatic 24): TypeSymbolExtensions.CreateHashCodeExpression has cyclomatic complexity 24 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/TypeSymbolExtensions.cs"},"region":{"startLine":504}}}],"partialFingerprints":{"codehealthFindingId/v1":"1364a0e5b31710784dbf079c6e154a1692dc641b4cc587a2d705e7e28b5a7e3d"}},{"ruleId":"D1","level":"warning","message":{"text":"LookupComparer.LookupEquals (cyclomatic 16): LookupComparer.LookupEquals has cyclomatic complexity 16 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Comparisons/LookupComparer.cs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ce1a5383d5eea38f8c7f43cffa92d2c5aa7546d688d5967e384433d6c799419"}},{"ruleId":"D1","level":"warning","message":{"text":"ValueObject.ContainsNonAsciiOrNonPrintableCharacters (cyclomatic 16): ValueObject.ContainsNonAsciiOrNonPrintableCharacters has cyclomatic complexity 16 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/ValueObject.ValidationHelpers.cs"},"region":{"startLine":209}}}],"partialFingerprints":{"codehealthFindingId/v1":"351a0c58377e373d839d8dc6a8152e3b19e14599d07dfb85ff8d700b4c47dc3b"}},{"ruleId":"D2","level":"warning","message":{"text":"WrapperValueObjectGenerator.GenerateSource (cognitive 118): WrapperValueObjectGenerator.GenerateSource has cognitive complexity 118 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/WrapperValueObjectGenerator.cs"},"region":{"startLine":251}}}],"partialFingerprints":{"codehealthFindingId/v1":"24bf0b026ce7cbc21d42bd0f247340076ad5250086ea7627292c0f0e990d2c05"}},{"ruleId":"D2","level":"warning","message":{"text":"IdentityGenerator.GenerateSource (cognitive 115): IdentityGenerator.GenerateSource has cognitive complexity 115 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/IdentityGenerator.cs"},"region":{"startLine":287}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c79f068696cd5f70e41d0e0177a1dbfcdff7d443a43e230905b2429874407c9"}},{"ruleId":"D2","level":"warning","message":{"text":"DummyBuilderGenerator.GenerateSource (cognitive 105): DummyBuilderGenerator.GenerateSource has cognitive complexity 105 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/DummyBuilderGenerator.cs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"899552d41d4a8a5291ca957086e6b897f390091eba7dd528d56228db1bd6d806"}},{"ruleId":"D2","level":"warning","message":{"text":"ValueObjectGenerator.GenerateSource (cognitive 54): ValueObjectGenerator.GenerateSource has cognitive complexity 54 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/ValueObjectGenerator.cs"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"59924f860de91676011e962bc01b445c1ed1bb45baa89a3e0502c8486d28dc53"}},{"ruleId":"D2","level":"warning","message":{"text":"IdentityGenerator.TransformSyntaxNode (cognitive 49): IdentityGenerator.TransformSyntaxNode has cognitive complexity 49 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/IdentityGenerator.cs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"db8078ce0e6c7158def13d3ae8615c24bc4635e3bde41201de13a68a9ac97a6a"}},{"ruleId":"D2","level":"warning","message":{"text":"WrapperValueObjectGenerator.TransformSyntaxNode (cognitive 46): WrapperValueObjectGenerator.TransformSyntaxNode has cognitive complexity 46 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/WrapperValueObjectGenerator.cs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d3be9b656bbdf0aea9965b2aebf3f57293eb9c2d39493d7201f679e689df152"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeSymbolExtensions.CreateDummyInstantiationExpression (cognitive 34): TypeSymbolExtensions.CreateDummyInstantiationExpression has cognitive complexity 34 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/TypeSymbolExtensions.cs"},"region":{"startLine":639}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe7c756395110a4b5326f49d0b9f0b8d8a1eced535570a0f5d71815d4636c664"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeSymbolExtensions.CreateEqualityExpression (cognitive 31): TypeSymbolExtensions.CreateEqualityExpression has cognitive complexity 31 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/TypeSymbolExtensions.cs"},"region":{"startLine":549}}}],"partialFingerprints":{"codehealthFindingId/v1":"7676621e15c0ac79fb812996e0c738d9475fca1f5f29885ba875af5f383b157d"}},{"ruleId":"D2","level":"warning","message":{"text":"EnumerableComparer.EnumerableEquals (cognitive 30): EnumerableComparer.EnumerableEquals has cognitive complexity 30 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Comparisons/EnumerableComparer.cs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f873e04cb29112c3e5803a55d0dfb2516a0ffac40a13256b091cbb7623be9bd"}},{"ruleId":"D2","level":"warning","message":{"text":"ValueObject.ContainsNonAsciiOrNonPrintableCharacters (cognitive 30): ValueObject.ContainsNonAsciiOrNonPrintableCharacters has cognitive complexity 30 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/ValueObject.ValidationHelpers.cs"},"region":{"startLine":209}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e6d8a7065114c092289c60a54da5b358347971f6ab6fa21688274a61e1ad2c3"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeSymbolExtensions.CreateHashCodeExpression (cognitive 30): TypeSymbolExtensions.CreateHashCodeExpression has cognitive complexity 30 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/TypeSymbolExtensions.cs"},"region":{"startLine":504}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7ef094dcf79740ceb95945995541454512deda29c770f5b0c3fbb808c49182b"}},{"ruleId":"D2","level":"warning","message":{"text":"LookupComparer.LookupEquals (cognitive 27): LookupComparer.LookupEquals has cognitive complexity 27 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Comparisons/LookupComparer.cs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"596255d9c8e0e31bc7f3bb7cc3ad6098c8c0a375d45173218747700e8c6b2c96"}},{"ruleId":"D2","level":"warning","message":{"text":"ValueObjectGenerator.TransformSyntaxNode (cognitive 21): ValueObjectGenerator.TransformSyntaxNode has cognitive complexity 21 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/ValueObjectGenerator.cs"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"f25f89efb306510f47b27c4f3258cf4b3801aeabaa4710451888d59c1a0f2cde"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ValueObject: TooManyMethods \u2014 528 lines, 45 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/ValueObject.cs"},"region":{"startLine":0}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ea6abff72e5c13e86285f135b7ef5fb30dd609008962e0d40144b83fe68e5a2"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: IdentityGenerator: ClassTooLong \u2014 441 lines, 4 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/IdentityGenerator.cs"},"region":{"startLine":0}}}],"partialFingerprints":{"codehealthFindingId/v1":"9df114dad6fa2da1c1d491700e2e96aa4c309aac39e94b318504ecf62af8298f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TypeSymbolExtensions: TooManyMethods \u2014 304 lines, 35 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/TypeSymbolExtensions.cs"},"region":{"startLine":0}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbdc1707305b987a8f34f51b9d4f43b598c44beee1a1ac1842455f09738d0ee0"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: WrapperValueObjectGenerator: ClassTooLong \u2014 420 lines, 4 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/WrapperValueObjectGenerator.cs"},"region":{"startLine":0}}}],"partialFingerprints":{"codehealthFindingId/v1":"23696c068f8df448fae7bc03e256ddfa4decf143e02c9c1b6e17473556c3ce33"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): DomainModeling.Generator/JsonSerializationGenerator.cs:88-105 | DomainModeling.Generator/JsonSerializationGenerator.cs:117-135"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/JsonSerializationGenerator.cs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"df6dba6273ff35b61bb59b074b6f9e3c5bea43965257d60dbccef6086b384ff7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): DomainModeling/ValueObject.ValidationHelpers.cs:63-75 | DomainModeling/ValueObject.ValidationHelpers.cs:119-132"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/ValueObject.ValidationHelpers.cs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"03c64926fea487ef3fdd39ed91e0c1f76e76d8299f0496b407981553899571a6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): DomainModeling/ValueObject.ValidationHelpers.cs:83-96 | DomainModeling/ValueObject.ValidationHelpers.cs:144-157"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/ValueObject.ValidationHelpers.cs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"03c64926fea487ef3fdd39ed91e0c1f76e76d8299f0496b407981553899571a6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 4): DomainModeling.Generator/DomainEventGenerator.cs:13-24 | DomainModeling.Generator/EntityGenerator.cs:13-24 | DomainModeling.Generator/IdentityGenerator.cs:13-24 | DomainModeling.Generator/WrapperValueObjectGenerator.cs:13-24"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/DomainEventGenerator.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"19e8c6010b5644a4c3fd4777c70e5b4a7c80ff5815efcd67c09709e38a881e69"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): DomainModeling/Comparisons/EnumerableComparer.cs:139-148 | DomainModeling/Comparisons/LookupComparer.cs:78-88"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Comparisons/EnumerableComparer.cs"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"683b5b99eb93e4ac9456026c6eef419611c917662b605a0c5ebe401bf2801448"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): DomainModeling.Generator/TypeSymbolExtensions.cs:338-348 | DomainModeling.Generator/TypeSymbolExtensions.cs:353-363"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/TypeSymbolExtensions.cs"},"region":{"startLine":338}}}],"partialFingerprints":{"codehealthFindingId/v1":"a84e54d728c696f6e24ee1c9904cd56609faadf41f62cc6d91a881f929c72c6a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): DomainModeling.Generator/StringExtensions.cs:130-138 | DomainModeling.Generator/StringExtensions.cs:146-154"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/StringExtensions.cs"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"bddfaa20e70315d9721e752588028426a683c0ff30e6e8ff2ab3acabd70d1c46"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): DomainModeling.Generator/TypeSymbolExtensions.cs:521-528 | DomainModeling.Generator/TypeSymbolExtensions.cs:573-580"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/TypeSymbolExtensions.cs"},"region":{"startLine":521}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c8e8751b7cab9ec6f11b322f817200b1ea96416d99a2dc3d420598f4d8a6b06"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): DomainModeling.Generator/TypeSymbolExtensions.cs:578-585 | DomainModeling.Generator/TypeSymbolExtensions.cs:586-592"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/TypeSymbolExtensions.cs"},"region":{"startLine":578}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c8e8751b7cab9ec6f11b322f817200b1ea96416d99a2dc3d420598f4d8a6b06"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): DomainModeling.Generator/ValueObjectGenerator.cs:88-94 | DomainModeling.Generator/ValueObjectGenerator.cs:99-104 | DomainModeling.Generator/ValueObjectGenerator.cs:109-114"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/ValueObjectGenerator.cs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"51b67e33445d7f1b448aa27be9054e8a3a8eb421c71449c9e358e170c54b1a64"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): DomainModeling.Generator/WrapperValueObjectGenerator.cs:122-128 | DomainModeling.Generator/WrapperValueObjectGenerator.cs:133-138 | DomainModeling.Generator/WrapperValueObjectGenerator.cs:143-148"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/WrapperValueObjectGenerator.cs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"5839d3e84bdbd5d265bb35df8db899e4d387377e044f95dca454c2f9f4a64bcc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 6): DomainModeling.Generator/IdentityGenerator.cs:150-155 | DomainModeling.Generator/IdentityGenerator.cs:156-160 | DomainModeling.Generator/IdentityGenerator.cs:161-165 | DomainModeling.Generator/IdentityGenerator.cs:166-170 | DomainModeling.Generator/IdentityGenerator.cs:171-175 | DomainModeling.Generator/IdentityGenerator.cs:176-180"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/IdentityGenerator.cs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"bccb68860e62c97a84df2af3dc2c7361c43713e01feef6efa103faf61a702179"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): DomainModeling.Generator/WrapperValueObjectGenerator.cs:154-158 | DomainModeling.Generator/WrapperValueObjectGenerator.cs:159-164"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/WrapperValueObjectGenerator.cs"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e7a05d6eccae6d7a35687cffb0de3797e671dfc027dbaf18fb2d35aa2c9f7d7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): DomainModeling.Generator/IdentityGenerator.cs:181-185 | DomainModeling.Generator/IdentityGenerator.cs:186-190"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/IdentityGenerator.cs"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2a21bc9efa691a3e965effb8dba6b1e4924357376d9694c06f1a6f2c0fb038b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): DomainModeling.Generator/IdentityGenerator.cs:235-239 | DomainModeling.Generator/IdentityGenerator.cs:253-257"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/IdentityGenerator.cs"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2a21bc9efa691a3e965effb8dba6b1e4924357376d9694c06f1a6f2c0fb038b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): DomainModeling.Generator/WrapperValueObjectGenerator.cs:208-212 | DomainModeling.Generator/WrapperValueObjectGenerator.cs:226-230"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/WrapperValueObjectGenerator.cs"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f122c0a496e7c4888b5fc3b8176167850ac3b268f960cd5cfaab4b506b2771d"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: DomainModeling.Generator: DomainModeling.Generator: abstractness 0.06, instability 0.00, distance 0.94 \u2014 zone of pain \u2014 concrete and heavily depended-on, so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"bfa504350babe8e9097ddf7d4c67a0a9bc04743a09e7f981d9e4f6ace981372d"}},{"ruleId":"D7","level":"note","message":{"text":"No checkable ADRs to assess: No architecture decision records were found and the project graph is acyclic, so architectural integrity could not be assessed. Add ADRs (with \u0060enforcement: analyzer|test\u0060) to make the architecture\u0027s rules checkable."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"9bfa095522c5f2e53a7c1c0405fd8830d318409a6fb74f4288bab05aaf716e52"}},{"ruleId":"D8","level":"warning","message":{"text":"Coverage not measured: The test suite couldn\u0027t be built/run in-image and no coverage report is committed, so line coverage was not measured \u2014 and it is EXCLUDED from the score rather than scored on a LoC-ratio proxy. Commit the Cobertura/OpenCover/lcov report your CI already produces (anywhere in the repo), or make the suite runnable in-image, and real coverage will be measured."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"62e63e619c28f057e129f2997c965d32a457366a9ce18ca019ffb6bdfba85c99"}},{"ruleId":"D9","level":"note","message":{"text":"Unit tests: 217 unit test method(s)."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"3067d72f6515925eded797ae6deb86f74d157d3bd0b8e2d3a80edaa12ea95d24"}},{"ruleId":"D9","level":"note","message":{"text":"Integration tests: 0 integration test method(s)."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"b8ce5913e7f0487c282aa29038cefc209006d3bfe4e8418292f03d5a2d9bc5b9"}},{"ruleId":"D9","level":"note","message":{"text":"BDD tests: 0 BDD test method(s)."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"2335ff4716b8a3faefb3014515ddf9f836e46276f415e6cd56462b6bf7742991"}},{"ruleId":"D9","level":"note","message":{"text":"E2E tests: 0 end-to-end test method(s)."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"9a982d279a9674eceb951bedcbe3f8d344879045f8bee5f9f6f059139e0ed590"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions: Construct_WithNull_ShouldSucceed: Test method has no assertions \u2014 it may not test anything."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Tests/Entities/Entity.SourceGeneratedIdentityTests.cs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3eb4367afcb045f9113910bd1406cf721a447004f27953ebacb92c62e9ef43a"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions: Construct_WithNull_ShouldSucceed: Test method has no assertions \u2014 it may not test anything."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Tests/IdentityTests.cs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"da68df89987567d0c202364d155b2d73a49c812eed2af05db8c416e56b727da9"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions: CompareTo_WithoutExplicitInterface_ShouldBeImplemented: Test method has no assertions \u2014 it may not test anything."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Tests/IdentityTests.cs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"983456cc8043614b0d3830430b0d260309a3223f3dc9808c3b8894bd2c6b51a9"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated: Newtonsoft.Json: Newtonsoft.Json 13.0.3 \u2192 13.0.4 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6bc3c45041773c780f3c71a5a4c37913170b10795bfed8949da7f32ecee66143"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated: Newtonsoft.Json: Newtonsoft.Json 13.0.3 \u2192 13.0.4 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6bc3c45041773c780f3c71a5a4c37913170b10795bfed8949da7f32ecee66143"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated: Newtonsoft.Json: Newtonsoft.Json 13.0.3 \u2192 13.0.4 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6bc3c45041773c780f3c71a5a4c37913170b10795bfed8949da7f32ecee66143"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated: Microsoft.EntityFrameworkCore: Microsoft.EntityFrameworkCore 9.0.0 \u2192 10.0.9 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d6bc2cfd10f7debbe91b72d5c6f7efc119f7ab6934ee550f9b52ebd81d514ebe"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated: Microsoft.EntityFrameworkCore.Sqlite: Microsoft.EntityFrameworkCore.Sqlite 9.0.0 \u2192 10.0.9 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"ca1f26ceea81e25ff353f12edb9683cd25576659307f775be3350af4c8f46ce2"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated: Microsoft.NET.Test.Sdk: Microsoft.NET.Test.Sdk 17.12.0 \u2192 18.6.0 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"e92dcd48f7ffe19d959e6b8961b53cbea7b17fb2d62d0f9d1f5c4c7b07984fab"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated: xunit.runner.visualstudio: xunit.runner.visualstudio 3.0.1 \u2192 3.1.5 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"87a27f08f73b189de0e26c050a80006f291ef3318601521723ed613d4d974e96"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated: Microsoft.CodeAnalysis.Analyzers: Microsoft.CodeAnalysis.Analyzers 3.11.0 \u2192 5.3.0 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"06142a75be059353016254e017c4df8c7ed4351c314b430c5c81f8b878c8ed9a"}},{"ruleId":"D12","level":"note","message":{"text":"Outdated: Microsoft.CodeAnalysis.CSharp: Microsoft.CodeAnalysis.CSharp 4.12.0 \u2192 5.3.0 available."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"5ac1c5e76514695d0a3f7ad8e0f42f878fdedc04974f60a573405539ef6f2855"}},{"ruleId":"D12","level":"warning","message":{"text":"Deprecated: xunit: xunit 2.9.3 \u2014 Legacy xunit.v3 \u003E= 0.0.0"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d37c8c0e8046c9e8358e976373216abfb78e9fdef63ed53d3edcaa7d2238edcd"}},{"ruleId":"D14","level":"note","message":{"text":"Licenses scanned: 8 packages scanned; 2 distinct SPDX licenses."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"1d29d66daec20840f6831f63c1b66b87c40390635ef3e9f728002964c77e88d4"}},{"ruleId":"D15","level":"warning","message":{"text":"git history depth insufficient: git history depth insufficient \u2014 install a full clone for reliable trend signal."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"ab15c4a7c72fcad940ff795282e210fd7f3769431dab6bffd8ce9ee8f7ee13f1"}},{"ruleId":"D16","level":"warning","message":{"text":"single-maintainer \u2014 knowledge-concentration (bus factor) risk: single-maintainer \u2014 knowledge-concentration (bus factor) risk (1 author(s) across 28 commit(s) sampled)."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"b4b49d961df742f0e507f4cc5c8094fb077ba0391a27fd015d18320865187719"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] SourceGeneratedAttribute"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Attributes/SourceGeneratedAttribute.cs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f77671c7f788b3383b98633684fb535343e4301cc27e8d314869b6b8bc7e633"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CS8714 // The type cannot be used as type parameter in the generic type or method. Nullability of type argument doesn\u0027t match \u0027notnull\u0027 constraint. -- Was type-checked"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Comparisons/DictionaryComparer.cs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"78bcbe3ad1e5ac4a8e58239ffa5b29666a87880426890497a1eeacc05d6e0873"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CS8714 // The type cannot be used as type parameter in the generic type or method. Nullability of type argument doesn\u0027t match \u0027notnull\u0027 constraint. -- Was type-checked"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Comparisons/DictionaryComparer.cs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"78bcbe3ad1e5ac4a8e58239ffa5b29666a87880426890497a1eeacc05d6e0873"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Enhancement: Change IList to IReadOnlyList once the former implements the latter: https://github.com/dotnet/runtime/issues/31001 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Comparisons/EnumerableComparer.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"dec9eec6461dada44f671a13623930d281fd55c246291da5d24adbf83fdf7eb6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Enhancement: Change IList to IReadOnlyList once the former implements the latter: https://github.com/dotnet/runtime/issues/31001 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Comparisons/EnumerableComparer.cs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"dec9eec6461dada44f671a13623930d281fd55c246291da5d24adbf83fdf7eb6"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable IDE0060 // Remove unused parameter -- Required to let generated code make use of overload resolution"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Conversions/FormattingHelper.cs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"8eb49066b6edf9f42da9c25b3abb4e123b091cff164d8f361e89a34067e88e81"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable IDE0060 // Remove unused parameter -- Required to let generated code make use of overload resolution"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Conversions/FormattingHelper.cs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"8eb49066b6edf9f42da9c25b3abb4e123b091cff164d8f361e89a34067e88e81"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable IDE0060 // Remove unused parameter -- Required to let generated code make use of overload resolution"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Conversions/FormattingHelper.cs"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"8eb49066b6edf9f42da9c25b3abb4e123b091cff164d8f361e89a34067e88e81"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable IDE0060 // Remove unused parameter -- Required to let generated code make use of overload resolution"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Conversions/ParsingHelper.cs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"54b864330720cc9db5c0fbb42839ecd40f5df0bacade86fc1f344010d342023c"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable IDE0060 // Remove unused parameter -- Required to let generated code make use of overload resolution"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Conversions/ParsingHelper.cs"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"54b864330720cc9db5c0fbb42839ecd40f5df0bacade86fc1f344010d342023c"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] DummyBuilder"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/DummyBuilder.cs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"eac95f45fd8f171d02ead95c455ef2091e5e70ea98e407d56f92ed4338cd7433"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Enhancement: For table-per-type (TPT), consider having a Fruit equal a Banana if their IDs match (hard to do efficiently) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Entity.cs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e78924264036a9b14de82b9761b6b3a747633410f2e291488e15a3b2eaa6cfe"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] SourceGeneratedAttribute"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Attributes/SourceGeneratedAttribute.cs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f77671c7f788b3383b98633684fb535343e4301cc27e8d314869b6b8bc7e633"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CS8714 // The type cannot be used as type parameter in the generic type or method. Nullability of type argument doesn\u0027t match \u0027notnull\u0027 constraint. -- Was type-checked"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Comparisons/DictionaryComparer.cs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"78bcbe3ad1e5ac4a8e58239ffa5b29666a87880426890497a1eeacc05d6e0873"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CS8714 // The type cannot be used as type parameter in the generic type or method. Nullability of type argument doesn\u0027t match \u0027notnull\u0027 constraint. -- Was type-checked"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Comparisons/DictionaryComparer.cs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"78bcbe3ad1e5ac4a8e58239ffa5b29666a87880426890497a1eeacc05d6e0873"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Enhancement: Change IList to IReadOnlyList once the former implements the latter: https://github.com/dotnet/runtime/issues/31001 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Comparisons/EnumerableComparer.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"dec9eec6461dada44f671a13623930d281fd55c246291da5d24adbf83fdf7eb6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Enhancement: Change IList to IReadOnlyList once the former implements the latter: https://github.com/dotnet/runtime/issues/31001 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Comparisons/EnumerableComparer.cs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"dec9eec6461dada44f671a13623930d281fd55c246291da5d24adbf83fdf7eb6"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable IDE0060 // Remove unused parameter -- Required to let generated code make use of overload resolution"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Conversions/FormattingHelper.cs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"8eb49066b6edf9f42da9c25b3abb4e123b091cff164d8f361e89a34067e88e81"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable IDE0060 // Remove unused parameter -- Required to let generated code make use of overload resolution"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Conversions/FormattingHelper.cs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"8eb49066b6edf9f42da9c25b3abb4e123b091cff164d8f361e89a34067e88e81"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable IDE0060 // Remove unused parameter -- Required to let generated code make use of overload resolution"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Conversions/FormattingHelper.cs"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"8eb49066b6edf9f42da9c25b3abb4e123b091cff164d8f361e89a34067e88e81"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable IDE0060 // Remove unused parameter -- Required to let generated code make use of overload resolution"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Conversions/ParsingHelper.cs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"54b864330720cc9db5c0fbb42839ecd40f5df0bacade86fc1f344010d342023c"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable IDE0060 // Remove unused parameter -- Required to let generated code make use of overload resolution"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Conversions/ParsingHelper.cs"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"54b864330720cc9db5c0fbb42839ecd40f5df0bacade86fc1f344010d342023c"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] DummyBuilder"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/DummyBuilder.cs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"eac95f45fd8f171d02ead95c455ef2091e5e70ea98e407d56f92ed4338cd7433"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Enhancement: For table-per-type (TPT), consider having a Fruit equal a Banana if their IDs match (hard to do efficiently) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Entity.cs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e78924264036a9b14de82b9761b6b3a747633410f2e291488e15a3b2eaa6cfe"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] SourceGeneratedAttribute"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Attributes/SourceGeneratedAttribute.cs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f77671c7f788b3383b98633684fb535343e4301cc27e8d314869b6b8bc7e633"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CS8714 // The type cannot be used as type parameter in the generic type or method. Nullability of type argument doesn\u0027t match \u0027notnull\u0027 constraint. -- Was type-checked"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Comparisons/DictionaryComparer.cs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"78bcbe3ad1e5ac4a8e58239ffa5b29666a87880426890497a1eeacc05d6e0873"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CS8714 // The type cannot be used as type parameter in the generic type or method. Nullability of type argument doesn\u0027t match \u0027notnull\u0027 constraint. -- Was type-checked"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Comparisons/DictionaryComparer.cs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"78bcbe3ad1e5ac4a8e58239ffa5b29666a87880426890497a1eeacc05d6e0873"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Enhancement: Change IList to IReadOnlyList once the former implements the latter: https://github.com/dotnet/runtime/issues/31001 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Comparisons/EnumerableComparer.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"dec9eec6461dada44f671a13623930d281fd55c246291da5d24adbf83fdf7eb6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Enhancement: Change IList to IReadOnlyList once the former implements the latter: https://github.com/dotnet/runtime/issues/31001 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Comparisons/EnumerableComparer.cs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"dec9eec6461dada44f671a13623930d281fd55c246291da5d24adbf83fdf7eb6"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable IDE0060 // Remove unused parameter -- Required to let generated code make use of overload resolution"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Conversions/FormattingHelper.cs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"8eb49066b6edf9f42da9c25b3abb4e123b091cff164d8f361e89a34067e88e81"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable IDE0060 // Remove unused parameter -- Required to let generated code make use of overload resolution"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Conversions/FormattingHelper.cs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"8eb49066b6edf9f42da9c25b3abb4e123b091cff164d8f361e89a34067e88e81"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable IDE0060 // Remove unused parameter -- Required to let generated code make use of overload resolution"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Conversions/FormattingHelper.cs"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"8eb49066b6edf9f42da9c25b3abb4e123b091cff164d8f361e89a34067e88e81"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable IDE0060 // Remove unused parameter -- Required to let generated code make use of overload resolution"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Conversions/ParsingHelper.cs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"54b864330720cc9db5c0fbb42839ecd40f5df0bacade86fc1f344010d342023c"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable IDE0060 // Remove unused parameter -- Required to let generated code make use of overload resolution"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Conversions/ParsingHelper.cs"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"54b864330720cc9db5c0fbb42839ecd40f5df0bacade86fc1f344010d342023c"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] DummyBuilder"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/DummyBuilder.cs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"eac95f45fd8f171d02ead95c455ef2091e5e70ea98e407d56f92ed4338cd7433"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Enhancement: For table-per-type (TPT), consider having a Fruit equal a Banana if their IDs match (hard to do efficiently) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Entity.cs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e78924264036a9b14de82b9761b6b3a747633410f2e291488e15a3b2eaa6cfe"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable IDE0004 // Cast is not redundant, but actually changes the resolved overload"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Tests/Comparisons/EnumerableComparerTests.cs"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"e85a08588c72a311b74497f884fdbb11b63db576bebbf538ca5a839231619be8"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] .ctor"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Tests/DummyBuilderTests.cs"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff2fb930dbe64ab6ba0a5e3ee0f40068d2c3df334e0069c6b8cad99a282bcaff"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] .ctor"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Tests/DummyBuilderTests.cs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff2fb930dbe64ab6ba0a5e3ee0f40068d2c3df334e0069c6b8cad99a282bcaff"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] .ctor"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Tests/DummyBuilderTests.cs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff2fb930dbe64ab6ba0a5e3ee0f40068d2c3df334e0069c6b8cad99a282bcaff"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] .ctor"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Tests/DummyBuilderTests.cs"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff2fb930dbe64ab6ba0a5e3ee0f40068d2c3df334e0069c6b8cad99a282bcaff"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] .ctor"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Tests/DummyBuilderTests.cs"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff2fb930dbe64ab6ba0a5e3ee0f40068d2c3df334e0069c6b8cad99a282bcaff"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] EmptyTypeDummyBuilder"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Tests/DummyBuilderTests.cs"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff2fb930dbe64ab6ba0a5e3ee0f40068d2c3df334e0069c6b8cad99a282bcaff"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CS8618 // Reconstitution constructor"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Tests/EntityFramework/EntityFrameworkConfigurationGeneratorTests.cs"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"3112f35dbbb1e0cfc1b6f7d09f79ac418531c764f346cf1bfaaee6da89a7f62e"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable xUnit2024 // Do not use boolean asserts for simple equality tests -- We are testing overloaded operators"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Tests/ValueObjectTests.cs"},"region":{"startLine":813}}}],"partialFingerprints":{"codehealthFindingId/v1":"841f20caf86233d851befa56d9cf24fe5c02c354f22130b8b6a86a9097acd823"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] ArrayValueObject"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Tests/ValueObjectTests.cs"},"region":{"startLine":1177}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5c83a7af991052eb97c370d7e9b858d288ad3077ecf844546928e4bb4ab79db"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] EmptyValueObject"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Tests/ValueObjectTests.cs"},"region":{"startLine":1218}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5c83a7af991052eb97c370d7e9b858d288ad3077ecf844546928e4bb4ab79db"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] FullySelfImplementedValueObject"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Tests/ValueObjectTests.cs"},"region":{"startLine":1228}}}],"partialFingerprints":{"codehealthFindingId/v1":"34f4d74714ae64ab58597269f2fb567a87c07589a27938025fcb6ce90c9edfa5"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CS0618 // Obsolete constructor is intended for us"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Tests/WrapperValueObjectTests.cs"},"region":{"startLine":844}}}],"partialFingerprints":{"codehealthFindingId/v1":"04c7355fe1f3afa34dab237849c4a189a79ddf1ddc4e7fc7affe8e9cda89aa50"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] .ctor"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Tests/WrapperValueObjectTests.cs"},"region":{"startLine":799}}}],"partialFingerprints":{"codehealthFindingId/v1":"fdb4a1f0665f1be1a1a85dd5e208e5442407d90db292fe279d7198a75c04da3f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Enhancement: We could use an object initializer if there are accessible setters \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/TypeSymbolExtensions.cs"},"region":{"startLine":683}}}],"partialFingerprints":{"codehealthFindingId/v1":"b54294d60a7179d14ab5a8bc6690ca670382662fa9427b1d4404b148caff9fff"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] IsType"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/TypeSymbolExtensions.cs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"bffbb7816d13b18b5e1aade8b18028c9835048253411bcfc2968dabc98e0daed"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: CA1861"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Tests/DomainModeling.Tests.csproj"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"4895e5353ccef3bce227cf2b8be7a02db401b995e216fd158f91c781be79854f"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: IDE0290"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Tests/DomainModeling.Tests.csproj"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"4895e5353ccef3bce227cf2b8be7a02db401b995e216fd158f91c781be79854f"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: IDE0305"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Tests/DomainModeling.Tests.csproj"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"4895e5353ccef3bce227cf2b8be7a02db401b995e216fd158f91c781be79854f"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: IDE0057"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/DomainModeling.Generator.csproj"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9125f14b59eeb1e57ee3a69b55bb549baf36fda8404748714d557885c77ed4f"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: IDE0290"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Example/DomainModeling.Example.csproj"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"529b123a3e5616743ef21c6cb0eae174933da66e3bce9d1b7bd301fbea7621f0"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: StringIdEntity: NamedType StringIdEntity \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Tests/Comparisons/EnumerableComparerTests.cs"},"region":{"startLine":393}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe25afc45d2f3eb13c45ed66f0ee6a326bfeb854a6e4444dc362009044cfdc12"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: StringBasedEntity: NamedType StringBasedEntity \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Tests/Entities/Entity.SourceGeneratedIdentityTests.cs"},"region":{"startLine":430}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0990eb49572ca61cea28f43b9320eb108446c84e97adad194688977ef77b4c4"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: IntBasedEntity: NamedType IntBasedEntity \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Tests/Entities/Entity.SourceGeneratedIdentityTests.cs"},"region":{"startLine":438}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf4a65ad9fa15ea7b1daa3c39c026e38305621fa0a1c050d300da5a841dd2678"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: DecimalBasedEntity: NamedType DecimalBasedEntity \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Tests/Entities/Entity.SourceGeneratedIdentityTests.cs"},"region":{"startLine":446}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b88ce633dfdc15ccba57f3e13a4b16bf3b240879eeb27fa405b2cb5a4a69d6d"}},{"ruleId":"D18","level":"note","message":{"text":"DomainModeling.Example (Production): 6 .cs files, 201 LoC (124 significant)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Example/DomainModeling.Example.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f504798f3552e4c9d51b0afc1d4a87728dcbe01b853290e12e10a30a02f7b235"}},{"ruleId":"D18","level":"note","message":{"text":"DomainModeling(net8.0) (Production): 34 .cs files, 2351 LoC (1121 significant)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/DomainModeling.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0d71ba9479a05dcfe186dc13cebb801f9db11c654ab300aabcb136cb4c50536"}},{"ruleId":"D18","level":"note","message":{"text":"DomainModeling(net7.0) (Production): 34 .cs files, 2351 LoC (1121 significant)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/DomainModeling.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ab73afc87309361e2f80ebc4486a6bf62004b3b88a854265e00bd3a126f23f6"}},{"ruleId":"D18","level":"note","message":{"text":"DomainModeling(net6.0) (Production): 34 .cs files, 2351 LoC (1121 significant)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/DomainModeling.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a34ca46053966b0d07720d8f475c045128f5a44b20d73fbfdc64c63a45d0aec"}},{"ruleId":"D18","level":"note","message":{"text":"DomainModeling.Tests (Test): 13 .cs files, 5230 LoC (4159 significant)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Tests/DomainModeling.Tests.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5283b5d15b0de780cbc3e3226c054296271efb6a005f491f98295cce5da8140"}},{"ruleId":"D18","level":"note","message":{"text":"DomainModeling.Generator (Production): 27 .cs files, 4679 LoC (3288 significant)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/DomainModeling.Generator.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1225ce6ee1059d0ac06a3013270ac94bf956e2d63483fcd759297814a05ad684"}},{"ruleId":"D19","level":"warning","message":{"text":"Low XML-doc coverage: DomainModeling.Example: DomainModeling.Example: 4 % XML-doc coverage (1/23)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Example/DomainModeling.Example.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"93545490e4dfc6a59d5db6ab3dd6deff24acccca48e6f025dad67bd090ee5bab"}},{"ruleId":"D19","level":"note","message":{"text":"XML-doc coverage: DomainModeling(net8.0): DomainModeling(net8.0): 82 % XML-doc coverage (86/105)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/DomainModeling.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2b7745a8cd1a91760d926228302760b7aef0ca10c3eb818ab79a2b80bdafccc"}},{"ruleId":"D19","level":"note","message":{"text":"XML-doc coverage: DomainModeling(net7.0): DomainModeling(net7.0): 80 % XML-doc coverage (78/97)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/DomainModeling.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"13fa251d8805fa43c19590ee2bcee7e6ecab2b7eabdd51d1cc86c4ee41368921"}},{"ruleId":"D19","level":"note","message":{"text":"XML-doc coverage: DomainModeling(net6.0): DomainModeling(net6.0): 75 % XML-doc coverage (53/71)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/DomainModeling.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bd25d732a4cd9042e4352578b6ab4cf2fcccfe87d6cfd08bcd894ede3cf5287"}},{"ruleId":"D19","level":"warning","message":{"text":"Low XML-doc coverage: DomainModeling.Generator: DomainModeling.Generator: 31 % XML-doc coverage (65/207)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/DomainModeling.Generator.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9894a2244d929d584a97c0ba915bad5d269da7ddb485785c2832fd35ba8bb181"}},{"ruleId":"D20","level":"note","message":{"text":"No ADRs found: No ADRs found at common paths; consider documenting architectural decisions in Docs/ADL/ or similar."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d2bea044ff79d7d275f5a91a6e2f548586178eaf480274c33960ad020c854631"}},{"ruleId":"D22","level":"note","message":{"text":"No exposed public API: No intentionally-exposed types (IsPackable or .Contracts) to evaluate."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"2712d35e1d1ba8e91a90125d29842b77d4ca65e0eeaa52476c739f7165820a6f"}},{"ruleId":"D23","level":"note","message":{"text":"Bounded contexts not declared: A codebase of over 10,000 lines of code across six projects is large enough to require explicit architectural boundaries to manage coupling risks. Declare architecture.contexts (\u22652) in config to assess cross-boundary type coupling."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"1c7e276c9c682731f01819ed5378b90ca320cde1b583c90920172911598362b3"}},{"ruleId":"D24","level":"note","message":{"text":"redundant comment: \u0022// Double nulls are already handled above\u0022 \u2014 Remove. The code structure or previous checks should make this clear; if not, refactor the code to handle nulls earlier."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling/Comparisons/DictionaryComparer.cs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"07e2238fddc44e0b48718ec90d8318388f4abab9e64aa61ddc4fb45eece377e7"}},{"ruleId":"D25","level":"note","message":{"text":"no ADRs to check: No ADRs found, so conformance can\u0027t be assessed."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"5f96235c58be08aaae505ba823e9095f206fbc6a447f646e346ee9bd81a5f481"}},{"ruleId":"D30","level":"error","message":{"text":"High CVE: SQLitePCLRaw.lib.e_sqlite3 2.1.10: SQLitePCLRaw.lib.e_sqlite3 2.1.10 (transitive) has a High advisory. https://github.com/advisories/[GHSA redacted]"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"4bb21bfe4dacebf32c74969b01bdfd4143dcc202111d99f8d1abd5eb6de9eec2"}},{"ruleId":"D31","level":"note","message":{"text":"Not applicable: No Infrastructure-as-Code or container manifests found (Dockerfile, Terraform, Kubernetes/Helm, CloudFormation); nothing to scan."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"2e57fca60a46af1c36cbca9e46b2039488d0488a6eab73ad6bc057cd95ef2432"}},{"ruleId":"D32","level":"note","message":{"text":"Not applicable: No PII/GDPR-handling patterns detected (p/gdpr ruleset) \u2014 no data-compliance surface to assess."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"df51e593e9b0b9805626d04fe36a3d12c504b5d7d5da30dc59b5b0f134b5753b"}},{"ruleId":"D33","level":"note","message":{"text":"Not applicable: No JS/npm manifest or lockfile found outside bin/obj (package.json, package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lockb); no JS dependencies to scan."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"f46a134eeb447d8c90511e3106af3dac20b26868f5143d77eadbb96ed8f220c6"}},{"ruleId":"D34","level":"note","message":{"text":"early-stage repository \u2014 too little history to judge knowledge freshness: early-stage repository \u2014 too little history to judge knowledge freshness (28 commit(s) sampled)."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"58b42e8ad1f5e125e8a2d365554e56d01e64a556b28e0c9985ff169722b7c54a"}},{"ruleId":"D35","level":"warning","message":{"text":"git history depth insufficient: git history depth insufficient \u2014 a full clone gives reliable change-coupling."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"c3898c82d557f2616b569b6ad2fc4553f15857ea932e622df9e26ca46b21274a"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: IdentityGenerator.cs \u2194 WrapperValueObjectGenerator.cs: \u0060DomainModeling.Generator/IdentityGenerator.cs\u0060 and \u0060DomainModeling.Generator/WrapperValueObjectGenerator.cs\u0060 change together 62% of the time (8 shared commits) with no explicit dependency \u2014 a hidden/logical coupling. If they belong together, co-locate them; if not, break the coupling."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/IdentityGenerator.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0d9873841a0ba5152d2809479b813df22fb9d0c8ec07fcf90ce8539f1ed511b"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: IdentityGenerator.cs \u2194 ValueObjectGenerator.cs: \u0060DomainModeling.Generator/IdentityGenerator.cs\u0060 and \u0060DomainModeling.Generator/ValueObjectGenerator.cs\u0060 change together 50% of the time (6 shared commits) with no explicit dependency \u2014 a hidden/logical coupling. If they belong together, co-locate them; if not, break the coupling."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DomainModeling.Generator/IdentityGenerator.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"243179883d950e7672b6442dec08d71c5f10068be75db08e3247aef0e6b5e928"}},{"ruleId":"D36","level":"note","message":{"text":"Not applicable: No CI/build pipeline found (.github/workflows, .gitlab-ci.yml, azure-pipelines.yml, Jenkinsfile, .circleci); there is no build to attest provenance for."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"383f97e2d2c3d8c6d4adffc68d228db0928a3a8f5c3df1214c0f646687d2dbe9"}},{"ruleId":"D37","level":"note","message":{"text":"Not applicable: No vulnerability-disclosure policy file found (SECURITY.md, .github/SECURITY.md, docs/SECURITY.md, .well-known/security.txt). A coordinated-disclosure policy may live off-repo, so this is not evidenced rather than failed."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"e748a9b8b3d154964dfb621b8675d34a302dda266d0196c5d83eb8ba4071d61c"}},{"ruleId":"D38","level":"note","message":{"text":"Not applicable: No JS/npm lockfile found outside bin/obj (package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lockb); nothing for OSV to scan."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6ff7301b610918095afd57ac1c89dabddab1d8fdb34c0f0d687159a5a0df0b8e"}}],"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":0,"secretScannerRunsExcluded":0}}}]}