# TASK-020: Prevent repository-list crash after login Status: implemented; unlocked-screen confirmation pending Owner: Codex Reviewer: Claude ## Outcome After a successful OAuth login, the repository list renders without terminating the app, and subsequent launches remain usable. ## Risk Compose lazy-list item keys participate in saved UI state on Android. A key that cannot be stored in a `Bundle` throws on the main thread while the list is composed. ## Writable paths - `app/src/main/java/com/ubisam/ubgitea/feature/repositories/RepositoryListScreen.kt` - matching unit tests - this task file and `docs/development-log.md` ## Acceptance criteria - [x] Repository rows use a unique, stable, Android-saveable key. - [x] A regression test covers repositories with the same name under different owners. - [x] Debug build, unit tests, and Android lint pass. - [ ] The rebuilt APK launches and renders the authenticated repository list on the physical device. - [x] Repository secret-pattern scan reports no credential material. ## Incident evidence Physical-device crash buffer on 2026-08-26 reported `IllegalArgumentException: Type of the key RepositoryCoordinates(...) is not supported` from `SaveableStateHolderImpl.SaveableStateProvider`, originating while the repository `LazyColumn` was composed. ## Verification evidence - Focused regression tests passed. - `assembleDebug testDebugUnitTest lintDebug` passed. - The rebuilt APK installed over the existing authenticated installation successfully; the app process remained alive with `MainActivity` resumed and the post-launch crash buffer empty. - The handset locked before the rendered repository rows could be inspected, so visual confirmation remains pending.