9.8 KiB
내 채널 팔로워 목록 연결 Implementation Plan
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:test-driven-development to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: 내 채널 상단 팔로워 n명 터치 시 기존 레거시 팔로워 목록 화면으로 이동한다.
Architecture: CreatorChannelActivity가 이미 헤더와 현재 creatorId를 소유하므로 Activity 내부에서 클릭 리스너를 추가한다. 목적지는 레거시 UserFollowerListActivity이며 기존 호출 방식처럼 Constants.EXTRA_USER_ID만 전달한다.
Tech Stack: Android Kotlin, ViewBinding, JUnit source test, Gradle :app:testDebugUnitTest, :app:assembleDebug.
| 문서 항목 | 내용 |
|---|---|
| 상태 | 구현 완료 |
| 작성일 | 2026-08-03 |
| 요구사항 기준 | docs/20260803_내_채널_팔로워_목록_연결/prd.md |
| API 기준 | 기존 레거시 UserFollowerListActivity / ExplorerApi.getFollowerList |
| 현재 Phase | Phase 1 |
| 현재 활성 Goal | 없음 |
목표
내 채널 소유자가 v2 크리에이터 채널의 팔로워 n명을 눌러 기존 레거시 팔로워 목록을 확인한다.
현재 상태
| Phase | 상태 | 완료 Task | 활성/다음 Goal | 차단 또는 남은 조건 |
|---|---|---|---|---|
| 1 | 완료 | 1/1 |
없음 | 직접 Activity 기동은 not exported 보안 정책상 adb에서 차단됨 |
범위
포함
CreatorChannelActivity의tvFollowerCount클릭 연결.- 기존
UserFollowerListActivity에Constants.EXTRA_USER_ID = creatorId전달. - owner 전용 동작과 0명 허용 계약을 source test로 고정.
제외
- 신규 v2 팔로워/팔로잉 목록 화면.
- 레거시
UserFollowerListActivity및 API 수정. - 타인 채널의 팔로워 수 클릭 동작.
- 팔로워/팔로잉 문구 변경.
기술적 제약
- 레거시 코드는 직접 수정하지 않는다.
- 새 dependency, router, helper abstraction을 추가하지 않는다.
- 기존
CreatorChannelActivitySourceTest의 source-test 패턴을 따른다. - production 구현은 RED 확인 후 진행한다.
Phase 1
Phase 결과: 내 채널 헤더의 팔로워 n명이 레거시 팔로워 목록으로 이동한다.
선행조건: PRD 승인 완료.
Phase 완료 조건: P1-T1과 P1-GATE 완료, 검증 기록 누적.
구현 항목
Task 1.1 내 채널 팔로워 수 클릭 연결
Goal 실행 P1-T1: CreatorChannelActivity에서 owner의 tvFollowerCount 클릭을 UserFollowerListActivity로 연결한다.
- 시작 조건:
FOLLOWER-LINK-001~003확정. - 완료 증거: RED/GREEN source test, debug build, 수동 검증 기록.
- 범위 밖: 레거시 화면 수정, 신규 v2 화면 작성, 타인 채널 동작 추가.
Files:
- Modify:
app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivitySourceTest.kt - Modify:
app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivity.kt
Interfaces:
-
Consumes:
creatorId: Long,currentHeader?.isOwner,Constants.EXTRA_USER_ID. -
Produces:
Intent(this, UserFollowerListActivity::class.java).putExtra(Constants.EXTRA_USER_ID, creatorId)실행 경로. -
RED:
CreatorChannelActivitySourceTest에내 채널 팔로워 수 클릭 source는 레거시 팔로워 목록으로 이동한다테스트를 추가한다.
@Test
fun `내 채널 팔로워 수 클릭 source는 레거시 팔로워 목록으로 이동한다`() {
val source = projectFile(
"app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivity.kt"
).readText()
val clickSource = sourceSection(
source = source,
startMarker = "private fun onFollowerCountClicked()",
endMarker = "private fun bindHeader"
)
assertTrue(source.contains("import kr.co.vividnext.sodalive.explorer.profile.follow.UserFollowerListActivity"))
assertTrue(source.contains("binding.tvFollowerCount.setOnClickListener"))
assertTrue(clickSource.contains("if (currentHeader?.isOwner != true) return"))
assertTrue(clickSource.contains("Intent(this, UserFollowerListActivity::class.java)"))
assertTrue(clickSource.contains("putExtra(Constants.EXTRA_USER_ID, creatorId)"))
assertFalse(clickSource.contains("followerCount > 0"))
assertFalse(source.contains("FollowingCreatorActivity::class.java"))
}
- RED 확인: focused test를 실행해
start marker not found: private fun onFollowerCountClicked()실패를 확인한다.
./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest.내 채널 팔로워 수 클릭 source는 레거시 팔로워 목록으로 이동한다"
- GREEN:
CreatorChannelActivity에 import, click listener, 최소 handler를 추가한다.
import kr.co.vividnext.sodalive.explorer.profile.follow.UserFollowerListActivity
binding.tvFollowerCount.setOnClickListener { onFollowerCountClicked() }
private fun onFollowerCountClicked() {
if (currentHeader?.isOwner != true) return
startActivity(
Intent(this, UserFollowerListActivity::class.java)
.putExtra(Constants.EXTRA_USER_ID, creatorId)
)
}
- GREEN 확인: 같은 focused test가 성공하는지 확인한다.
./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest.내 채널 팔로워 수 클릭 source는 레거시 팔로워 목록으로 이동한다"
- REFACTOR: 불필요한 변경이 없는지 확인하고 아래 직접 영향 회귀를 실행한다.
./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest"
./gradlew :app:assembleDebug
검증 방법
Phase 1 Gate
Goal 실행 P1-GATE: 문서와 코드가 요구사항을 충족하는지 최종 판정한다.
./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest"
./gradlew :app:assembleDebug
Expected: test/build 모두 exit code 0. CreatorChannelActivity는 UserFollowerListActivity만 참조하고 FollowingCreatorActivity를 참조하지 않는다.
수동 검증:
- Android 실행 환경에서 내 채널 진입 후
팔로워 n명터치 시UserFollowerListActivity가 열리는지 확인한다. - 실행 환경이 없으면 사용 가능한 명령과 부재 사유를 Progress에 기록한다.
실행 순서와 의존성
| 순서 | Goal | 선행조건 | 병행 가능 | 차단 시 다음 행동 |
|---|---|---|---|---|
| 1 | P1-T1 |
PRD 승인 | 아니요 | 테스트 실패 원인을 해당 Task에서 수정 |
| 2 | P1-GATE |
P1-T1 완료 |
아니요 | 실패 소유 Task에 회귀 수정 기록 추가 |
P1-T1 -> P1-GATE
변경 금지 항목
- 레거시
UserFollowerListActivity를 수정하지 않는다. - 새 화면, dependency, router abstraction을 만들지 않는다.
- test를 삭제, skip, 완화하지 않는다.
- 민감정보를 로그, Toast, 문서에 기록하지 않는다.
Progress
기존 기록을 삭제하거나 덮어쓰지 않고 실제 실행 결과를 누적한다.
P1-T1 1차 실행 — 2026-08-03
- 상태: 완료
- 무엇을:
CreatorChannelActivity의tvFollowerCount클릭을 owner 전용UserFollowerListActivity진입으로 연결하고 source test를 추가했다. - 왜:
FOLLOWER-LINK-001~003구현 기준 충족. - 어떻게:
./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest.내 채널 팔로워 수 클릭 source는 레거시 팔로워 목록으로 이동한다"— RED 실패,CreatorChannelActivitySourceTest.kt:2378에서onFollowerCountClicked()source marker 부재로 실패.- 같은 focused 명령 재실행 — GREEN 성공, exit code 0.
./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest"— 성공, exit code 0../gradlew :app:testDebugUnitTest— 성공, exit code 0../gradlew :app:assembleDebug— 성공, exit code 0.adb install -r "app/build/outputs/apk/debug/app-debug.apk"— 성공.adb shell am start -W -n kr.co.vividnext.sodalive.debug/kr.co.vividnext.sodalive.explorer.profile.follow.UserFollowerListActivity --el extra_user_id 1—not exported보안 정책으로 직접 Activity 기동 차단.adb shell monkey -p kr.co.vividnext.sodalive.debug 1— debug 앱 실행 이벤트 주입 성공.
- 남은 항목: 로그인된 내 채널 실제 클릭 검증은 인증 상태가 있는 수동 QA 환경에서 확인 필요.
- 다음 행동: 없음.
Decision Log
| 날짜 | ID | 상태 | 결정 | 근거 | 영향 Goal/문서 |
|---|---|---|---|---|---|
2026-08-03 |
DEC-001 |
확정 | UserFollowerListActivity를 목적지로 사용한다. |
내 채널을 팔로우하는 사용자 목록 요구. | P1-T1, prd.md#15-decision-log |
발견된 문제
| ID | 심각도 | 상태 | 발견 내용 | 영향 Goal | 처리 계획 |
|---|---|---|---|---|---|
| 없음 | Low | 보류 | 현재 발견된 범위 내 문제 없음 | 없음 | 없음 |
Verification Log
2026-08-03: RED/GREEN source test, 직접 영향 source test, 전체 debug unit test, debug build가 모두 성공했다. 연결된 Android 기기에는 APK 설치와 앱 실행 이벤트 주입까지 확인했으나, 레거시 Activity 직접 기동은not exported보안 정책으로 차단되어 로그인된 내 채널에서의 실제 클릭은 별도 QA 환경에서 확인해야 한다.2026-08-03: 리뷰 게이트를 수행했고reviews/phase1-follower-list-link-review.md에 확정 발견 사항 없음으로 기록했다.