No task waits on a Codex review; the redesign tasks are confirmed on the product owner's Z Fold7; TASK-016's leftovers are on hold; no biometric reauthentication. Agent: main (opus) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
73 lines
3.9 KiB
Markdown
73 lines
3.9 KiB
Markdown
# TASK-043: Empty 즐겨찾기 tab offered 로그아웃 instead of a way back to 전체 저장소
|
|
|
|
Status: implemented; all required checks pass; live-confirmed on the human product owner's device
|
|
Owner: Claude
|
|
Reviewer: Codex
|
|
|
|
## Outcome
|
|
|
|
Live bug report: "현재 화면 즐겨찾기가 안되어있는데 로그아웃할거냐는 버튼이 왜 있지?" (the current
|
|
screen has nothing favorited, so why is there a button asking whether to log out?). Confirmed on
|
|
screen: the 즐겨찾기 tab, with zero starred repositories, showed "즐겨찾기한 저장소가 없습니다." and
|
|
directly below it a green primary button labeled "로그아웃" — logging out was presented as the answer
|
|
to "you have nothing starred," which makes no sense and is a jarring, semi-destructive-looking action
|
|
to put in front of a user who just wants to go star something.
|
|
|
|
Root cause: `RepositoryListScreen`'s `RepositoryListUiState.Empty` branch renders both of its two very
|
|
different cases — "즐겨찾기 has nothing starred yet" (fixable by visiting the other tab, right above
|
|
this message) and "the account itself has zero repositories" (a genuine dead end where logout really
|
|
is the only remaining action) — through the same `MessageState` call, which requires exactly one
|
|
mandatory action/label pair. The FAVORITES-mode branch reused `onLogout`/"로그아웃" from the ALL-mode
|
|
branch below it instead of getting its own action wired up.
|
|
|
|
## Scope
|
|
|
|
- Included: `feature/repositories/RepositoryListScreen.kt`'s `RepositoryListUiState.Empty` branch —
|
|
split into two calls to `MessageState`, one per mode. FAVORITES-mode now uses
|
|
`onShowAllRepositories` (already in scope at this call site) with a new
|
|
`repositories_favorites_empty_action` ("전체 저장소 보기") label instead of `onLogout`/"로그아웃".
|
|
ALL-mode (genuinely zero repositories on the account) is unchanged.
|
|
- Excluded: `MessageState` itself (still single-action by design; not worth generalizing for one call
|
|
site). `RepositoryListViewModel` — this is a pure presentation fix, the `Empty` state's `mode` field
|
|
it reads already existed.
|
|
|
|
## Acceptance criteria
|
|
|
|
- [x] 즐겨찾기 tab with zero starred repositories shows a button that reads "전체 저장소 보기", not
|
|
"로그아웃".
|
|
- [x] Tapping it switches to the 전체 저장소 tab (reuses the same `onShowAllRepositories` the tab row
|
|
itself already calls).
|
|
- [x] The genuinely-empty-account case (전체 저장소 tab, zero repositories at all) is unchanged and
|
|
still offers 로그아웃.
|
|
- [x] Build, unit tests, and lint pass.
|
|
- [x] Live-confirmed on the human product owner's device: emptied 즐겨찾기 (repository had been
|
|
unstarred since the last check), confirmed the button now reads "전체 저장소 보기", tapped it,
|
|
confirmed it switches to 전체 저장소 and shows the full repository list.
|
|
|
|
## Required checks
|
|
|
|
```text
|
|
./gradlew compileDebugKotlin compileDebugUnitTestKotlin testDebugUnitTest assembleDebug lintDebug
|
|
```
|
|
|
|
## Evidence
|
|
|
|
- `feature/repositories/RepositoryListScreen.kt`: `RepositoryListUiState.Empty` branch now has two
|
|
`MessageState` calls (FAVORITES vs. everything else) instead of one shared call with a hardcoded
|
|
logout action.
|
|
- `strings_repositories.xml`: new `repositories_favorites_empty_action` = "전체 저장소 보기".
|
|
- `./gradlew compileDebugKotlin compileDebugUnitTestKotlin testDebugUnitTest assembleDebug lintDebug`:
|
|
BUILD SUCCESSFUL, all unit tests passing unmodified (no test exercised this exact button label), 0
|
|
lint errors.
|
|
- Live device: installed over wireless `adb`. 즐겨찾기 tab (currently empty — a previously-starred
|
|
repository had been unstarred since TASK-041's verification) showed "전체 저장소 보기" (screenshot);
|
|
tapped it and confirmed it lands on 전체 저장소 with the full list visible (screenshot).
|
|
|
|
## Known limitations
|
|
|
|
None outstanding for this task.
|
|
|
|
## Review findings
|
|
|
|
None yet — no Codex review pending (Codex retired, 2026-09-29).
|