{"$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":"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","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"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":"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":"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"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D29","name":"Static Analysis (SAST)","shortDescription":{"text":"Static Analysis (SAST)"},"helpUri":"https://codehealth.canine.dev/dimensions/D29","relationships":[{"target":{"id":"CWE-79","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-89","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-94","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-77","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-79","CWE-89","CWE-78","CWE-94","CWE-77"]}},{"id":"D30","name":"Dependency Vulnerabilities","shortDescription":{"text":"Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D30","relationships":[{"target":{"id":"CWE-1395","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-937","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1395","CWE-937"]}},{"id":"D31","name":"IaC \u0026 Container Security","shortDescription":{"text":"IaC \u0026 Container Security"},"helpUri":"https://codehealth.canine.dev/dimensions/D31","relationships":[{"target":{"id":"CWE-1032","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-732","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-16","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1032","CWE-732","CWE-16"]}},{"id":"D34","name":"Knowledge Freshness","shortDescription":{"text":"Knowledge Freshness"},"helpUri":"https://codehealth.canine.dev/dimensions/D34"},{"id":"D35","name":"Change Coupling","shortDescription":{"text":"Change Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D35"},{"id":"D36","name":"Supply-chain Provenance \u0026 Signing","shortDescription":{"text":"Supply-chain Provenance \u0026 Signing"},"helpUri":"https://codehealth.canine.dev/dimensions/D36","relationships":[{"target":{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1357","CWE-494"]}},{"id":"D39","name":"IL Efficiency","shortDescription":{"text":"IL Efficiency"},"helpUri":"https://codehealth.canine.dev/dimensions/D39"},{"id":"D40","name":"Network Egress Confinement","shortDescription":{"text":"Network Egress Confinement"},"helpUri":"https://codehealth.canine.dev/dimensions/D40"},{"id":"D41","name":"Kernel \u0026 Syscall Confinement","shortDescription":{"text":"Kernel \u0026 Syscall Confinement"},"helpUri":"https://codehealth.canine.dev/dimensions/D41"}]}},"results":[{"ruleId":"D1","level":"warning","message":{"text":"SortQuery.FindTokens (cyclomatic 25): SortQuery.FindTokens has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Application/ViewModels/Sorting/SortQuery.cs"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"697322741c8f5efe662738e1fb4f0966c24684df66bf2220c5c0d2947577a3a1"}},{"ruleId":"D2","level":"warning","message":{"text":"SortQuery.FindTokens (cognitive 48): SortQuery.FindTokens has cognitive complexity 48 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Application/ViewModels/Sorting/SortQuery.cs"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f91105fa3d2bf7b21bb7f997800af06ff069fdfd96550fe1d0a29801c83a718"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: CleanArchitecture.ServiceDefaults: CleanArchitecture.ServiceDefaults: abstractness 0.00, instability 0.00, distance 1.00 \u2014 zone of pain \u2014 concrete and depended on by 1 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"037d9308690be730cd81bd876b4b19d6355f885f150c92b362f0c1a07609f2b4"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: CleanArchitecture.Proto: CleanArchitecture.Proto: abstractness 0.11, instability 0.00, distance 0.89 \u2014 zone of pain \u2014 concrete and depended on by 3 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"ecc3f2f3da95f73ea64833eb14753bee6e11ddb821f343fae09124bfd5dd2941"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: CleanArchitecture.Shared: CleanArchitecture.Shared: abstractness 0.17, instability 0.00, distance 0.83 \u2014 the shape a shared-kernel / building-block library has BY DESIGN \u2014 concrete and widely depended-on is what makes it useful, and this dimension does not penalise it (the distance is reported for completeness, not as a defect). Worth a look only if it has grown past one coherent kernel into an everything-bucket."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"30328f3bd9a4c5c594aade439fe61c05b188b73812b7f4043132a43736881c01"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: ApiUser.cs: 0.0% line coverage (0/52)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Domain/ApiUser.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5cc9f4ab973399a67ef3bfefc419bd83c9e4b7413a075c049fd8a3ab86dcca2"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: CacheKeyGenerator.cs: 0.0% line coverage (0/6)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Domain/CacheKeyGenerator.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0fc4b999255629775e3fa388faa2307db9e95830531463e9f7a3dd326336508"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: DistributedCacheExtensions.cs: 0.0% line coverage (0/17)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Domain/Extensions/DistributedCacheExtensions.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e2df1583873d8a36579efb8e1e5b40e542ee6a79b9709fd6221359d10ff1dd7"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: ServiceCollectionExtension.cs: 0.0% line coverage (0/26)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Domain/Extensions/ServiceCollectionExtension.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d43d4cee4ecc280909ba7e0972f9883aed1ac89ceb2b6233cdbe56e3a0219449"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: TenantEventHandler.cs: 0.0% line coverage (0/17)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Domain/EventHandler/TenantEventHandler.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"36bba4101c18a6327c8f656cdea5e922b4037e7e148f6c4ce5bd1a0503a3f065"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: UserEventHandler.cs: 0.0% line coverage (0/22)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Domain/EventHandler/UserEventHandler.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1b1cbbc79f3273a7375ba2a36c22ffd4fda874dc2f4aa29afe926292fc7f709"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: FanoutEventHandler.cs: 0.0% line coverage (0/16)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Domain/EventHandler/Fanout/FanoutEventHandler.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8522b4241ef1d4492f2ad754ed12060e7fab4e178b6f8869e771ac20a2107fd9"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: StoredDomainNotification.cs: 0.0% line coverage (0/20)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Domain/DomainNotifications/StoredDomainNotification.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"90fa3f47372dfefef67906dde54d5ff4b3969edeae0fe30b0d06296726e6b567"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: StoredDomainEvent.cs: 0.0% line coverage (0/14)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Domain/DomainEvents/StoredDomainEvent.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"87e1b8a30a6c1a4908a6d725441b3ec25fd5b8b0dc5035454569664d116adc14"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: FanoutEventConsumer.cs: 0.0% line coverage (0/8)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Domain/Consumers/FanoutEventConsumer.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fdba653130bdb3d64a08014fb7a2e6657b269f61cb22f1f6a5d0a4b8950bf32c"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: TenantUpdatedEventConsumer.cs: 0.0% line coverage (0/8)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Domain/Consumers/TenantUpdatedEventConsumer.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f948ebf1e6ee9411932af97e958e1395ea624d1c7a8c5a1e233e266cb6b0281e"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: CommandHandlerBase.cs: 47.9% line coverage (23/48)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Domain/Commands/CommandHandlerBase.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfa9d998b4ef2b1f8350cd1c562860700c42e08c08c2ce2f676a0b095307f31b"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: PagedResult.cs: 47.8% line coverage (11/23)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Application/ViewModels/PagedResult.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"50d7398d407e60511b2fece1278c4614081c1c4e450a8a333dadda8852d94e3a"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: SortParameter.cs: 0.0% line coverage (0/6)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Application/ViewModels/Sorting/SortParameter.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f17a63fca539737a7b36c705e5f6d44fae4468643996b00e9330dd1f706bbcad"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: SortQuery.cs: 0.0% line coverage (0/167)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Application/ViewModels/Sorting/SortQuery.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"14057636a68d7e083850f93618db2f08821062396311c444c87fc2a34d032d95"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: TenantService.cs: 0.0% line coverage (0/34)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Application/Services/TenantService.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"10a543b1d5ee136f64701f8a83cbd0e07b0de4ecfe26ff84d14dc0266f601708"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: UserService.cs: 0.0% line coverage (0/43)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Application/Services/UserService.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"790bff01d6c04720e6a5520e07090cec68eb4d0f8e1e1faebab131b55474c5e0"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: QueryableExtensions.cs: 22.2% line coverage (8/36)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Application/Extensions/QueryableExtensions.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ee814771835b046583b656bc5a45778e52573e399a8c27beb098605479ca49a"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: ServiceCollectionExtensions.cs: 0.0% line coverage (0/18)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Application/Extensions/ServiceCollectionExtensions.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0668eb43a15ef2faf39dae63086b71f4a966391892b3243905317318615f9e28"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: FanoutDomainEvent.cs: 0.0% line coverage (0/7)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Shared/Events/FanoutDomainEvent.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"32b7d71706842ca931463fb6c6448139739edae8fb1fd691aea38a6804f0e3e2"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: BaseRepository.cs: 0.0% line coverage (0/59)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Infrastructure/Repositories/BaseRepository.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e665f0e7f6cddf2fe659c872ca6111d634f3b3a2a3323214ba272de6a2394afc"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: UserRepository.cs: 0.0% line coverage (0/6)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Infrastructure/Repositories/UserRepository.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6056b5a21a95906757122367c4413156b8b787feb03a221d013a99a856818202"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: DbContextExtension.cs: 0.0% line coverage (0/8)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Infrastructure/Extensions/DbContextExtension.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"611131b2e5a5913b850f6c8a78ec3f81beb080ed635c569b01052736c24b61b7"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: ServiceCollectionExtensions.cs: 0.0% line coverage (0/24)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Infrastructure/Extensions/ServiceCollectionExtensions.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2161d7dd0f3e3d8d238812e3ac9c42cc440d41d4b207283c45c9fed0bb4d5ab5"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: EventStore.cs: 0.0% line coverage (0/29)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Infrastructure/EventSourcing/EventStore.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b7ff20f720281352f338fe84b14a0218482aa1cceeb72515cd4fcc59a70705a"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: EventStoreContext.cs: 0.0% line coverage (0/19)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Infrastructure/EventSourcing/EventStoreContext.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a31de3e6c8d631251811c4a87144ae240f76e38bb5f8528db05f71f97fa63e15"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: ApplicationDbContext.cs: 19.2% line coverage (5/26)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Infrastructure/Database/ApplicationDbContext.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d126b1de59cec3b70ca82a3583136dca98a12f2dc27f8b91d3510a6dc520f0d"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: DbContextUtility.cs: 0.0% line coverage (0/10)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Infrastructure/Database/DbContextUtility.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a893d14d02483d17bdddfd16b965b1ade2c7e7f8e77e2c55dc4e65c6e422e142"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: DomainNotificationStoreDbContext.cs: 0.0% line coverage (0/8)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Infrastructure/Database/DomainNotificationStoreDbContext.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c9819a7c5553912f269b77f7d5242a7ca9eeb8545e1a1d3eba8752a93347a6b"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: EventStoreDbContext.cs: 0.0% line coverage (0/8)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Infrastructure/Database/EventStoreDbContext.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b49940a5788263fe4f23b0b0f7f50bb828628ff80e5673c775a983c2286e4b2"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: TenantConfiguration.cs: 0.0% line coverage (0/9)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Infrastructure/Configurations/TenantConfiguration.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb2571040dc9c8ffecd79aab85962bd3fe16cc6a6b2f16a2d47bb86e0278a094"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: UserConfiguration.cs: 0.0% line coverage (0/27)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Infrastructure/Configurations/UserConfiguration.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"baa8bb90db3268c0cad9a5684e4d708737376e74c094fb213f3ac306bd300243"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: StoredDomainEventConfiguration.cs: 0.0% line coverage (0/12)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Infrastructure/Configurations/EventSourcing/StoredDomainEventConfiguration.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"45c322177ffd7c32c72f26e7dad0afb302b40d1c092dfe63abcab3768b481942"}},{"ruleId":"D8","level":"warning","message":{"text":"Low coverage: StoredDomainNotificationConfiguration.cs: 0.0% line coverage (0/24)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Infrastructure/Configurations/EventSourcing/StoredDomainNotificationConfiguration.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"407d6b4fbb591f1db79cce03cd307455394caa5fabfb852fde4337bb088e980f"}},{"ruleId":"D8","level":"warning","message":{"text":"CRAP 650: SortQuery.FindTokens: Cyclomatic 25 with 0.0% file coverage \u2014 too complex for how untested it is (CRAP = CC\u00B2\u00B7(1\u2212cov)\u00B3 \u002B CC; \u226530 needs tests or simplification)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Application/ViewModels/Sorting/SortQuery.cs"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ad4d65edbd3b051a126f4fc59e3da939f56070c8f8fbf66f19ea64eb98a2191"}},{"ruleId":"D8","level":"warning","message":{"text":"CRAP 42: SortQuery.GetSortParamFromSentence: Cyclomatic 6 with 0.0% file coverage \u2014 too complex for how untested it is (CRAP = CC\u00B2\u00B7(1\u2212cov)\u00B3 \u002B CC; \u226530 needs tests or simplification)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Application/ViewModels/Sorting/SortQuery.cs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c33996e96893f51b7e7fc07a3c4698ed91465d193b9a3255c1ec659ab28d135"}},{"ruleId":"D8","level":"warning","message":{"text":"CRAP 42: SortQuery.GetSortParamFromFunctionalStyle: Cyclomatic 6 with 0.0% file coverage \u2014 too complex for how untested it is (CRAP = CC\u00B2\u00B7(1\u2212cov)\u00B3 \u002B CC; \u226530 needs tests or simplification)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Application/ViewModels/Sorting/SortQuery.cs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"65402f87433f4c4cc18dfa4f273612fbc4d3f8dae4191ae615bc450b057131a9"}},{"ruleId":"D8","level":"warning","message":{"text":"CRAP 30: SortQuery.ParseQuery: Cyclomatic 5 with 0.0% file coverage \u2014 too complex for how untested it is (CRAP = CC\u00B2\u00B7(1\u2212cov)\u00B3 \u002B CC; \u226530 needs tests or simplification)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Application/ViewModels/Sorting/SortQuery.cs"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d89c834504168651c5559414ef2ea599f79b3c10df0ca4d492a47546b891bdb"}},{"ruleId":"D8","level":"warning","message":{"text":"CRAP 30: SortQuery.GetSortParamFromSingleWord: Cyclomatic 5 with 0.0% file coverage \u2014 too complex for how untested it is (CRAP = CC\u00B2\u00B7(1\u2212cov)\u00B3 \u002B CC; \u226530 needs tests or simplification)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Application/ViewModels/Sorting/SortQuery.cs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"f271761b2d53455dbaa72d1204e2b418f2edb43fc6c1cbc3f23953e985c154cc"}},{"ruleId":"D12","level":"warning","message":{"text":"Deprecated: xunit: xunit 2.9.3 \u2014 Legacy \u2014 the publisher\u0027s replacement is \u0060xunit.v3\u0060; migrate the reference to it."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d37c8c0e8046c9e8358e976373216abfb78e9fdef63ed53d3edcaa7d2238edcd"}},{"ruleId":"D12","level":"warning","message":{"text":"Prerelease dependency: OpenTelemetry.Instrumentation.EntityFrameworkCore: OpenTelemetry.Instrumentation.EntityFrameworkCore resolves to 1.0.0-beta.12, a prerelease build. Prerelease packages carry no support policy, may change breaking between previews and can be unlisted \u2014 pin a stable release before shipping, or record the reason this preview is required."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6d8cefaf757263ad09bb37801cfac8f96938bbb788638e55db64c62753ddddc0"}},{"ruleId":"D12","level":"warning","message":{"text":"Prerelease dependency: OpenTelemetry.Instrumentation.GrpcNetClient: OpenTelemetry.Instrumentation.GrpcNetClient resolves to 1.9.0-beta.1, a prerelease build. Prerelease packages carry no support policy, may change breaking between previews and can be unlisted \u2014 pin a stable release before shipping, or record the reason this preview is required."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"a7ba92ae84f0c8618628bb29e6420de71d2b94485fdd4f537f5333848a1fb7f1"}},{"ruleId":"D13","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"477468cbe3823c6e64d5f3e51eee4fac1ebff68d3db1eba2c95cd1148e664ce8"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D17","level":"warning","message":{"text":"BareSuppressMessage: SuppressMessage \u2014 the suppression records no reason: either it carries no justification argument at all, or one that states nothing a reader can weigh (\u0022OK\u0022, \u0022By design\u0022). A suppression is a decision somebody made, and without the reason the next reader cannot tell a considered exception from an unexamined one, so it is never revisited. Write what makes this site legitimately different \u2014 the invariant that holds, the framework contract that forces the shape \u2014 or remove the suppression and fix what it hides."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Infrastructure/GlobalSuppressions.cs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc24400bd59738b2c2a4afdf90053d760e0073f6bc690fc0e55d8b94de10c91b"}},{"ruleId":"D17","level":"warning","message":{"text":"BareSuppressMessage: SuppressMessage \u2014 the suppression records no reason: either it carries no justification argument at all, or one that states nothing a reader can weigh (\u0022OK\u0022, \u0022By design\u0022). A suppression is a decision somebody made, and without the reason the next reader cannot tell a considered exception from an unexamined one, so it is never revisited. Write what makes this site legitimately different \u2014 the invariant that holds, the framework contract that forces the shape \u2014 or remove the suppression and fix what it hides."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Infrastructure/GlobalSuppressions.cs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d365183739de4a0b08d648811dedb37504161bff1e9be5d91878a0b298ce072"}},{"ruleId":"D17","level":"warning","message":{"text":"BareSuppressMessage: SuppressMessage \u2014 the suppression records no reason: either it carries no justification argument at all, or one that states nothing a reader can weigh (\u0022OK\u0022, \u0022By design\u0022). A suppression is a decision somebody made, and without the reason the next reader cannot tell a considered exception from an unexamined one, so it is never revisited. Write what makes this site legitimately different \u2014 the invariant that holds, the framework contract that forces the shape \u2014 or remove the suppression and fix what it hides."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Infrastructure/GlobalSuppressions.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"32a0f20ce88e51fe741713f745970defd171f27c06bb18e4b1a9c4d4d2d34c84"}},{"ruleId":"D18","level":"note","message":{"text":"Shell project: CleanArchitecture.Proto: \u0060CleanArchitecture.Proto\u0060 contributes only 0 significant line(s) \u2014 an empty/placeholder project is structural noise. Remove it or fold its contents into a real project."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Proto/CleanArchitecture.Proto.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a78b6b72ed38ec0df74e28e378d84e00f3c6fcd8db5b2642fa18ba4fe2bccf23"}},{"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":"D21","level":"note","message":{"text":"Inconsistent pluralization for entity types in the same namespace hierarchy. \u0027User\u0027 is singular, while \u0027Tenant\u0027 is also singular, but \u0027Tenants\u0027 is used in command/query names (e.g., CreateTenant vs CreateUser). More critically, the repository interface naming is inconsistent: \u0027IUserRepository\u0027 vs \u0027IRepository\u003CTEntity\u003E\u0027 (generic base).: Standardize on singular nouns for domain entities and their corresponding repositories/interfaces. Ensure all specific repositories follow the pattern \u0027I{EntityName}Repository\u0027 or use a consistent generic base. (symbols: CleanArchitecture.Domain.Entities.User, CleanArchitecture.Domain.Entities.Tenant)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"f23c8be3f0fe015d859e8e6e53055d6875676edb38fc8d84597bed9c59d12b30"}},{"ruleId":"D21","level":"note","message":{"text":"Inconsistent naming for ViewModels. \u0027UserViewModel\u0027 follows the pattern {Entity}ViewModel, but \u0027TenantViewModel\u0027 also follows it. However, \u0027CreateUserViewModel\u0027 and \u0027UpdateUserViewModel\u0027 are used for commands/inputs, while \u0027TenantViewModel\u0027 is used for output. The inconsistency lies in the fact that some entities have specific ViewModels (User, Tenant) while others might not, or the naming convention for DTOs vs ViewModels is mixed.: Ensure all domain entities have a corresponding {EntityName}ViewModel if they are exposed to the API/gRPC layer. If \u0027Tenant\u0027 is an entity, it should have a \u0027TenantViewModel\u0027 (which it does), but \u0027User\u0027 also has \u0027UserViewModel\u0027. The inconsistency is subtle: \u0027User\u0027 and \u0027Tenant\u0027 are treated as first-class citizens with ViewModels, while other entities might not be. Check if all entities have a ViewModel. (symbols: CleanArchitecture.Application.ViewModels.Users.UserViewModel, CleanArchitecture.Application.ViewModels.Tenants.TenantViewModel)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"51767f3ef7d3f7752eac06c1b2c77dfc94d2d12684886b1772fae72b428385d2"}},{"ruleId":"D21","level":"note","message":{"text":"Inconsistent naming for Command classes. \u0027CreateUserCommand\u0027 and \u0027CreateTenantCommand\u0027 are consistent. However, \u0027UpdateUserCommand\u0027 and \u0027UpdateTenantCommand\u0027 are also consistent. The issue is that some commands are named with the action (Create, Update, Delete) while others might be named differently (e.g., \u0027RegisterUserCommand\u0027 vs \u0027CreateUserCommand\u0027). In this list, \u0027CreateUser\u0027 and \u0027CreateTenant\u0027 are consistent. But look at \u0027DeleteUser\u0027 vs \u0027DeleteTenant\u0027. The inconsistency is in the namespace/structure: \u0027CleanArchitecture.Domain.Commands.Users\u0027 vs \u0027CleanArchitecture.Domain.Commands.Tenants\u0027. This is actually consistent. Let\u0027s look deeper. \u0027LoginUserCommand\u0027 vs \u0027LoginTenantCommand\u0027? No, there is no LoginTenantCommand. There is \u0027CreateTenant\u0027 and \u0027UpdateTenant\u0027. The inconsistency is that \u0027User\u0027 has \u0027Create\u0027, \u0027Update\u0027, \u0027Delete\u0027, \u0027Login\u0027, \u0027ChangePassword\u0027 commands, while \u0027Tenant\u0027 has \u0027Create\u0027, \u0027Update\u0027, \u0027Delete\u0027 commands. The concept of \u0027Login\u0027 is missing for Tenant, but that\u0027s a feature gap, not a naming inconsistency. However, \u0027User\u0027 has \u0027ChangePassword\u0027 command, \u0027Tenant\u0027 does not. This is a feature gap. Let\u0027s look at \u0027IUser\u0027 vs \u0027ITenant\u0027 interfaces. \u0027IUser\u0027 exists. \u0027ITenant\u0027 is not listed but \u0027ITenantService\u0027 is. The interface for User is \u0027IUser\u0027, for Tenant it is \u0027ITenantService\u0027 or \u0027ITenantRepository\u0027? No, \u0027ITenant\u0027 is not listed. \u0027IUser\u0027 is an interface. \u0027ITenant\u0027 is not. This is an inconsistency in interface naming for domain entities.:  (symbols: CleanArchitecture.Domain.Commands.Users.CreateUser.CreateUserCommand, CleanArchitecture.Domain.Commands.Tenants.CreateTenant.CreateTenantCommand)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"8f56f94b23b2ba5b1c4496d5ccf38782ea5e4ee77f9dcdcad8043a1c360bea18"}},{"ruleId":"D21","level":"note","message":{"text":"Inconsistent naming for User-related interfaces and classes. \u0027IUser\u0027 is an interface, but there is no \u0027ITenant\u0027 interface listed, only \u0027ITenantService\u0027 and \u0027ITenantRepository\u0027 (implied or missing). The domain entity is \u0027User\u0027, the interface is \u0027IUser\u0027. For Tenant, the entity is \u0027Tenant\u0027, but the interface is \u0027ITenantService\u0027 (application layer) or \u0027ITenantRepository\u0027 (infrastructure). The domain layer should have \u0027ITenant\u0027 if it has \u0027IUser\u0027.: Add \u0027ITenant\u0027 interface in the domain layer to match \u0027IUser\u0027. (symbols: CleanArchitecture.Domain.Interfaces.IUser, CleanArchitecture.Domain.Entities.User)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"2c7a17ce235745e9d5df88df7018dbe5a655c43db47ae73091227f657a22e0ed"}},{"ruleId":"D23","level":"note","message":{"text":"Bounded contexts not declared: At 4518 LoC across 14 projects the codebase is large and multi-module, so explicit bounded contexts are needed. Name this codebase\u0027s bounded contexts (\u22652 module groups, e.g. per subsystem) so cross-boundary type coupling can be assessed. Declare them in \u0060.codehealth/config.yaml\u0060 at the repository root (create it if absent), mapping each context name to the module-path or namespace prefixes that belong to it \u2014 e.g. \u0060architecture:\u0060 \u2192 \u0060contexts:\u0060 \u2192 \u0060Billing: [\u0022src/billing\u0022, \u0022Acme.Billing\u0022]\u0060, \u0060Catalog: [\u0022src/catalog\u0022, \u0022Acme.Catalog\u0022]\u0060."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"1c7e276c9c682731f01819ed5378b90ca320cde1b583c90920172911598362b3"}},{"ruleId":"D24","level":"note","message":{"text":"redundant comment: \u0022Used by json deserializer\u0022 \u2014 delete - \u0027used by\u0027 restates the ctor\u0027s role"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"CleanArchitecture.Application/ViewModels/PagedResult.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"912abb14891d3f2c579f7eb14e1cdea4e9b17278cb33b5192c59534cfed22998"}},{"ruleId":"D28","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"2515262208b62d366f572ac413daefd1aea1392aa964aca0947eb3c11e5b5f6d"}},{"ruleId":"D28","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d2ceee0d23a76b1758ff4595408fad8f2c002947ad0a8aa372856abb5f595a39"}},{"ruleId":"D28","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3cdfd7beb31b791ae18dcb425e21eb157c842e7bbcd522cc330573c1a6538db1"}},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d5b8f11381d61a58459ffc7c595fd52d09c03c711894a63a9578043d2338412b"},"taxa":[{"id":"CWE-829","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"bddbca9c804db274cab60d4e7683499ab56a35eafecf2d57c041bec73838e45c"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"453bd1e22a2ed89ee0baf797a2bfbadd7f419ff8fc2da44585ad843c68d731c1"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"8245ecffab7fc3a27c0a2ba18983e425d52a371f08b0a870dc4705a6f646e964"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a2b1088964df59ea05c57ba88b3bd0f344f7fb8bd4f18db519facc4a96cfc29a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4d62ca29dcb9c846267936068dbc3043531ebf7b901d69562fd500fda4b4c5ee"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a850392a86546a181b043f3cbdea854900be3a5bb6d66d4696b5d16bfe3b10dd"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f4bb6bdeb2447145f95cd21c18f63a1ddb054cc47f60ec9c33c716c1f42f1121"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"bf8b5968d09240cda3b1fcfd8d774ebcf770f66854dd752a227770bdc372950a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b3c80101ed238d8986e67f79db0691b563e1d800905c49296ae27ef363535c45"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"1a698e192b9ddfa4f8fc85df91c58e7fc6c700775f177676d7472360fe0b391b"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"99322454488500b455beade7272267dfa0e5ec82e682896d4d87cc6ee3063e1e"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"36d920e5c19412bea921dacd31ff3eebbf3c029ce52d47f77f6afdec7e5d69be"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"89a7e19d349579c5ed5c834d23c4fa8e430e4cea50d3098a361539964b626962"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"53248bc59dcfcb108c1a7162a2f2c5d848977891b90a39be845174a948f0486c"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"322dfedfe502b954e2a29f31b8226d18b7d78eaaecbee84f90d5853b3177f953"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"583ccbebced692bd9e0430955fe6f2985c84cfded3d1f4abd8e428e09422c73c"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"64a3496f1223ab70c179f6905c3d555fd2ae50fc113c446fec97029828701d89"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"875d5b5c886ae42390e0219f2ea8be0a7e98582137939ac11ceae62cd1f451b1"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e7101b2c07798eb43a4d9b69be0f632aaf501f05f68746ae6f6f25e2700e5a0d"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"042058d957cd0021c8d79bbc83c21f465ee3b33125443b1eaf2437ad01188fec"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"44fd4aceef9a2c6b311a23180263f5c4b067d26ede3cf6873a83b60008a6c5a6"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"47d380a2627f141d608e541516ccd97c2a8b322c9ed67e6d22959f343803865c"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c7dc0e6d6191301d56aff1856f26515ecc8e58a305695827d6e9592cb2f6f76d"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7bf87a80a396f654a7013ed96159f6ca95330f0f9ad1b261e94700f296f08a6c"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"17df691bcec51a35a9e34e66a9e348c2a79e0ea35a3093cf4fc7b64a6d8f0a77"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"232526e51ccc0bf9ff8267d90534161f3528ad85581672f0d670037239eac468"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"dc808bb3a53db34d256527d3d39e8cc4bff9afdd1f79c1cd484a5c27bdd1a4ce"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b8ef127ba62dcf31e079a1ee0f8d2ffdfc288d7913c0d81a41e410f96c3158cb"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a8b744797e7311e0706c205d8828838811d9dacc81737623c6f4aefe7385a86a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"bf316118ebf549747fa8fc9ccce4271e3ef9ab61a5c10bd82c160ff28c127899"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4435bebea452d4c509cc62b05f0bc37c5ddf347f7887aa7af4c3e4ca92b98d3d"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ed0d8c4da10f5148d3c49e030de9030f74360ca2ec872ed1cfe7fad4cac545a7"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"bc60239a9104a8df44b640d9998054cd65fcccdbaafffbd33bcef0bdeb4b4b6b"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a6be09e9787ad243b1482d6ec463da0bfdb863a1c35976a68f1be4e8c3b7fb50"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"dca69886cadc7ec6c24d390e8474f06c3d1ff7c9f3f91bd86383b5c2c760e47d"},"taxa":[{"id":"CWE-347","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"78a89da19b4faf891de904721c964c9eedb6e8c8688cf48a10f4d811394567b4"},"taxa":[{"id":"CWE-732","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"40b75be4f2e0db3c2752faba80a854733a0611c8499dbe65b9cc4fa84280e825"},"taxa":[{"id":"CWE-732","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"60aa6ab8284229561519b59e53b70a089a21262dd803426d3cd0dde2ffcd52e3"},"taxa":[{"id":"CWE-732","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5fb585a91492413c8025db40f1f8d5e99d07929306c936e2ce5c61def892dd11"},"taxa":[{"id":"CWE-732","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"8c903c1524515fabc4666b228a26434749912c115d72996c61a7b1384bbca68e"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6892cb0b25ab7acdf94068185b03f8c34dc4caa310dbe4c4b2c359bad687eb74"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e7bc07939022d263e75f364003d75552b4d48654a91fb2533b641fc588bd6f2f"}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d025ff5d91b2054114c950ef46e04a422bf4f52e395f8d84330e6cb432fc7025"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c397ba965f1900fa363039b3519c012498a2ae9603ed7f1f9ee8d39e2e67b6a8"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9b9e21417f1c63fc48a158bc02b204948b87cda8e53dbec84ea6c53c663ba963"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"40ff06e66d6724bcc4cf06d3706590becbf5ece53ffa5b9d75eddb669b0246a9"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"37ed670bb9f73475505c7165455bc63d1596a758ad44929641df5b55d3fc659f"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b4097c108fd86e26962bda9b82d197723124a459f2e46c881e96133e0024694d"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"200992d88af53a50b840c58bc40e77253b9fdf80e41d4f9db45f778a6c78f78d"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d58ef9f80cf6bf28f8b9f6a8e6d94b3427ff240889753accc723f601c69f09ff"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5b7a4a85b08f37c73b1dfe6a8feaaec6e5f15beb53be4b60723d5ca9e316eb77"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"cb765e324d221140b182b6d62d04961c7c4899de820f07cc0096d4604e1eb884"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"437b1bb603ed9f1970dcfeeefc3230042d08bdda3f3b593278ae1c9735228ea6"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a5b0f1c862b0b660662b58a5da4d0d3b95582a9ba0f83202152b6d2a05326994"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"77d630a58e83450fd408860819bf69a832a5000e687a52258a51180fb430ab6b"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ebaba6c08c5262c8636d36759560dfa7b1aa325e006eea4f6bff278ba94eec2b"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"cf94e866abed153c544d8a36aae251ddbe8f19376e0ea9190a2c7c29a8039c67"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6a02f496acd78c648222f8b3ca8e008f17961341e2823777343919212cea9060"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7ec94af3fd8d7a4d006c4bf56f1685544e4ff63199a6b2cc5999b40cbcee8d14"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"135fc44631540bfa014b4cab70173f870325a84616058fda0a4c7484d38f500c"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"24d7dd924de6e1eb23ef94072d987be627db3b5dc47063cd4c23203c5d15561d"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"334a72d16f3b390a1585c5bfd86e0a6250d1118268994de2fe34647566a8339f"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ec0a8a0c29aa935538cf669d043774075b14954c6cabb171ad87f822c652f365"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7596568f0be5a4354009a243037b73d2cead8ec4cd63dc857ae9ef1d9bdb56ec"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b4e920685ad196030aca53ad9a088b79706fdb20389b515658810b2d43ab80a9"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"023dc57b90672d078606da4cb2cc2d00086e64754fac79d60243fe273fe6c83b"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d4a11ae7d3557c98856c7ca867d58941e5367c810543436395bc58b6f8cfe1be"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"41499b7277d99fae60d5f191e9fd2cff938319b950855f225b554c44f4eef15f"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d2da747e814859215289e3255793b67ca354354a5e1d7b696ad1b3da067fb51c"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c3bc3b018782c459d1ec6bc77e4a9aaf7165b0d6e04f77a05a0855e0c26830ca"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b8b26ca990a8ab593605b170c075e322c163d6ad09691c9c17742bf98c87dc6f"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9919b5275e457e473a6ba5b2b0619e831eb9ebcf02463e5dea3543cfa4159f3c"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b51fdbe0a678f93471a2f4cdce3b5345b027330a3b72aa89e0c13a067655c1e9"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f64ef5f0e43cda52f2c03ac912c9115d941266bb99fcbe37abd5c718ad69cd90"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b4d5f3c2ece507edb0debe108d25af130f3f711d7b45a6fa5521f8e36ad4e453"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"eb9e1d5e29c683cd1e8b033e4671217a3dda0bf034f44d1fc669eac38ae423ce"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f6f81b41b1a27aa655dad0083968a4707af0a2a27f308efa37fe0a2810babfe1"}},{"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":"9e18f3986ad7c6c039810640a7c635d73da0bad57b5cea012e80e8abc6c7b51b"}},{"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":"9dc0c3df93e0e513afa5d226466b238fdc4c5f142c7e124cc18a70ac55ebbda3"}},{"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":"2753e550648ef5bdcb187e803c14f17e52aaa83d538e850b561640109dd0ad77"}},{"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":"dda149de5be7a59219e4158dcc882183be3964af302c639d5f2e9f19b7eca6b4"}},{"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":"742ec1ecf35b7a6d61e2146e63971405b6b4d47992ad66dac3117eb609f9692e"}},{"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":"9cbe38a839106281fdc58379bb6582f4002f4a46417a756fbf85fdeac07d4fa3"}},{"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":"ca1025f02dc9f2e09ea467704ea6cf440e53a2e54004a5a98a062f3c26e6b17f"}},{"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":"3541fd8270ebf55086c22bdf1655df202ed464ffeb8420c7f7970f9525ec303f"}},{"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":"defc24f107f7daed93bfcacfeb185a38e84460ba635890066579b132104188d1"}},{"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":"5bf8e8e240dba5d79228db08ff79019e89812308d69a78cff4ec7c1a9c9bb180"}},{"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":"58155afc6165ffa8f64fc98e203e773134caeddfb99b0b9d1e7700b86d7c08b6"}},{"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":"9743228406fed8f973f87f566de5e65b98d945f21f8c07d7638d1444573fc48c"}},{"ruleId":"D34","level":"note","message":{"text":"Further orphaned files (smaller): 3 of 16 analysed file(s) have no living knowledge left \u2014 their last meaningful change has decayed away, so if one breaks, no one currently understands it (counted over production source files of roughly 100 lines or more, excluding tests, vendored, generated and example/demo trees, largest first). None is large enough to earn a read-through of its own, so this row stands in for the per-file rows rather than raising one each \u2014 largest first: CleanArchitecture.Domain/Commands/Users/LoginUser/LoginUserCommandHandler.cs, CleanArchitecture.Api/Extensions/ServiceCollectionExtension.cs, CleanArchitecture.Domain/ApiUser.cs. 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":"D36","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"90f83b4fa27db32740afe9540c905f3c0499caed87f61049a8a903ecc95b41c3"}},{"ruleId":"D36","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"0752d0df7434000fcabf1048e2de30a7a1a8b982b3db9a19898c4dec199856b4"}},{"ruleId":"D40","level":"note","message":{"text":"No network policy: No Kubernetes NetworkPolicy (or Cilium policy) found. Without one, every pod can talk to every other pod and reach out to the internet by default. Add a default-deny policy and open only the flows you need."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"295828650a2aaa1b03ae9b32ae6843a0c38011e5a70b1926442c4fa7187de5f0"}},{"ruleId":"D41","level":"note","message":{"text":"No seccomp profile: Workloads do not set a seccomp profile (RuntimeDefault or a Localhost profile). Seccomp blocks the syscalls a container never needs, shrinking the kernel attack surface a container escape would use."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"3f418e9f76c3ac90484e0e94a454bfe9b08e914e1cdd218e1fc9e3b261a3bf6e"}},{"ruleId":"D41","level":"note","message":{"text":"No AppArmor/SELinux confinement: Workloads declare no AppArmor or SELinux profile. A mandatory-access-control profile confines what a compromised container can touch on the host, complementing seccomp\u0027s syscall filter."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"e83fbc31033373d6c51983ed230eb4ba61f7775ed02afb30f5fc1840bde01d4f"}}],"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-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-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-347","guid":"1375fd68-0c05-cd5c-b04b-b568d808cfa1","name":"CWE-347","shortDescription":{"text":"CWE-347"},"helpUri":"https://cwe.mitre.org/data/definitions/347.html"},{"id":"CWE-353","guid":"09d7e902-d4ee-f05d-ae6c-0a1554d0c18f","name":"CWE-353","shortDescription":{"text":"CWE-353"},"helpUri":"https://cwe.mitre.org/data/definitions/353.html"},{"id":"CWE-494","guid":"b8a65e0d-e459-4a55-a931-fc1136482375","name":"Download of Code Without Integrity Check","shortDescription":{"text":"Download of Code Without Integrity Check"},"helpUri":"https://cwe.mitre.org/data/definitions/494.html"},{"id":"CWE-732","guid":"1da27e8f-b330-7650-ab63-bd61953eae5d","name":"Incorrect Permission Assignment for Critical Resource","shortDescription":{"text":"Incorrect Permission Assignment for Critical Resource"},"helpUri":"https://cwe.mitre.org/data/definitions/732.html"},{"id":"CWE-77","guid":"332c8ade-6612-9f56-a06b-d8d90b1a8750","name":"Command Injection","shortDescription":{"text":"Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/77.html"},{"id":"CWE-78","guid":"2e31ceaf-c7ae-2e5e-9661-cfb1362789cf","name":"OS Command Injection","shortDescription":{"text":"OS Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/78.html"},{"id":"CWE-79","guid":"fd45580b-e8c4-fc5e-8c2f-aa8fab0b4dbf","name":"Cross-site Scripting (XSS)","shortDescription":{"text":"Cross-site Scripting (XSS)"},"helpUri":"https://cwe.mitre.org/data/definitions/79.html"},{"id":"CWE-798","guid":"5e8f057d-fee3-995a-a0cb-9fc5b0d174d1","name":"Use of Hard-coded Credentials","shortDescription":{"text":"Use of Hard-coded Credentials"},"helpUri":"https://cwe.mitre.org/data/definitions/798.html"},{"id":"CWE-829","guid":"13c33925-97fb-5a5e-b40c-56d328b8a4d7","name":"CWE-829","shortDescription":{"text":"CWE-829"},"helpUri":"https://cwe.mitre.org/data/definitions/829.html"},{"id":"CWE-89","guid":"6d08fdad-37eb-c150-bbf0-d7d946863407","name":"SQL Injection","shortDescription":{"text":"SQL Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/89.html"},{"id":"CWE-937","guid":"16f316ae-415c-b354-a59b-1f7905f756e9","name":"Using Components with Known Vulnerabilities","shortDescription":{"text":"Using Components with Known Vulnerabilities"},"helpUri":"https://cwe.mitre.org/data/definitions/937.html"},{"id":"CWE-94","guid":"75e7f50c-6c2f-dd52-bf40-bf6c52b861fd","name":"Code Injection","shortDescription":{"text":"Code Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/94.html"}]}],"properties":{"codehealthPublication":{"public":true,"notice":"This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings \u2014 which rule fired, in which file, on which line, and how to fix it \u2014 are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.","securityFindingsRedacted":96,"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."]}]}