# Changelog

## Score

- CAI 53 → 60 (+6.9)
- Rubric changed (rubric-2026.08.18 → rubric-2026.08.19) — scores are not directly comparable.

## Lenses

- Code Health 85 → 84 (-0.8)
- Architecture 78 → 78 (+0.0)
- Maturity 65 → 66 (+1.5)
- Readiness 57 → 58 (+0.3)
- Security 63 → 66 (+2.4)
- Accessibility 41 → 55 (+14.7)
- Performance 71 → 71 (+0.0)

## Resolved (7)

- Further orphaned files (smaller)
- Inconsistent naming for logging methods. Some use the pattern `Log.<Category>.<Action>` (e.g., `Log.Books.RemoveDiscountFailed`), while others use `Log.<Category>.<Noun>` (e.g., `Log.Authors.RetrievingAuthor`) or `Log.<Category>.<Verb>` (e.g., `Log.Infrastructure.ErrorProcessingDocumentChange`). Specifically, `RetrievingAuthor` uses a gerund, while `RemoveDiscountFailed` and `BookRestoring` use different grammatical forms. Additionally, `AuthStateAuthenticationPersistFailed` mixes the category `AuthState` with the action `AuthenticationPersistFailed` in a way that differs from the `Log.<Category>.<Action>` pattern seen in `Log.Books` and `Log.Authors`.
- LLM evaluation failed
- Off-boarding risk: anonymized user #1
- Outdated: Blazored.LocalStorage
- The class `DatabaseSeederPasswordTests` appears to be a test class for a type named `DatabaseSeeder`, but the actual `DatabaseSeeder` type is not listed in the provided symbols. However, the naming convention `<Type>Tests` is explicitly allowed. A more significant inconsistency is the use of `DatabaseSeeder` in the method name `SeedCategories` versus the class name `DatabaseSeeder`. While not a direct contradiction, the method `SeedCategories` implies a specific action, whereas the class is a general seeder. This is a minor stylistic point but acceptable.
- Thin analysable surface across projects

## New (80)

- AdminUserEndpoints.GetUsers (cognitive 18) (src/BookStore.ApiService/Endpoints/Admin/AdminUserEndpoints.cs)
- AggregateRulesAnalyzer.AnalyzeClass (cognitive 16) (src/BookStore.ApiService.Analyzers/Analyzers/AggregateRulesAnalyzer.cs)
- ApplicationServicesExtensions.AddIdentityServices (cognitive 19) (src/BookStore.ApiService/Infrastructure/Extensions/ApplicationServicesExtensions.cs)
- ApplicationServicesExtensions.AddIdentityServices (cyclomatic 19) (src/BookStore.ApiService/Infrastructure/Extensions/ApplicationServicesExtensions.cs)
- AuthorStatisticsGrouper.Group (cognitive 29) (src/BookStore.ApiService/Projections/AuthorStatisticsProjection.cs)
- BarePragmaDisable (src/BookStore.ApiService/Endpoints/Admin/AdminBookEndpoints.cs)
- BarePragmaDisable (src/BookStore.ApiService/Infrastructure/MartenConcurrencyExceptionMiddleware.cs)
- BarePragmaDisable (src/BookStore.Web/Infrastructure/LoggingHubFilter.cs)
- BookEndpoints.GetBook (cognitive 33) (src/BookStore.ApiService/Endpoints/BookEndpoints.cs)
- BookEndpoints.GetBook (cyclomatic 23) (src/BookStore.ApiService/Endpoints/BookEndpoints.cs)
- BookEndpoints.GetFavoriteBooks (cyclomatic 21) (src/BookStore.ApiService/Endpoints/BookEndpoints.cs)
- BookEndpoints.SearchBooks (cognitive 55) (src/BookStore.ApiService/Endpoints/BookEndpoints.cs)
- BookEndpoints.SearchBooks (cyclomatic 49) (src/BookStore.ApiService/Endpoints/BookEndpoints.cs)
- BookHandlers.Handle (cognitive 16) (src/BookStore.ApiService/Handlers/Books/BookHandlers.cs)
- BookStoreEventsService.ListenToStreamAsync (cognitive 21) (src/BookStore.Client/BookStoreEventsService.cs)
- CategoryStatisticsGrouper.Group (cognitive 29) (src/BookStore.ApiService/Projections/CategoryStatisticsProjection.cs)
- Change coupling clique: AuthorAggregate.cs, BookAggregate.cs, CategoryAggregate.cs, PublisherAggregate.cs (src/BookStore.ApiService/Aggregates/AuthorAggregate.cs)
- Change coupling clique: AuthorEndpoints.cs, BookEndpoints.cs, CategoryEndpoints.cs (src/BookStore.ApiService/Endpoints/AuthorEndpoints.cs)
- Change coupling clique: AuthorHandlers.cs, CategoryHandlers.cs, PublisherHandlers.cs (src/BookStore.ApiService/Handlers/Authors/AuthorHandlers.cs)
- Change coupling: AdminAuthorEndpoints.cs ↔ AdminPublisherEndpoints.cs (src/BookStore.ApiService/Endpoints/Admin/AdminAuthorEndpoints.cs)
- …and 60 more

## API surface

- Unchanged — 15 HTTP endpoints

## Architecture

- Unchanged — 6 containers · 3 contexts · 1 edges
