# Changelog

## Score

- CAI 48 → 49 (+1.6)
- Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.

## Lenses

- Code Health 88 → 88 (-0.4)
- Architecture 95 → 97 (+2.1)
- Maturity 58 → 58 (-0.0)
- Readiness 31 → 36 (+5.0)
- Security 61 → 61 (+0.0)
- Domain Modelling 56 → 56 (-0.1)
- Performance 61 (new)

## Resolved (17)

- Change coupling: FoldersView.swift ↔ PlaylistsView.swift (Views/Folders/FoldersView.swift)
- Change coupling: HomeView.swift ↔ PlaylistsView.swift (Views/Home/HomeView.swift)
- Change coupling: TrackTableView.swift ↔ EntityDetailView.swift (Views/Components/TrackViews/TrackTableView.swift)
- Change-coupling hub: LibraryView.swift → FoldersView.swift, PlaylistDetailView.swift, PlaylistsView.swift (Views/Library/LibraryView.swift)
- ClassTooLong: PlaylistDetailView (Views/Playlists/PlaylistDetailView.swift)
- Dependency hygiene PARTLY measured — SwiftPM pinning read, dependency currency NOT established
- Documentation: no usage examples (README.md)
- Duplicated block (10–11 lines × 2) (Views/Playlists/PlaylistDetailView.swift)
- Duplicated block (1–14 lines × 6) (Managers/Database/DMSetup.swift)
- Duplicated block (5–8 lines × 4) (Managers/Database/DMSetup.swift)
- Hotspot: Application/AppDelegate.swift (Application/AppDelegate.swift)
- Hotspot: Managers/ArtistBioManager.swift (Managers/ArtistBioManager.swift)
- Hotspot: Managers/InternetRadioManager.swift (Managers/InternetRadioManager.swift)
- Hotspot: Managers/ScrobbleManager.swift (Managers/ScrobbleManager.swift)
- Hotspot: Models/Core/Playlist.swift (Models/Core/Playlist.swift)
- Hotspot: Views/Components/TrackViews/TrackTableOptionsDropdown.swift (Views/Components/TrackViews/TrackTableOptionsDropdown.swift)
- Hotspot: Views/Main/TrackDetailView.swift (Views/Main/TrackDetailView.swift)

## New (54)

- Change coupling: FoldersView.swift ↔ LibraryView.swift (Views/Folders/FoldersView.swift)
- Change-coupling hub: PlaylistsView.swift → FoldersView.swift, HomeView.swift, LibraryView.swift (Views/Playlists/PlaylistsView.swift)
- ContentView.body (cognitive 27) (Views/Main/ContentView.swift)
- ContentView.body (cyclomatic 26) (Views/Main/ContentView.swift)
- Duplicated block (10 lines × 2) (Models/Core/FullTrack.swift)
- Duplicated block (10 lines × 2) (Models/Core/SmartPlaylistField.swift)
- Duplicated block (10 lines × 2) (Views/Components/NowPlaying/NowPlayingControlsView.swift)
- Duplicated block (10 lines × 2) (Views/Home/EntityDetailView.swift)
- Duplicated block (11 lines × 2) (Models/Enums/LibraryFilterType.swift)
- Duplicated block (11 lines × 6) (Models/Enums/LibraryFilterType.swift)
- Duplicated block (12 lines × 2) (Views/Playlists/Sheets/RegularPlaylistEditorSheet.swift)
- Duplicated block (12 lines × 3) (Views/Folders/FoldersView.swift)
- Duplicated block (13 lines × 2) (Views/Folders/FoldersView.swift)
- Duplicated block (14 lines × 2) (Views/Components/NowPlaying/NowPlayingControlsView.swift)
- Duplicated block (14 lines × 2) (Views/Components/TrackViews/StationTableView.swift)
- Duplicated block (14 lines × 2) (Views/Folders/FoldersView.swift)
- Duplicated block (14 lines × 2) (Views/Main/PlayerView.swift)
- Duplicated block (16 lines × 2) (Views/Components/TrackViews/TrackTableOptionsDropdown.swift)
- Duplicated block (19 lines × 2) (Views/Main/TrackDetailView.swift)
- Duplicated block (1–5 lines × 6) (Managers/Database/DMSetup.swift)
- …and 34 more

## Changes since last survey

- 9 commits — 7 feature/other, 2 fixes

## By area

- Managers/Library — 2 commits
- Petrichor.xcodeproj/project.pbxproj — 2 commits
- Views/Components — 2 commits
- Core/LyricsLoader.swift — 1 commit
- Managers/Database — 1 commit
- Views/Main — 1 commit

## Notable commits

- fix: Fixes tracks list navigation not working via arrow keys (#392)
- fix: fix: fetch timed lyrics when only untimed lyrics are available (#377)
- change: Automatically pick up folder renames (#390)
- change: Prepare for v1.7.1 release (#391)
- change: Prepare for v1.7.2 release (#397)
- change: Prevent crashes from duplicate normalized track paths (#386)
- change: Prevent library data loss when folders are unavailable (#395)
- change: Prevent occasional app crash on opening immersive mode (#396)
- change: Update Pin/Unpin button icon for usability (#387)
