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

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