fix(main): 최근 활동 이동을 보정한다
This commit is contained in:
@@ -0,0 +1,147 @@
|
||||
# Phase 21 최근 활동 LIVE 이동 fallback 보정 리뷰
|
||||
|
||||
## 1. 리뷰 정보
|
||||
|
||||
| 항목 | 내용 |
|
||||
|---|---|
|
||||
| 리뷰 대상 | Phase 21 / Task 21.1~21.4 |
|
||||
| 기준 commit 또는 working tree | `0232cd43356dd1988dea6cf03563716542cd491c` 기준 working tree의 Phase 21 변경 6개 파일 |
|
||||
| 리뷰 일자 | 2026-07-30 |
|
||||
| 리뷰어 | Codex |
|
||||
| 기준 문서 | `docs/20260602_메인_홈_추천_UI_API_연동/prd.md`, `docs/20260602_메인_홈_추천_UI_API_연동/plan-task.md` |
|
||||
| 리뷰 상태 | 판정 완료 |
|
||||
|
||||
## 2. 리뷰 목적과 범위
|
||||
|
||||
### 목적
|
||||
|
||||
- Phase 21의 완료 체크와 실제 모델, 활동 타입 변환, 탭 목적지, callback 연결 및 검증 기록이 일치하는지 확인한다.
|
||||
- `LIVE`, `LIVE_REPLAY`, `AUDIO`, `COMMUNITY`, 알 수 없는 활동 타입의 이동 규칙과 기존 상세 진입 guard 재사용 여부를 확인한다.
|
||||
|
||||
### 포함 범위
|
||||
|
||||
- 코드:
|
||||
- `SodaLive/Sources/V2/Main/Home/Recommendation/Models/MainHomeRecommendationResponse.swift`
|
||||
- `SodaLive/Sources/V2/Main/Home/Recommendation/Models/RecommendedActivityType.swift`
|
||||
- `SodaLive/Sources/V2/Main/Home/Recommendation/Components/MainHomeActiveCreatorSection.swift`
|
||||
- `SodaLive/Sources/V2/Main/Home/Recommendation/MainHomeRecommendationView.swift`
|
||||
- `SodaLive/Sources/V2/Main/Home/MainHomeView.swift`
|
||||
- `SodaLive/Sources/V2/Main/MainView.swift`
|
||||
- 테스트:
|
||||
- 변경된 실제 모델 소스를 `swiftc`로 컴파일한 임시 디코딩·라우팅 회귀 체크
|
||||
- 저장소에 앱 테스트 번들 타깃이 없어 별도 unit test는 실행하지 않음
|
||||
- 문서:
|
||||
- PRD의 응답 스키마, 진입 규칙, 성공 기준, 검증 계획
|
||||
- `plan-task.md`의 Phase 21 Task와 검증 기록
|
||||
- 정적/빌드 검증:
|
||||
- 공백 오류, 프로젝트 파일 유효성, `SodaLive-dev` Debug 빌드
|
||||
|
||||
### 제외 범위
|
||||
|
||||
- Phase 1~20 구현의 재검토
|
||||
- 실제 서버 응답 계약 자체의 재검증
|
||||
- 로그인·본인인증·민감 콘텐츠 설정 상태를 포함한 실기기/시뮬레이터 수동 탭 검증
|
||||
- Phase 21과 무관한 기존 코드와 빌드 경고
|
||||
|
||||
## 3. 판정 기준
|
||||
|
||||
### 심각도
|
||||
|
||||
| 심각도 | 기준 |
|
||||
|---|---|
|
||||
| Blocker | 보안·데이터 손실 위험, 핵심 흐름 불능, 완료 판정을 무효화하는 문제 |
|
||||
| High | 확정 요구사항·API Contract 위반 또는 주요 회귀 |
|
||||
| Medium | 제한된 조건에서 발생하는 기능·접근성·복구 문제 |
|
||||
| Low | 유지보수성, 문서 정합성 또는 비핵심 UX 문제 |
|
||||
|
||||
### 상태
|
||||
|
||||
| 상태 | 의미 | 후속 처리 |
|
||||
|---|---|---|
|
||||
| 후보 | 근거를 발견했지만 아직 재현·판정하지 않음 | 검증 후 상태 변경 |
|
||||
| 확정 | 코드·test·문서 근거로 문제가 확인됨 | `plan-task.md` 회귀 수정 Task 후보 |
|
||||
| 오탐 | 요구사항이나 실행 결과상 문제가 아님 | 근거를 남기고 종료 |
|
||||
| 보류 | 외부 계약·환경·제품 결정이 필요함 | 담당 주체와 재개 조건 기록 |
|
||||
| 수정 완료 | 수정과 관련 검증이 완료됨 | 실행 명령과 결과 연결 |
|
||||
|
||||
## 4. 검토한 근거
|
||||
|
||||
### 문서와 코드
|
||||
|
||||
- 요구사항:
|
||||
- `prd.md:78-85`의 `HomeActiveCreatorItem.creatorId`
|
||||
- `prd.md:184-189`의 최근 활동 `LIVE`, `LIVE_REPLAY`, 기존 활동 타입 이동 규칙
|
||||
- `prd.md:312-314`의 Phase 21 성공 기준
|
||||
- 계획:
|
||||
- `plan-task.md:540-629`의 Task 21.1~21.4
|
||||
- `plan-task.md:633-670`의 Phase 21 구현 및 정정 검증 기록
|
||||
- 코드:
|
||||
- `MainHomeRecommendationResponse.swift:29-61`의 필수 `creatorId`와 탭 목적지 분기
|
||||
- `RecommendedActivityType.swift:3-38`의 `LIVE`/`LIVE_REPLAY` 분리 및 동일 I18n 문구
|
||||
- `MainHomeActiveCreatorSection.swift:3-55`의 callback 전달
|
||||
- `MainHomeRecommendationView.swift:38-44`의 `onTapCreator` 연결
|
||||
- `MainView.swift:474-509`의 양수 검사, 상세 진입 guard 및 최종 이동
|
||||
- 테스트:
|
||||
- 실제 변경 모델 소스와 임시 stub/check 소스를 함께 컴파일해 9개 디코딩·라우팅 시나리오와 `LIVE`/`LIVE_REPLAY` 표시 문구 일치를 확인했다.
|
||||
- 임시 소스와 실행 바이너리는 검증 직후 `/private/tmp`에서 삭제했다.
|
||||
|
||||
### 실행 환경
|
||||
|
||||
```text
|
||||
OS: macOS 26.0 (25A354)
|
||||
Xcode: 26.0 (17A324)
|
||||
Swift: 6.2
|
||||
빌드 대상: Any iOS Device / SodaLive-dev / Debug
|
||||
환경 변수: 별도 설정 없음, 인증 토큰 및 민감정보 미사용
|
||||
```
|
||||
|
||||
### 실행한 검증
|
||||
|
||||
| 명령 또는 수동 검증 | 결과 | 핵심 증거 |
|
||||
|---|---|---|
|
||||
| `git diff --check` | 성공 | exit code 0, 출력 없음 |
|
||||
| `plutil -lint SodaLive.xcodeproj/project.pbxproj` | 성공 | `OK` |
|
||||
| `xcrun swiftc /private/tmp/sodalive_phase21_review_stubs.swift SodaLive/Sources/V2/Main/Home/Recommendation/Models/RecommendedActivityType.swift SodaLive/Sources/V2/Main/Home/Recommendation/Models/MainHomeRecommendationResponse.swift /private/tmp/sodalive_phase21_review_check.swift -o /private/tmp/sodalive_phase21_review_check` | 성공 | 실제 변경 모델 소스 컴파일 성공 |
|
||||
| `/private/tmp/sodalive_phase21_review_check` | 성공 | `Phase 21 routing checks passed: 9` |
|
||||
| `xcodebuild -workspace SodaLive.xcworkspace -scheme SodaLive-dev -configuration Debug build` (sandbox) | 실패 | exit code 66, CoreSimulator·캐시 접근 제한으로 workspace를 열지 못한 환경 실패 |
|
||||
| `xcodebuild -workspace SodaLive.xcworkspace -scheme SodaLive-dev -configuration Debug build` (sandbox 외 재실행) | 성공 | exit code 0, `BUILD SUCCEEDED` |
|
||||
| 실기기/시뮬레이터 탭 검증 | 불가 | 실제 서버 응답과 인증 상태를 준비하지 않아 제외 범위로 유지 |
|
||||
|
||||
## 5. 발견 사항 요약
|
||||
|
||||
**확정 발견 사항 없음.**
|
||||
|
||||
- 문서의 `LIVE`, `LIVE_REPLAY`, `AUDIO`, `COMMUNITY`, unknown 분기와 실제 코드가 일치한다.
|
||||
- `LIVE + targetId == nil`의 `creatorId > 0` 검사와 최종 callback의 양수 guard가 확인된다.
|
||||
- 기존 `performRecommendationDetailAction`과 라이브룸 입장 흐름을 재사용한다.
|
||||
- working tree 기준 정적 검증, 임시 회귀 체크 및 `SodaLive-dev` Debug 빌드가 성공했다.
|
||||
|
||||
## 6. 발견 사항 상세
|
||||
|
||||
확정 발견 사항 없음.
|
||||
|
||||
실기기/시뮬레이터 수동 탭 검증은 제외 범위이며, 코드·문서 불일치나 자동 검증 실패로 판정하지 않았다.
|
||||
|
||||
## 7. 확정 항목의 plan·goal 전환
|
||||
|
||||
전환 항목 없음.
|
||||
|
||||
확정 발견 사항이 없으므로 `plan-task.md` Phase 21에 신규 회귀 수정 Task를 추가하지 않는다.
|
||||
|
||||
## 8. 리뷰 종료 판정
|
||||
|
||||
| 판정 항목 | 결과 | 근거 |
|
||||
|---|---|---|
|
||||
| 리뷰 범위 전체 확인 | 충족 | Phase 21 문서, 변경 코드, callback 소비 지점, 정적 검증 및 빌드 확인 |
|
||||
| 후보 항목 판정 완료 | 충족 | 남은 후보 없음 |
|
||||
| 확정 항목 plan 반영 | 해당 없음 | 확정 발견 사항 없음 |
|
||||
| 보류 항목의 담당·재개 조건 기록 | 해당 없음 | 보류 항목 없음 |
|
||||
| 검증 명령과 결과 기록 | 충족 | 4절에 실제 명령, 성공·실패 및 환경 사유 기록 |
|
||||
|
||||
**최종 결론:** 확정 발견 사항 없음
|
||||
|
||||
**남은 항목:** 자동 리뷰 범위 내 없음. 실기기/시뮬레이터 수동 탭 검증은 제외 범위다.
|
||||
|
||||
## 9. 수정 후 검증 기록
|
||||
|
||||
해당 없음. 확정 발견 사항과 후속 수정이 없다.
|
||||
Reference in New Issue
Block a user