Skip to content
CAI
Software that uses CAICheck a score

fabwu/dddinaction

52.1

Adequate · 20 September 2026

1.5k

lines of production code

PHP

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a Symfony-based web application that simulates the financial operations of an ATM and snack machine network. It models core domain entities such as ATMs, head office accounts, and snack machines, handling cash loading, unloading, and snack purchases with precise money arithmetic. The application provides a web interface for users to interact with machines and for administrators to manage cash balances across the network, backed by Doctrine ORM for persistence and a domain event system for synchronization.

Features

Added Bootstrap v4.0.0 styling framework

The application now includes the Bootstrap v4.0.0 CSS framework, providing a comprehensive set of responsive grid layouts, form controls, button styles, and utility classes. This enables consistent, mobile-first styling across the user interface components.

public · high confidence

Added Symfony console application entry point

A new \bin/console\ script has been added to the project, serving as the command-line entry point for the Symfony application. This file bootstraps the kernel, handles environment variable loading via Dotenv, manages debug mode settings, and initializes the Symfony Console Application to execute commands.

bin · high confidence

Initial Symfony application configuration and dependency injection setup

The application now includes the core Symfony framework bundles (Framework, Twig, Doctrine, Migrations) and configures the service container to support a layered architecture. Dependency injection is set up to map domain repositories (SnackMachine, Snack, Atm, HeadOffice) and the PaymentGateway to their respective Doctrine infrastructure implementations, enabling the underlying domain logic and persistence layers to function.

config · high confidence

Initial UI for ATM, Head Office, and Snack Machine interactions

Added Twig templates that provide the user interface for the application's core bounded contexts. The ATM view displays current money inside and charged amounts, allowing users to withdraw cash. The Head Office dashboard provides an overview of all snack machines and ATMs, enabling administrators to view details and perform cash loading or unloading operations. The Snack Machine interface allows users to insert various denominations of money, purchase specific snacks, and return funds. A base layout template standardizes the page structure across these views.

templates · high confidence

Initial application kernel setup with domain event handling

The application now includes a Symfony Kernel class that bootstraps the framework, registers bundles, and configures service containers and routes. A key addition is the integration of a \DomainHandlerCompilerPass\ during the build phase, which enables the automatic handling of domain events within the application's architecture.

src · high confidence

Introduce Snack Machine domain model with money management capabilities

This change introduces the core domain entities for the Snack Machine bounded context, including the SnackMachine aggregate root, Slot, Snack, and SnackPile value objects. Users can now interact with a snack machine that supports inserting money, buying snacks with change calculation, loading inventory, and critically, unloading the collected money from the machine's internal cash box. The implementation includes the necessary repositories and DTOs to persist and retrieve machine state.

src/Domain/SnackMachine · high confidence

Introduce UI controllers for ATM, Head Office, and Snack Machine interactions

New Symfony controllers have been added to expose the core domain capabilities through a web interface. The ATM controller allows users to view ATM status and withdraw cash via a payment gateway. The Head Office controller provides an overview dashboard and enables cash management actions, specifically loading cash to ATMs and unloading cash from snack machines. The Snack Machine controller implements the user-facing workflow for inserting specific coin/bill denominations, purchasing snacks, and returning money.

src/UI · high confidence

Introduce core domain infrastructure and value objects

This change establishes the foundational building blocks for the application's domain layer. It adds a common infrastructure set including an Entity base class with Doctrine ORM mapping, an AggregateRoot class that manages domain events, a DomainEvent interface, and a Handler abstract class for event processing. Additionally, it introduces a ValueObject abstract class and a concrete Money value object that models currency using specific coin and bill counts, providing arithmetic operations and formatting utilities.

src/Domain/Common · high confidence

Introduce head office entity and balance synchronization

Added a new HeadOffice domain entity to track financial balance and physical cash, along with a repository interface for persistence. A new event handler automatically updates the head office's balance whenever an ATM balance changes, ensuring financial records stay synchronized across the system.

src/Domain/Management · high confidence

Introduction of ATM domain model and infrastructure contracts

This change introduces the core domain logic for the ATM feature, including the \Atm\ entity which manages cash balances, calculates transaction commissions, and raises domain events upon balance changes. It also adds the \AtmRepository\ interface for data persistence, a \PaymentGateway\ interface for handling external payment processing, and supporting DTOs and event classes to facilitate communication within the system.

src/Domain/Atm · high confidence

Introduction of Infrastructure Layer with Doctrine Persistence and Domain Event Dispatching

This change establishes the application's infrastructure layer, introducing Doctrine ORM as the persistence mechanism for domain entities (ATM, Head Office, Snack Machine, Snack, Slot) via new repository implementations and database migrations. It also adds a Domain Event Dispatcher to handle asynchronous processing of domain events triggered by entity lifecycle changes, alongside a stub for a payment gateway.

src/Infrastructure · high confidence

Test coverage

Added integration tests for repository connectivity and reference data; Added unit tests for domain entities.

Dependencies

Migrate to Symfony 4 and update project metadata

The project has been restructured to use the Symfony 4 framework ecosystem, adding dependencies for the framework bundle, console, Twig, ORM, and YAML parsing, alongside development tools like PHPUnit 6.5 and the Maker bundle. The package name was changed from 'fabwu/domain-driven-design-in-practice' to 'fabwu/dddinaction', the license was updated to MIT, and the minimum PHP version requirement was set to 7.1.3. Configuration changes include enabling package sorting, defining auto-scripts for cache clearing and asset installation, and adding conflicts with the full Symfony monolith to ensure compatibility with the component-based approach.

(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 60 → 52 (-7.7)
  • Rubric changed (rubric-2026.08.17 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 100 → 100 (-0.1)
  • Architecture 69 → 69 (+0.0)
  • Maturity 55 → 55 (+0.0)
  • Readiness 50 → 61 (+11.1)
  • Security 95 → 67 (-27.5)
  • Accessibility 41 (new)

Resolved (7)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — no supported dependency manifest was read
  • Duplicated block (10 lines × 2) (src/UI/SnackMachineController.php)
  • No exposed public API
  • Test reliability not included
  • early-stage repository — too little history to judge knowledge freshness
  • single-maintainer — knowledge-concentration (bus factor) risk

New (35)

  • Abandoned package: sensio/framework-extra-bundle
  • Critical CVE: [GHSA redacted] (composer.lock)
  • Critical CVE: [GHSA redacted] (composer.lock)
  • Critical CVE: [GHSA redacted] (composer.lock)
  • Critical CVE: [GHSA redacted] (composer.lock)
  • Critical CVE: [GHSA redacted] (composer.lock)
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Duplicated block (9 lines × 2) (src/UI/SnackMachineController.php)
  • End-of-life framework: Symfony 4
  • High CVE: [GHSA redacted] (composer.lock)
  • High CVE: [GHSA redacted] (composer.lock)
  • Low CVE: [GHSA redacted] (composer.lock)
  • Medium CVE: [GHSA redacted] (composer.lock)
  • Medium CVE: [GHSA redacted] (composer.lock)
  • Medium CVE: [GHSA redacted] (composer.lock)
  • Medium: security finding (details withheld)
  • Medium: security finding (details withheld)
  • Medium: security finding (details withheld)
  • Medium: security finding (details withheld)
  • …and 15 more

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

Survey your own repository

fabwu/dddinaction 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 20 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 5bfae3968fe1d8fe11683351b6783009350d8308 — 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.