# 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에 유지한다.