Skip to content
CAI
Software that uses CAICheck a score

sandeepkumar17/CleanArch

71.7

Strong · 21 September 2026

616

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 8.0-based RESTful API designed for contact management, structured using Clean Architecture principles. It exposes endpoints for creating, reading, updating, and deleting contacts, while handling authentication and API key validation. The backend leverages Dapper and ADO.NET for SQL data access and log4net for logging, with integration tests validating the CRUD operations.

Features

Added Log4Net-based Logger implementation

The CleanArch.Logging module now includes a new Logger class that implements the ILogger interface using the log4net library. This provides a concrete logging implementation with support for Debug, Info, Warn, Error, and Fatal log levels, including exception handling and stack trace serialization.

CleanArch.Logging · high confidence

Added contact data access and unit of work infrastructure

The CleanArch.Infrastructure layer now includes the ContactRepository, which implements IContactRepository using Dapper and ADO.NET to perform CRUD operations on the Contact entity. A UnitOfWork class is also introduced to manage the contact repository, and both are registered in the service collection via ServiceCollectionExtension.RegisterServices.

CleanArch.Infrastructure · high confidence

Initial release of the CleanArch API with contact management and authentication

The CleanArch.Api project has been introduced, providing a new RESTful API for managing contacts (CRUD operations) and handling authentication. The API includes an AuthController for unauthorized access responses, a BaseApiController with an AuthorizationFilterAttribute that validates API keys from headers, and a ContactController that exposes endpoints for retrieving, adding, updating, and deleting contacts. Additionally, the application is configured with log4net for file-based logging and Swagger for API documentation.

CleanArch.Api · high confidence

Behavioural changes

Initial API code base for Contact management

Added the initial code base for managing contacts, including the Contact entity, repository interfaces (IContactRepository, IRepository, IUnitOfWork), a logging interface, and SQL queries and scripts for the Contact table.

CleanArch.Application, CleanArch.Core, CleanArch.Sql · medium confidence

Updated .NET 8.0 Clean Architecture sample with Dapper and logging

The project has been upgraded to .NET 8.0, moving from the previous .NET 6 base. The solution now includes a complete Clean Architecture structure with projects for Core, Application, Infrastructure, SQL (using Dapper), Logging (log4net), and MSTest-based unit testing. The README has been expanded to document the setup, including Swagger UI configuration, API authentication, and CRUD operations.

(repo-wide) · high confidence

Test coverage

Added integration tests for the ContactController

Added new test coverage for the ContactController's integration points, including a helper class with test constants and an integration test class that validates CRUD operations (Add, Update, Delete, Get) and verifies error handling for SQL and general exceptions.

CleanArch.Test · high confidence

Dependencies

Upgrade to .NET 8 and add initial project dependencies

All project files in the solution have been updated to target .NET 8.0. This includes adding new package references such as Swashbuckle.AspNetCore, Dapper, log4net, and various Microsoft.Extensions.\* libraries, alongside test framework dependencies like MSTest and Moq.

(dependencies) · high 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

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — 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.

Score

  • CAI 72 → 72 (+0.1)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 82 → 82 (-0.7)
  • Architecture 81 → 81 (+0.0)
  • Maturity 62 → 62 (+0.0)
  • Readiness 78 → 78 (+0.0)
  • Security 84 → 88 (+4.4)

Resolved (11)

  • Bounded contexts not declared
  • Duplicated block (14 lines × 2) (CleanArch.Api/Controllers/ContactController.cs)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • No exposed public API
  • early-stage repository — too little history to judge knowledge freshness
  • git history depth insufficient
  • git history depth insufficient
  • redundant comment (CleanArch.Api/Program.cs)
  • redundant comment (CleanArch.Api/Program.cs)
  • single-maintainer — knowledge-concentration (bus factor) risk

New (12)

  • CoverageExclusion (CleanArch.Sql/Queries/ContactQueries.cs)
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Duplicated block (13 lines × 5) (CleanArch.Api/Controllers/ContactController.cs)
  • Duplicated block (15 lines × 4) (CleanArch.Api/Controllers/ContactController.cs)
  • Duplicated block (19 lines × 2) (CleanArch.Api/Controllers/ContactController.cs)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • Members sharing a duplicated core (5 members, 50+ identical tokens) (CleanArch.Api/Controllers/ContactController.cs)
  • No dependency advisory monitoring
  • The ContactQueries class mixes plural and singular naming conventions for its properties/methods. 'AllContact' uses a singular noun 'Contact' for a collection (should likely be 'AllContacts' or 'GetAllContacts'), while 'ContactById', 'DeleteContact', 'AddContact', 'UpdateContact' use singular 'Contact' for specific operations. 'AllContact' is inconsistent with standard pluralization for collections.
  • Workflow token permissions not restricted

API surface

  • Unchanged — 6 HTTP endpoints

Architecture

  • Unchanged — 2 containers · 0 contexts · 0 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

sandeepkumar17/CleanArch 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 c20ab4ce71ce8ec9bda0fc2919cd3b2c932785ed — 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-7e99f679af8e.