# Changelog

## Score

- CAI 64 → 64 (+0.0)

## Lenses

- Code Health 72 → 72 (+0.0)
- Architecture 96 → 96 (+0.0)
- Maturity 60 → 60 (+0.0)
- Readiness 59 → 59 (+0.0)
- Security 68 → 68 (+0.0)
- Performance 100 → 100 (+0.0)

## Resolved (4)

- Duplicate types with identical public API surfaces. KeychainService and KeychainWrapper expose the exact same set of methods (accessibility, bool, data, double, float, hasValue, integer, number, object, string, dataRef, set, removeObject, removeAllKeys) with identical signatures. KeychainService appears to be a thin wrapper around KeychainWrapper, exposing no additional functionality while duplicating the entire interface.
- Inconsistent naming pattern for filtering. While overloading is acceptable, the distinction between 'getFileNames' (all) and 'getFileNames(matching: ...)' is slightly ambiguous compared to standard Swift conventions which might prefer 'getFileNames()' and 'getFileNames(matchingPattern: ...)' or similar. However, the more significant issue is the lack of a unified 'find' or 'list' verb. Other types use 'findFilesWithFileNamePrefix' and 'findFilesWithFileNameSuffix'. This inconsistency in verb choice ('getFileNames' vs 'findFilesWith...') across similar operations in the same module is confusing.
- PR-triggered workflow without a permissions block
- Redundant properties on the same type. MimeType exposes both 'identifier' and 'id' as String properties. It is unclear if these return different values or are aliases. In a consistent API, a type should have a single canonical accessor for a specific piece of data.

## New (3)

- PR-triggered workflow without a permissions block (.github/workflows/build.yml)
- PR-triggered workflow without a permissions block (.github/workflows/test.yml)
- Workflow token grant is wider than its jobs use (.github/workflows/version-bump.yml)
