Ubisam-MobileGit/tasks/020-repository-list-saveable-key.md

39 lines
1.7 KiB
Markdown

# 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.