# Phase 7 ranking 문장과 content feed 리뷰 ## 1. 리뷰 정보 | 항목 | 내용 | |---|---| | 리뷰 대상 | Phase 7 / Task 7.1~7.7 | | 기준 commit 또는 working tree | `f600d10e8b63b6fdc812b18a874b077dfe072ca8` + 2026-07-31 working tree | | 리뷰 일자 | 2026-07-31 | | 리뷰어 | Codex | | 기준 문서 | 대상 `prd.md`, `plan-task.md`, code style guide | | 리뷰 상태 | 수정 검증 완료 | ## 2. 리뷰 목적과 범위 ### 목적 - ranking message/highlight와 compact content Feed가 Figma·locale 요구를 충족하는지 확인한다. - 과거 Task 7.3 ktlint 실패가 현재도 남았는지 재검증한다. ### 포함 범위 - `HomeFollowingNewsAdapter.kt`, `view_feed_content.xml`, `FeedContentView.kt` - 한국어/영어/일본어 string resource, `FeedViewTest`, following source test ### 제외 범위 - Phase 9 nested payload와 Phase 13 routing. ## 3. 판정 기준 - 특정 locale에서 잘못된 사용자 문자열이 노출되는 문제는 Medium으로 판정했다. ## 4. 검토한 근거 ### 문서와 코드 - `HomeFollowingNewsAdapter.kt:74-108` - `values/strings.xml:318-319`, `values-en/strings.xml:319-320`, `values-ja/strings.xml:319-320` - `view_feed_content.xml`, `FeedContentView.kt:30-112` ### 실행한 검증 | 명령 | 결과 | 핵심 증거 | |---|---|---| | following source test + `FeedViewTest` | 성공 | 기존 layout/highlight source 계약 PASS | | resource/compile/ktlint | 성공 | 현재 working tree에서 Task 7.3 명령 모두 PASS | | locale message 수동 대입 | 문제 확인 | 영어·일본어 `%2$s`에 `"7위"`가 전달됨 | ## 5. 발견 사항 요약 | ID | 심각도 | 상태 | 제목 | 소유 Task | 후속 goal | |---|---|---|---|---|---| | `REV-P7-001` | Medium | 수정 완료 | 영어·일본어 ranking 문장에도 한국어 순위 단위 `"위"`가 노출됨 | Task 7.5 | `P7-R1` 완료 | | `REV-P7-002` | Low | 수정 완료 | 신규 ranking 테스트명과 단일 실행 가이드가 저장소 규칙을 충족하지 않음 | Task 7.6 | `P7-R2` 완료 | | `REV-P7-003` | Low | 수정 완료 | 가이드 제정 이후 content feed 크기·padding·margin source test를 추가함 | Task 7.7 | `P7-R3` 완료 | ## 6. 발견 사항 상세 ### REV-P7-001 — ranking 순위 단위가 한국어로 고정됨 - **심각도:** Medium - **상태:** 수정 완료 - **관련 요구사항:** 3개 locale string resource, ranking 문장형 message - **소유 Task:** Task 7.5 **관찰 내용** adapter가 locale과 무관하게 `val rankText = "${ranking.rank}위"`를 만든다. 영어와 일본어 문장은 resource로 번역되지만 placeholder에는 한국어 `위`가 그대로 들어간다. **근거** - 코드: `HomeFollowingNewsAdapter.kt:77-88` - resource: 영어 `%1$s reached %2$s...`, 일본어 `ランキング%2$s...` - 테스트: source 문자열 존재만 검사하고 locale별 결과 문자열은 검증하지 않음 **재현 또는 검증 절차** 1. locale을 English 또는 Japanese로 설정한다. 2. rank 7 item의 message를 생성한다. 3. 실제 결과 placeholder는 `7위`. 4. 요구 결과는 locale별 영어 표기 또는 일본어 `7位`다. **영향** 영어·일본어 사용자에게 혼합 언어 문장이 노출되고 highlight 대상도 잘못된 단위를 포함한다. **권장 조치** rank format을 locale string resource로 분리하고 완성된 rank 문자열의 유효 index/highlight 범위를 테스트한다. **판정 기록** - 2026-07-30 — adapter와 세 locale resource를 대입해 확정. - 2026-07-30 — Task 7.5에서 locale rank format과 highlight 단위 테스트를 추가하고 회귀 검증을 완료. ### REV-P7-002 — 신규 ranking 테스트와 실행 가이드 규칙 미준수 - **심각도:** Low - **상태:** 수정 완료 - **관련 요구사항:** `docs/agent-guides/code-style.md` 테스트 관례, `docs/agent-guides/build-test-style.md` 단일 실행 예시 갱신 규칙 - **소유 Task:** Task 7.6 **관찰 내용** 새로 추가된 `HomeFollowingNewsAdapterTest`의 두 backtick 테스트명이 영문 문장이고, 새 테스트 클래스에 대응하는 단일 실행 예시가 `build-test-style.md`에 없다. Task 7.5 Files에는 가이드 수정이 명시되어 있지만 실제 변경에는 포함되지 않았다. **근거** - 테스트: `HomeFollowingNewsAdapterTest.kt:23`, `:30` - 가이드: `code-style.md`의 신규 테스트명 한글 규칙과 테스트 추가 시 실행 예시 갱신 규칙 - 문서: Task 7.5 Files의 `docs/agent-guides/build-test-style.md` **영향** 기능 동작에는 영향이 없지만 완료 체크리스트와 실제 변경이 불일치하고 신규 테스트 작성 관례가 깨진다. **권장 조치** 신규 테스트명 2개만 한글화하고 `HomeFollowingNewsAdapterTest` 클래스 단위 실행 예시를 빌드 가이드에 추가한다. 기존 영어 테스트명 일괄 변경은 범위 밖으로 둔다. **판정 기록** - 2026-07-30 — 신규 테스트 diff와 현재 가이드 및 Task 7.5 Files를 대조해 확정. - 2026-07-30 — Task 7.6에서 신규 테스트명 2개를 한글화하고 `HomeFollowingNewsAdapterTest` 실행 예시를 추가했다. ### REV-P7-003 — content feed UI 표현 속성을 source test로 고정함 - **심각도:** Low - **상태:** 수정 완료 - **관련 요구사항:** `docs/agent-guides/code-style.md` 테스트 관례 - **소유 Task:** Task 7.7 **관찰 내용** `FeedViewTest.content layout matches figma compact upload notice dimensions`는 `view_feed_content.xml`의 `padding`, `88dp` width/height, 두 margin 문자열을 직접 assertion한다. 이 테스트는 UI 크기·margin·padding 테스트 금지 규칙이 추가된 뒤 생성되었다. **근거** - 테스트: `FeedViewTest.kt:45-64` - 가이드: `docs/agent-guides/code-style.md:42-43` - 이력: 가이드 규칙 `566f76df` 이후 테스트 `61fe8a9f` 추가 **영향** 기능 로직이 아닌 Figma 표현값과 XML 구현 문자열이 회귀 Gate에 고정되어, 합법적인 UI 조정이나 구현 방식 변경만으로 테스트가 실패하고 현재 저장소 테스트 정책과 불일치한다. **권장 조치** 해당 테스트만 제거하고 production layout/View는 유지한다. Figma 크기·간격은 정적 대조, resource merge, compile, Task 5.3 수동 화면 확인으로 검증한다. **판정 기록** - 2026-07-30 — test 추가 시점, assertion 내용, 현행 가이드를 대조해 확정. - 2026-07-30 — 구현 전 Phase 7 Task 7.7 / `P7-R3`로 전환. ## 7. 확정 항목의 plan·goal 전환 - Phase 7에 Task 7.5 / `P7-R1`을 추가해 완료했다. - 재점검에서 Task 7.6 / `P7-R2`를 추가해 완료했다. - 추가 재점검에서 Task 7.7 / `P7-R3`를 추가해 완료했다. - Task 7.3의 과거 ktlint 실패는 현재 재실행에서 PASS했으나 기존 기록과 체크박스는 유지했다. ## 8. 리뷰 종료 판정 | 판정 항목 | 결과 | 근거 | |---|---|---| | 리뷰 범위 전체 확인 | 충족 | adapter, shared Feed, locale resource 확인 | | 후보 항목 판정 완료 | 충족 | REV-P7-001~003 판정 완료 | | 확정 항목 plan 반영 | 충족 | Task 7.5, Task 7.6, Task 7.7 | | 검증 명령과 결과 기록 | 충족 | focused/통합 Gate PASS | **최종 결론:** 확정 발견 사항 모두 수정 완료 **남은 항목:** 없음 ## 9. 수정 후 검증 기록 - 2026-07-30: ranking 순위 단위를 `screen_home_following_ranking_rank_format` locale resource로 분리했다. 한국어는 `7위`, 영어는 `No. 7`, 일본어는 `7位`로 생성하며, 완성 문장에서 같은 문자열 범위를 `FeedRankHighlight`로 전달하도록 `HomeFollowingNewsAdapterTest`로 검증했다. focused test, Feed view test, 팔로잉 전체 회귀, resource merge, Kotlin compile, ktlint, `git diff --check` PASS. - 2026-07-30 리뷰 게이트 후 보완: subject에 rank 문자열이 먼저 포함되는 경우를 추가 테스트로 고정하고, highlight 시작점을 `lastIndexOf(rankText)`로 변경해 실제 삽입 rank 문자열을 강조하도록 보완했다. RED/GREEN focused test와 최종 회귀 검증 PASS. - 2026-07-30: Task 7.6으로 `HomeFollowingNewsAdapterTest`의 신규 ranking 테스트명 2개를 한글화하고 `docs/agent-guides/build-test-style.md`에 클래스 단위 실행 예시를 추가했다. focused test, ktlint, `git diff --check` PASS. - 2026-07-30: Task 7.7로 `FeedViewTest`의 content feed 크기·padding·margin source test만 제거하고 production layout/View 코드는 유지했다. Feed focused test, 팔로잉 전체 회귀, resource merge, Kotlin compile, ktlint PASS. - 2026-07-31 재점검: ranking locale/highlight와 Feed 회귀를 포함한 Phase 1~13 focused 113개 test, resource merge, Kotlin compile, ktlint PASS. 추가 확정 발견 사항 없음. - 2026-07-31 최종 검증: ranking·공용 Feed 회귀를 포함한 통합 20개 suite·306개 test와 resource merge, Kotlin compile, ktlint가 PASS했다. 추가 확정 발견 사항 없음. - 2026-07-31 이번 리뷰 재검증: 세 locale ranking 문장·highlight와 공용 Feed 표시 경로를 다시 대조했다. 통합 16개 suite·120개 test, resource merge, Kotlin compile, ktlint가 PASS해 추가 확정 발견 사항이 없다.