# Phase 10 On Air 라이브 item 리뷰 ## 1. 리뷰 정보 | 항목 | 내용 | |---|---| | 리뷰 대상 | Phase 10 / Task 10.1~10.4 | | 기준 commit 또는 working tree | `f600d10e8b63b6fdc812b18a874b077dfe072ca8` + 2026-07-31 working tree | | 리뷰 일자 | 2026-07-31 | | 리뷰어 | Codex | | 기준 문서 | 대상 `prd.md`, `plan-task.md` | | 리뷰 상태 | 수정 검증 완료 | ## 2. 리뷰 목적과 범위 ### 목적 - 263dp × 100dp 캡슐 item의 필드·배경·profile binding과 가로 목록 배치를 확인한다. ### 포함 범위 - `item_home_following_live.xml`, `bg_home_following_live_capsule.xml` - `HomeFollowingLiveAdapter.kt`, following RecyclerView와 source test ### 제외 범위 - item 터치 이동은 Phase 4 `REV-P4-001`에서 별도 판정. ## 3. 판정 기준 - 캡슐 내부 표현은 Task 10.1, 가로 item 간격은 PRD UX의 item spacing과 기존 홈 helper 관례로 판정했다. ## 4. 검토한 근거 - `item_home_following_live.xml:2-99` - `bg_home_following_live_capsule.xml:2-8` - `HomeFollowingLiveAdapter.kt:23-31` - `HomeRecyclerItemLayoutParams.kt:7-14` - creator/chat adapter의 동일 horizontal item layout parameter 사용 - `item_home_following_live.xml:5-6`: root `263dp x 100dp` ### 실행한 검증 | 명령 | 결과 | 핵심 증거 | |---|---|---| | 팔로잉 전체 회귀 | 성공 | 39개 테스트 실패 0 | | resource merge/compile/ktlint | 성공 | 모두 PASS | | adapter layout parameter 수동 대조 | 문제 확인 | live adapter만 end margin helper 미사용 | ## 5. 발견 사항 요약 | ID | 심각도 | 상태 | 제목 | 소유 Task | 후속 goal | |---|---|---|---|---|---| | `REV-P10-001` | Low | 수정 완료 | 연속된 On Air 캡슐 item 사이 간격이 없음 | Task 10.2 | `P10-R1` 완료 | | `REV-P10-002` | Low | 수정 완료 | On Air margin을 source 문자열 테스트로 고정해 UI 표현 속성 테스트 금지 규칙을 위반함 | Task 10.3 | `P10-R2` 완료 | | `REV-P10-003` | Medium | 수정 완료 | 간격 helper가 On Air root의 `263dp` 폭을 `WRAP_CONTENT`로 덮음 | Task 10.4 | `P10-R3` 완료 | ## 6. 발견 사항 상세 ### REV-P10-001 — On Air 가로 item end margin 누락 - **심각도:** Low - **상태:** 수정 완료 - **관련 요구사항:** PRD 가로 리스트 item 간격, Task 10.1 Figma 간격 - **소유 Task:** Task 10.2 **관찰 내용** live adapter는 XML을 inflate한 뒤 layout parameter를 그대로 반환한다. RecyclerView에는 ItemDecoration이 없어 두 번째 item부터 캡슐이 바로 붙는다. creator/chat adapter는 공통 helper로 `spacing_12` end margin을 적용한다. **근거** - 코드: `HomeFollowingLiveAdapter.kt:23-31` - 비교: `HomeFollowingCreatorAdapter.kt:28-30`, `HomeFollowingChatAdapter.kt:23-26` - helper: `HomeRecyclerItemLayoutParams.kt:7-14` **영향** On Air item이 2개 이상일 때 Figma/기존 홈 가로 리스트와 다른 비핵심 UI가 노출된다. **권장 조치** 신규 decoration 없이 기존 `recyclerItemLayoutParams(parent)`를 재사용한다. **판정 기록** - 2026-07-30 — RecyclerView/adapter/helper 경로 대조로 확정. - 2026-07-30 — Task 10.2에서 기존 helper를 적용하고 resource/compile/회귀 검증을 완료. ### REV-P10-002 — On Air 간격 source test가 테스트 정책을 위반함 - **심각도:** Low - **상태:** 수정 완료 - **관련 요구사항:** `docs/agent-guides/code-style.md` 테스트 관례 - **소유 Task:** Task 10.3 **관찰 내용** Task 10.2에서 추가한 `following live adapter keeps horizontal item spacing`은 `recyclerItemLayoutParams(parent)` 문자열을 검사해 item margin이라는 UI 표현 속성을 고정한다. 현재 가이드는 View 크기·margin·padding 같은 UI 표현 속성 테스트를 새로 작성하지 않도록 규정한다. **근거** - 테스트: `HomeFollowingFragmentSourceTest.kt:355-363` - 가이드: `docs/agent-guides/code-style.md`의 “신규 테스트는 로직에 대한 테스트 코드만 작성” 및 UI margin 테스트 금지 규칙 - production: `HomeFollowingLiveAdapter.kt:23-30`의 helper 적용은 현재 유지되어야 함 **영향** 기능에는 영향이 없지만 금지된 테스트 유형이 회귀 Gate에 추가되고, 내부 구현 문자열 변경만으로 불필요한 실패가 발생한다. **권장 조치** 해당 신규 source test만 제거하고 adapter의 helper 적용은 유지한다. 이 UI 간격은 `rg` 정적 대조, resource merge, compile, 수동 화면 확인으로 검증한다. **판정 기록** - 2026-07-30 — 신규 테스트 diff와 현재 코드 스타일 가이드를 대조해 확정. - 2026-07-30 — Task 10.3에서 금지된 UI margin source test만 제거하고 helper 재사용 대체 검증을 완료. ### REV-P10-003 — 간격 보완이 On Air 고정 폭을 보존하지 않음 - **심각도:** Medium - **상태:** 수정 완료 - **관련 요구사항:** Task 10.1 `263dp x 100dp`, Task 10.2 “기존 XML 크기 유지” - **소유 Task:** Task 10.4 **관찰 내용** Task 10.2는 `recyclerItemLayoutParams(parent)`를 적용해 XML 크기를 유지했다고 기록했지만, helper는 새 `RecyclerView.LayoutParams(WRAP_CONTENT, WRAP_CONTENT)`를 반환한다. 따라서 inflate된 root의 `263dp x 100dp` 중 width 계약이 런타임에 `WRAP_CONTENT`로 교체된다. **근거** - layout: `item_home_following_live.xml:5-6` - adapter: `HomeFollowingLiveAdapter.kt:23-30` - helper: `HomeRecyclerItemLayoutParams.kt:7-14` - 문서: Task 10.2 완료 증거와 검증 기록 **영향** On Air 캡슐의 폭이 자식 content 측정값에 따라 축소되거나 달라져 제목/상태 영역과 연속 item 배치가 Figma와 불일치할 수 있다. **권장 조치** inflate된 기존 layout parameter의 width/height는 보존하고 `spacing_12` end margin만 추가한다. UI width/margin 자동 테스트는 다시 추가하지 않고 정적 대조·resource merge·compile·Task 5.3 수동 확인으로 검증한다. **판정 기록** - 2026-07-30 — XML root 크기와 adapter/helper의 최종 layout parameter를 대조해 확정. - 2026-07-30 — 구현 전 Phase 10 Task 10.4 / `P10-R3`로 전환. - 2026-07-30 — Task 10.4에서 inflate된 root의 기존 layout parameter를 보존하고 end margin만 적용하도록 수정했다. ## 7. 확정 항목의 plan·goal 전환 - Phase 10에 Task 10.2 / `P10-R1`을 추가해 완료했다. - 재점검에서 Task 10.3 / `P10-R2`를 추가해 완료했다. - 추가 재점검에서 Task 10.4 / `P10-R3`를 추가해 완료했다. ## 8. 리뷰 종료 판정 | 판정 항목 | 결과 | 근거 | |---|---|---| | 리뷰 범위 전체 확인 | 충족 | layout/drawable/adapter 대조 | | 후보 항목 판정 완료 | 충족 | REV-P10-001~003 판정 완료 | | 확정 항목 plan 반영 | 충족 | Task 10.2, Task 10.3, Task 10.4 | | 검증 명령과 결과 기록 | 충족 | 빌드 Gate PASS | **최종 결론:** 확정 발견 사항 모두 수정 완료 **남은 항목:** 없음 ## 9. 수정 후 검증 기록 - 2026-07-30: `HomeFollowingLiveAdapter.onCreateViewHolder()`에서 기존 horizontal list helper `recyclerItemLayoutParams(parent)`를 재사용해 XML 크기는 유지하고 `spacing_12` end margin을 적용했다. `HomeFollowingFragmentSourceTest`, 팔로잉 전체 회귀, resource merge, Kotlin compile, ktlint, `git diff --check` PASS. - 2026-07-30: Task 10.3으로 `following live adapter keeps horizontal item spacing` source test만 제거하고 production helper 적용은 유지했다. `rg`로 `HomeFollowingLiveAdapter`의 `recyclerItemLayoutParams(parent)` 재사용을 대조했고 팔로잉 전체 회귀, resource merge, Kotlin compile, ktlint, `git diff --check` PASS. - 2026-07-30: Task 10.4로 `HomeFollowingLiveAdapter`가 `recyclerItemLayoutParams(parent)` 대신 inflate된 `RecyclerView.LayoutParams`를 보존하고 `spacing_12` end margin만 적용하도록 수정했다. focused test, 팔로잉 전체 회귀, resource merge, Kotlin compile, ktlint PASS. 연결 기기가 없어 실기기 확인은 Task 5.3 보류 상태를 유지했다. - 2026-07-31 재점검: On Air binding/action을 포함한 Phase 1~13 focused 113개 test, resource merge, Kotlin compile, ktlint PASS. 연결 기기가 없어 실기기 폭/간격 확인은 Task 5.3에 유지했다. - 2026-07-31 최종 검증: On Air binding/action 회귀를 포함한 통합 20개 suite·306개 test와 resource merge, Kotlin compile, ktlint가 PASS했다. 추가 확정 수정 사항은 없고 실기기 확인은 Phase 5 Task 5.3에 유지한다. - 2026-07-31 이번 리뷰 재검증: On Air 캡슐의 XML 고정 크기 보존, end margin과 live action 경로를 다시 추적했다. 통합 16개 suite·120개 test, resource merge, Kotlin compile, ktlint가 PASS해 `REV-P10-001~003` 수정 완료 판정을 유지하고 시각 대조는 Phase 5 Task 5.3에 유지한다.