From 97d917e35df9736ce88f952cdaa309c53d1aa15c Mon Sep 17 00:00:00 2001 From: klaus Date: Sun, 12 Jul 2026 04:24:42 +0900 Subject: [PATCH] =?UTF-8?q?docs(home):=20=EC=B5=9C=EA=B7=BC=20=EC=86=8C?= =?UTF-8?q?=EC=8B=9D=20=EC=83=81=EC=84=B8=20=EC=9D=B4=EB=8F=99=20=EC=9A=94?= =?UTF-8?q?=EA=B5=AC=EB=A5=BC=20=EA=B8=B0=EB=A1=9D=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/20260625_메인_홈_팔로잉_탭/plan-task.md | 39 ++++++++++++++++++++ docs/20260625_메인_홈_팔로잉_탭/prd.md | 6 +++ 2 files changed, 45 insertions(+) diff --git a/docs/20260625_메인_홈_팔로잉_탭/plan-task.md b/docs/20260625_메인_홈_팔로잉_탭/plan-task.md index 9a354ec3..f61c9430 100644 --- a/docs/20260625_메인_홈_팔로잉_탭/plan-task.md +++ b/docs/20260625_메인_홈_팔로잉_탭/plan-task.md @@ -742,7 +742,46 @@ --- +### Phase 11: 최근 소식 COMMUNITY_POST 상세 이동 + +- [x] **Task 11.1: 문서와 RED 테스트로 커뮤니티 상세 이동 계약 고정** + - 수정: + - `docs/20260625_메인_홈_팔로잉_탭/prd.md` + - `docs/20260625_메인_홈_팔로잉_탭/plan-task.md` + - `app/src/test/java/kr/co/vividnext/sodalive/v2/main/home/HomeMainFragmentLoginGuardSourceTest.kt` + - 작업: + - 최근 소식 `COMMUNITY_POST` item 터치 시 `CreatorChannelCommunityDetailActivity.newIntent(requireContext(), postId)`를 사용한다는 계약을 문서화한다. + - `HomeMainFragment.onFollowingNewsClick()`이 `HomeFollowingNewsUiItem.Community`만 처리하고, `postId <= 0L`은 가드보다 먼저 무시하는지 source test로 고정한다. + - legacy `CreatorCommunityAllActivity` 또는 `Constants.EXTRA_COMMUNITY_POST_ID` 직접 extra 조립을 사용하지 않는지 검증한다. + - 검증: + - Run: `./gradlew --no-daemon :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLoginGuardSourceTest"` + - Expected RED: 구현 전 `onFollowingNewsClick()` no-op 때문에 새 source test가 실패한다. + +- [x] **Task 11.2: COMMUNITY_POST 상세 이동 구현** + - 수정: + - `app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/HomeMainFragment.kt` + - 작업: + - `onFollowingNewsClick()`에서 `HomeFollowingNewsUiItem.Community`가 아니면 즉시 return한다. + - `community.postId`가 0 이하이면 즉시 return한다. + - 유효한 `postId`는 `ensureMainV2NavigationAllowed` 안에서 `CreatorChannelCommunityDetailActivity.newIntent(requireContext(), postId)`로 시작한다. + - 검증: + - Run: `./gradlew --no-daemon :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLoginGuardSourceTest"` + - Expected GREEN: source test PASS. + +- [x] **Task 11.3: 최근 소식 이동 회귀 검증** + - 검증: + - Run: `./gradlew --no-daemon :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.*Following*"` + - Expected: 팔로잉 관련 local unit/source test PASS. + - Run: `./gradlew --no-daemon :app:compileDebugKotlin` + - Expected: Kotlin compile PASS. + - Run: `git diff --check` + - Expected: whitespace error 없음. + + +--- + ## Verification Log +- 2026-07-12 Phase 11 검증: 최근 소식 `COMMUNITY_POST` 상세 이동 계약을 source test로 추가하고 `HomeMainFragment.onFollowingNewsClick()`에서 `HomeFollowingNewsUiItem.Community`만 `CreatorChannelCommunityDetailActivity.newIntent(requireContext(), postId)`로 이동하도록 구현했다. RED 시도: 구현 전 targeted test `./gradlew --no-daemon :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLoginGuardSourceTest"`는 120초/300초 timeout으로 assertion 결과까지 도달하지 못했지만, 당시 production은 no-op 상태였고 새 source test는 `ensureMainV2NavigationAllowed`와 상세 이동 호출 문자열을 요구하도록 추가되어 실패 조건을 고정했다. GREEN: 동일 targeted test PASS. 회귀 검증 `./gradlew --no-daemon :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.*Following*"`, `./gradlew --no-daemon :app:compileDebugKotlin`, `git diff --check` PASS. `./gradlew --no-daemon :app:ktlintCheck`는 이번 변경과 무관한 기존 legacy/source 위반(`explorer/profile/creator_community` package underscore, `LiveRoomActivity.kt` formatting, `NicknameUpdateViewModel.kt` indentation 등)으로 FAIL. 실기기 수동 QA는 `adb devices` 결과 연결된 device가 없어 blocked. - 2026-06-25 Phase 1-3 구현 검증: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.*Following*"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `git diff --check` 모두 PASS. - 2026-06-25 Phase 1-3 코드 리뷰 및 재검증: blocking finding 없음. `./gradlew :app:mergeDebugResources`는 최초 sandbox lock 권한 오류 후 승인 실행으로 PASS했고, 나머지 검증 명령도 PASS. - 2026-06-25 Phase 4 코드 리뷰 및 검증: Figma `24:5682` 기준 UI 필드 바인딩 누락을 보완했고, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.*Following*"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `git diff --check` 모두 PASS. diff --git a/docs/20260625_메인_홈_팔로잉_탭/prd.md b/docs/20260625_메인_홈_팔로잉_탭/prd.md index 37ce90f2..ac048b41 100644 --- a/docs/20260625_메인_홈_팔로잉_탭/prd.md +++ b/docs/20260625_메인_홈_팔로잉_탭/prd.md @@ -281,6 +281,12 @@ Figma `24:5682` 기준 상단 title bar와 tab bar는 기존 홈 화면 구조 - Android DTO, mapper, UI model, adapter binding, 테스트 fixture는 새 nested payload 구조를 기준으로 갱신한다. - 새 응답 변경은 최근 소식 섹션에만 적용하며, 팔로잉 크리에이터, On Air, 최근 대화, 이달의 스케줄, 로그인 유도, API endpoint, optional authorization 정책은 변경하지 않는다. +#### 2026-07-12 COMMUNITY_POST 상세 이동 Requirements +- 최근 소식 섹션의 `COMMUNITY_POST` item 터치 시 `communityPost.postId`를 사용해 `CreatorChannelCommunityDetailActivity`로 이동한다. +- 이동은 기존 MainV2 로그인 가드(`ensureMainV2NavigationAllowed`)를 통과한 뒤 실행한다. +- `COMMUNITY_POST`가 아닌 최근 소식 item은 이번 작업 범위에서 기존처럼 이동하지 않는다. +- legacy `CreatorCommunityAllActivity`나 `Constants.EXTRA_COMMUNITY_POST_ID` 직접 extra 조립 경로는 사용하지 않는다. + #### 2026-06-30 후속 수정 Requirements - `CREATOR_RANKING` 최근 소식 본문은 순위 숫자만 단독 표시하지 않고, Figma `24:5717` 기준으로 크리에이터 이름과 순위를 포함한 문장형 메시지를 표시한다. - ranking 문장 안의 순위 텍스트는 기존 `FeedRankTextStyler` highlight range로 강조한다.