39 lines
1.7 KiB
Markdown
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.
|