# Changelog

> **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 48 → 48 (+0.3)
- Rubric changed (rubric-2026.08.18 → rubric-2026.08.19) — scores are not directly comparable.

## Lenses

- Code Health 75 → 74 (-1.0)
- Architecture 86 → 86 (+0.0)
- Maturity 66 → 68 (+1.9)
- Readiness 69 → 70 (+0.8)
- Security 78 → 77 (-0.9)
- Domain Modelling 49 → 49 (+0.0)
- Accessibility 34 → 34 (+0.0)

## Resolved (5)

- High: security finding (details withheld)
- Off-boarding risk: anonymized user #1
- The document is a request/announcement and contains no context/problem or explicit decision (docs/decisions/2025-04-24-document-decisions.md)
- There are two distinct services: 'RoleManagementService' and 'UserManagementService'. However, 'RoleManagementService' has a method 'DeleteUserFromRole' which suggests it handles user-role relationships, while 'UserManagementService' handles user CRUD. This is a potential conceptual overlap or misplacement of responsibilities.
- Thin analysable surface across projects

## New (19)

- High: security finding (details withheld)
- Interface and implementation naming inconsistency: The interface is named with an 'I' prefix (ICatalogViewModelService) while the concrete implementation is named without the 'I' prefix (CatalogViewModelService). This is a common pattern, but the presence of both suggests a potential confusion or deviation from a strict 'I' prefix for all interfaces.
- Medium IaC: CKV2_GHA_1 (.github/workflows/comment-on-pr.yml)
- Medium IaC: CKV2_GHA_1 (.github/workflows/dotnetcore.yml)
- Medium IaC: CKV2_GHA_1 (.github/workflows/toc.yml)
- Medium IaC: CKV_AZURE_109 (infra/core/security/keyvault.bicep)
- Medium IaC: CKV_AZURE_113 (infra/core/database/sqlserver/sqlserver.bicep)
- Medium IaC: CKV_AZURE_17 (infra/core/host/appservice.bicep)
- Medium IaC: CKV_AZURE_225 (infra/core/host/appserviceplan.bicep)
- Medium IaC: CKV_AZURE_41 (infra/core/database/sqlserver/sqlserver.bicep)
- Medium IaC: CKV_AZURE_41 (infra/core/database/sqlserver/sqlserver.bicep)
- Medium IaC: CKV_AZURE_41 (infra/core/database/sqlserver/sqlserver.bicep)
- Medium IaC: CKV_AZURE_88 (infra/core/host/appservice.bicep)
- Medium IaC: CKV_DOCKER_3 (src/PublicApi/Dockerfile)
- Medium IaC: CKV_DOCKER_3 (src/Web/Dockerfile)
- No context/problem and no consequences/trade-offs; only implementation rationale is present (docs/decisions/2025-04-25-just-the-docs-theme.md)
- Off-boarding risk: anonymized user #1
- The document is a request-only banner with no context/problem and no explicit decision; only the repository path '/decisions' is recorded (docs/decisions/2025-04-24-document-decisions.md)
- The interface ICatalogViewModelService and its implementation CatalogViewModelService are present. While this is a common pattern, the inconsistency in naming (one has 'I', the other doesn't) can be flagged if the codebase aims for strict consistency. However, this is a standard convention. Let's look for a more direct inconsistency.

## API surface

- Unchanged — 25 HTTP endpoints
