{"$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"]}]},{"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":"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"]}]},{"id":"D29","name":"Static Analysis (SAST)","shortDescription":{"text":"Static Analysis (SAST)"},"helpUri":"https://codehealth.canine.dev/dimensions/D29"},{"id":"D31","name":"IaC \u0026 Container Security","shortDescription":{"text":"IaC \u0026 Container Security"},"helpUri":"https://codehealth.canine.dev/dimensions/D31"},{"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"]}]}]}},"results":[{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (54 lines \u00D7 3): Workshops/IntroductionToEventSourcing/09-ApplicationLogic.EventStoreDB/Mixed/ShoppingCarts/Api.cs:17-70 | Workshops/IntroductionToEventSourcing/11-OptimisticConcurrency.EventStoreDB/Mixed/ShoppingCarts/Api.cs:17-70 | Workshops/IntroductionToEventSourcing/Solved/09-ApplicationLogic.EventStoreDB/Mixed/ShoppingCarts/Api.cs:17-70"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/IntroductionToEventSourcing/09-ApplicationLogic.EventStoreDB/Mixed/ShoppingCarts/Api.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"1965fc10e45ae06d197305e313ef8931c6e3808225d35a71ee56c783db901743"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (54 lines \u00D7 2): Workshops/IntroductionToEventSourcing/10-OptimisticConcurrency.Marten/Mixed/ShoppingCarts/Api.cs:20-73 | Workshops/IntroductionToEventSourcing/10-OptimisticConcurrency.Marten/Mutable/ShoppingCarts/Api.cs:20-73"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/IntroductionToEventSourcing/10-OptimisticConcurrency.Marten/Mixed/ShoppingCarts/Api.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"22f2091013465afbb43e2333be0d24cc4b7da25eea2755c43f8c364e5cd1d195"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (52 lines \u00D7 2): Workshops/IntroductionToEventSourcing/08-ApplicationLogic.Marten/Mixed/ShoppingCarts/Api.cs:18-69 | Workshops/IntroductionToEventSourcing/Solved/08-ApplicationLogic.Marten/Mixed/ShoppingCarts/Api.cs:18-69"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/IntroductionToEventSourcing/08-ApplicationLogic.Marten/Mixed/ShoppingCarts/Api.cs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"cad018804d37222ec1d4cc185f6f8875e2278de8d4f405bc3b9d9f0d37e5f4d6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (51 lines \u00D7 3): Workshops/IntroductionToEventSourcing/09-ApplicationLogic.EventStoreDB/Mutable/ShoppingCarts/Api.cs:18-68 | Workshops/IntroductionToEventSourcing/11-OptimisticConcurrency.EventStoreDB/Mutable/ShoppingCarts/Api.cs:18-68 | Workshops/IntroductionToEventSourcing/Solved/09-ApplicationLogic.EventStoreDB/Mutable/ShoppingCarts/Api.cs:18-68"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/IntroductionToEventSourcing/09-ApplicationLogic.EventStoreDB/Mutable/ShoppingCarts/Api.cs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"4819c16d2c78f927b731dc7132a38678c98929f683c10fcd0f8f22eafac8db61"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (51 lines \u00D7 2): Workshops/IntroductionToEventSourcing/08-ApplicationLogic.Marten/Mutable/ShoppingCarts/Api.cs:19-69 | Workshops/IntroductionToEventSourcing/Solved/08-ApplicationLogic.Marten/Mutable/ShoppingCarts/Api.cs:19-69"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/IntroductionToEventSourcing/08-ApplicationLogic.Marten/Mutable/ShoppingCarts/Api.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"6080027519f61e3299956ed23dca0b2fd4035190ddcbc5967d837509a8032f61"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (48 lines \u00D7 2): Workshops/IntroductionToEventSourcing/08-ApplicationLogic.Marten/Immutable/ShoppingCarts/ShoppingCart.cs:70-117 | Workshops/IntroductionToEventSourcing/Solved/08-ApplicationLogic.Marten/Immutable/ShoppingCarts/ShoppingCart.cs:70-117"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/IntroductionToEventSourcing/08-ApplicationLogic.Marten/Immutable/ShoppingCarts/ShoppingCart.cs"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c3d8db5fd748c55f1b4f6be86298807db5dda01be7624b02b2a50cd27fe78d8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (48 lines \u00D7 2): Workshops/IntroductionToEventSourcing/09-ApplicationLogic.EventStoreDB/Immutable/ShoppingCarts/ShoppingCart.cs:70-117 | Workshops/IntroductionToEventSourcing/Solved/09-ApplicationLogic.EventStoreDB/Immutable/ShoppingCarts/ShoppingCart.cs:70-117"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/IntroductionToEventSourcing/09-ApplicationLogic.EventStoreDB/Immutable/ShoppingCarts/ShoppingCart.cs"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"358d72841ade86317134c568c301dd72d290f42ad9135a88884e543ea13c2641"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (48 lines \u00D7 2): Workshops/IntroductionToEventSourcing/10-OptimisticConcurrency.Marten/Immutable/ShoppingCarts/ShoppingCart.cs:70-117 | Workshops/IntroductionToEventSourcing/Solved/10-OptimisticConcurrency.Marten/Immutable/ShoppingCarts/ShoppingCart.cs:73-120"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/IntroductionToEventSourcing/10-OptimisticConcurrency.Marten/Immutable/ShoppingCarts/ShoppingCart.cs"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca58f4a587b8005cc4e6fa9c7b2174f832cac2660f2020b86008cc1dc14689f5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (48 lines \u00D7 2): Workshops/IntroductionToEventSourcing/11-OptimisticConcurrency.EventStoreDB/Immutable/ShoppingCarts/ShoppingCart.cs:70-117 | Workshops/IntroductionToEventSourcing/Solved/11-OptimisticConcurrency.EventStoreDB/Immutable/ShoppingCarts/ShoppingCart.cs:70-117"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/IntroductionToEventSourcing/11-OptimisticConcurrency.EventStoreDB/Immutable/ShoppingCarts/ShoppingCart.cs"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"d870f48d5a5d9c940e910ce03c4b95da7f2ad7c09972d76a351f80be9f4aafc0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (36 lines \u00D7 3): Workshops/IntroductionToEventSourcing/09-ApplicationLogic.EventStoreDB/Immutable/ShoppingCarts/Api.cs:21-56 | Workshops/IntroductionToEventSourcing/11-OptimisticConcurrency.EventStoreDB/Immutable/ShoppingCarts/Api.cs:21-56 | Workshops/IntroductionToEventSourcing/Solved/09-ApplicationLogic.EventStoreDB/Immutable/ShoppingCarts/Api.cs:21-56"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/IntroductionToEventSourcing/09-ApplicationLogic.EventStoreDB/Immutable/ShoppingCarts/Api.cs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"e784e9406299f96533ebdc11c285e60bc3471ce6da140c298786599492640f9b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (35 lines \u00D7 2): Workshops/IntroductionToEventSourcing/08-ApplicationLogic.Marten/Immutable/ShoppingCarts/Api.cs:23-57 | Workshops/IntroductionToEventSourcing/Solved/08-ApplicationLogic.Marten/Immutable/ShoppingCarts/Api.cs:22-56"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/IntroductionToEventSourcing/08-ApplicationLogic.Marten/Immutable/ShoppingCarts/Api.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a8303954dc0b318725940e8896baac19683ea6371268dcb010892efe6feb313"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): Sample/Helpdesk.Wolverine/Helpdesk.Api/Core/Kafka/KafkaProducer.cs:42-61 | Sample/Helpdesk/Helpdesk.Api/Core/Kafka/KafkaProducer.cs:44-63"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Sample/Helpdesk.Wolverine/Helpdesk.Api/Core/Kafka/KafkaProducer.cs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e297c1f8d910ae6e0443d1d9d556f5ad6f762b4184185dd04962b8d1b78f473"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 4): Sample/EventStoreDB/ECommerce/Carts/Carts/ShoppingCarts/GettingCartById/ShoppingCartDetails.cs:28-46 | Sample/EventStoreDB/ECommerce/Carts/Carts/ShoppingCarts/GettingCartHistory/CartHistory.cs:19-37 | Sample/EventStoreDB/ECommerce/Carts/Carts/ShoppingCarts/GettingCarts/ShoppingCartShortInfo.cs:22-40 | Sample/EventStoreDB/ECommerce/Carts/Carts/ShoppingCarts/ShoppingCart.cs:30-48"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Sample/EventStoreDB/ECommerce/Carts/Carts/ShoppingCarts/GettingCartById/ShoppingCartDetails.cs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7c1503416a22e847cb1b6442385ed80a59554540525979d30a97df885138a56"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 4): Workshops/IntroductionToEventSourcing/10-OptimisticConcurrency.Marten/Mixed/ShoppingCarts/MixedShoppingCart.cs:57-75 | Workshops/IntroductionToEventSourcing/11-OptimisticConcurrency.EventStoreDB/Mixed/ShoppingCarts/ShoppingCart.cs:57-75 | Workshops/IntroductionToEventSourcing/Solved/10-OptimisticConcurrency.Marten/Mixed/ShoppingCarts/MixedShoppingCart.cs:59-77 | Workshops/IntroductionToEventSourcing/Solved/11-OptimisticConcurrency.EventStoreDB/Mixed/ShoppingCarts/ShoppingCart.cs:57-75"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/IntroductionToEventSourcing/10-OptimisticConcurrency.Marten/Mixed/ShoppingCarts/MixedShoppingCart.cs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffa5fecc9aa4a0dc51fc4c7fcc987a07574f4b6356f5874ef4a59146333725da"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 4): Workshops/IntroductionToEventSourcing/10-OptimisticConcurrency.Marten/Mutable/ShoppingCarts/MutableShoppingCart.cs:57-75 | Workshops/IntroductionToEventSourcing/11-OptimisticConcurrency.EventStoreDB/Mutable/ShoppingCarts/ShoppingCart.cs:57-75 | Workshops/IntroductionToEventSourcing/Solved/10-OptimisticConcurrency.Marten/Mutable/ShoppingCarts/MutableShoppingCart.cs:59-77 | Workshops/IntroductionToEventSourcing/Solved/11-OptimisticConcurrency.EventStoreDB/Mutable/ShoppingCarts/ShoppingCart.cs:57-75"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/IntroductionToEventSourcing/10-OptimisticConcurrency.Marten/Mutable/ShoppingCarts/MutableShoppingCart.cs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"37137d28e9f7e9f344d0782f9a3deb69180784ca008f9009eecc28c385d123d0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): Sample/EventStoreDB/ECommerce/Carts/Carts/ShoppingCarts/GettingCartById/ShoppingCartDetails.cs:78-96 | Sample/EventStoreDB/ECommerce/Carts/Carts/ShoppingCarts/ShoppingCart.cs:128-146"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Sample/EventStoreDB/ECommerce/Carts/Carts/ShoppingCarts/GettingCartById/ShoppingCartDetails.cs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"030a422d79d1ff4e6628b59eac0182dc6022ea8d8883d14cd3bbcdf068dfb850"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): Workshops/IntroductionToEventSourcing/08-ApplicationLogic.Marten/Mixed/ShoppingCarts/MixedShoppingCart.cs:57-75 | Workshops/IntroductionToEventSourcing/Solved/08-ApplicationLogic.Marten/Mixed/ShoppingCarts/MixedShoppingCart.cs:57-75"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/IntroductionToEventSourcing/08-ApplicationLogic.Marten/Mixed/ShoppingCarts/MixedShoppingCart.cs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"b41b850cf69bc00000a02d6ed1650cacf183185c36ae472ca9277e59f66b714b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): Workshops/IntroductionToEventSourcing/08-ApplicationLogic.Marten/Mutable/ShoppingCarts/MutableShoppingCart.cs:57-75 | Workshops/IntroductionToEventSourcing/Solved/08-ApplicationLogic.Marten/Mutable/ShoppingCarts/MutableShoppingCart.cs:57-75"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/IntroductionToEventSourcing/08-ApplicationLogic.Marten/Mutable/ShoppingCarts/MutableShoppingCart.cs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"bed720929a29dde938ab4bff470d287e1beed4f89ea37943729e977a555344d1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): Workshops/IntroductionToEventSourcing/09-ApplicationLogic.EventStoreDB/Mixed/ShoppingCarts/ShoppingCart.cs:57-75 | Workshops/IntroductionToEventSourcing/Solved/09-ApplicationLogic.EventStoreDB/Mixed/ShoppingCarts/ShoppingCart.cs:57-75"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/IntroductionToEventSourcing/09-ApplicationLogic.EventStoreDB/Mixed/ShoppingCarts/ShoppingCart.cs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"225723ac421e6e943ea881e56d3619e66d3e40f3c57eb32e75471493f66819d6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): Workshops/IntroductionToEventSourcing/09-ApplicationLogic.EventStoreDB/Mutable/ShoppingCarts/ShoppingCart.cs:57-75 | Workshops/IntroductionToEventSourcing/Solved/09-ApplicationLogic.EventStoreDB/Mutable/ShoppingCarts/ShoppingCart.cs:57-75"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/IntroductionToEventSourcing/09-ApplicationLogic.EventStoreDB/Mutable/ShoppingCarts/ShoppingCart.cs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9cc528c912fd1190a650e97b1e3876e4b6d76acf86e268903e70d55b7469a57"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): Sample/CRUDToCQRS/08-SlicedEndpoints/ECommerce.Domain/Products/UpdatingProduct/Route.cs:24-38 | Sample/CRUDToCQRS/09-MultipleModules/ECommerce.Domain/Products/UpdatingProduct/Route.cs:24-38"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Sample/CRUDToCQRS/08-SlicedEndpoints/ECommerce.Domain/Products/UpdatingProduct/Route.cs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6e70dfe851ddfd7567cedb1b8eb46a60f3d6e5133a51b5ad918cbb1eabecfea"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): Workshops/IntroductionToEventSourcing/11-OptimisticConcurrency.EventStoreDB/Core/EventStoreDB/EventStoreDBExtensions.cs:34-47 | Workshops/IntroductionToEventSourcing/Solved/09-ApplicationLogic.EventStoreDB/Core/EventStoreDB/EventStoreDBExtensions.cs:34-47"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/IntroductionToEventSourcing/11-OptimisticConcurrency.EventStoreDB/Core/EventStoreDB/EventStoreDBExtensions.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"092332d8fe0820c10ae0fe6aa5b746730b157a89eaeb1beab4a822a674e4daa8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 4): Workshops/IntroductionToEventSourcing/10-OptimisticConcurrency.Marten/Mixed/ShoppingCarts/MixedShoppingCart.cs:127-139 | Workshops/IntroductionToEventSourcing/11-OptimisticConcurrency.EventStoreDB/Mixed/ShoppingCarts/ShoppingCart.cs:127-139 | Workshops/IntroductionToEventSourcing/Solved/10-OptimisticConcurrency.Marten/Mixed/ShoppingCarts/MixedShoppingCart.cs:129-141 | Workshops/IntroductionToEventSourcing/Solved/11-OptimisticConcurrency.EventStoreDB/Mixed/ShoppingCarts/ShoppingCart.cs:127-139"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/IntroductionToEventSourcing/10-OptimisticConcurrency.Marten/Mixed/ShoppingCarts/MixedShoppingCart.cs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"2abfc0edf1bce29842aef9d92b7fffdad207a303e0887ba2b946af8305fdba12"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 4): Workshops/IntroductionToEventSourcing/10-OptimisticConcurrency.Marten/Mixed/ShoppingCarts/MixedShoppingCart.cs:168-180 | Workshops/IntroductionToEventSourcing/11-OptimisticConcurrency.EventStoreDB/Mixed/ShoppingCarts/ShoppingCart.cs:168-180 | Workshops/IntroductionToEventSourcing/Solved/10-OptimisticConcurrency.Marten/Mixed/ShoppingCarts/MixedShoppingCart.cs:170-182 | Workshops/IntroductionToEventSourcing/Solved/11-OptimisticConcurrency.EventStoreDB/Mixed/ShoppingCarts/ShoppingCart.cs:168-180"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/IntroductionToEventSourcing/10-OptimisticConcurrency.Marten/Mixed/ShoppingCarts/MixedShoppingCart.cs"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"2abfc0edf1bce29842aef9d92b7fffdad207a303e0887ba2b946af8305fdba12"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 4): Workshops/IntroductionToEventSourcing/10-OptimisticConcurrency.Marten/Mutable/ShoppingCarts/MutableShoppingCart.cs:167-179 | Workshops/IntroductionToEventSourcing/11-OptimisticConcurrency.EventStoreDB/Mutable/ShoppingCarts/ShoppingCart.cs:167-179 | Workshops/IntroductionToEventSourcing/Solved/10-OptimisticConcurrency.Marten/Mutable/ShoppingCarts/MutableShoppingCart.cs:169-181 | Workshops/IntroductionToEventSourcing/Solved/11-OptimisticConcurrency.EventStoreDB/Mutable/ShoppingCarts/ShoppingCart.cs:167-179"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/IntroductionToEventSourcing/10-OptimisticConcurrency.Marten/Mutable/ShoppingCarts/MutableShoppingCart.cs"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"76bed6d4dde0a3c734640d5f96d3388591f8a805b91a1be2e9cee2ac19453584"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): Workshops/IntroductionToEventSourcing/08-ApplicationLogic.Marten/Mixed/ShoppingCarts/MixedShoppingCart.cs:127-139 | Workshops/IntroductionToEventSourcing/Solved/08-ApplicationLogic.Marten/Mixed/ShoppingCarts/MixedShoppingCart.cs:127-139"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/IntroductionToEventSourcing/08-ApplicationLogic.Marten/Mixed/ShoppingCarts/MixedShoppingCart.cs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"8311ae1dfab1669212b925e0a765e2b0bf7c02ab7c238fb41c4480e816dd64f1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): Workshops/IntroductionToEventSourcing/08-ApplicationLogic.Marten/Mixed/ShoppingCarts/MixedShoppingCart.cs:168-180 | Workshops/IntroductionToEventSourcing/Solved/08-ApplicationLogic.Marten/Mixed/ShoppingCarts/MixedShoppingCart.cs:168-180"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/IntroductionToEventSourcing/08-ApplicationLogic.Marten/Mixed/ShoppingCarts/MixedShoppingCart.cs"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"8311ae1dfab1669212b925e0a765e2b0bf7c02ab7c238fb41c4480e816dd64f1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): Workshops/IntroductionToEventSourcing/08-ApplicationLogic.Marten/Mutable/ShoppingCarts/MutableShoppingCart.cs:167-179 | Workshops/IntroductionToEventSourcing/Solved/08-ApplicationLogic.Marten/Mutable/ShoppingCarts/MutableShoppingCart.cs:167-179"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/IntroductionToEventSourcing/08-ApplicationLogic.Marten/Mutable/ShoppingCarts/MutableShoppingCart.cs"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"e67c22455487f965a61c08b1d4670c8c154a32bb1abcdd760e232f2b6c318120"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): Workshops/IntroductionToEventSourcing/09-ApplicationLogic.EventStoreDB/Mixed/ShoppingCarts/ShoppingCart.cs:127-139 | Workshops/IntroductionToEventSourcing/Solved/09-ApplicationLogic.EventStoreDB/Mixed/ShoppingCarts/ShoppingCart.cs:127-139"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/IntroductionToEventSourcing/09-ApplicationLogic.EventStoreDB/Mixed/ShoppingCarts/ShoppingCart.cs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"eca0a158e617ce6baf2906ea2099f80867c24fbef59c41efc5429c97f9e3ffd7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): Workshops/IntroductionToEventSourcing/09-ApplicationLogic.EventStoreDB/Mixed/ShoppingCarts/ShoppingCart.cs:168-180 | Workshops/IntroductionToEventSourcing/Solved/09-ApplicationLogic.EventStoreDB/Mixed/ShoppingCarts/ShoppingCart.cs:168-180"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/IntroductionToEventSourcing/09-ApplicationLogic.EventStoreDB/Mixed/ShoppingCarts/ShoppingCart.cs"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"eca0a158e617ce6baf2906ea2099f80867c24fbef59c41efc5429c97f9e3ffd7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): Workshops/IntroductionToEventSourcing/09-ApplicationLogic.EventStoreDB/Mutable/ShoppingCarts/ShoppingCart.cs:167-179 | Workshops/IntroductionToEventSourcing/Solved/09-ApplicationLogic.EventStoreDB/Mutable/ShoppingCarts/ShoppingCart.cs:167-179"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/IntroductionToEventSourcing/09-ApplicationLogic.EventStoreDB/Mutable/ShoppingCarts/ShoppingCart.cs"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb71823ce40eabdfebb3bed16f12f57c93aa90e4f67d0ce50f47288d393d4e3b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 4): Workshops/IntroductionToEventSourcing/08-ApplicationLogic.Marten/Immutable/ShoppingCarts/Configure.cs:19-29 | Workshops/IntroductionToEventSourcing/10-OptimisticConcurrency.Marten/Immutable/ShoppingCarts/Configure.cs:19-29 | Workshops/IntroductionToEventSourcing/Solved/08-ApplicationLogic.Marten/Immutable/ShoppingCarts/Configure.cs:19-29 | Workshops/IntroductionToEventSourcing/Solved/10-OptimisticConcurrency.Marten/Immutable/ShoppingCarts/Configure.cs:19-29"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/IntroductionToEventSourcing/08-ApplicationLogic.Marten/Immutable/ShoppingCarts/Configure.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"b250ffd45ec3fbdaefe715f8e0dd483626df6f40d2d27155bb241e807d3e81b6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 4): Workshops/IntroductionToEventSourcing/08-ApplicationLogic.Marten/Mixed/ShoppingCarts/Configure.cs:20-30 | Workshops/IntroductionToEventSourcing/10-OptimisticConcurrency.Marten/Mixed/ShoppingCarts/Configure.cs:20-30 | Workshops/IntroductionToEventSourcing/Solved/08-ApplicationLogic.Marten/Mixed/ShoppingCarts/Configure.cs:20-30 | Workshops/IntroductionToEventSourcing/Solved/10-OptimisticConcurrency.Marten/Mixed/ShoppingCarts/Configure.cs:20-30"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/IntroductionToEventSourcing/08-ApplicationLogic.Marten/Mixed/ShoppingCarts/Configure.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"99ae492d703aa84d37e848c6d12cffd9f1719fcb0285ab3d07bd595012362d45"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 4): Workshops/IntroductionToEventSourcing/08-ApplicationLogic.Marten/Mutable/ShoppingCarts/Configure.cs:20-30 | Workshops/IntroductionToEventSourcing/10-OptimisticConcurrency.Marten/Mutable/ShoppingCarts/Configure.cs:20-30 | Workshops/IntroductionToEventSourcing/Solved/08-ApplicationLogic.Marten/Mutable/ShoppingCarts/Configure.cs:20-30 | Workshops/IntroductionToEventSourcing/Solved/10-OptimisticConcurrency.Marten/Mutable/ShoppingCarts/Configure.cs:20-30"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/IntroductionToEventSourcing/08-ApplicationLogic.Marten/Mutable/ShoppingCarts/Configure.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"02a1968c22f6f30b9826c187a0d464177f8787b97a33f91528c6f227d9fd41ad"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Sample/Helpdesk.Wolverine/Helpdesk.Api/Incidents/GettingCustomerIncidentsSummary/IncidentSummary.cs:59-69 | Sample/Helpdesk/Helpdesk.Api/Incidents/GetCustomerIncidentsSummary/IncidentSummary.cs:60-70"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Sample/Helpdesk.Wolverine/Helpdesk.Api/Incidents/GettingCustomerIncidentsSummary/IncidentSummary.cs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"20fb4cc941400f4fb3f1e917d405fe3e7cf43ec36f9e56e1203d163814d4ce84"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Workshops/IntroductionToEventSourcing/11-OptimisticConcurrency.EventStoreDB/Core/EventStoreDB/EventStoreDBExtensions.cs:103-113 | Workshops/IntroductionToEventSourcing/Solved/09-ApplicationLogic.EventStoreDB/Core/EventStoreDB/EventStoreDBExtensions.cs:103-113"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/IntroductionToEventSourcing/11-OptimisticConcurrency.EventStoreDB/Core/EventStoreDB/EventStoreDBExtensions.cs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"78d25f694ff5ef9f47ae63ce99fa077106f56f9a625e6f16908bce4c512a2c05"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Sample/ECommerce/Carts/Carts/ShoppingCarts/GettingCartById/ShoppingCartDetails.cs:87-95 | Sample/ECommerce/Carts/Carts/ShoppingCarts/GettingCarts/ShoppingCartShortInfo.cs:50-58"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Sample/ECommerce/Carts/Carts/ShoppingCarts/GettingCartById/ShoppingCartDetails.cs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"5bc5408fbc721eae3ee0bcd9f8b0f7105a4d083c2f2e605582e40cce705802ee"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): Sample/CRUDToCQRS/01-CRUD/ECommerce/Model/ProductProfile.cs:9-15 | Sample/CRUDToCQRS/02-CRUDWithCQRS/ECommerce/Model/ProductProfile.cs:9-15 | Sample/CRUDToCQRS/03-DomainGrouping/ECommerce.Domain/Products/Config/ProductProfile.cs:10-16 | Sample/CRUDToCQRS/04-SlimmedDomain/ECommerce.Domain/Products/Config/ProductProfile.cs:10-16"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Sample/CRUDToCQRS/01-CRUD/ECommerce/Model/ProductProfile.cs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"c33c2a01aeac1a3f480689ce9678ee5f2781adae250a878c143967ead57aff39"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: Core.Serialization: Core.Serialization: abstractness 0.00, instability 0.00, distance 1.00 \u2014 zone of pain \u2014 concrete and heavily depended-on, so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"8bd7565d010562eee7e4907436c8ecbece6131d7d1b1b2d96a3af6655b448ab3"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: Core.WebApi: Core.WebApi: abstractness 0.00, instability 0.09, distance 0.91 \u2014 zone of pain \u2014 concrete and heavily depended-on, so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"a62ff9b264934547d20cfdb71c5b591bb4f10af0d3634534d4d686ee936847dc"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: Core.Marten: Core.Marten: abstractness 0.05, instability 0.06, distance 0.89 \u2014 zone of pain \u2014 concrete and heavily depended-on, so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"2a848eeab4767ed5d81303f5c74b5f5c138934af694187ed4e2088f31f0ebb2a"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: Core.Kafka: Core.Kafka: abstractness 0.00, instability 0.13, distance 0.87 \u2014 zone of pain \u2014 concrete and heavily depended-on, so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"5e418c80ff6a99cc733ad45e0226fac1cfefd72bd12b210dc8cae0fd0b6b810f"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: Core.EventStoreDB: Core.EventStoreDB: abstractness 0.10, instability 0.13, distance 0.76 \u2014 zone of pain \u2014 concrete and heavily depended-on, so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"e5a4d1277014b3299189f64f9471b2d15046d982efa2b081797fde6be087932d"}},{"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":"D10","level":"warning","message":{"text":"Skipped test: AddingAndUpdatingAggregate_ShouldCreateAndUpdateSnapshotAccordingly: Skipped \u2014 for now"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/BuildYourOwnEventStore/EventStoreBasics.Tests/Exercise10ProjectionsWithMarten.cs"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ab2b993b8216f7f6eeb777317d2e02edaf907308d099d92f0e6b907913abdfe"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Test1: Test method exercises code but verifies nothing \u2014 add an assertion."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Sample/decider/Decider.Tests/UnionTypesTests.cs"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8a01916532155fef3e78bcec8f101eec4d79e21a12b2152424326287301e05a"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): ForConfirmedReservation_ShouldFailWithInvalidOperation: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Sample/Tickets/Tickets.Tests/Reservations/CancellingReservation/CancelReservationTests.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"89e6ae7f8393b4ec66bfecd1a4e46ce24226d44512792a216e1dbf7e7a2906e9"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): ForCancelledReservation_ShouldFailWithInvalidOperation: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Sample/Tickets/Tickets.Tests/Reservations/CancellingReservation/CancelReservationTests.cs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"274d91db15a2185fe5e903368414050172e15c9ceb8c15c9ec7d87764e3fd364"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: GivenEvents_WhenInlineTransformationIsApplied_ThenReturnsSameNumberOfTransformedItems: Test method exercises code but verifies nothing \u2014 add an assertion."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Marten.Integration.Tests/Tenancy/TenancyPerSchema.cs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ba8c196dc53ad88027b096eee7a13d2c12ad845798ecae522fd389b4e95e212"}},{"ruleId":"D13","level":"error","message":{"text":"Leaked secret: hardcoded-credential: hardcoded-credential detected."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/IntroductionToEventSourcing/03-AppendingEvents.Marten/AppendingEvents.cs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b027e3bf463211797d841e70093619a117de129381f23eb86a8d42e4a4593df"}},{"ruleId":"D13","level":"error","message":{"text":"Leaked secret: hardcoded-credential: hardcoded-credential detected."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Sample/Helpdesk/Helpdesk.Api/appsettings.Production.json"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb40912d42b21b31943554e60dc0a11d08d87b6d461d72abae7066dd40dde0cb"}},{"ruleId":"D13","level":"error","message":{"text":"Leaked secret: hardcoded-credential: hardcoded-credential detected."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Sample/Helpdesk.Wolverine/Helpdesk.Api/appsettings.Production.json"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d9384a22c4ea84be9d4720e68416f9d27c594ef3eb32dec73fac3cf21a1dd6f"}},{"ruleId":"D13","level":"error","message":{"text":"Leaked secret: hardcoded-credential: hardcoded-credential detected."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Sample/ClosingTheBooks/PointOfSales.Api/appsettings.Production.json"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"0661a61e451bb1176a5b611d81afaf37b7c0b68ff22e324f0571b7e9cd0704dd"}},{"ruleId":"D13","level":"error","message":{"text":"Leaked secret: hardcoded-credential: hardcoded-credential detected."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/IntroductionToEventSourcing/Solved/03-AppendingEvents.Marten/AppendingEvents.cs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"a59580e9b6209e3c3059b717768051490b2b96193a85e8764528154dad69f18b"}},{"ruleId":"D13","level":"error","message":{"text":"Leaked secret: hardcoded-credential: hardcoded-credential detected."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Sample/EventStoreDB/Simple/ECommerce/Storage/ECommerceDbContext.cs"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c9b4898a2b10833d859eab914b198d32e6ce7738ecdff4372a035c40d6b9061"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #1: If anonymized user #1 becomes unavailable, 119 significant file(s) lose their only recent owner (largest: Workshops/IntroductionToEventSourcing/07-BusinessLogic.Slimmed/Mixed/ShoppingCart.cs). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"ad9d837dbec4972ad586bbc7a60bf865b151b794416754962c015d3b3b4dc6ad"}},{"ruleId":"D16","level":"note","message":{"text":"Further sole-owners (lower concentration): 1 other contributor(s) are each the sole owner of a small amount of code below the off-boarding threshold \u2014 folded into the bus-factor score and metrics (121 single-owned of 238 analysed files in total)."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6eac528f2429e724e1a97ed868f79eefbcf1888dab4af9a9e673429369bb5b2f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: How would you implement Dead-Letter Queue here? \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":"Core.EventStoreDB/Subscriptions/EventStoreDBSubscriptionToAll.cs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"797980dd084c55eccc4042283346f7d6e3b4c6867fa63b89be8fdc1329e3997a"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: //lol ^_^ - remove this hack when this GH issue is solved: https://github.com/dotnet/extensions/issues/2149#issuecomment-518709751 \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":"Core.Kafka/Consumers/KafkaConsumer.cs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4fa037f0be4beaf7dcbdba8d821e6601320f7bafd0f91fbc98c388e69cf27cc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: fix that! \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":"Core.Kafka/Consumers/KafkaConsumerConfig.cs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"124d555c21b621d99c2b10c6809834101ab336b82adf46b32c40b681b0b2c4d0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //  TODO:  you can also differentiate based on the exception \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":"Core.Marten/Subscriptions/MartenEventPublisher.cs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"a17c78bc480caef3db0edfe3ce9d1bc49b941a220a17f0ac08e33bc2631a122d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: Get rid of reflection! \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":"Core/Events/EventEnvelope.cs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"be58d9352a7fff44ae197d8a0082f3f0685544346b1bd51bededa8d39dda387a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Something has changed here in Marten v7 \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":"Marten.Integration.Tests/EventStore/Aggregate/Reaggregation.cs"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a4a958dd2762151dc2efa71f9f8edc9f881006f2b16bffff2ef4748c99483df"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Marten.Integration.Tests/EventStore/Aggregate/Reaggregation.cs"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"b664b167b1a65cf4ead576439f7ee876aa3a4129134479b4966afe702cef628a"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Marten.Integration.Tests/EventStore/Transformations/OneToOneEventTransformations.cs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1edac19e95481741b2bb6e23012cacef118e7e465c4a3278bd31a8c6120aa9a"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Marten.Integration.Tests/EventStore/Transformations/OneToOneEventTransformations.cs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1edac19e95481741b2bb6e23012cacef118e7e465c4a3278bd31a8c6120aa9a"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/BuildYourOwnEventStore/EventStoreBasics.Tests/Exercise10ProjectionsWithMarten.cs"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce55b0267480454dff7af49745e261d3fd33f3d19509b8550abcc54584a91a90"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 7 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Marten.Integration.Tests/EventStore/Transformations/OneToOneEventTransformations.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1edac19e95481741b2bb6e23012cacef118e7e465c4a3278bd31a8c6120aa9a"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 7 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Marten.Integration.Tests/EventStore/Transformations/OneToOneEventTransformations.cs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1edac19e95481741b2bb6e23012cacef118e7e465c4a3278bd31a8c6120aa9a"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Marten.Integration.Tests/EventStore/Transformations/OneToOneEventTransformations.cs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1edac19e95481741b2bb6e23012cacef118e7e465c4a3278bd31a8c6120aa9a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This should be handled internally by event bus, or this event should be stored in the outbox stream \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":"Sample/ECommerce/Carts/Carts/ShoppingCarts/FinalizingCart/ShoppingCartFinalized.cs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9297f3fe34fb76bda60969fdab99ce49dc67a09467727cc09ef148140d125e8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This should be handled internally by event bus, or this event should be stored in the outbox stream \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":"Sample/ECommerce/Payments/Payments/Payments/FailingPayment/PaymentFailed.cs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d50907e35be9703a7e7ee2a0973a8ab0203fa2d64c338689e56830caaf19155"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This should be handled internally by event bus, or this event should be stored in the outbox stream \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":"Sample/ECommerce/Payments/Payments/Payments/FailingPayment/PaymentFailed.cs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d50907e35be9703a7e7ee2a0973a8ab0203fa2d64c338689e56830caaf19155"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This should be handled internally by event bus, or this event should be stored in the outbox stream \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":"Sample/ECommerce/Payments/Payments/Payments/FinalizingPayment/PaymentFinalized.cs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"99d8f8d9ed9d30c3b912ecf6f9ad74b6283f35fb28163e8a56a5b18c2ecc1e5a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This should be handled internally by event bus, or this event should be stored in the outbox stream \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":"Sample/EventStoreDB/ECommerce/Carts/Carts/ShoppingCarts/FinalizingCart/ShoppingCartFinalized.cs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac50cd4c3a329796fedd8dc3994d54dcc1efb8b5e7de43035033632d6cfd7c2c"}},{"ruleId":"D17","level":"error","message":{"text":"EmptyCatchBlock: empty catch block"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Sample/ECommerce/ECommerce.AppHost/Containers/ParameterExtensions.cs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f3f280deccb7b42f64f3aaadd86fd63687f5b2fe42a92ba7518445e73a8e6d6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add here EF concurrency exception \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":"Sample/ECommerce/Shipments/Shipments.Api/Program.cs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"7992e64eaffc8566332a7b4cd75aead3ec1b8a25b7ec38ad8845581d7ae3ef84"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add optimistic concurrency here \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":"Sample/ECommerce/Shipments/Shipments.Api/Program.cs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"7992e64eaffc8566332a7b4cd75aead3ec1b8a25b7ec38ad8845581d7ae3ef84"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add optimistic concurrency here \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":"Sample/ECommerce/Shipments/Shipments.Api/Program.cs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"7992e64eaffc8566332a7b4cd75aead3ec1b8a25b7ec38ad8845581d7ae3ef84"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: metadata should be taken by event bus internally \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":"Sample/ECommerce/Shipments/Shipments/Packages/PackageService.cs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ba36b666e32f5c7b84ce1417bb31fdba4ee3d69c76da8e9e9b788c61a1aa173"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Sample/EventStoreDB/DataAnalytics/MarketBasketAnalytics.Api/Startup.cs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"99d6bb0d56c949c3fd5d3bd187c0243a0683e261c2acd187e1400704179ea89a"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Sample/EventStoreDB/Simple/ECommerce.Api.Tests/ApiTest.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a1eeba346c7446cd7fecc0211027df349cd0c688e8bdd7b1b3537f4dfca2010"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: you can also differentiate based on the exception \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":"Sample/Helpdesk.Wolverine/Helpdesk.Api/Core/Kafka/KafkaProducer.cs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3c324a860396c45d6eb8811b53c20434540174ac2e512a0b3ecdfe7c82ffc33"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: you can also differentiate based on the exception \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":"Sample/Helpdesk/Helpdesk.Api/Core/Kafka/KafkaProducer.cs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d2e69d1fd84a10a2001b58b0e262695cae40218a71164419ac0719a0e94b5b2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // (...) TODO \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":"Sample/MartenMeetsElastic/MartenMeetsElastic.Tests/ElasticsearchProjectionTests.cs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"efa6d129f23a29c57e47a761c83d9b5b65f1729defd1ec578c7325c9a52b1832"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: Add poly! \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":"Sample/MartenMeetsElastic/MartenMeetsElastic/Projections/ElasticsearchProjection.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e7cd4289e4ea7a6b17ca06815d79cb0ae7f150542c0f731d7f176f3549980a1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add here @event serialization \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":"Workshops/BuildYourOwnEventStore/03-CreateAppendEventFunction/EventStore.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a7e0791104db01f960c958b8908d0fd4fca6ebaa8d09aa2d9c786a0fab767ff"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add here @event serialization \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":"Workshops/BuildYourOwnEventStore/03-OptimisticConcurrency/EventStore.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff329c2b255f351145ed33c53370a9fe401e342bbe8ea0f0489fee135f50555b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add here getting event type name \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":"Workshops/BuildYourOwnEventStore/03-CreateAppendEventFunction/EventStore.cs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a7e0791104db01f960c958b8908d0fd4fca6ebaa8d09aa2d9c786a0fab767ff"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add here getting event type name \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":"Workshops/BuildYourOwnEventStore/03-OptimisticConcurrency/EventStore.cs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff329c2b255f351145ed33c53370a9fe401e342bbe8ea0f0489fee135f50555b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add here getting stream type \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":"Workshops/BuildYourOwnEventStore/03-CreateAppendEventFunction/EventStore.cs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a7e0791104db01f960c958b8908d0fd4fca6ebaa8d09aa2d9c786a0fab767ff"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add here getting stream type \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":"Workshops/BuildYourOwnEventStore/03-OptimisticConcurrency/EventStore.cs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff329c2b255f351145ed33c53370a9fe401e342bbe8ea0f0489fee135f50555b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO add getting only events that are smaller or bigger than timestamp or version \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":"Workshops/BuildYourOwnEventStore/06-TimeTraveling/EventStore.cs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8a163238ecfc3214d13d9d2109c3d2a849abd6d91743d86f80dfb8047b0e0f6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO Add storing snapshot of aggregate \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":"Workshops/BuildYourOwnEventStore/08-Snapshots/EventStore.cs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"843324a4d68075c04aa451b29f804ca0dfef22e6c3d1e6a4d55ad76ea0c63177"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO Add applying events for all projections \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":"Workshops/BuildYourOwnEventStore/09-Projections/EventStore.cs"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d1ce256e158f9d6d918e0edc458d8ab3608a9de3aca6c8c2e5b72b7211ceb9e"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 9 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Workshops/BuildYourOwnEventStore/EventStoreBasics.Tests/Exercise10ProjectionsWithMarten.cs"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce55b0267480454dff7af49745e261d3fd33f3d19509b8550abcc54584a91a90"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Fill append events logic here. \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":"Workshops/IntroductionToEventSourcing/03-AppendingEvents.Marten/AppendingEvents.cs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"186031add110ce2580788507373869c82d53cee96cac447b65c6bd9b847ad112"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Fill append events logic here. \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":"Workshops/IntroductionToEventSourcing/04-AppendingEvents.EventStoreDB/AppendingEvents.cs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"507a38d86a3dbeefd652b91d2215d1265887b462ccb46d62bedcb0fda70e8e30"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Fill append events logic here. \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":"Workshops/IntroductionToEventSourcing/06-GettingStateFromEvents.EventStoreDB/Tools/EventStoreDBTest.cs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9511d01bd12f1a64c05221b73e7275029e862a28717375721c889d9f61528dd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Fill append events logic here. \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":"Workshops/IntroductionToEventSourcing/Solved/04-AppendingEvents.EventStoreDB/AppendingEvents.cs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"e901976eed7f079a7e908f4f103b585a5f338c3315e253cb607276a7a7baf0a5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Fill append events logic here. \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":"Workshops/IntroductionToEventSourcing/Solved/06-GettingStateFromEvents.EventStoreDB/Tools/EventStoreDBTest.cs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"182e068e2f82446c5843ad92609c5f44a970e5d719deb81759a37fbd18cb3940"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: \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":"Workshops/IntroductionToEventSourcing/12-Projections.SingleStream/ProjectionsTests.cs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"51a7f4c407a0f7b72566b1f4aca5880058e711fd472b696731713cf12618f879"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: \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":"Workshops/IntroductionToEventSourcing/13-Projections.SingleStream.Idempotency/ProjectionsTests.cs"},"region":{"startLine":245}}}],"partialFingerprints":{"codehealthFindingId/v1":"976ed7fb0b6650f4714ad5c06ee6ff158501765417d8e384ca862f9538739755"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: \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":"Workshops/IntroductionToEventSourcing/14-Projections.SingleStream.EventualConsistency/ProjectionsTests.cs"},"region":{"startLine":245}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b4652c6ef220a6f6f375aefeaf3d2dc7e49595bc88799288be5b3c8b6d4748f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: \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":"Workshops/IntroductionToEventSourcing/15-Projections.MultiStream/ProjectionsTests.cs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"70d814a8fc32a08df98496e93ee9fa5fcf88845709a115ebdd9e97e37fc75f96"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: \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":"Workshops/IntroductionToEventSourcing/17-Projections.MultiStream.Marten/ProjectionsTests.cs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"dec60c4e3edc70689684ee5922f2e105586f1872af78af2606aeb30f322b3442"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: \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":"Workshops/IntroductionToEventSourcing/Solved/12-Projections.SingleStream/ProjectionsTests.cs"},"region":{"startLine":244}}}],"partialFingerprints":{"codehealthFindingId/v1":"1776a5ecd09c404877b031517e5971bfc4ece5b598b1cba4ec41c099187a7537"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: \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":"Workshops/IntroductionToEventSourcing/Solved/13-Projections.SingleStream.Idempotency/ProjectionsTests.cs"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1b35ae74b26d8a8ce1115b6eaeda17b027bbb7a437a06813c2c0abb90a45ff4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: \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":"Workshops/IntroductionToEventSourcing/Solved/14-Projections.SingleStream.EventualConsistency/ProjectionsTests.cs"},"region":{"startLine":307}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3a0ecf197d9f628fe63af1ed6bd4be42282c75913ad21a6fc1d52cdff1fb97b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This projection was built assuming ordered events. Run the test \u2014 it fails. \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":"Workshops/IntroductionToEventSourcing/16-Projections.MultiStream.OutOfOrder/ProjectionsTests.cs"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"f328d111015ec856052db505ba9af3de93c110c7ecdfb9adaa0ef9d2c1599373"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This projection was built assuming ordered events. Run the test \u2014 it fails. \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":"Workshops/IntroductionToEventSourcing/18-Projections.MultiStream.OutOfOrder.Marten/ProjectionsTests.cs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff3a98fdf4fa53146ac60e41e45c57dc2307df4bf95c3d87fd5b9ee663bb88f3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This projection was built assuming ordered events. Run the test \u2014 it fails. \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":"Workshops/IntroductionToEventSourcing/18-Projections.MultiStream.OutOfOrder.Marten/ProjectionsTests.cs"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff3a98fdf4fa53146ac60e41e45c57dc2307df4bf95c3d87fd5b9ee663bb88f3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // 2. TODO: Put your sample events here \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":"Workshops/IntroductionToEventSourcing/19-EventsDefinition/EventsDefinitionTests.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"219917bd0060070d77e5cb8185561cfbe8351f35af07a30de2c156028c8e6282"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // 2. TODO: Put your sample events here \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":"Workshops/IntroductionToEventSourcing/19-EventsDefinition/EventsDefinitionTests.cs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"219917bd0060070d77e5cb8185561cfbe8351f35af07a30de2c156028c8e6282"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // 1. TODO: Define your Group Checkout events here \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":"Workshops/IntroductionToEventSourcing/19-EventsDefinition/GroupCheckoutEvents.cs"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"09b0c698cb4dc9b16b71d4410b1590ce912192cde000bc18e4f42617dc1fc123"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // 1. TODO: Define your Guest Stay Account events here \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":"Workshops/IntroductionToEventSourcing/19-EventsDefinition/GuestStayAccountEvents.cs"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"0444fd544a945e8556190c4259963a353a5fe295a4ed872167dbfba3e4527cdb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Fill the implementation calling your entity/aggregate \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":"Workshops/IntroductionToEventSourcing/20-EntitiesDefinition/GuestStayFacade.cs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"4640cc2f3388580815f0462936f6b8f9a7fed0ba655af06862a8789427335a6a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Fill the implementation calling your entity/aggregate \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":"Workshops/IntroductionToEventSourcing/20-EntitiesDefinition/GuestStayFacade.cs"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"4640cc2f3388580815f0462936f6b8f9a7fed0ba655af06862a8789427335a6a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Fill the implementation calling your entity/aggregate \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":"Workshops/IntroductionToEventSourcing/20-EntitiesDefinition/GuestStayFacade.cs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"4640cc2f3388580815f0462936f6b8f9a7fed0ba655af06862a8789427335a6a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Fill the implementation calling your entity/aggregate \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":"Workshops/IntroductionToEventSourcing/20-EntitiesDefinition/GuestStayFacade.cs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"4640cc2f3388580815f0462936f6b8f9a7fed0ba655af06862a8789427335a6a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Fill the implementation calling your entity/aggregate, for instance: \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":"Workshops/IntroductionToEventSourcing/20-EntitiesDefinition/GuestStayFacade.cs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"4640cc2f3388580815f0462936f6b8f9a7fed0ba655af06862a8789427335a6a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: For each SkipCI test, fill out the implementation to pass the test, then remove the Trait \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":"Workshops/IntroductionToEventSourcing/21-BusinessProcesses/Version1-Aggregates/BusinessProcessTests.cs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ea94b74a808c5c2ade9c258be461d1c0cc881384f779f2df6aee1d7baf7612d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: For each SkipCI test, fill out the implementation to pass the test, then remove the Trait \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":"Workshops/IntroductionToEventSourcing/21-BusinessProcesses/Version2-ImmutableEntities/BusinessProcessTests.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7fe985bebe5a9229444cda00913f12d1dd93df1bde90a99ad01dda16882f1e5"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: IsRecord: Method IsRecord \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Core/Reflection/TypeProvider.cs"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"3cb2920456bb5adbe5aaddef4e9bbae626c8470b29778cfe24e84b80aecbf7c6"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: ShipmentsDbContextFactory: NamedType ShipmentsDbContextFactory \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Sample/ECommerce/Shipments/Shipments/Storage/ShipmentsDbContextFactory.cs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"f783b98a763c25db1490d582d8a97ad950d965c4670f08ccaa39afc3c7b4bbb6"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: FakeProductPriceCalculator: NamedType FakeProductPriceCalculator \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Sample/EventStoreDB/ECommerce/Carts/Carts.Tests/Stubs/Products/FakeProductPriceCalculator.cs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f021bc356b82b3d87189fd6cc979267a118983715bbe5426e81ae9c9e344de3"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: UseReserveRoomEndpoint: Method UseReserveRoomEndpoint \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Sample/HotelManagement/Reservations/RoomReservations/ReservingRoom/ReserveRoomEndpoint.cs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"77ba37b9d21195742ddf02251ceb96eeb01d6a957a905f82fe92b5f8d7c54bd7"}},{"ruleId":"D18","level":"warning","message":{"text":"Monorepo: only 1 of 20 solutions was scored: This repository contains 20 .NET solutions, but a scan analyzes ONE. Every score, lens, and finding here reflects only \u0060EventSourcing.NetCore.slnx\u0060 \u2014 the other 19 (\u0060Sample/AsyncProjections/AsyncProjections.slnx\u0060, \u0060Sample/CRUDToCQRS/CRUDToCQRS.slnx\u0060, \u0060Sample/ECommerce/ECommerce.slnx\u0060, \u0060Sample/ECommerce/PracticalEventSourcing.slnx\u0060, \u0060Sample/EventPipelines/EventPipelines.slnx\u0060, \u0060Sample/EventStoreDB/Simple/ECommerce.slnx\u0060, \u002B13 more) were not analyzed and are not represented in the headline. To cover them, scan each solution as its own target and group them in a Solution or Product for a portfolio roll-up. If a secondary solution is an archived or vendored tree, declare it \u2014 \u0060.gitattributes\u0060 (\u0060path/** linguist-vendored\u0060) or \u0060.editorconfig\u0060 (\u0060[path/**] generated_code = true\u0060) \u2014 to exclude it from discovery the same way generated code is."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"95ee62d3ed3d70ddaaff6cbf59d288087fc481e5240251ff6b883669f44d0cc2"}},{"ruleId":"D18","level":"note","message":{"text":"Shell project: Orders.Tests: \u0060Orders.Tests\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":"Sample/ECommerce/Orders/Orders.Tests/Orders.Tests.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b234a66e24daaa301f2f7f0df82103b84ff117e1197d97c26a892538d21fafd2"}},{"ruleId":"D18","level":"note","message":{"text":"Shell project: Payments.Tests: \u0060Payments.Tests\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":"Sample/ECommerce/Payments/Payments.Tests/Payments.Tests.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e9c77ed757d8f26f8809093cb90a19eaf22791cccb5e8501aa2e90f5148f444"}},{"ruleId":"D18","level":"note","message":{"text":"Shell project: Shipments.Tests: \u0060Shipments.Tests\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":"Sample/ECommerce/Shipments/Shipments.Tests/Shipments.Tests.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"05f1a024594e0e3f915642d8c2e74f9900cce45fe5fd6287ece71db4e75abc9c"}},{"ruleId":"D18","level":"note","message":{"text":"Thin analysable surface across projects: 12 project(s) carry only a thin slice of real code (e.g. \u0060EventPipelines.MediatR\u0060 with 16 significant line(s)). The mean analysable-surface weight is 94 %, lowering Solution Shape by about 0.5 point(s). Consolidate thin projects or grow them into substantial, well-scoped assemblies."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"dd0b92fd965c2065080f16843920964ee00f7696ea03d87cdf61aed4cd2c746a"}},{"ruleId":"D21","level":"note","message":{"text":"The concept of \u0027Resolution\u0027 is used in \u0027ResolutionType\u0027 but also appears as \u0027ResolutionResolution\u0027 in batch resolution events, suggesting a naming collision or redundancy.: Rename \u0027IncidentsBatchResolutionResolutionInitiated\u0027 to \u0027IncidentsBatchResolutionInitiated\u0027 to avoid double \u0027Resolution\u0027. (symbols: Helpdesk.Api.Incidents.ResolutionType, Helpdesk.Api.Incidents.ResolutionBatch.IncidentsBatchResolutionResolutionInitiated, Helpdesk.Api.Incidents.ResolutionBatch.IncidentsBatchResolutionResolutionCompleted)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"8150195cc09c080905897915d4c8dbf75ab59fccce178b0a571c1e28b32b2894"}},{"ruleId":"D23","level":"note","message":{"text":"Bounded contexts not declared: At 33650 LoC spread over 167 projects the codebase is both large and multi-module, so explicit bounded contexts are warranted. 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: \u0022AddNpgsql()\u0022 \u2014 delete - AddNpgsql() already says this"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Sample/ECommerce/Carts/Carts.Api/Program.cs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"f562ad1a84a96c6be373c29426ae9ec720893686464cc5c2186206f2c8c360ac"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: DS-0002: Image user should not be \u0027root\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Dockerfile"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe2d688610b51e0a5a02c7c5dd1724a4986e40f2689fb84510e2ec0164c27d6a"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: DS-0002: Image user should not be \u0027root\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Sample/Helpdesk.Wolverine/Helpdesk.Api/Dockerfile"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1cebe85724be965f42850afc8e29ca461d9d98a4e247536ec30363828857d56"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: DS-0002: Image user should not be \u0027root\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Sample/Helpdesk/Helpdesk.Api/Dockerfile"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"897c2de466afd964c24994802539150a973cce993eecbd4719fc524a189937ac"}},{"ruleId":"D31","level":"note","message":{"text":"Low IaC: DS-0026: No HEALTHCHECK defined"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Dockerfile"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f51a163f26d94ce6b6f473117dde579d091c8cbf9e59810475c94d9fc921120"}},{"ruleId":"D31","level":"note","message":{"text":"Low IaC: DS-0026: No HEALTHCHECK defined"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Sample/Helpdesk.Wolverine/Helpdesk.Api/Dockerfile"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1d1677ac5de9cc434e467a95fe0b1c1c6069b4916f8761021f0111db50bc5ed"}},{"ruleId":"D31","level":"note","message":{"text":"Low IaC: DS-0026: No HEALTHCHECK defined"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Sample/Helpdesk/Helpdesk.Api/Dockerfile"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d19b72db2dfc7ba7897985a6dac68554a0f34f1aa863501742eee2a5e97e4eb1"}},{"ruleId":"D34","level":"note","message":{"text":"Dormant codebase: 232 of 238 significant files have no living knowledge \u2014 the codebase as a whole is dormant, not 232 separate risks. Re-engage owners or document before change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"4c69f1e54b7dd6fe9029dd02df6ba8f8145b789f2f18dbdaa086c40ded49dba6"}},{"ruleId":"D36","level":"note","message":{"text":"No build provenance: No SLSA provenance generation or build attestation found in CI (e.g. slsa-github-generator, actions/attest-build-provenance)."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"1b213f6eedd4b140d0bc37bdf1496f72811a643f34064f12518b32e9e83bcfc7"}},{"ruleId":"D36","level":"note","message":{"text":"No artifact signing: No artifact signing found in CI (e.g. cosign / sigstore / gitsign)."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0e17f71490e4d120a48b2b2881ab866c93b272bef2febb673a3e8e42b2c288ab"}},{"ruleId":"D36","level":"note","message":{"text":"No SBOM: No SBOM generation or committed SBOM found (e.g. syft / anchore/sbom-action / *.spdx.json / *.cdx.json)."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"eb00976a698a5d68999b7ee6d27206fd374e916853e7ff1ead5eed42386f043f"}},{"ruleId":"D36","level":"warning","message":{"text":"Unpinned build actions: CI references GitHub Actions by a floating ref (@main / @tag) rather than a pinned commit SHA, weakening build integrity."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"90f83b4fa27db32740afe9540c905f3c0499caed87f61049a8a903ecc95b41c3"}}],"taxonomies":[{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d","organization":"MITRE","shortDescription":{"text":"The MITRE Common Weakness Enumeration (CWE)."},"taxa":[{"id":"CWE-1357","name":"Reliance on Insufficiently Trustworthy Component"},{"id":"CWE-798","name":"Use of Hard-coded Credentials"}]}],"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}}}]}