fix(home): 팔로잉 탭 후속 검증을 반영한다

This commit is contained in:
2026-07-31 03:22:50 +09:00
parent f600d10e8b
commit 49f6fe592c
37 changed files with 2918 additions and 447 deletions

View File

@@ -0,0 +1,111 @@
# Phase 12 전체 empty 상태 리뷰
## 1. 리뷰 정보
| 항목 | 내용 |
|---|---|
| 리뷰 대상 | Phase 12 / Task 12.1~12.4 |
| 기준 commit 또는 working tree | `f600d10e8b63b6fdc812b18a874b077dfe072ca8` + 2026-07-31 working tree |
| 리뷰 일자 | 2026-07-31 |
| 리뷰어 | Codex |
| 기준 문서 | 대상 `prd.md`, `plan-task.md` |
| 리뷰 상태 | 수정 검증 완료 |
## 2. 리뷰 목적과 범위
### 목적
- Empty에서만 중앙 문구를 표시하고 Content/LoginRequired/Error에서는 숨기는지 확인한다.
- 한국어·영어·일본어 문구와 resource merge를 확인한다.
### 포함 범위
- `fragment_v2_main_home.xml`, `HomeMainFragment` empty/content binding, 3개 locale string, mapper Empty 조건과 source test.
### 제외 범위
- 로그인 유도 문구·CTA와 실기기 typography 시각 대조.
## 3. 판정 기준
- PRD의 전체 section empty 조건, fillViewport surface, locale별 문구와 visibility 분기를 기준으로 판정했다.
## 4. 검토한 근거
- `HomeFollowingUiState.kt:8-23`
- `HomeFollowingMappers.kt:18-35`
- `fragment_v2_main_home.xml:237-277`
- `HomeMainFragment.kt:397-419`, `503-524`
- `HomeFollowingFragmentSourceTest.kt:104-147`
### 실행한 검증
| 명령 | 결과 | 핵심 증거 |
|---|---|---|
| mapper/source/팔로잉 전체 회귀 | 성공 | 관련 테스트 실패 0 |
| resource merge/compile/ktlint/diff | 성공 | 모두 PASS |
## 5. 발견 사항 요약
| ID | 심각도 | 상태 | 제목 | 소유 Task | 후속 goal |
|---|---|---|---|---|---|
| `REV-P12-001` | Low | 수정 완료 | empty source test가 금지된 크기·정렬·visibility 표현을 고정함 | Task 12.4 | `P12-R1` 완료 |
## 6. 발견 사항 상세
모든 표시 section이 비었을 때만 mapper가 `Empty`를 만들고, Fragment는 empty 문구를 표시하면서 adapter와 section을 비운다. Content/LoginRequired/Error의 숨김 경로와 세 locale 문구도 요구사항과 일치한다.
### REV-P12-001 — empty source test가 UI 표현 속성 정책을 위반함
- **심각도:** Low
- **상태:** 수정 완료
- **관련 요구사항:** `docs/agent-guides/code-style.md` 테스트 관례
- **소유 Task:** Task 12.4
**관찰 내용**
`following empty state shows centered reusable empty string only for all empty content` 테스트는 XML width/height/gravity/textAlignment/visibility와 Fragment의 직접 `View.VISIBLE/GONE` 문자열을 assertion한다. 이 테스트는 UI 크기·constraint·visibility 테스트 금지 규칙이 추가된 뒤 생성되었다.
**근거**
- 테스트: `HomeFollowingFragmentSourceTest.kt:107-150`
- 가이드: `docs/agent-guides/code-style.md:42-43`
- 이력: 가이드 규칙 `566f76df` 이후 테스트 `2c609836`, locale 문자열 assertion `dadf3a51` 추가
**영향**
mapper의 Empty 판정과 locale 문구라는 유효한 계약에 UI 배치 구현 문자열이 섞여 있어, 디자인 조정이 기능 회귀처럼 실패하고 현재 테스트 정책과 불일치한다.
**권장 조치**
mapper Empty 조건·locale 문구·상태 분기 검증은 유지하고 width/height/정렬/직접 visibility assertion만 제거한다. 중앙 배치는 정적 대조와 Task 5.3 실기기 확인으로 검증한다.
**판정 기록**
- 2026-07-30 — 테스트 추가 시점과 assertion 범위를 현행 가이드와 대조해 확정.
- 2026-07-30 — 구현 전 Phase 12 Task 12.4 / `P12-R1`로 전환.
- 2026-07-30 — Task 12.4에서 UI 표현 source assertion만 제거하고 locale 문구와 상태 분기 검증을 유지했다.
## 7. 확정 항목의 plan·goal 전환
- Phase 12에 Task 12.4 / `P12-R1`을 추가해 완료했다.
## 8. 리뷰 종료 판정
| 판정 항목 | 결과 | 근거 |
|---|---|---|
| 리뷰 범위 전체 확인 | 충족 | mapper→layout→binding→resource 추적 |
| 후보 항목 판정 완료 | 충족 | REV-P12-001 확정 |
| 확정 항목 plan 반영 | 충족 | Task 12.4 |
| 검증 명령과 결과 기록 | 충족 | focused/통합 PASS |
**최종 결론:** 확정 발견 사항 모두 수정 완료
**남은 항목:** 실기기 중앙 정렬 대조는 Phase 5 Task 5.3에 포함
## 9. 수정 후 검증 기록
- 2026-07-30: Task 12.4로 empty source test명을 한글화하고 width/height/gravity/textAlignment/visibility 및 직접 `View.VISIBLE/GONE` 문자열 assertion을 제거했다. 3개 locale 문구와 `HomeFollowingUiState.Empty` 상태 분기 검증은 유지했다. focused test, 팔로잉 전체 회귀, resource merge, Kotlin compile, ktlint PASS.
- 2026-07-31 재점검: Empty mapper/state/locale 회귀를 포함한 Phase 1~13 focused 113개 test, resource merge, Kotlin compile, ktlint PASS. 연결 기기가 없어 중앙 정렬 실기기 확인은 Task 5.3에 유지했다.
- 2026-07-31 최종 검증: empty state·locale 회귀를 포함한 통합 20개 suite·306개 test와 resource merge, Kotlin compile, ktlint가 PASS했다. 추가 확정 수정 사항은 없고 실기기 중앙 정렬 확인은 Phase 5 Task 5.3에 유지한다.
- 2026-07-31 이번 리뷰 재검증: 전체 section empty mapper 조건, 세 locale 문구와 상태별 표시 분기를 다시 대조했다. 통합 16개 suite·120개 test, resource merge, Kotlin compile, ktlint가 PASS해 `REV-P12-001` 수정 완료 판정을 유지하고 중앙 정렬 시각 대조는 Phase 5 Task 5.3에 유지한다.