Skip to content
CAI
Software that uses CAICheck a score

meixuesong/aggregate-persistence

55.6

Adequate · 22 September 2026

588

lines of production code

Java

primary language

7

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a Java library for aggregate persistence, providing mechanisms to detect changes in domain objects through deep comparison and deep copying. It enables the creation of snapshots and the generation of field-level deltas to track state modifications. The codebase includes comprehensive test coverage for these features, validating behavior across complex object graphs and various data types.

Features

Introduce deep comparison and deep copying for aggregate roots

The library now provides built-in support for deep comparison and deep copying of aggregate roots. A new \DeepComparator\ interface and \JavaUtilDeepComparator\ implementation allow the \Aggregate\ class to detect changes by comparing the current root with its snapshot. Additionally, a \DeepCopier\ interface and \SerializableDeepCopier\ implementation enable deep copying of objects, which is used to create snapshots of the aggregate root. These changes facilitate more robust change detection and state management within the aggregate pattern.

src/main · high confidence

Test coverage

Added deep equality tests for aggregate persistence; Added test fixtures for complex object persistence; Added tests for aggregate persistence and data object utilities.

Dependencies

Initial project setup with Java 21 and updated dependencies

The project has been initialized with a new pom.xml that targets Java 21 and includes updated dependencies, including junit 4.13.1, mockito-core 4.11.0, and commons-lang3 3.18.0. The build is configured to use the Maven compiler plugin 3.12.1, and release profiles are set up for publishing to the Central Repository.

(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

Score

  • CAI 54 → 56 (+1.1)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 99 → 99 (+0.4)
  • Architecture 69 → 69 (+0.0)
  • Maturity 53 → 54 (+1.0)
  • Readiness 39 → 45 (+5.4)
  • Security 100 → 78 (-22.2)

Resolved (8)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • Duplicated block (7 lines × 2) (src/main/java/com/github/meixuesong/aggregatepersistence/Aggregate.java)
  • Duplicated block (8 lines × 2) (src/main/java/com/github/meixuesong/aggregatepersistence/DataObjectUtils.java)
  • No exposed public API
  • Off-boarding risk: anonymized user #1
  • Scanner failed to run — not a clean result
  • Test reliability not included

New (16)

  • Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
  • Documentation: no contributor guidance (README.md)
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Duplicated block (7 lines × 2) (src/main/java/com/github/meixuesong/aggregatepersistence/Aggregate.java)
  • Duplicated block (9 lines × 2) (src/main/java/com/github/meixuesong/aggregatepersistence/DataObjectUtils.java)
  • No SBOM
  • No assertions: testAtomicStuff (src/test/java/com/github/meixuesong/aggregatepersistence/deepequals/DeepEqualsTest.java)
  • No assertions: testSymmetry (src/test/java/com/github/meixuesong/aggregatepersistence/deepequals/DeepEqualsTest.java)
  • No assertions: testUnorderedMapsWithKeyHashCodeCollisions (src/test/java/com/github/meixuesong/aggregatepersistence/deepequals/DeepEqualsTest.java)
  • No assertions: testUnorderedMapsWithKeyValueHashCodeCollisions (src/test/java/com/github/meixuesong/aggregatepersistence/deepequals/DeepEqualsTest.java)
  • No assertions: testUnorderedMapsWithValueHashCodeCollisions (src/test/java/com/github/meixuesong/aggregatepersistence/deepequals/DeepEqualsTest.java)
  • No build provenance
  • No dependency advisory monitoring
  • Scanner failed to run — not a clean result
  • Scanner failed to run — not a clean result

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

Survey your own repository

meixuesong/aggregate-persistence 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 22 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 d70c430ca4aa920954f8b36544120a37ab941e5b — 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-90d5d2fe38ee.