From a747729c26194e5886346005532a43b7c985e661 Mon Sep 17 00:00:00 2001 From: klaus Date: Wed, 24 Jun 2026 15:41:03 +0900 Subject: [PATCH] =?UTF-8?q?docs(content):=20=EB=9E=AD=ED=82=B9=20Phase=206?= =?UTF-8?q?=20=EA=B2=80=EC=A6=9D=EC=9D=84=20=EA=B8=B0=EB=A1=9D=ED=95=9C?= =?UTF-8?q?=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plan-task.md | 37 ++++++++++++++----- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/docs/20260623_메인_콘텐츠_탭_내부_랭킹_탭/plan-task.md b/docs/20260623_메인_콘텐츠_탭_내부_랭킹_탭/plan-task.md index 23d4b8b1..32c793db 100644 --- a/docs/20260623_메인_콘텐츠_탭_내부_랭킹_탭/plan-task.md +++ b/docs/20260623_메인_콘텐츠_탭_내부_랭킹_탭/plan-task.md @@ -571,7 +571,7 @@ ### Phase 6: routing, 통합 검증, 문서 검증 기록 -- [ ] **Task 6.1: 랭킹 item 클릭 routing guard 연결** +- [x] **Task 6.1: 랭킹 item 클릭 routing guard 연결** - 수정: - `app/src/main/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainFragment.kt` - 구현: @@ -581,7 +581,7 @@ - 코드 형태: ```kotlin private fun openRankingAudioContentDetail(item: ContentRankingItem) { - val audioContentId = item.contentId.toLongOrNull() ?: return + val audioContentId = item.contentId.toLongOrNull()?.takeIf { it > 0L } ?: return openAudioContentDetail(audioContentId) } ``` @@ -589,18 +589,24 @@ - Run: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.content.ContentMainFragmentSourceTest"` - Expected: routing source assertion PASS. - 검증 기록: - - 구현 시 실행 결과를 이 아래에 누적한다. + - 2026-06-24 RED: `ContentMainFragmentSourceTest`에 랭킹 routing guard source assertion을 추가한 뒤 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.content.ContentMainFragmentSourceTest"` 실행 시 `ContentMainFragmentSourceTest.kt:97` assertion 실패로 `openRankingAudioContentDetail` 내부의 명시적 `contentId > 0` guard 미반영 상태를 확인했다. + - 2026-06-24 GREEN: `openRankingAudioContentDetail`에서 `item.contentId.toLongOrNull()?.takeIf { it > 0L } ?: return`으로 변환 실패와 `contentId <= 0`을 모두 무시하도록 보강했다. 같은 테스트 재실행 결과 `BUILD SUCCESSFUL`. + - 2026-06-24: Kotlin LSP 진단은 환경에 `kotlin-lsp`가 설치되어 있지 않아 실행 불가(`Command not found: kotlin-lsp`). `ContentMainFragmentSourceTest`, package test, compile 검증으로 대체했다. + - 2026-06-24: Phase 6 코드 리뷰에서 `openRankingAudioContentDetail`의 `toLongOrNull()?.takeIf { it > 0L } ?: return` guard가 PRD의 `contentId <= 0` 클릭 무시 요구와 일치함을 재확인했다. -- [ ] **Task 6.2: mapper/widget/content package 단위 테스트 실행** +- [x] **Task 6.2: mapper/widget/content package 단위 테스트 실행** - 검증: - Run: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.widget.contentranking.*"` - Expected: PASS. - Run: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.content.*"` - Expected: PASS. - 검증 기록: - - 구현 시 실행 결과를 이 아래에 누적한다. + - 2026-06-24: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.widget.contentranking.*"` 실행 결과 `BUILD SUCCESSFUL`. + - 2026-06-24: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.content.*"` 실행 결과 `BUILD SUCCESSFUL`. + - 2026-06-24: Phase 6 재검증으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.widget.contentranking.*"` 재실행 결과 `BUILD SUCCESSFUL`. + - 2026-06-24: Phase 6 재검증으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.content.*"` 재실행 결과 `BUILD SUCCESSFUL`. -- [ ] **Task 6.3: 리소스/컴파일/스타일 검증** +- [x] **Task 6.3: 리소스/컴파일/스타일 검증** - 검증: - Run: `./gradlew :app:mergeDebugResources` - Expected: `BUILD SUCCESSFUL` @@ -611,9 +617,14 @@ - Run: `git diff --check` - Expected: trailing whitespace 또는 conflict marker 없음 - 검증 기록: - - 구현 시 실행 결과를 이 아래에 누적한다. + - 2026-06-24: `./gradlew :app:mergeDebugResources` 실행 결과 `BUILD SUCCESSFUL`. + - 2026-06-24: `./gradlew :app:compileDebugKotlin` 실행 결과 `BUILD SUCCESSFUL`. + - 2026-06-24: `./gradlew :app:ktlintCheck` 실행 결과 `BUILD SUCCESSFUL`. `.editorconfig`의 `disabled_rules` deprecation 경고는 기존 설정 경고로 남아 있다. + - 2026-06-24: `git diff --check` 실행 결과 출력 없음. trailing whitespace 또는 conflict marker 없음. + - 2026-06-24: Phase 6 재검증에서 `./gradlew :app:mergeDebugResources`는 샌드박스 내 Gradle wrapper lock 접근 제한으로 1차 실패 후 권한 상승 재실행 결과 `BUILD SUCCESSFUL`. + - 2026-06-24: Phase 6 재검증으로 `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `git diff --check` 실행 결과 모두 통과했다. -- [ ] **Task 6.4: 수동 화면 검증** +- [ ] **Task 6.4: 수동 화면 검증 [blocked]** - 확인: - 메인 콘텐츠 탭 진입 시 기본 `추천` 탭 화면이 기존처럼 표시된다. - Text Tab bar에 `추천`, `랭킹`, `전체`이 보인다. @@ -624,7 +635,11 @@ - `contentId > 0` item 터치 시 오디오 상세로 이동한다. - `전체` 탭은 항목만 표시하고 별도 API/content 구현이 없다. - 검증 기록: - - 구현 시 실행 결과를 이 아래에 누적한다. + - 2026-06-24: Figma `24:6857` design context와 screenshot으로 Text Tab `추천`/`랭킹`/`전체`, Capsule Tab `주간 인기`/`지금 뜨는 중`/`매출`/`판매량`/`댓글수`/`좋아요` 순서, 랭킹 목록의 1위 대형/2~7위 2열/8~10위 3열/11위 이후 가로형 배치를 대조했다. + - 2026-06-24: source/test 기준으로 `랭킹` 최초 선택 시 `AudioRankingType.WEEKLY_POPULAR` 로드, `ContentRankingAdapter` mixed layout 연결, `showRankChange=false` rank-num `GONE`, `contentId > 0` routing과 invalid id 무시, `전체` 탭의 별도 API/content 미구현 상태를 확인했다. + - 2026-06-24 [blocked]: ADB 권한 상승 조회에서 연결 device 1대와 기존 `kr.co.vividnext.sodalive.debug` 설치 상태를 확인했고, 기존 설치 앱 실행 스크린샷에서 콘텐츠 추천 화면 진입 상태를 확인했다. + - 2026-06-24 [blocked]: 현재 로컬 변경 기준 최신 APK 수동 QA를 위해 `./gradlew :app:installDebug`를 실행했으나 Gradle install 단계에서 `No connected devices!`로 실패했다. 재확인 시 `adb devices -l`도 빈 목록을 반환해 최신 debug APK 설치/실행 기반 화면 검증은 완료하지 못했다. + - 2026-06-24: Phase 6 재검증에서 Figma `24:6857` design context와 screenshot을 다시 확인했다. 최신 APK가 설치된 device/emulator 기반 터치 검증은 계속 blocked 상태로 유지한다. --- @@ -645,3 +660,7 @@ - 2026-06-24: 리뷰 게이트 보완 후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.content.*"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `git diff --check` 재실행 결과 모두 통과했다. - 2026-06-24: Phase 4~5 코드 리뷰에서 stale response loading 조기 종료 문제를 발견해 RED/GREEN 테스트로 보완했다. Figma `24:6857` 스크린샷으로 Text Tab `추천`/`랭킹`/`전체`, Capsule Tab `주간 인기`/`지금 뜨는 중`/`매출`/`판매량`/`댓글수`/`좋아요` 순서와 랭킹 목록 위치를 재확인했다. `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.content.*"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `git diff --check` 실행 결과 모두 통과했다. `:app:mergeDebugResources`는 샌드박스 내 Gradle wrapper lock 접근 제한으로 1차 실패 후 권한 상승 실행에서 `BUILD SUCCESSFUL`을 확인했다. `ktlintCheck`의 `.editorconfig disabled_rules` deprecation 경고는 기존 설정 경고로 남아 있다. - 2026-06-24: Phase 4~5 현재 워크트리 기준 코드 리뷰 및 재검증을 수행했다. `ContentRankingViewModel`의 캐시 재방출, stale response 무시, loading 종료 조건과 `ContentMainFragment`의 Text Tab/Capsule Tab 연결, visibility 전환, ranking adapter 연결, loading dialog 통합, routing guard를 확인했고 추가 결함은 발견하지 못했다. Figma `24:6857`, `24:6882` design context와 screenshot으로 `추천`/`랭킹`/`전체`, `주간 인기`/`지금 뜨는 중`/`매출`/`판매량`/`댓글수`/`좋아요` 순서와 랭킹 목록 위치를 대조했다. `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.content.*"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `git diff --check` 실행 결과 모두 통과했다. `:app:mergeDebugResources`는 샌드박스 내 Gradle wrapper lock 접근 제한으로 1차 실패 후 권한 상승 실행에서 `BUILD SUCCESSFUL`을 확인했다. +- 2026-06-24: Phase 6에서 랭킹 item 클릭 routing guard를 명시적으로 보강했다. RED는 `ContentMainFragmentSourceTest.kt:97` assertion 실패로 확인했고, GREEN은 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.content.ContentMainFragmentSourceTest"` `BUILD SUCCESSFUL`로 확인했다. +- 2026-06-24: Phase 6 최종 자동 검증으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.widget.contentranking.*"`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.content.*"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `git diff --check` 실행 결과 모두 통과했다. Kotlin LSP 진단은 환경에 `kotlin-lsp`가 설치되어 있지 않아 실행 불가했고, `ktlintCheck`의 `.editorconfig disabled_rules` deprecation 경고는 기존 설정 경고로 남아 있다. +- 2026-06-24: Phase 6 수동 검증 중 Figma `24:6857` design context/screenshot과 source/test 대조로 Text Tab/Capsule Tab 순서, 랭킹 목록 배치, 초기 `WEEKLY_POPULAR`, `showRankChange=false`, routing guard, `전체` 탭 제외 범위를 확인했다. ADB 권한 상승 조회에서 일시적으로 연결 device와 기존 debug 앱 실행 화면은 확인했으나, 현재 로컬 변경 기준 최신 APK 설치를 위한 `./gradlew :app:installDebug`는 `No connected devices!`로 실패했다. 최신 APK가 설치된 device/emulator 기반 최종 화면 터치 검증은 후속 환경에서 확인 필요하므로 Task 6.4는 [blocked]로 남긴다. +- 2026-06-24: Phase 6 코드 리뷰 및 재검증을 수행했다. `ContentMainFragment` routing guard, `ContentRankingViewModel` stale response/loading 처리, mapper의 rank 필터/정렬과 `showRankChange` 전달, widget rank-num `GONE` 처리를 PRD/계획과 대조했고 추가 수정이 필요한 결함은 발견하지 못했다. `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.widget.contentranking.*"`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.content.*"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `git diff --check` 재실행 결과 모두 통과했다. `:app:mergeDebugResources`는 샌드박스 내 Gradle wrapper lock 접근 제한으로 1차 실패 후 권한 상승 재실행에서 통과했다.