CAI Get a survey →

The catalog

Every dimension the CAI measures.

The standard is composed of 124 dimensions across 10 lenses. Each is a definition — what it measures and how it's evaluated — pinned to a rubric version. This catalog is the standard's vocabulary; the spec documents how each folds into the score.

4 published versions · this catalog as JSON

Showing only the Domain Modelling lens. Show all 124 dimensions →

124 dimensions

Domain Modelling · 8 dimensions

IDDimensionWhat it measuresWhy it mattersEvaluator
DM1 Aggregate boundariesmeta Whether aggregates reference each other by identity (id) rather than by direct object reference — the core DDD consistency-boundary rule. When this is weak, the parts of the domain that must stay consistent reference each other directly instead of by identity, so the rules that keep your data correct are easier to break. tool
DM2 Strongly-typed idsmeta How much of the domain uses strongly-typed ids vs raw Guid/string/int — adoption curve, not all-or-nothing. When this is weak, much of the domain uses raw ids (plain strings, numbers, GUIDs) instead of strongly-typed ones, so it is easy to pass the wrong id and corrupt data without the compiler noticing. tool
DM3 Integration-event couplingmeta Whether cross-context integration events stay loosely coupled — no producer-owned enums/domain types leaking to consumers. Shared-kernel/contracts types are allowed. When this is weak, cross-context integration events leak internal domain types to their consumers, so independent parts of the system become tightly coupled and harder to change apart. tool
DM4 Rich vs anemic modelmeta Whether aggregates/entities carry the behaviour that protects their invariants, rather than being data bags driven by external services. When this is weak, the domain objects are little more than data bags whose rules live in external services, so the business rules that protect your data are scattered and easy to bypass. tool
DM5 Encapsulated statemeta Whether entities protect their state (private/init-only setters) instead of exposing public setters that bypass invariants. Softened when a rehydration framework (Marten/EF) is present. When this is weak, domain objects expose their internal state through public setters, so other code can change them in ways that skip the rules meant to keep them valid. tool
DM6 Domain ↔ infrastructure boundarymeta Whether the domain layer stays free of infrastructure dependencies (EF/Marten/HTTP/ASP.NET) — the clean-architecture dependency rule. When this is weak, the core business logic depends directly on technical infrastructure (database, HTTP, framework), so the rules at the heart of your system are hard to test and tied to specific technology. tool
DM7 Repository granularitymeta Whether repositories are per aggregate root (not per child entity) so the root's invariants can't be bypassed. When this is weak, data access is not organised around the natural consistency boundaries, so the rules that protect your most important objects can be bypassed. tool
DM8 Value-object opportunitiesmeta Whether clusters of primitives that travel together (a missing value object) are extracted — a low-weight suggestion, LLM-confirmed when configured. When this is weak, groups of values that belong together are passed around as loose primitives, so the same validation has to be repeated everywhere and is easy to get wrong. LLM · advisory