1.7 KiB
1.7 KiB
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
- Repository rows use a unique, stable, Android-saveable key.
- A regression test covers repositories with the same name under different owners.
- Debug build, unit tests, and Android lint pass.
- The rebuilt APK launches and renders the authenticated repository list on the physical device.
- 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 lintDebugpassed.- The rebuilt APK installed over the existing authenticated installation successfully; the app process remained alive with
MainActivityresumed and the post-launch crash buffer empty. - The handset locked before the rendered repository rows could be inspected, so visual confirmation remains pending.