Navigating to Cloud → Browse → Years shows "Failed to decode response: The data couldn't be read because it isn't in the correct format."
The ChadCategory model expects item: String and count: Int?. The /api/cat/year endpoint likely returns item as a number (e.g., 2012 instead of "2012"), causing JSONDecoder to fail on the String type.
ChadCategory.item decode flexibly — accept both String and numeric values via custom init(from decoder:)Sources/Models/ChadMusic.swift — ChadCategory: add custom Decodable init to handle numeric item valuesAdd accessibilityIdentifiers to key views:
CloudBrowserView — browse section items, stat badges, search fieldCategoryDetailView — category item rows, error text, loading indicatorFilteredAlbumListView — album rows, empty stateAlbumDetailView — track rows, play button, album headerQueueView — now playing section, user queue items, up next items, clear buttonNowPlayingView — play/pause, next, previous, progress barMiniPlayerView — track title, play/pause4 test methods:
testCloudHomeLoads — Cloud tab shows stats + Browse section with all category typestestAllCategoriesLoad — Each category type loads without error texttestAlbumDetailOpens — Browse → Albums → tap first album → tracks appeartestCategoryDrillDown — Browse → Artists → tap first artist → filtered albums appear4 test methods:
testPlayCloudTrack — Albums → tap album → tap track → mini player appears with track titletestAddToQueue — Long-press track → "Add to Queue" → queue view shows entrytestQueuePlayNext — Long-press track → "Play Next" → queue view shows it at toptestQueueClear — Add tracks to queue → tap Clear → queue is empty3 test methods using URLProtocol stubs:
testCloudBrowserWithMockData — Stub stats + categories → verify UI renderstestDecodingErrorShowsMessage — Stub malformed JSON → verify error text appearstestAlbumTracksWithMockData — Stub album tracks → verify track list renders@MainActor and use XCUIApplication with launch arguments.URLProtocol subclass registered via -UITesting launch argument. App code checks for this flag and registers the stub protocol.-UITesting flag handling in app startup to enable test-specific behaviors.UITests/MixBoardUITests.swift — add new test methodsUITests/CloudBrowserUITests.swift — new file for cloud browser tests (Phase 1)UITests/PlaybackUITests.swift — new file for playback tests (Phase 2)UITests/MockURLProtocol.swift — new file for URL stubs (Phase 3)xcodebuild test on iPhone 17 Pro simulator