# Changelog

## Score

- CAI 33 → 33 (+0.6)
- Rubric changed (rubric-2026.08.17 → rubric-2026.08.18) — scores are not directly comparable.

## Lenses

- Code Health 60 → 57 (-2.4)
- Architecture 74 → 74 (+0.0)
- Maturity 50 → 50 (+0.0)
- Readiness 18 → 18 (+0.0)
- Security 36 → 39 (+3.1)

## Resolved (9)

- Change coupling: AggregateRepository.cs ↔ EventRepository.cs (Framework/Aggregate/AggregateRepository.cs)
- Inconsistent casing for property 'isPagingEnabled'. C# convention typically uses PascalCase for public properties.
- Inconsistent naming for repository interfaces and classes. Some use 'I' prefix for interfaces (IBaseRepository, IReadRepository) but others do not (BaseRepository, ReadRepository). Also, 'Base' vs 'Read' vs 'I' prefixing is inconsistent.
- Inconsistent spelling of 'Occurred' (British vs American). 'Occured' is a misspelling of 'Occurred' (double 'r').
- Redundant command types for a single state transition. Marking an item as complete or uncomplete are effectively the same operation (toggling or setting a boolean state) but split into two separate command types. This creates unnecessary complexity and duplication.
- The CQRS banner and features list are excellent, but there is no dedicated architecture or layering document for readers who want a high-level overview of each project's role rather than just the feature set. (README.md)
- The Eventstore configuration guide is a runnable step-by-step but it does not cover the full setup path for an event-sourced application: how to configure the database connection and snapshot storage in the Contracts layer. (Docs/EventStore_Config.md)
- Typo in namespace/assembly name: 'CommandHanders' and 'EventHanders' instead of 'CommandHandlers' and 'EventHandlers'.
- Typo in type name: 'Spanshot' instead of 'Snapshot'.

## New (7)

- Inconsistent casing for the same property name: 'isPagingEnabled' (lowercase 'i') vs standard PascalCase 'IsPagingEnabled'.
- Redundant event types for state transitions. Having separate event types for 'MarkedAsComplete' and 'MarkedAsUnComplete' is inconsistent with the command pattern where 'MarkTodoItemAsComplete' and 'MarkTodoItemAsUnComplete' are distinct commands. However, in an event-sourced or CQRS model, it is often cleaner to have a single 'TodoItemStatusChanged' event with a 'Status' enum, or at least consistent naming. The current naming is slightly verbose but acceptable. A more significant inconsistency is the naming of the commands: 'MarkTodoItemAsComplete' vs 'MarkTodoItemAsUnComplete'. The 'Un' prefix is less common than using a 'SetStatus' or 'UpdateStatus' command that handles both states. However, the most glaring issue is the lack of symmetry in the event types: 'TodoItemMarkedAsComplete' and 'TodoItemMarkedAsUnComplete' are parallel, but the command types use 'MarkTodoItemAs...' while the event types use 'TodoItemMarkedAs...'. This is a minor naming convention inconsistency between commands and events.
- The configuration guide is real but it does not explain how to run the background processor or connect the web app to the event-store cluster. (Docs/EventStore_Config.md)
- Typo in namespace/assembly name 'CommandHanders' and 'EventHanders' (missing 'l' in Handlers).
- Typo in type name 'TodoItemSpanshot' (missing 'h' in Snapshot) compared to the correct 'TodoItem'.
- misleading comment (Framework/Repository/SpecificationEvaluator.cs)
- misleading comment (Modules/Todo/Todo.BackgroundProcessor/Program.cs)

## API surface

- Unchanged — 2 HTTP endpoints

## Architecture

- Unchanged — 3 containers · 2 contexts · 1 edges
