# Changelog

## Score

- CAI 59 → 60 (+0.9)
- Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.

## Lenses

- Code Health 90 → 90 (-0.4)
- Architecture 99 → 100 (+0.5)
- Maturity 65 → 64 (-0.2)
- Readiness 52 → 54 (+1.9)
- Security 57 → 57 (+0.0)
- Domain Modelling 64 → 64 (+0.0)

## Resolved (3)

- Duplicated block (8–9 lines × 2) (Sources/SQLiteData/CloudKit/Internal/UnsyncedRecordID.swift)
- Hotspot: Sources/SQLiteData/StructuredQueries+GRDB/CustomFunctions.swift (Sources/SQLiteData/StructuredQueries+GRDB/CustomFunctions.swift)
- Off-boarding risk: anonymized user #1

## New (24)

- Coverage not measured — Swift suite
- Dependency not covered by the committed resolution: swift-tagged
- Duplicated block (10 lines × 2) (Examples/Integration/Regression Coverage/ParentRerenderCancellation.swift)
- Duplicated block (14–15 lines × 2) (Examples/Reminders/TagsForm.swift)
- Duplicated block (15–16 lines × 2) (Sources/SQLiteDataTestSupport/AssertQuery.swift)
- Duplicated block (17 lines × 9) (Examples/CaseStudies/Animations.swift)
- Duplicated block (21 lines × 4) (Examples/CaseStudies/Animations.swift)
- Duplicated block (23 lines × 3) (Examples/Integration/Regression Coverage/ChildIdentityReset.swift)
- Duplicated block (24 lines × 2) (Examples/Integration/Regression Coverage/ChildIdentityReset.swift)
- Duplicated block (6 lines × 2) (Sources/SQLiteData/Fetch.swift)
- Duplicated block (7 lines × 2) (Examples/Reminders/RemindersLists.swift)
- Duplicated block (7 lines × 2) (Sources/SQLiteData/CloudKit/SyncEngine.swift)
- Duplicated block (8 lines × 2) (Examples/Integration/Regression Coverage/ParentRerenderLoadError.swift)
- Duplicated block (8–9 lines × 2) (Sources/SQLiteData/CloudKit/Internal/UnsyncedRecordID.swift)
- Inconsistent initialization patterns for Fetch vs FetchOne/FetchAll. Fetch uses a specific `FetchKeyRequest` type in its constructor, while FetchOne and FetchAll accept generic `S` or `some Statement<V>` types directly. This creates a fragmented API surface where the same logical operation (initializing a fetch with a query) has different type constraints and parameter names across similar types.
- Inconsistent method signatures for loading data. `Fetch.load` expects a `FetchKeyRequest`, while `FetchOne` and `FetchAll` accept generic `S` or `Statement` types. Furthermore, `FetchOne` has two distinct overloads for `Statement<V>` and `Statement<Value>`, which is confusing and likely redundant if `V` and `Value` are related or if the distinction is not semantically clear to the user.
- Members sharing a duplicated core (4 members, 50+ identical tokens) (Examples/CaseStudies/Animations.swift)
- No assertions: previewSyncEngine (Tests/SQLiteDataTests/CloudKitTests/SyncEngineTests.swift)
- No assertions: testSyncEngine (Tests/SQLiteDataTests/CloudKitTests/SyncEngineTests.swift)
- Off-boarding risk: anonymized user #1
- …and 4 more
