{"$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":"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"]}]},{"id":"D29","name":"Static Analysis (SAST)","shortDescription":{"text":"Static Analysis (SAST)"},"helpUri":"https://codehealth.canine.dev/dimensions/D29"},{"id":"D30","name":"Dependency Vulnerabilities","shortDescription":{"text":"Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D30","relationships":[{"target":{"id":"CWE-1395","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}]},{"id":"D31","name":"IaC \u0026 Container Security","shortDescription":{"text":"IaC \u0026 Container Security"},"helpUri":"https://codehealth.canine.dev/dimensions/D31"},{"id":"D33","name":"JS/npm Dependency Vulnerabilities","shortDescription":{"text":"JS/npm Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D33","relationships":[{"target":{"id":"CWE-1395","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}]},{"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"]}]},{"id":"D38","name":"OSV Dependency Vulnerabilities","shortDescription":{"text":"OSV Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D38","relationships":[{"target":{"id":"CWE-1395","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}]}]}},"results":[{"ruleId":"D1","level":"warning","message":{"text":"RabbitMQReceiver.ReceiveAsync (cyclomatic 22): RabbitMQReceiver.ReceiveAsync has cyclomatic complexity 22 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Infrastructure/Messaging/RabbitMQ/RabbitMQReceiver.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"225942d206c47e7005fb9d59d1d286dbb79099b08fa2c80da21e87bf659546ee"}},{"ruleId":"D1","level":"warning","message":{"text":"FileEmbeddingConsumer.ProcessFileAsync (cyclomatic 22): FileEmbeddingConsumer.ProcessFileAsync has cyclomatic complexity 22 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Background/MessageBusConsumers/FileEmbeddingConsumer.cs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"14d873b89ee7a85913dc569245a835e5630a1706a68d74d5c84470c0ce801dd5"}},{"ruleId":"D2","level":"warning","message":{"text":"RabbitMQReceiver.ReceiveAsync (cognitive 37): RabbitMQReceiver.ReceiveAsync has cognitive complexity 37 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Infrastructure/Messaging/RabbitMQ/RabbitMQReceiver.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"979f9f84b80c7081a0bfc32223f20bb896d087224b5e14090d3706e28594843f"}},{"ruleId":"D2","level":"warning","message":{"text":"FileEmbeddingConsumer.ProcessFileAsync (cognitive 29): FileEmbeddingConsumer.ProcessFileAsync has cognitive complexity 29 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Background/MessageBusConsumers/FileEmbeddingConsumer.cs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"53724ec72ad8b4944f025e498329232a5ebfe68de1fa69ed85805fdbdc7c0de9"}},{"ruleId":"D2","level":"warning","message":{"text":"ImportConfigurationEntriesFromExcelHandler.ReadAsync (cognitive 18): ImportConfigurationEntriesFromExcelHandler.ReadAsync has cognitive complexity 18 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Infrastructure/Excel/ExcelDataReader/ImportConfigurationEntriesFromExcelHandler.cs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"3190f3b47f3552144b691614c1fb3626a96b3626e847eb26ef80fce070c2f5a1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: UserStore: TooManyMethods \u2014 154 lines, 45 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Infrastructure/Identity/UserStore.cs"},"region":{"startLine":0}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebb055ff5ba1a01f97e877255918a0f321c7e7dfe12f66ebe61dbd03437668f6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): src/Monolith/ClassifiedAds.WebAPI/RateLimiterPolicies/DefaultRateLimiterPolicy.cs:23-43 | src/Monolith/ClassifiedAds.WebAPI/RateLimiterPolicies/GetAuditLogsRateLimiterPolicy.cs:23-43"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.WebAPI/RateLimiterPolicies/DefaultRateLimiterPolicy.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"92cdc94ac1d285cd86be44e0b43ab40d19429b985398324e3815ed4a0ab66996"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): src/Monolith/ClassifiedAds.WebAPI/Controllers/UsersController.cs:160-177 | src/Monolith/ClassifiedAds.WebAPI/Controllers/UsersController.cs:187-205"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.WebAPI/Controllers/UsersController.cs"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"f22b44ad57841eb01ceb087e9413efb04b84489061869593f2ae60e6a3cb8d83"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): src/Monolith/ClassifiedAds.Background/HostedServices/SendEmailWorker.cs:45-62 | src/Monolith/ClassifiedAds.Background/HostedServices/SendSmsWorker.cs:45-62"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Background/HostedServices/SendEmailWorker.cs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"49ffcdf5cb6f05e9c25941d50cba638fab4b3d606b5dd45a224a052f314da393"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): src/Monolith/ClassifiedAds.WebAPI/Controllers/FilesController.cs:402-419 | src/Monolith/ClassifiedAds.WebAPI/Controllers/ProductsController.cs:206-223"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.WebAPI/Controllers/FilesController.cs"},"region":{"startLine":402}}}],"partialFingerprints":{"codehealthFindingId/v1":"63f1f4d2718aa4af4c6e00a2eefc03e0750ff4074612ae4dee8c6fc60857f6f4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): src/Monolith/ClassifiedAds.Persistence/Locks/LockManager.cs:48-63 | src/Monolith/ClassifiedAds.Persistence/Locks/LockManager.cs:71-84"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Persistence/Locks/LockManager.cs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"e14f150bbc93807d979b264d0011c1c60f9244c29f31f23ba07afddc4216416d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): src/Monolith/ClassifiedAds.Persistence/Repositories/EmailMessageRepository.cs:40-54 | src/Monolith/ClassifiedAds.Persistence/Repositories/SmsMessageRepository.cs:40-54"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Persistence/Repositories/EmailMessageRepository.cs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"10ae8f4a8f6aa75994d592585e2dc5eeb69230823399fbea018cc71f2b8ae2be"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): src/Monolith/ClassifiedAds.Infrastructure/Messaging/AzureServiceBus/AzureServiceBusReceiver.cs:34-47 | src/Monolith/ClassifiedAds.Infrastructure/Messaging/AzureServiceBus/AzureServiceBusSubscriptionReceiver.cs:36-49"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Infrastructure/Messaging/AzureServiceBus/AzureServiceBusReceiver.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d31f650393604ca65575d0ece2246cfc2bc50cdaea7b42a318dadb30653659b"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project ClassifiedAds.BlazorServerSide: ClassifiedAds.BlazorServerSide has instability 1.00 with 0 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"2916c57d54ef0caf83e966da0558290511dcf1e2f1d43f75de522f47d4854cdf"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project ClassifiedAds.BlazorWebAssembly: ClassifiedAds.BlazorWebAssembly has instability 1.00 with 0 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"cfcc5ad0a0f33d317094f1626ff69d4771cb8c910a2af0496ea858f8a6a45adb"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project ClassifiedAds.WebMVC: ClassifiedAds.WebMVC has instability 1.00 with 0 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"3973d6441a547bc337986acd153736404d563622b81b1ab669d4cf3bfe05f225"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: ClassifiedAds.Persistence: ClassifiedAds.Persistence: abstractness 0.00, instability 0.22, distance 0.78 \u2014 zone of pain \u2014 concrete and heavily depended-on, so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"fc49487904d055a860b5e8424af0ed23dc5460f9096e4052e59292deccf9dbb0"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: ClassifiedAds.Application: ClassifiedAds.Application: abstractness 0.08, instability 0.14, distance 0.77 \u2014 zone of pain \u2014 concrete and heavily depended-on, so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"9e65c7e2c127099ab0e8de85314ac10d56825534390bda0e235910946d90c23a"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: ClassifiedAds.Infrastructure: ClassifiedAds.Infrastructure: abstractness 0.01, instability 0.27, distance 0.72 \u2014 zone of pain \u2014 concrete and heavily depended-on, so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"4e326dad92af3953450f01e1bee70c67ed2c1bab7e88da15e79a63974eef266c"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: UserStore (LCOM4 15): UserStore\u0027s methods form 15 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Infrastructure/Identity/UserStore.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb0f87c99ca80ea751a47e1a41d282609d129eb95980447f6d4e17f3ecdc5dc7"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: AdsDbContext (LCOM4 4): AdsDbContext\u0027s methods form 4 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Persistence/AdsDbContext.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f243c3a06e24531370e6558729f6150adc57756f725c2d4ba5ce701d4ba3b5e"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: HomePage: Test method exercises code but verifies nothing \u2014 add an assertion."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/EndToEndUiTests/Playwright/ApplicationTests.cs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c2c471e7afab86526615930cbf0dd1f87878254f7b4d85d7510d1f68f989b12"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: HomePage: Test method exercises code but verifies nothing \u2014 add an assertion."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/EndToEndUiTests/Selenium/ApplicationTests.cs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"5383895080367c2898e3fa0f56dfbefdcd5a3e549d956078e59c37c2a006ee7e"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: GetUsers: Test method exercises code but verifies nothing \u2014 add an assertion."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/Services.Identity/ClassifiedAds.Services.Identity.IntegrationTests/Grpc/UserServiceTests.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"d95d8aa1fd23a7c9d1b2342958b4a504f614e9677229a638f877c74b531d9d88"}},{"ruleId":"D13","level":"error","message":{"text":"Leaked secret: high-entropy-secret: high-entropy-secret detected."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Persistence/DbConfigurations/UserConfiguration.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"29369c331963f3eed1419e94dace94ceec920d482a13306d48eb77a67589e420"}},{"ruleId":"D13","level":"error","message":{"text":"Leaked secret: high-entropy-secret: high-entropy-secret detected."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/ModularMonolith/ClassifiedAds.Modules.Identity/DbConfigurations/UserConfiguration.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b0c7974481ed6b4d1fbcbad1c78b8223c897f6cc490ec28906147a4a70ee30c"}},{"ruleId":"D13","level":"error","message":{"text":"Leaked secret: high-entropy-secret: high-entropy-secret detected."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/Services.Identity/ClassifiedAds.Services.Identity/DbConfigurations/UserConfiguration.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"f81d82235e34858dfd9ee1722fecc561cf6425b018e6945b33d4f60224c77c97"}},{"ruleId":"D13","level":"error","message":{"text":"Leaked secret: high-entropy-secret: high-entropy-secret detected."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/IdentityServers/OpenIddict/ClassifiedAds.Persistence/DbConfigurations/UserConfiguration.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"908c317d6fae44ba54b8e053058cc665443b949df9bc90e4bbf417526f3012a6"}},{"ruleId":"D13","level":"error","message":{"text":"Leaked secret: high-entropy-secret: high-entropy-secret detected."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/IdentityServers/Duende/ClassifiedAds.Persistence/DbConfigurations/UserConfiguration.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"96740d189d4895fb42e1839115b1b3e450cb49ad1994a44bbbea9046f9af7c01"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #1: If anonymized user #1 becomes unavailable, 116 significant file(s) lose their only recent owner (largest: src/Monolith/ClassifiedAds.WebAPI/Controllers/FilesController.cs). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"b53cd979a9353a469d0ee09a1a537cdb8ab8ddd8b72422d34f9d3268ad1c51e3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Take Note \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":"src/Monolith/ClassifiedAds.Domain/Infrastructure/Messaging/MessageBus.cs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"200880114d0416b96dc6fbe5142ba9204123a31e04e81f5a68bb1f2f526c8cc8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: check password histories, etc. \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":"src/Monolith/ClassifiedAds.Infrastructure/Identity/HistoricalPasswordValidator.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"93580b8f820934f870b81be438abf5600f4f22596835d1eaae692254f774f27f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: check weak password, leaked password, password histories, etc. \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":"src/Monolith/ClassifiedAds.Infrastructure/Identity/WeakPasswordValidator.cs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc5ef5c23ce76158a8330f9707651a87948e1d8786e9fe72ac599723e5f40f71"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Ignore serialize large argument object. \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":"src/Monolith/ClassifiedAds.Infrastructure/Interceptors/ErrorCatchingInterceptor.cs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c0cefe730b84dc474fa3e55e43f4b5a504799d2a4bee812888daf93c0367c42"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add log 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":"src/Monolith/ClassifiedAds.Infrastructure/Messaging/RabbitMQ/RabbitMQReceiver.cs"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbfd7d1fa539c9b6ef0522c1300331ff4f72e5d74330bff8f9573b8fa2a14680"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: move to archive storage \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":"src/Monolith/ClassifiedAds.Infrastructure/Storages/Local/LocalFileStorageManager.cs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"2be56d3be95dbf038b684526cbba4428e5491dde33a2249d4a2a2c14b4ca12cf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: move to active storage \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":"src/Monolith/ClassifiedAds.Infrastructure/Storages/Local/LocalFileStorageManager.cs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"2be56d3be95dbf038b684526cbba4428e5491dde33a2249d4a2a2c14b4ca12cf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: check claims \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":"src/Monolith/ClassifiedAds.Infrastructure/Web/Authorization/Requirements/PermissionRequirement.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"108dbd89ec25d97172e4a9bfdb44d17c46e2d6374487e55d6164e8d4a55dc345"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Get from Db \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":"src/Monolith/ClassifiedAds.Infrastructure/Web/ClaimsTransformations/CustomClaimsTransformation.cs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f468d27441a0642b154335743936c2c8a820f45970d948f0711e9ddd3d9f5b0"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Infrastructure/Web/Middleware/DebuggingMiddleware.cs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"ade852cf11410dcd6cd7505d4da01d788394c605ad0632147d7f04bb2e8c7b7b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: check CreatedById \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":"src/Monolith/ClassifiedAds.WebAPI/Authorization/FileEntryAuthorizationHandler.cs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"da6861604b5d064d1bf06612c50d7bb0eb2955962b8623bb8e9c34ea89c39c54"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: import to database \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":"src/Monolith/ClassifiedAds.WebAPI/Controllers/ConfigurationEntriesController.cs"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5c2a0714411406e17aaa9cd2ad791b6a6a9cd1128708e928f7f8338f116d557"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: import to database \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":"src/Monolith/ClassifiedAds.WebAPI/Controllers/ProductsController.cs"},"region":{"startLine":249}}}],"partialFingerprints":{"codehealthFindingId/v1":"a23cf950aa850c4543c7d44758cfecaec99a8c4baab7595b9f0e3d4337a8b014"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: query configuration store to get ConnectionString \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":"src/Monolith/ClassifiedAds.WebAPI/Tenants/AdsDbContextMultiTenantConnectionStringResolver.cs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"09d675be158211d0c3f212bb2613efdc5ff2d18daeb6e4f98e1873a56011028f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: query configuration store to get ConnectionString \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":"src/Monolith/ClassifiedAds.WebAPI/Tenants/AdsReadOnlyDbContextMultiTenantConnectionStringResolver.cs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"8066cd1246beb60c6b5f20d976d7449ec8b11a5ae2a32e3d617044773cd3a60d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: query configuration store to get Tenant information \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":"src/Monolith/ClassifiedAds.WebAPI/Tenants/TenantResolver.cs"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"079fbf0e34fb112a7ae05d4f83aec4e078f46cd54fdf035f4aac0ed27703715f"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: GetAuditEntriesQueryHandler: NamedType GetAuditEntriesQueryHandler \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Application/AuditLogEntries/Queries/GetAuditEntriesQuery.cs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"780205ed70af0c59283ea462141be8fe6a0b73575f048c267df3ef98919c6564"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: GetPagedAuditEntriesQueryHandler: NamedType GetPagedAuditEntriesQueryHandler \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Application/AuditLogEntries/Queries/GetPagedAuditEntriesQuery.cs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"767971726ac3d5c4f6c22882d29574dee32609fa4078d9550fb5d4632e457da0"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: AddEntityCommandHandler: NamedType AddEntityCommandHandler \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Application/Common/Commands/AddEntityCommand.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"36e80f4b93f3ac064579fd0c6c6e33815a2ab1d52b1e671eb09d82f39ba38447"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: UpdateEntityCommandHandler: NamedType UpdateEntityCommandHandler \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Application/Common/Commands/UpdateEntityCommand.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4b69f9b225b9fe9a6c45ee2ca6cd7a2f62eeb43d3eda2479ac2074690e8fcf7"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: GetFileEntriesQueryHandler: NamedType GetFileEntriesQueryHandler \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Application/FileEntries/Queries/GetFileEntriesQuery.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca8d766231ec4aac29896f2523dba66ca33955c8166219729b5458d86708ccde"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: AddUpdateProductCommandHandler: NamedType AddUpdateProductCommandHandler \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Application/Products/Commands/AddUpdateProductCommand.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"b88c5680c8fa34ca8c144870166c3a35ef53a130040128c9e670dd40fb604f72"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: DeleteProductCommandHandler: NamedType DeleteProductCommandHandler \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Application/Products/Commands/DeleteProductCommand.cs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"65cdca58290f0a337975100413eb3917a8e629e051f5af13d71cb334514a7629"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: GetProductQueryHandler: NamedType GetProductQueryHandler \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Application/Products/Queries/GetProductQuery.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfc13b78510059a83802c86c11094de13ae95c17289c491224c5fd6cb32d909d"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: AddClaimCommandHandler: NamedType AddClaimCommandHandler \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Application/Roles/Commands/AddClaimCommand.cs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ebc6d885f6e2f9ec0c3689a9808e91655161082680728f8da9faa25e1445542"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: AddUpdateRoleCommandHandler: NamedType AddUpdateRoleCommandHandler \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Application/Roles/Commands/AddUpdateRoleCommand .cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7d0ab5a39fa4de4243262c287b39f625a2a64c17f12c8fdef8cdf883be6b598"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: DeleteClaimCommandHandler: NamedType DeleteClaimCommandHandler \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Application/Roles/Commands/DeleteClaimCommand.cs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bf1203eae46751c9f7ebe4c96afd2726e90afaef08f088e056e558946a66995"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: DeleteRoleCommandHandler: NamedType DeleteRoleCommandHandler \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Application/Roles/Commands/DeleteRoleCommand.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"d18797511d647675312a6d3305f28418e3247655a4ce32b5557b50b102858a31"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: GetRoleQueryHandler: NamedType GetRoleQueryHandler \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Application/Roles/Queries/GetRoleQuery.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ed0aa427df6c2580123bc33f21fb8079ca7978b8aa82d8505a9c9de0f79f22f"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: GetRolesQueryHandler: NamedType GetRolesQueryHandler \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Application/Roles/Queries/GetRolesQuery.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"b49e1961f03e11e5a96df374ba8e77da72c7c800bf06a131da50d41a820c8ddf"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: AddClaimCommandHandler: NamedType AddClaimCommandHandler \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Application/Users/Commands/AddClaimCommand.cs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"de2ef7efaaed5330eaae5fb57895aa15595478e1ed27eaf9cd8b2581c8f915f2"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: AddRoleCommandHandler: NamedType AddRoleCommandHandler \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Application/Users/Commands/AddRoleCommand .cs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"483157bbeb70a9eebb563c363d075286df3164e017c71b0b622c47863408a9b6"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: DeleteClaimCommandHandler: NamedType DeleteClaimCommandHandler \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Application/Users/Commands/DeleteClaimCommand.cs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2186451d75e57ca57a46cb302503a84f3674939e03e5d0df01f455b5fb36785"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: DeleteRoleCommandHandler: NamedType DeleteRoleCommandHandler \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Application/Users/Commands/DeleteRoleCommand.cs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"601b1c45653861bda6b417af8c68c6bcbc90d33e28b9f2e32e44e8389e7bd05c"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: DeleteUserCommandHandler: NamedType DeleteUserCommandHandler \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Application/Users/Commands/DeleteUserCommand.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"751dc54b3eda09170e5652ff140a24b0352d73be693e108cf129d39fb7710c0e"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: GetUserQueryHandler: NamedType GetUserQueryHandler \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Application/Users/Queries/GetUserQuery.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"d75dae0c1c3ef82192b3a86a32e6e7ad607d6e71f084a8f04e58cee6c40d5e45"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: GetUsersQueryHandler: NamedType GetUsersQueryHandler \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Application/Users/Queries/GetUsersQuery.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"06adcf168ef1d2cccdc341c76aacefc3594432ac2187e7a7e4e2ee443c5a6319"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: OnInputFileChange: Method OnInputFileChange \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Blazor.Modules/Files/Pages/Upload.cs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"130978f737e16466dccb68ad1abf5c92e7b453bd5f7e25f94153c312cdf81971"}},{"ruleId":"D18","level":"warning","message":{"text":"Monorepo: only 1 of 17 solutions was scored: This repository contains 17 .NET solutions, but a scan analyzes ONE. Every score, lens, and finding here reflects only \u0060src/Monolith/ClassifiedAds.Monolith.slnx\u0060 \u2014 the other 16 (\u0060src/EndToEndApiTests/ClassifiedAds.ApiIntegrationTests.sln\u0060, \u0060src/EndToEndUiTests/Playwright/ClassifiedAds.EndToEndTests.slnx\u0060, \u0060src/EndToEndUiTests/Selenium/ClassifiedAds.EndToEndTests.slnx\u0060, \u0060src/IdentityServers/Duende/ClassifiedAds.Duende.slnx\u0060, \u0060src/IdentityServers/OpenIddict/ClassifiedAds.OpenIddict.slnx\u0060, \u0060src/Microservices/ClassifiedAds.Microservices.slnx\u0060, \u002B10 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":"31817283861707af56d60b7b5b002491771813c7a51c1dfa62115ae5d47b44df"}},{"ruleId":"D18","level":"warning","message":{"text":"Analyzed solution does not cover the bulk of the repository: The scored solution \u0060src/Monolith/ClassifiedAds.Monolith.slnx\u0060 is not representative of this repository \u2014 it references only 562 of 2028 discovered C# files (28 %). Lenses that need the product\u0027s source (domain modelling, event-driven, event sourcing) abstain because the aggregates, EF configs, and domain events under the product tree were not loaded. Point the scan at the product solution (or scan its directory directly) so the whole codebase is analyzed, not a build-tooling sub-solution."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"076656354786513e81286bffc1f9f1d3fa9aa953b7db1b16e5bd8aeada3c8175"}},{"ruleId":"D18","level":"note","message":{"text":"Shell project: ClassifiedAds.Persistence.MySQL: \u0060ClassifiedAds.Persistence.MySQL\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":"src/Monolith/ClassifiedAds.Persistence.MySQL/ClassifiedAds.Persistence.MySQL.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"71304c2aeeb419d54c6a348a23ec30e663fedb159f2f64a412a9f695a1788515"}},{"ruleId":"D18","level":"note","message":{"text":"Shell project: ClassifiedAds.Persistence.PostgreSQL: \u0060ClassifiedAds.Persistence.PostgreSQL\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":"src/Monolith/ClassifiedAds.Persistence.PostgreSQL/ClassifiedAds.Persistence.PostgreSQL.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"44fb5375aa8d65cf83aed349c5ac32f78877c00616569dc12c61a5ba3d93ecc8"}},{"ruleId":"D18","level":"note","message":{"text":"Thin analysable surface across projects: 2 project(s) carry only a thin slice of real code (e.g. \u0060ClassifiedAds.AspireAppHost\u0060 with 14 significant line(s)). The mean analysable-surface weight is 82 %, lowering Solution Shape by about 1.5 point(s). Consolidate thin projects or grow them into substantial, well-scoped assemblies."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"dd0b92fd965c2065080f16843920964ee00f7696ea03d87cdf61aed4cd2c746a"}},{"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 naming for RabbitMQ options classes. Some are named \u0027RabbitMQSenderOptions\u0027, \u0027RabbitMQReceiverOptions\u0027, while others are \u0027RabbitMQOptions\u0027. This creates confusion about whether \u0027RabbitMQOptions\u0027 is a base class or a separate configuration.: Standardize the naming of RabbitMQ configuration classes. Use \u0027RabbitMQOptions\u0027 as the base class and \u0027RabbitMQSenderOptions\u0027 and \u0027RabbitMQReceiverOptions\u0027 as derived classes, or rename all to \u0027RabbitMQSenderConfiguration\u0027 and \u0027RabbitMQReceiverConfiguration\u0027 for clarity. (symbols: ClassifiedAds.Infrastructure.Messaging.RabbitMQ.RabbitMQSenderOptions, ClassifiedAds.Infrastructure.Messaging.RabbitMQ.RabbitMQOptions, ClassifiedAds.Infrastructure.Messaging.RabbitMQ.RabbitMQSenderOptions.RoutingKey, ClassifiedAds.Infrastructure.Messaging.RabbitMQ.RabbitMQReceiverOptions)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"b9d42d6d3a4bc849e7ba07f022f4d7fad49038cd23c865e8736b82095e8252cf"}},{"ruleId":"D23","level":"note","message":{"text":"Bounded contexts not declared: At 16k LoC across 19 projects the codebase is large and multi-module, so explicit bounded contexts are needed. 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: \u0022add log here\u0022 \u2014 delete - generated stub placeholder; remove from codebase"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.Infrastructure/Messaging/RabbitMQ/RabbitMQReceiver.cs"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"d48720e33321644c1ac348f14c324d92b956a7ca39758174e03009ca113331a7"}},{"ruleId":"D24","level":"note","message":{"text":"redundant comment: \u0022Add services to the container.\u0022 \u2014 delete - duplicate of above; one comment per DI registration"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Monolith/ClassifiedAds.BlazorServerSide/Program.cs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d83469f744bf3d7f736709144b886a4d9bcde035e5375b2d0acc672866c300f"}},{"ruleId":"D26","level":"note","message":{"text":"Split ClassifiedAds.Infrastructure: A generic infrastructure project at 55k LoC and 163 types across 52 namespaces is a sprawling grab-bag. Suggested: by namespace: AdsFeed, AdBidding, Pricing, Notifications"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"198e53085e1105b24da2e4205bdc2cc61b835650902d61d6cc88e945feb7fb6f"}},{"ruleId":"D30","level":"error","message":{"text":"High CVE: Microsoft.AspNetCore.SignalR.Protocols.MessagePack 10.0.8: Microsoft.AspNetCore.SignalR.Protocols.MessagePack 10.0.8 (direct) has a High advisory; affects 9 projects \u2014 one upgrade fixes all. https://github.com/advisories/[GHSA redacted]"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"f714a70a74cef31edc3fd19f5f9fa182e37a453bc603783b2874cfcb8d3dbf86"}},{"ruleId":"D30","level":"error","message":{"text":"High CVE: MessagePack 2.5.187: MessagePack 2.5.187 (transitive) has a High advisory; affects 9 projects \u2014 one upgrade fixes all. https://github.com/advisories/[GHSA redacted]"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"42874d5bdac9a02ab3c2a871fcdb91e21162aa3786442aa3f3c4198a97219b7c"}},{"ruleId":"D30","level":"error","message":{"text":"High CVE: MessagePack 2.5.187: MessagePack 2.5.187 (transitive) has a High advisory; affects 9 projects \u2014 one upgrade fixes all. https://github.com/advisories/[GHSA redacted]"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"42874d5bdac9a02ab3c2a871fcdb91e21162aa3786442aa3f3c4198a97219b7c"}},{"ruleId":"D30","level":"error","message":{"text":"High CVE: MessagePack 2.5.192: MessagePack 2.5.192 (transitive) has a High advisory. https://github.com/advisories/[GHSA redacted]"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"2fef6fbf567a64c3284bd5a4acf151b316e767577548ae5d5e3ea2f42e3c47f6"}},{"ruleId":"D30","level":"error","message":{"text":"High CVE: MessagePack 2.5.192: MessagePack 2.5.192 (transitive) has a High advisory. https://github.com/advisories/[GHSA redacted]"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"2fef6fbf567a64c3284bd5a4acf151b316e767577548ae5d5e3ea2f42e3c47f6"}},{"ruleId":"D30","level":"error","message":{"text":"High CVE: System.Security.Cryptography.Xml 8.0.2: System.Security.Cryptography.Xml 8.0.2 (transitive) has a High advisory; affects 2 projects \u2014 one upgrade fixes all. https://github.com/advisories/[GHSA redacted]"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0b05188412af229ef2c0cd9ca007c6d403610e7ff1e66ceac01d6a43644af284"}},{"ruleId":"D30","level":"error","message":{"text":"High CVE: System.Security.Cryptography.Xml 8.0.2: System.Security.Cryptography.Xml 8.0.2 (transitive) has a High advisory; affects 2 projects \u2014 one upgrade fixes all. https://github.com/advisories/[GHSA redacted]"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0b05188412af229ef2c0cd9ca007c6d403610e7ff1e66ceac01d6a43644af284"}},{"ruleId":"D30","level":"warning","message":{"text":"Medium CVE: MessagePack 2.5.187: MessagePack 2.5.187 (transitive) has a Medium advisory; affects 9 projects \u2014 one upgrade fixes all. https://github.com/advisories/[GHSA redacted]"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"7e65bbb83b1f55f844136e29a8260323c5f23e9d7d6a0cddca6357e04ffaa77f"}},{"ruleId":"D30","level":"warning","message":{"text":"Medium CVE: MessagePack 2.5.187: MessagePack 2.5.187 (transitive) has a Medium advisory; affects 9 projects \u2014 one upgrade fixes all. https://github.com/advisories/[GHSA redacted]"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"7e65bbb83b1f55f844136e29a8260323c5f23e9d7d6a0cddca6357e04ffaa77f"}},{"ruleId":"D30","level":"warning","message":{"text":"Medium CVE: MessagePack 2.5.187: MessagePack 2.5.187 (transitive) has a Medium advisory; affects 9 projects \u2014 one upgrade fixes all. https://github.com/advisories/[GHSA redacted]"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"7e65bbb83b1f55f844136e29a8260323c5f23e9d7d6a0cddca6357e04ffaa77f"}},{"ruleId":"D30","level":"warning","message":{"text":"Medium CVE: MessagePack 2.5.187: MessagePack 2.5.187 (transitive) has a Medium advisory; affects 9 projects \u2014 one upgrade fixes all. https://github.com/advisories/[GHSA redacted]"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"7e65bbb83b1f55f844136e29a8260323c5f23e9d7d6a0cddca6357e04ffaa77f"}},{"ruleId":"D30","level":"warning","message":{"text":"Medium CVE: MessagePack 2.5.187: MessagePack 2.5.187 (transitive) has a Medium advisory; affects 9 projects \u2014 one upgrade fixes all. https://github.com/advisories/[GHSA redacted]"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"7e65bbb83b1f55f844136e29a8260323c5f23e9d7d6a0cddca6357e04ffaa77f"}},{"ruleId":"D30","level":"warning","message":{"text":"Medium CVE: MessagePack 2.5.187: MessagePack 2.5.187 (transitive) has a Medium advisory; affects 9 projects \u2014 one upgrade fixes all. https://github.com/advisories/[GHSA redacted]"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"7e65bbb83b1f55f844136e29a8260323c5f23e9d7d6a0cddca6357e04ffaa77f"}},{"ruleId":"D30","level":"warning","message":{"text":"Medium CVE: MessagePack 2.5.187: MessagePack 2.5.187 (transitive) has a Medium advisory; affects 9 projects \u2014 one upgrade fixes all. https://github.com/advisories/[GHSA redacted]"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"7e65bbb83b1f55f844136e29a8260323c5f23e9d7d6a0cddca6357e04ffaa77f"}},{"ruleId":"D30","level":"warning","message":{"text":"Medium CVE: MessagePack 2.5.187: MessagePack 2.5.187 (transitive) has a Medium advisory; affects 9 projects \u2014 one upgrade fixes all. https://github.com/advisories/[GHSA redacted]"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"7e65bbb83b1f55f844136e29a8260323c5f23e9d7d6a0cddca6357e04ffaa77f"}},{"ruleId":"D30","level":"warning","message":{"text":"Medium CVE: MessagePack 2.5.187: MessagePack 2.5.187 (transitive) has a Medium advisory; affects 9 projects \u2014 one upgrade fixes all. https://github.com/advisories/[GHSA redacted]"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"7e65bbb83b1f55f844136e29a8260323c5f23e9d7d6a0cddca6357e04ffaa77f"}},{"ruleId":"D30","level":"warning","message":{"text":"Medium CVE: MessagePack 2.5.192: MessagePack 2.5.192 (transitive) has a Medium advisory. https://github.com/advisories/[GHSA redacted]"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0df5c40d1332cb129cf77cbe46129fb22246cf1ef321eb646db171ad7dddfbce"}},{"ruleId":"D30","level":"warning","message":{"text":"Medium CVE: MessagePack 2.5.192: MessagePack 2.5.192 (transitive) has a Medium advisory. https://github.com/advisories/[GHSA redacted]"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0df5c40d1332cb129cf77cbe46129fb22246cf1ef321eb646db171ad7dddfbce"}},{"ruleId":"D30","level":"warning","message":{"text":"Medium CVE: MessagePack 2.5.192: MessagePack 2.5.192 (transitive) has a Medium advisory. https://github.com/advisories/[GHSA redacted]"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0df5c40d1332cb129cf77cbe46129fb22246cf1ef321eb646db171ad7dddfbce"}},{"ruleId":"D30","level":"warning","message":{"text":"Medium CVE: MessagePack 2.5.192: MessagePack 2.5.192 (transitive) has a Medium advisory. https://github.com/advisories/[GHSA redacted]"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0df5c40d1332cb129cf77cbe46129fb22246cf1ef321eb646db171ad7dddfbce"}},{"ruleId":"D30","level":"warning","message":{"text":"Medium CVE: MessagePack 2.5.192: MessagePack 2.5.192 (transitive) has a Medium advisory. https://github.com/advisories/[GHSA redacted]"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0df5c40d1332cb129cf77cbe46129fb22246cf1ef321eb646db171ad7dddfbce"}},{"ruleId":"D30","level":"warning","message":{"text":"Medium CVE: MessagePack 2.5.192: MessagePack 2.5.192 (transitive) has a Medium advisory. https://github.com/advisories/[GHSA redacted]"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0df5c40d1332cb129cf77cbe46129fb22246cf1ef321eb646db171ad7dddfbce"}},{"ruleId":"D30","level":"warning","message":{"text":"Medium CVE: MessagePack 2.5.192: MessagePack 2.5.192 (transitive) has a Medium advisory. https://github.com/advisories/[GHSA redacted]"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0df5c40d1332cb129cf77cbe46129fb22246cf1ef321eb646db171ad7dddfbce"}},{"ruleId":"D30","level":"warning","message":{"text":"Medium CVE: MessagePack 2.5.192: MessagePack 2.5.192 (transitive) has a Medium advisory. https://github.com/advisories/[GHSA redacted]"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0df5c40d1332cb129cf77cbe46129fb22246cf1ef321eb646db171ad7dddfbce"}},{"ruleId":"D30","level":"warning","message":{"text":"Medium CVE: MessagePack 2.5.192: MessagePack 2.5.192 (transitive) has a Medium advisory. https://github.com/advisories/[GHSA redacted]"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0df5c40d1332cb129cf77cbe46129fb22246cf1ef321eb646db171ad7dddfbce"}},{"ruleId":"D30","level":"note","message":{"text":"Low CVE: NuGet.Packaging 6.12.1: NuGet.Packaging 6.12.1 (transitive) has a Low advisory; affects 2 projects \u2014 one upgrade fixes all. https://github.com/advisories/[GHSA redacted]"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"e6474ae56907f21d65433a6575309f85070103ee909588acaa1f38b23e9af2ee"}},{"ruleId":"D30","level":"note","message":{"text":"Low CVE: NuGet.Protocol 6.12.1: NuGet.Protocol 6.12.1 (transitive) has a Low advisory; affects 2 projects \u2014 one upgrade fixes all. https://github.com/advisories/[GHSA redacted]"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"bd26c6b222a37f73ae6bba029cfdffb9edd85c3e6c44f89b9724060ea709d8c9"}},{"ruleId":"D31","level":"error","message":{"text":"Critical IaC: AZU-0012: The default action on Storage account network rules should be set to deny"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"deployments/Azure/terraform/main.tf"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6a36aa40b36be02bb1d245d05a470ffbe4c648cbfe361b4c6fe538521a9e6d0"}},{"ruleId":"D31","level":"error","message":{"text":"Critical IaC: AZU-0013: Key vault should have the network acl block specified"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"deployments/Azure/terraform/main.tf"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"92340269b64a2fcbf44d715d7e8ca2ba81e867f5095209d29c3b015e332ffb72"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: DS-0002: Image user should not be \u0027root\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/IdentityServers/Duende/ClassifiedAds.IdentityServer/Dockerfile"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"234528eb9ec95c8106d6def8e9e6e60b46991c19b4a54733406e9b625cc0c066"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: DS-0002: Image user should not be \u0027root\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/IdentityServers/Duende/ClassifiedAds.Migrator/Dockerfile"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"360587e351301be427f7f3ab6c5aa4315372e41b5dc19c4611eb2876d8476271"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: DS-0002: Image user should not be \u0027root\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/IdentityServers/OpenIddict/ClassifiedAds.IdentityServer/Dockerfile"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7a337b3c83440f564670376e7b54f95abedb166467630fc6ec34a61644d55a2"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: DS-0002: Image user should not be \u0027root\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/IdentityServers/OpenIddict/ClassifiedAds.Migrator/Dockerfile"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"97314a5c7e1ed9d9d06a7404c8d4b05717c7437219e24ff2c36d80001f8921c6"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0014: Root file system is not read-only"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/auditlog/templates/auditlog-api.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4697b2739b6696e141ff398eca4342700eb8f4ef0ba1bc5d3ef06a67e37166e"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0118: Default security context configured"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/auditlog/templates/auditlog-api.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f77d01979cc7821baf84f08dbf7be074b62337c120185c3e4fe6096ec804711"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0118: Default security context configured"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/auditlog/templates/auditlog-api.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f77d01979cc7821baf84f08dbf7be074b62337c120185c3e4fe6096ec804711"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0014: Root file system is not read-only"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/auditlog/templates/auditlog-grpc.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"53d697b6a6048b8193846711b844ae960b38a0e9bd9c1396d4b5a388117e1dde"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0118: Default security context configured"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/auditlog/templates/auditlog-grpc.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"30f8bbb9ef6383cfd40665ab8fd8023c04eb9d7c1fefbcb8a40800c5186fa905"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0118: Default security context configured"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/auditlog/templates/auditlog-grpc.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"30f8bbb9ef6383cfd40665ab8fd8023c04eb9d7c1fefbcb8a40800c5186fa905"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0109: ConfigMap with secrets"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/auditlog/templates/auditlog.configmap.yml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"85d325507d991678c1aefc33220a35f1f3d4d2081544b7f55afde1cd1b87f219"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0014: Root file system is not read-only"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/configuration/templates/configuration-api.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"986bb14517d3e8eb84a1d07fec86fa8c514f27465d9dda30121e6083677f6341"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0118: Default security context configured"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/configuration/templates/configuration-api.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"600e94730df0742097f144baf234b7235712d56517dc07c1cacbb69f569b3678"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0118: Default security context configured"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/configuration/templates/configuration-api.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"600e94730df0742097f144baf234b7235712d56517dc07c1cacbb69f569b3678"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0109: ConfigMap with secrets"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/configuration/templates/configuration.configmap.yml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"37a62150ee81b1b91c1ae08d929606e7f4144132dfb032be7123e852e4172c97"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0014: Root file system is not read-only"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/identity/templates/identity-api.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a669c735b2b78adc23423eccbc1812678089bc5acc95d6a739bc01ad82dc683d"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0118: Default security context configured"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/identity/templates/identity-api.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"288b4e4ca99ada4f468d622ff90918b2e62e492ff9858ab3f3d34cca89935a47"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0118: Default security context configured"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/identity/templates/identity-api.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"288b4e4ca99ada4f468d622ff90918b2e62e492ff9858ab3f3d34cca89935a47"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0014: Root file system is not read-only"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/identity/templates/identity-authserver.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"218742ecbf0fa08a819758ce788b367a82eda331d467e2e512b72e59f1d1b972"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0118: Default security context configured"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/identity/templates/identity-authserver.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"25c099471b320b1ccd9a8d49f49ea24437fbb5766eb5874b87266b2a26c7545a"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0118: Default security context configured"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/identity/templates/identity-authserver.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"25c099471b320b1ccd9a8d49f49ea24437fbb5766eb5874b87266b2a26c7545a"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0014: Root file system is not read-only"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/identity/templates/identity-grpc.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7a5ee21ab4a7f626bf4bd82d471047ea0b4ee3b865d51e58b8e14a541c5ee58"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0118: Default security context configured"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/identity/templates/identity-grpc.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1839698cb7fb031b37f464dd67a96f20bca74547be249831762a49ad62aad12"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0118: Default security context configured"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/identity/templates/identity-grpc.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1839698cb7fb031b37f464dd67a96f20bca74547be249831762a49ad62aad12"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0109: ConfigMap with secrets"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/identity/templates/identity.configmap.yml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"783da03c6198f243b774124647c1b427809bc8358a5402f38fd637180de1add9"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0014: Root file system is not read-only"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/notification/templates/notification-api.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8ba2b3d47b8424b52e708f8cf36229d6da846bf9a84f81c616e781dcd7b6e27"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0118: Default security context configured"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/notification/templates/notification-api.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"97711f745d061d65d44632c5ee35070d7fe97c1841d64904556414bf30a31899"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0118: Default security context configured"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/notification/templates/notification-api.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"97711f745d061d65d44632c5ee35070d7fe97c1841d64904556414bf30a31899"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0014: Root file system is not read-only"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/notification/templates/notification-background.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7d1bf625d7fa0a0acf2904f9456911d58a81de0eebd0437be99556f90b9b043"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0118: Default security context configured"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/notification/templates/notification-background.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"323a3d5a9372aa480277dc01d5ca6c37cce2fd78c209804b478dcaabf4218829"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0118: Default security context configured"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/notification/templates/notification-background.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"323a3d5a9372aa480277dc01d5ca6c37cce2fd78c209804b478dcaabf4218829"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0014: Root file system is not read-only"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/notification/templates/notification-grpc.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f98d3b2ca8c39ec47496985f8f3d04f45e1b3312654448e4d0b1630d0386b91e"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0118: Default security context configured"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/notification/templates/notification-grpc.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef9ffffcdacd0736273006db0fb0aad4788e9ea9d50fdd2d33a58bbc3364717a"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0118: Default security context configured"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/notification/templates/notification-grpc.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef9ffffcdacd0736273006db0fb0aad4788e9ea9d50fdd2d33a58bbc3364717a"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0109: ConfigMap with secrets"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/notification/templates/notification.configmap.yml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0cb05bc9703ed8e56aba1e027eba79ce495aa5cd427e155f55e6f20442900a27"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0014: Root file system is not read-only"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/product/templates/product-api.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e37a4b254cc6c545a396137fc84ff6ae1e41081858783fbf06fdf1ba872e5490"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0118: Default security context configured"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/product/templates/product-api.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"948a23777013585f99cfb2f0018cae3720fbbedc12c6e913eae3ba6c60040005"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0118: Default security context configured"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/product/templates/product-api.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"948a23777013585f99cfb2f0018cae3720fbbedc12c6e913eae3ba6c60040005"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0109: ConfigMap with secrets"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/product/templates/product.configmap.yml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb60b6544c6e3ba855d3753cfd4e861dc73d6a008cccbf8b9fd766a3d60d3713"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0014: Root file system is not read-only"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/storage/templates/storage-api.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e2df2322e2557e5059fee4aecd60942ebc65c0d9b574633dbbb154c3d22433c"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0118: Default security context configured"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/storage/templates/storage-api.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d999af266d25cc02f567cf24a9b66e7de625f456274ff8173ee5a80f501b31c0"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0118: Default security context configured"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/storage/templates/storage-api.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d999af266d25cc02f567cf24a9b66e7de625f456274ff8173ee5a80f501b31c0"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0109: ConfigMap with secrets"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/storage/templates/storage.configmap.yml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6e4545abe909f978721f0bdc12dc5c51c8f62acf9ac2cd860f177130c1aed87"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0014: Root file system is not read-only"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/webapi/templates/webapi.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e64f9f048c0471cc4f309628e7ccfec4e4a7f038062fdd30882541dd35f3a88"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0118: Default security context configured"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/webapi/templates/webapi.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"94fd9385d56d60c8ce95622eba08bcc92b7d17362da6a7ad2bce3e321f914c0f"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0118: Default security context configured"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/charts/webapi/templates/webapi.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"94fd9385d56d60c8ce95622eba08bcc92b7d17362da6a7ad2bce3e321f914c0f"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0014: Root file system is not read-only"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/templates/db.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"84d725a9a3bcb8757670313df83110c166f40e3efddcbaff75e6872731f2bf07"}},{"ruleId":"D31","level":"error","message":{"text":"High IaC: KSV-0118: Default security context configured"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Microservices/.helm/microservices/templates/db.deployment.yaml"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ace31f9d919d8fe047c2e97759aa51f1e6443f1ca0182650f52293a8eb52f671"}},{"ruleId":"D34","level":"note","message":{"text":"Dormant codebase: 204 of 234 significant files have no living knowledge \u2014 the codebase as a whole is dormant, not 204 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"}},{"ruleId":"D38","level":"error","message":{"text":"Critical CVE: [GHSA redacted]: shell-quote: [GHSA redacted]"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/vuejs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"49cfcfdf88e65f78bcc1a555c7745b7c3d3f1b6f2ceb0658092981e45b1c7d26"}},{"ruleId":"D38","level":"error","message":{"text":"High CVE: [GHSA redacted]: fast-uri: [GHSA redacted]"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/angular/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba7ec670d5af7c124039c7a6e437735ae32d0dcef0ff4290c2fb49d5f3f9d382"}},{"ruleId":"D38","level":"error","message":{"text":"High CVE: [GHSA redacted]: fast-uri: [GHSA redacted]"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/angular/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5eabf14ca2f9f57ae3b2a5cc39a741ddf152f38bb9b41639be0127871b543334"}},{"ruleId":"D38","level":"error","message":{"text":"High CVE: [GHSA redacted]: http-proxy-middleware: [GHSA redacted]"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/angular/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c3f0ed1ae356566cd2b36d038a9e4f75c26e833072b513723b1058bc625bdf8"}},{"ruleId":"D38","level":"error","message":{"text":"High CVE: [GHSA redacted]: picomatch: [GHSA redacted] (in 4 lockfiles)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/angular/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7126c2c546a36fb055aeaecc07671cc21f8783951f4a0285fda2b7288a12c74"}},{"ruleId":"D38","level":"error","message":{"text":"High CVE: [GHSA redacted]: piscina: [GHSA redacted]"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/angular/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"55d9b4f77a9dec5e4f15b03bdf9d7fa494f6228ba125faf7cd621389ba7d9a98"}},{"ruleId":"D38","level":"error","message":{"text":"High CVE: [GHSA redacted]: ws: [GHSA redacted] (in 4 lockfiles)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/angular/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6fb611852645f1d42b19f960ee25c7fe580f5c0bfa6933080abae8d7ebd4d6b"}},{"ruleId":"D38","level":"error","message":{"text":"High CVE: [GHSA redacted]: axios: [GHSA redacted] (in 4 lockfiles)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/bff/reactjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b408758f784cf11dd8eebdaef6f0dae1f801c5a8e8c8fd1d82bf2c0d82f98d5"}},{"ruleId":"D38","level":"error","message":{"text":"High CVE: [GHSA redacted]: axios: [GHSA redacted] (in 4 lockfiles)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/bff/reactjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e87deff69a7d32f652647faff5715631d114091c7cca8b7270500b3ba0c01457"}},{"ruleId":"D38","level":"error","message":{"text":"High CVE: [GHSA redacted]: axios: [GHSA redacted] (in 4 lockfiles)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/bff/reactjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c51419e082cf9fa5065d47f498e673c014ba2b91ee8af40a9f6c8195acebee95"}},{"ruleId":"D38","level":"error","message":{"text":"High CVE: [GHSA redacted]: axios: [GHSA redacted] (in 4 lockfiles)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/bff/reactjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"440ea9bbedd4b6e21d02942d93abb38ebdafb198f734bc8542165ea9c4e79efa"}},{"ruleId":"D38","level":"error","message":{"text":"High CVE: [GHSA redacted]: axios: [GHSA redacted] (in 4 lockfiles)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/bff/reactjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"baad5fe26d20d8e3a73a453246dabfb5bd0962e0dcaccf7b42a4381a702b135a"}},{"ruleId":"D38","level":"error","message":{"text":"High CVE: [GHSA redacted]: axios: [GHSA redacted] (in 4 lockfiles)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/bff/reactjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c2fcca6fa6a170738d7ca068a630742ef6fb52811ee6b256a33205e23257303"}},{"ruleId":"D38","level":"error","message":{"text":"High CVE: [GHSA redacted]: axios: [GHSA redacted] (in 4 lockfiles)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/bff/reactjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"89fb4e8a268046e37752d37773e1c578cb72739c81adcb30021bdf031757a96c"}},{"ruleId":"D38","level":"error","message":{"text":"High CVE: [GHSA redacted]: axios: [GHSA redacted] (in 4 lockfiles)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/bff/reactjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d40f46923a51e6c9925f8e319c902dc821133f73ca74e0233cf487a370b9dfe"}},{"ruleId":"D38","level":"error","message":{"text":"High CVE: [GHSA redacted]: axios: [GHSA redacted] (in 4 lockfiles)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/bff/reactjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a2976adb8d90cfd3e391346f500e43559ac8a0a0dd941f83fe0f15f73b43d36"}},{"ruleId":"D38","level":"error","message":{"text":"High CVE: [GHSA redacted]: axios: [GHSA redacted] (in 4 lockfiles)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/bff/reactjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"38ff2f80562f25e662246b86b5688b71b832382918b7ad4fa7654bfe709e3ba7"}},{"ruleId":"D38","level":"error","message":{"text":"High CVE: [GHSA redacted]: axios: [GHSA redacted] (in 4 lockfiles)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/bff/reactjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"aead11b1ccc80be5667e1ad754479fdb7898e34d41fd925ca3ca449951269f05"}},{"ruleId":"D38","level":"error","message":{"text":"High CVE: [GHSA redacted]: flatted: [GHSA redacted] (in 4 lockfiles)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/bff/reactjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4f9688b5c7368e8a0ba45f92cf01ff207bc7e3324ff08f8f189f54b6736097c"}},{"ruleId":"D38","level":"error","message":{"text":"High CVE: [GHSA redacted]: flatted: [GHSA redacted] (in 4 lockfiles)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/bff/reactjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"68e7fc69b877afa8011d1ba447d228d7e171737e829d09f06650e87d6fb97a59"}},{"ruleId":"D38","level":"error","message":{"text":"High CVE: [GHSA redacted]: form-data: [GHSA redacted] (in 4 lockfiles)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/bff/reactjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"111ec55f9f530a343c90e00246cde5968c155f52d8b72863e4d9a92e190ce5b9"}},{"ruleId":"D38","level":"error","message":{"text":"High CVE: [GHSA redacted]: minimatch: [GHSA redacted]"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/bff/reactjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"73c68660aa2b140b3402bdfbbfdc588ebed9cf8cc2ab97d74ed4c05f8a0297a4"}},{"ruleId":"D38","level":"error","message":{"text":"High CVE: [GHSA redacted]: minimatch: [GHSA redacted]"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/bff/reactjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4eaf7cde32299ae902381d9fb63a05a29fe53b45a1af6dae3faf10216dc6bd81"}},{"ruleId":"D38","level":"error","message":{"text":"High CVE: [GHSA redacted]: minimatch: [GHSA redacted]"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/bff/reactjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"db9eccb8fc1f468346950b3d258d1c509cbe28adb8a68f5668837f6fa1732d79"}},{"ruleId":"D38","level":"error","message":{"text":"High CVE: [GHSA redacted]: react-router: [GHSA redacted] (in 2 lockfiles)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/bff/reactjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"91266447161671a12ebaf8bd0396b13af060728e0d61f5f27e45659ce8c79049"}},{"ruleId":"D38","level":"error","message":{"text":"High CVE: [GHSA redacted]: react-router: [GHSA redacted] (in 2 lockfiles)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/bff/reactjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5ffb8d8f29ecad4366d6b4798af6cf5dfc5955998ed569b5f3f1fe70dbb1ea8"}},{"ruleId":"D38","level":"error","message":{"text":"High CVE: [GHSA redacted]: vite: [GHSA redacted] (in 3 lockfiles)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/bff/reactjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e6055eff647e26d3e14b08372102dba3ef3fc4a50dc1e50448d375bfa6fc62f"}},{"ruleId":"D38","level":"error","message":{"text":"High CVE: [GHSA redacted]: next: [GHSA redacted]"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/nextjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ba31a77367c8cf49e9e9b151b16c14fa9339898253983c07764c21e92a1d127"}},{"ruleId":"D38","level":"error","message":{"text":"High CVE: [GHSA redacted]: next: [GHSA redacted]"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/nextjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fe67e1fe678feb20a10903fb44814d6a2c2f54902991c5878130540539d9993"}},{"ruleId":"D38","level":"error","message":{"text":"High CVE: [GHSA redacted]: next: [GHSA redacted]"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/nextjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1de63bf413d353276ff257db322d228a1f53cbabe348afcaf4340d8b6b7b89b0"}},{"ruleId":"D38","level":"error","message":{"text":"High CVE: [GHSA redacted]: next: [GHSA redacted]"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/nextjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb1daf4eaefa3442dcdacf2e31cc58be82c583b9d73b5eb9b26349e3deb2a24a"}},{"ruleId":"D38","level":"error","message":{"text":"High CVE: [GHSA redacted]: next: [GHSA redacted]"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/nextjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"780360398cfdd327b6649d7b7773496bef191b0694c19cd2858f3e1c03bfb6da"}},{"ruleId":"D38","level":"error","message":{"text":"High CVE: [GHSA redacted]: next: [GHSA redacted]"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/nextjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c62f073635bad075ecb90b4b5b482f9fa3511ec5dc929a71ed9111077302662d"}},{"ruleId":"D38","level":"error","message":{"text":"High CVE: [GHSA redacted]: next: [GHSA redacted]"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/nextjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e1289ac5f583fa7a276f10ef9c19f05ef2097af3ed361345d96a7dd929f632c"}},{"ruleId":"D38","level":"warning","message":{"text":"Medium CVE: [GHSA redacted]: follow-redirects: [GHSA redacted] (in 5 lockfiles)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/angular/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d9f8a7cc9b7a9eb78e9bba805593e956d4247eb5294165d93a8737d8dd87839"}},{"ruleId":"D38","level":"warning","message":{"text":"Medium CVE: [GHSA redacted]: http-proxy-middleware: [GHSA redacted]"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/angular/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee4b492d7a5fdb17da557443f9a9b576a3cd526f9ecc03784875952dae8c52c3"}},{"ruleId":"D38","level":"warning","message":{"text":"Medium CVE: [GHSA redacted]: picomatch: [GHSA redacted] (in 4 lockfiles)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/angular/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0c6c3d989cb21c3c0677129e6b0210e80c1abf153fe556d9019f766efacdc2e"}},{"ruleId":"D38","level":"warning","message":{"text":"Medium CVE: [GHSA redacted]: uuid: [GHSA redacted]"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/angular/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"95bb3550754cf1af43dfaef55b08db0805646072c64f2d5a621b87a4ebff20f9"}},{"ruleId":"D38","level":"warning","message":{"text":"Medium CVE: [GHSA redacted]: webpack-dev-server: [GHSA redacted]"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/angular/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"740b72ee7247b5106c82bdd738a39d6b2e859cd4e1653556b9d4118f68e048be"}},{"ruleId":"D38","level":"warning","message":{"text":"Medium CVE: [GHSA redacted]: webpack-dev-server: [GHSA redacted]"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/angular/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"69965c34267ff0f944d4106c4be8ff71bec343a46737c8630b52f6c55c1c74ca"}},{"ruleId":"D38","level":"warning","message":{"text":"Medium CVE: [GHSA redacted]: ajv: [GHSA redacted]"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/bff/reactjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"eee1230df466c918e74ea4eb240cb2a598241e8007924cefafb05740b7c6bde8"}},{"ruleId":"D38","level":"warning","message":{"text":"Medium CVE: [GHSA redacted]: axios: [GHSA redacted] (in 4 lockfiles)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/bff/reactjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e4547ae5d510e9c8e684b9dbb54ce85437bf6ce809d027f10d9f1419909fe2a"}},{"ruleId":"D38","level":"warning","message":{"text":"Medium CVE: [GHSA redacted]: axios: [GHSA redacted] (in 4 lockfiles)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/bff/reactjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6c803f93283c15b142b4573ca636b0cc401f03c39c964f4b73f7b1baadec588"}},{"ruleId":"D38","level":"warning","message":{"text":"Medium CVE: [GHSA redacted]: axios: [GHSA redacted] (in 4 lockfiles)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/bff/reactjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b781ff64978fdf0c742b530999bc5e2314b362155f581df28da68acd54a2db07"}},{"ruleId":"D38","level":"warning","message":{"text":"Medium CVE: [GHSA redacted]: axios: [GHSA redacted] (in 4 lockfiles)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/bff/reactjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3420d38ada6933189374cda09886d3b62d4667747eccdf775123e3ebcc3ef937"}},{"ruleId":"D38","level":"warning","message":{"text":"Medium CVE: [GHSA redacted]: axios: [GHSA redacted] (in 4 lockfiles)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/bff/reactjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fba5de78919838f70649b8378a64379b4af718099062a9f75c1ab86e99eb2515"}},{"ruleId":"D38","level":"warning","message":{"text":"Medium CVE: [GHSA redacted]: axios: [GHSA redacted] (in 4 lockfiles)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/bff/reactjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1a397a6b1e351e362c8a89365526b9b9b6dd47c898661151edfe38a48b595e4"}},{"ruleId":"D38","level":"warning","message":{"text":"Medium CVE: [GHSA redacted]: axios: [GHSA redacted] (in 4 lockfiles)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/bff/reactjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e6eb8a5da1b06401fb3ff40c5e8884e5dc728f03ad4b277c264400d602b4a85"}},{"ruleId":"D38","level":"warning","message":{"text":"Medium CVE: [GHSA redacted]: axios: [GHSA redacted] (in 4 lockfiles)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/bff/reactjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd1a1ad8ec7dedaf4a9da1389c953ebf10db46e23ece2f02d010bcbba7863c2b"}},{"ruleId":"D38","level":"warning","message":{"text":"Medium CVE: [GHSA redacted]: axios: [GHSA redacted] (in 4 lockfiles)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/UIs/bff/reactjs/package-lock.json"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"107b2280ab41d15bac536c0781fc57c61565fae76cd70601437ae832dfbcd814"}}],"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-1395","name":"Dependency on Vulnerable Third-Party 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}}}]}