Skip to content
CAI
Software that uses CAICheck a score

Andyhacool/HRM

37.0

Weak · 21 September 2026

3k

lines of production code

C#

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a .NET Core application that implements an event-sourced architecture to track and persist domain events. It utilizes a SQL-based event store to record and retrieve the history of aggregates, ensuring that all domain events are captured for audit or replay purposes. The codebase has been updated to use specific versions of .NET Core and Entity Framework Core, with obsolete test projects removed from the build configuration.

Features

Added event sourcing infrastructure for SQL-based event storage

The data layer now includes a new \EventSourcingContext\ and \SqlEventStore\ implementation to persist domain events to a SQL database. This introduces a \StoredEvent\ table and associated Entity Framework Core migrations, enabling the system to record and retrieve event history for aggregates via the \IEventStoreRepository\.

src/HRM.Infra.Data · high confidence

Introduced event sourcing infrastructure with event store interface and storage model

Added the core building blocks for event sourcing in the HRM domain. The new IEventStore interface defines a generic Save method for persisting events, while the StoredEvent class provides the concrete model for storing event data, user context, and aggregate identifiers. This establishes the foundation for tracking and replaying domain events.

HRM.Domain.Core, src/HRM.Domain.Core · medium confidence

Behavioural changes

Add MIT License and remove obsolete unit test project

The repository now includes an MIT License file, clarifying the software's usage and distribution rights. Additionally, the solution file (HRM.sln) has been updated to remove the 'HRM.Infrastructure.UnitTests' project, indicating that this specific unit test suite is no longer part of the build configuration.

(repo-wide) · high confidence

Event sourcing integration for domain events

The in-memory message bus now persists domain events to an event store before publishing them, ensuring that all domain events are recorded for audit or replay purposes. This is supported by registering the event store dependencies (IEventStore, EventStoreRepository, and EventSourcingContext) in the IoC container.

src/HRM.Infra.CrossCutting.Bus, src/HRM.Infra.CrossCutting.IoC · medium confidence

Dependencies

Update .NET Core and EF Core dependencies

The project files have been updated to use newer versions of key .NET libraries. Microsoft.AspNetCore.App and Microsoft.AspNetCore.Razor.Design are upgraded to version 2.2.5 and 2.2.0 respectively. Additionally, Microsoft.EntityFrameworkCore and its related packages (Design, SqlServer, Tools) are upgraded from version 2.2.2 to 2.2.4. The .NET Core runtime is also explicitly set to version 2.2.0 in the domain core project.

(dependencies) · medium confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 40 → 37 (-3.4)
  • Rubric changed (rubric-2026.08.18 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 63 → 61 (-1.9)
  • Architecture 73 → 73 (+0.0)
  • Maturity 68 → 68 (+0.0)
  • Readiness 29 → 27 (-2.7)
  • Security 37 → 33 (-4.2)
  • Domain Modelling 51 → 44 (-6.7)
  • Event-Driven 100 → 100 (+0.0)

Resolved (13)

  • Bounded contexts not declared
  • High CVE: Microsoft.NETCore.App 2.2.0
  • High CVE: Microsoft.NETCore.App 2.2.0
  • Medium CVE: Microsoft.NETCore.App 2.2.0
  • Medium CVE: System.Data.SqlClient 4.6.0
  • Mock framework: Moq
  • No exposed public API
  • Secret: generic-api-key (src/HRM.WebApi/appsettings.json)
  • Test runner surfaced no tests
  • early-stage repository — too few commits for a meaningful bus factor
  • early-stage repository — too little history to judge knowledge freshness
  • git history depth insufficient
  • git history depth insufficient

New (18)

  • Documentation: no installation or build instructions (README.md)
  • Duplicated block (7 lines × 2) (src/HRM.Domain/Validations/EmployeeValidation.cs)
  • Duplicated block (8 lines × 3) (src/HRM.Infra.CrossCutting.Identity/Models/AppIdentityDbContext.cs)
  • End-of-life runtime: .NET netcoreapp2.2
  • High CVE: Microsoft.NETCore.App 2.2.0
  • High secret: WD-SECRET-0002 (src/HRM.WebApi/appsettings.json)
  • Inconsistent naming convention for address components. 'City', 'Country', and 'Street' are simple nouns, whereas 'State' is also a simple noun but the parameter 'string state' in the UpdateAddress method suggests a potential mismatch in casing or naming if it were a property. However, the more significant inconsistency is between the property names in Address (City, Country, Street, State) vs the parameter names in UpdateAddress (string, string, string, string) which are unnamed, but looking at other address-related properties like 'HRM.Domain.Employee.Address' (complex) vs 'HRM.Domain.SharedKernel.Address' (complex), the properties inside Address are consistent. Wait, looking closer at the list: HRM.Domain.SharedKernel.Address.City, Country, Street. There is no State property listed in the Address type, but there is a parameter string state in UpdateAddress. This is a parameter, not a property. Let's look for a clearer inconsistency.

Actually, looking at HRM.Domain.Commands.EmployeeCommand properties: Created_Date, Date_Left, Note, ZipCode. ZipCode is camelCase/PascalCase compound, while Created_Date and Date_Left use underscores. This is a clear inconsistency within the same type.

  • Inconsistent naming convention for date properties within the EmployeeCommand type. 'Created_Date' uses a prefix, while 'Date_Left' uses a suffix. Standard convention typically prefers one style (e.g., 'CreatedDate' and 'LeftDate' or 'DateCreated' and 'DateLeft') for consistency.
  • Leaked secret: signing-key (src/HRM.WebApi/appsettings.json)
  • Mock framework: Moq
  • Mock framework: Moq
  • Test project verifies nothing: HRM.Infrastructure.UnitTests (src/HRM.Infrastructure.UnitTests/UnitTest1.cs)
  • WriteOnlyPrivateField (src/HRM.Application/Services/AccountAppService.cs)
  • WriteOnlyPrivateField (src/HRM.Domain/CommandHandlers/EmployeeCommandHandler.cs)
  • WriteOnlyPrivateField (src/HRM.Domain/CommandHandlers/EmployeeCommandHandler.cs)
  • WriteOnlyPrivateField (src/HRM.WebApi/Controllers/AccountController.cs)
  • redundant comment (src/HRM.Domain/Entities/Employee.cs)
  • redundant comment (src/HRM.Domain/Entities/Identity/User.cs)

API surface

  • Unchanged — 8 HTTP endpoints

Architecture

  • Unchanged — 2 containers · 2 contexts · 1 edges

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

Andyhacool/HRM was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 21 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit db19dca3843e7d2e1b0c05b9a3607c80f316a224 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-28e75b8e3254.