22 KiB
Yandex 광고 잔여 참조 제거 계획
| 문서 항목 | 내용 |
|---|---|
| 상태 | 코드 구현·자동 검증 완료, 수동 QA 외부 조건 대기 |
| 작성일 | 2026-10-13 |
| 요구사항 기준 | prd.md |
| API 기준 | PRD §11, 기존 캔 충전 계약 유지 |
| 현재 Phase | Phase 1 수동 QA 대기 |
| 현재 활성 Goal | 없음, P1-GATE [blocked] |
목표
Yandex SDK와 상수가 제거된 앱의 잔여 참조를 없애고, 광고 없이 기존 화면과 캔 충전을 사용할 수 있도록 한다.
현재 상태
| Phase | 상태 | 완료 Task | 다음 Goal | 남은 조건 |
|---|---|---|---|---|
| 1 | 외부 조건 대기 | 3/3, Gate 부분 검증 | P1-GATE [blocked] | 11개 화면 및 테스트 계정 캔 구매 QA |
사용자 선행 작업인 Pod 의존성·상수 제거는 완료 기준선이며 이 계획에서 재수행하지 않는다. 구현 시작 시 남아 있던 SDK·상수 참조는 P1-T1~T3에서 제거했다.
범위
포함
- 11개 배너 소비 코드, 보상형 광고 소비 코드, 광고 전용 enum·문구 제거.
- AppDelegate의 Yandex 연결, 공용 광고 파일 및 두 타깃 프로젝트 참조 제거.
- 보존 경계 대조, 정적 검사, 두 스킴 빌드, 수동 회귀 확인과 구현 후 리뷰 기록.
제외
- 두 Info.plist 전체, ATT/IDFA 및 다른 SDK, 캔 구매 UI·Repository·API 계약 변경.
- Pod 설치·업데이트·재정리, Constants 재수정, 미사용 Pods 생성물 직접 삭제.
- Project Format 변경, worktree·브랜치 생성, 커밋, 과거 문서 재작성, 새 테스트 인프라.
기술적 제약
- 현재 작업 디렉터리에서만 순차 실행한다. 사용자의 기존 변경을 덮어쓰지 않는다.
- 모든 구현은 문서 승인 후 시작하며, 광고에만 속하는 부분만 삭제한다.
objectVersion = 77과 운영·개발 타깃 구성은 유지한다.- 신규 로직을 추가하지 않는 삭제 작업이며 기존 테스트 타깃이 확인되지 않았다. 아래 RED/GREEN은 명시된 정적 부재 검사로 수행하고 빌드·수동 검증을 보완한다. 테스트 인프라·영구 검증 스크립트는 추가하지 않는다.
- 부재 검사의
rg종료 코드는 1만 성공이다. 0은 금지 참조 잔존, 2는 검사 오류다. 단순! rg로 검사 오류까지 성공으로 처리하지 않는다.
Phase 1. 잔여 광고 참조 제거
Phase 결과: Yandex 없이 앱을 빌드하고 기존 화면과 캔 충전을 사용할 수 있다.
선행조건: 사용자의 PRD·계획 승인. 승인 전에는 아래 체크박스를 실행하지 않는다.
Phase 완료 조건: P1-T1~P1-T3 및 P1-GATE 완료 증거와 실제 검증 기록.
Task 1.1 배너 소비 코드 제거
Goal 실행 P1-T1: 11개 화면에서 광고 호출을 없애고 주변 콘텐츠를 보존한다.
- 시작 조건: 문서 승인,
YAN-001,YAN-005확인. - 완료 증거: 11개 대상 파일의 배너 참조 부재와 변경 대조. 화면 QA는 Gate에서 수행.
- 범위 밖: 다른 화면·스타일 개편, 공용 광고 파일 삭제.
Files (Modify, 모두 SodaLive/Sources/ 기준):
Live/LiveView.swift
Live/Room/Detail/LiveDetailView.swift
Explorer/Profile/CreatorCommunity/All/CreatorCommunityAllView.swift
Content/Series/Main/Home/SeriesMainHomeView.swift
Content/Series/Main/DayOfWeek/SeriesMainDayOfWeekView.swift
Content/Series/Main/ByGenre/SeriesMainByGenreView.swift
Notification/List/PushNotificationListView.swift
Settings/Notification/NotificationSettingsView.swift
Chat/Character/CharacterView.swift
Chat/Original/OriginalTabView.swift
Chat/Talk/TalkView.swift
Interfaces: 기존 화면 진입·콘텐츠·탭·스크롤은 유지하고 YandexInlineBannerView 소비만 제거한다.
- RED: 아래 명령을 배너 참조 0건 수용 검사로 사용한다.
- RED 확인: 종료 코드 0과 기존 배너 호출 11건을 확인한다.
- GREEN: 배너 및 광고 전용 modifier·광고만 감싼 조건문을 삭제한다. 주변 공용 간격은 유지한다.
- GREEN 확인: 같은 명령이 종료 코드 1인지 확인한다.
- REFACTOR: 삭제로 생긴 빈 블록만 정리하고 11개 파일을 대조해 관련 없는 변경이 없는지 기록한다.
rg -n 'YandexInlineBannerView' SodaLive/Sources --glob '!YandexAdSupport.swift'
Task 1.2 채팅 보상형 광고 잔여 코드 제거
Goal 실행 P1-T2: 광고 사전 로딩·표시·보상 경로를 제거하고 캔 구매 계약은 그대로 둔다.
- 시작 조건:
P1-T1완료,YAN-002~003,YAN-005확인. - 완료 증거: 광고 소비 심볼 부재,
.ad제거 및 기존 캔 구매 코드 보존. - 범위 밖: 구매 함수 재설계, optional 제거, Repository/API·충전 UI 수정.
Files:
- Modify:
SodaLive/Sources/Chat/Talk/Room/ChatRoomViewModel.swift - Modify:
SodaLive/Sources/Chat/Talk/Room/Quota/ChatQuotaPurchaseRequest.swift - Modify:
SodaLive/Sources/I18n/I18n.swift - Verify only:
SodaLive/Sources/Chat/Talk/Room/ChatRoomRepository.swift,SodaLive/Sources/Chat/Talk/TalkApi.swift,SodaLive/Sources/Chat/Talk/Room/ChatRoomView.swift,SodaLive/Sources/Chat/Talk/Room/Quota/ChatQuotaNoticeItemView.swift
Interfaces: purchaseChatQuota(canOption:), CAN, CAN_10, CAN_20, container = "ios", optional canOption, 쿼터·캔 갱신 및 quotaChatCount 유지.
- RED: 아래 두 명령을 광고 전용 심볼·enum 부재 검사로 사용한다.
- RED 확인: 각 명령이 종료 코드 0으로 현재 참조를 찾는지 확인한다.
- GREEN:
showRewardedAdForChatQuota,prepareRewardedAdIfNeeded와 호출,.ad,quotaAdAction,rewardedAdLoadFailed만 제거한다. - GREEN 확인: 두 명령 모두 종료 코드 1인지 확인하고 기존 캔 요청 필드·값을 코드 대조한다.
- REFACTOR: 삭제로 발생한 미사용 코드만 정리한다. 구매·오류·로딩·잔액 갱신 로직은 재구성하지 않는다.
rg -n 'YandexRewardedAdManager|showRewardedAdForChatQuota|prepareRewardedAdIfNeeded|quotaAdAction|rewardedAdLoadFailed' SodaLive/Sources --glob '!YandexAdSupport.swift'
rg -n 'case[[:space:]]+ad[[:space:]]*=[[:space:]]*"AD"' SodaLive/Sources/Chat/Talk/Room/Quota/ChatQuotaPurchaseRequest.swift
Task 1.3 공용 SDK 연결과 프로젝트 참조 제거
Goal 실행 P1-T3: 소비 코드가 제거된 Yandex 공용 구현과 SDK 연결을 제거한다.
- 시작 조건:
P1-T1,P1-T2완료,YAN-004확인. - 완료 증거: 소스·프로젝트·의존성 명세에서 Yandex 및 전용 하위 라이브러리 참조 부재.
- 범위 밖: Pods 생성물 수동 정리, plist·Project Format 변경.
Files:
- Modify:
SodaLive/Sources/App/AppDelegate.swift - Delete:
SodaLive/Sources/Common/YandexAdSupport.swift - Modify:
SodaLive.xcodeproj/project.pbxproj - Verify only:
Podfile,Podfile.lock,Pods/Manifest.lock,Pods/Pods.xcodeproj/project.pbxproj
Interfaces: AppDelegate의 다른 SDK 초기화와 두 앱 타깃 구성은 유지한다. 신규 인터페이스는 없다.
- RED: 아래 명령을 SDK·공용 참조 부재 검사로 사용한다.
- RED 확인: 종료 코드 0과 AppDelegate·공용 파일·프로젝트의 잔존을 확인한다.
- GREEN: Yandex import·초기화·전용 주석, 공용 파일, 파일 참조·그룹 항목·두 타깃 build-file/Sources 등록을 제거한다.
- GREEN 확인: 같은 명령이 종료 코드 1인지 확인하고 두 타깃에 누락 파일 참조가 없는지 확인한다.
- REFACTOR: 프로젝트 전체 재직렬화 없이 해당 항목만 정리하고 Gate로 진행한다.
rg -n -i 'yandex|appmetrica|divkit|vgsl' SodaLive/Sources SodaLive.xcodeproj/project.pbxproj Podfile Podfile.lock Pods/Manifest.lock Pods/Pods.xcodeproj/project.pbxproj
Phase 1 Gate
Goal 실행 P1-GATE: 제거 완료와 보존 조건, 빌드·화면·충전 회귀를 실제 결과로 판정한다.
- 시작 조건: 구현 Task 3개 완료.
- TDD 예외 사유: 구현 후 검증·기록만 수행하는 Task다.
- 대체 검증: 정적 검사, 승인 후 구현 직전의 보존 파일 기준선 대조, 아래 빌드와 수동 QA.
- 완료 증거: 명령 종료 코드·수동 결과·리뷰 경로를 Progress에 기록. 환경 차단은 성공으로 처리하지 않는다.
승인 직후 구현 전에 두 Info.plist, Podfile/lock, 두 Constants, 캔 구매 Repository/API/UI, AppViewModel.swift, SodaLiveApp.swift의 상태를 읽기 전용으로 기록한다. 변경 후 사용자 기존 상태와 대조한다. 두 plist는 전체 내용이 동일해야 하며 objectVersion = 77은 유지해야 한다.
plutil -lint SodaLive.xcodeproj/project.pbxproj SodaLive/Resources/Info.plist SodaLive/Resources/Debug/SodaLive-dev-Info.plist
xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" -configuration Debug build
xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" -configuration Debug build
Expected: 모든 Task 부재 검사는 종료 코드 1, plist/프로젝트 문법 검사와 두 빌드는 종료 코드 0. 이 계획 단계에서 실행한 결과가 아니다.
- Task 3개의 정적 검사를 재실행한다. 과거 문서·보존 plist·미사용 Pods 리소스 파일은 부재 검사에서 제외한다.
- 보존 파일과 캔 계약, Project Format을 구현 직전 기준선과 대조한다.
- 두 스킴 빌드와 위 문법 검사를 통과한다. 제공되는 파일 진단 도구가 있으면 수정 Swift 파일도 검사한다.
- 11개 화면의 콘텐츠·스크롤·이동, 광고 전용 빈 공간 제거를 수동 확인한다. 승인된 테스트 계정으로 10캔·20캔 구매의 쿼터·잔액 갱신과 기존 잔액 부족·실패 처리를 확인한다. 운영 비용이 발생하는 검증은 별도 승인 없이는 수행하지 않는다.
docs/sample/sample-review.md를 읽고reviews/phase1-yandex-reference-removal.md를 작성한다. 확정 수정 사항은 코드 수정 전에 이 계획에 신규 Task로 추가한다.
[blocked] 수동 QA: 사용 가능한 기기는 새 전용 시뮬레이터였고, 이 세션에 네이티브 탭/화면 탐색 자동화와 승인된 테스트 계정·구매용 데이터가 없다. 앱 실행만으로 11개 화면과 유료 거래를 검증했다고 판정하지 않는다. 계정·데이터와 수동 조작 가능한 환경을 준비한 후 같은 Gate를 이어서 검증한다.
실행 순서와 의존성
사용자 승인 → P1-T1 → P1-T2 → P1-T3 → P1-GATE
동시에 하나의 Task만 진행하고 현재 작업 디렉터리를 사용한다. 각 부분 삭제 단계에서는 빌드 가능 상태라고 주장하지 않는다. 전체 연결 제거 후 두 스킴을 검증한다.
변경 금지 항목과 중단 규칙
PRD의 Non-Goals를 따른다. 승인 전 구현, worktree 생성, 자동 커밋, 생성물 직접 편집을 금지한다. 예상 밖의 API·UX 결정을 요구하는 문제가 나오면 임의로 확장하지 말고 PRD에 기록한 뒤 한 가지 질문으로 확인한다. 환경상 QA가 불가능하면 사유를 명시하고 해당 Gate를 미완료로 남긴다.
Progress
문서 준비 1차 실행 - 2026-10-13
- 상태: 문서 작성, 구현 승인 대기.
- 무엇을: 사용자 완료 범위와 잔여 참조, 보존 경계를 정리하고 PRD·계획을 작성했다.
- 왜: 다중 화면의 동작 변경은 구현 전 문서가 필요하며, 사용자가 문서 작성 후 승인 대기를 요청했다.
- 어떻게: 문서 정책·샘플·빌드 가이드를 읽고
rg로 현재 참조를 확인했다. 계획 검토는 읽기 전용으로 수행했다. - 실행 근거:
rg -n 'Yandex|YANDEX_|quotaAdAction|rewardedAdLoadFailed|case ad = "AD"|SKAdNetworkItems|NSAdvertisingAttributionReportEndpoint|objectVersion =' SodaLive/Sources SodaLive.xcodeproj/project.pbxproj Podfile Podfile.lock SodaLive/Resources/Info.plist SodaLive/Resources/Debug/SodaLive-dev-Info.plist에서 잔여 코드·보존 키·objectVersion = 77을 확인했다. - 결과: 신규 제거 작업용 PRD·계획이 기존에 없는 것을 확인했다. 과거 배치·부분 제거 문서는 완료 이력으로 보존한다. 앱 코드·프로젝트 설정·Pods 수정과 빌드·수동 QA는 수행하지 않았다.
- 문서 검증: 생성한 두 문서를 다시 읽고 요구사항 ID·Task·상호 링크를 대조했다.
rg로 미치환 템플릿과 미실행 완료 체크가 없음을 확인했다. 승인 대기·worktree 미사용·두 plist 보존·캔 계약·Pods 제외 조건도 두 문서에서 확인했다. - 남은 항목: 사용자 문서 승인 후
P1-T1부터 실행.
구현 준비 - 2026-10-13
- 사용자 승인 후 구현 시작 상태로 전환했다. 두 plist·Pod 명세·Constants·캔 구매 경계·마케팅 파일 총 13개의 SHA-256 기준선을 기록했다.
- 사용자가 변경한 프로젝트의
objectVersion = 77, 기존 항목 정렬, Copy Pods Resources 단계 제거는 보존한다. P1-T1정적 RED 검사에서 배너 소비 11건을 확인했다. SwiftUI 삭제는 해당 11개 파일만 대상으로 진행한다.- 실제
ChatQuotaPurchaseRequest.swift와 임시 Swift 드라이버를 컴파일·실행한 기준선 검사에서CAN_10,CAN_20, nilcanOption직렬화 3개 시나리오가 통과했다. 영구 테스트 파일이나 테스트 타깃은 추가하지 않는다. - 실행 환경에
lsp_diagnostics도구가 제공되지 않아 Swift 구문 검사·컴파일 및 두 스킴 빌드로 보완하며, LSP 통과를 주장하지 않는다.
P1-T1 실행 결과 - 2026-10-13
- 상태: 구현·정적 검증 완료, 실제 화면 QA는 Gate에서 별도 확인.
- 무엇을: 11개 View의 배너 호출과 광고 전용 modifier 및 장르 화면의 광고 전용 조건문을 삭제했다.
- 왜: Yandex 공용 파일 삭제 전에 모든 배너 소비 경로를 제거하기 위해서다.
- 어떻게: 배너 부재 검사가 변경 전 11건(종료 코드 0)에서 변경 후 0건(종료 코드 1)으로 전환됐다.
xcrun swiftc -frontend -parse에 11개 수정 파일을 전달한 구문 검사는 종료 코드 0이었다. 11개 파일 본문과 diff를 확인해 콘텐츠·라우팅·기존 공용 간격이 유지됨을 확인했다. - 남은 항목: P1-T2, P1-T3, P1-GATE. 구문 검사는 전체 타입 검사나 화면 QA를 대체하지 않는다.
P1-T2 실행 결과 - 2026-10-13
- 상태: 구현·정적 검사·캔 요청 직렬화 회귀 검증 완료.
- 무엇을: 광고 표시/사전 로딩 함수와 호출,
.adcase, 광고 전용 문구 2개를 삭제했다. 구매 함수·optional·요청 필드·잔액 갱신은 유지했다. - 왜: SDK 제거 후 남은 채팅 광고 의존 경로를 제거하면서 기존 유료 충전을 보존하기 위해서다.
- 어떻게: 두 정적 검사가 각각 종료 코드 0에서 1로 전환됐다. 수정 Swift 파일 3개의 parser 검사는 종료 코드 0이었다. 실제 DTO를 임시 드라이버와 다시 컴파일·실행하여
CAN_10,CAN_20, nilcanOption3개 검사 모두 통과했다. 변경 diff에는 계획한 삭제 외 구매 로직 수정이 없다. - 남은 항목: P1-T3 및 Gate. 실서버 구매는 실행하지 않았다.
P1-T3 실행 결과 - 2026-10-13
- 상태: 구현·정적 검사 완료, 빌드 및 수동 Gate 진행 예정.
- 무엇을: AppDelegate의 Yandex import·초기화와 공용 파일을 제거하고, 프로젝트에서 전용 등록 6줄만 삭제했다.
- 왜: 모든 소비 경로가 제거된 SDK 연결과 삭제 상수 참조를 최종 정리하기 위해서다.
- 어떻게: SDK 부재 검사가 종료 코드 0에서 1로 전환됐다.
plutil -lint는 프로젝트 및 두 plist에서 OK, AppDelegate Swift parser는 종료 코드 0이었다.ruby -rxcodeproj읽기 전용 검사로 두 앱 타깃에 Yandex 소스 항목이 없고objectVersion = 77임을 확인했다. - 남은 항목: P1-GATE. 생성물·보존 plist·사용자 선행 변경은 수정하지 않았다.
P1-GATE 검증 결과 - 2026-10-13
- 상태: 코드 구현·자동 검증·독립 코드 리뷰 완료, 화면 전체 및 실제 구매 QA는 외부 조건 대기.
- 무엇을: 두 앱 빌드, 보존 파일 대조, 실제 DTO 실행, 최종 참조 검색, 결과물 검사와 네이티브 시작 smoke를 수행했다.
- 왜: SDK를 제거한 앱의 실제 컴파일과 실행 가능 여부를 확인하면서 캔 구매·설정 보존을 검증하기 위해서다.
- 어떻게:
- 모든 Task의 정적 부재 검사: 종료 코드 1. 수정 Swift 15개 파일의
xcrun swiftc -frontend -parse: 종료 코드 0. LSP 도구는 미제공으로 미실행. plutil -lint SodaLive.xcodeproj/project.pbxproj SodaLive/Resources/Info.plist SodaLive/Resources/Debug/SodaLive-dev-Info.plist: 모두 OK.xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" -configuration Debug build: 종료 코드 0, BUILD SUCCEEDED.xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" -configuration Debug build: 종료 코드 0, BUILD SUCCEEDED.xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" -configuration Debug -sdk iphonesimulator -destination 'generic/platform=iOS Simulator' CODE_SIGNING_ALLOWED=NO build: 종료 코드 0, BUILD SUCCEEDED. 기기용 빌드 검증 뒤 native smoke 목적으로 추가한 실행 옵션이며 프로젝트 설정 변경은 없다.shasum -a 256 -c /var/folders/yh/8xsbvpsj5wg2qnxzxdp11_gm0000gn/T/opencode/yandex-ios-preserved.sha256: 13개 보존 파일 모두 OK.- 실제
ChatQuotaPurchaseRequest.swift와 임시 Swift 드라이버 컴파일·실행: CAN_10, CAN_20, nil canOption 직렬화 및 수치 검사 3/3 통과. 실행 기록은yandex-ios-quota-check.log로 보존했다. - 두
Debug-iphoneos앱의Frameworks/, 앱 루트 및xcrun otool -Ldebug dylib 출력에서 Yandex/AppMetrica/DivKit/VGSL 링크·번들이 없음을 확인했다. git diff --check: 종료 코드 0. 두 공유 scheme의 TestAction에 Testables가 없으며 Yandex/채팅 쿼터용 기존 XCTest는 확인되지 않았다. 실행 가능한 XCTest 전체 suite 통과로 표기하지 않는다.
- 모든 Task의 정적 부재 검사: 종료 코드 1. 수정 Swift 15개 파일의
- 네이티브 smoke:
- iPhone 17 Pro / iOS 26.0 전용 기기
F14B9E9B-F166-4694-ACBD-9804E4B7AD54를 생성하고 boot/bootstatus에 성공했다. 기존 사용자 기기는 건드리지 않았다. xcrun simctl install F14B9E9B-F166-4694-ACBD-9804E4B7AD54 /Users/klaus/Library/Developer/Xcode/DerivedData/SodaLive-clzdtvqrsfonoxcijatzkrqdzrsu/Build/Products/Debug-iphonesimulator/SodaLive-dev.app: 종료 코드 0.xcrun simctl launch F14B9E9B-F166-4694-ACBD-9804E4B7AD54 kr.co.vividnext.sodalive.debug2: PID 61239, 종료 코드 0.xcrun simctl io F14B9E9B-F166-4694-ACBD-9804E4B7AD54 screenshot /var/folders/yh/8xsbvpsj5wg2qnxzxdp11_gm0000gn/T/opencode/yandex-ios-launch-smoke.png: PNG 저장 후 직접 열어 홈 콘텐츠와 보존된 ATT 팝업 표시를 확인했다. 이는 11개 변경 화면의 시각 QA가 아니다.
- iPhone 17 Pro / iOS 26.0 전용 기기
- 독립 리뷰: Oracle
bg_16ac91d2/ses_ecc05fbd9ffe65w6Gb41Ii1HYZ, 코드 APPROVE·확정 코드 결함 없음. 전체 Gate는 수동 QA가 남아 미완료라는 판정. 리뷰 보고서에 기록했다. - 정리: 전용 앱 terminate → 해당 기기 shutdown → delete 모두 종료 코드 0. 기기 이름 검색에서 0개를 확인했다. 임시 DTO 드라이버·바이너리를 삭제하고 부재를 확인했다. 로그·스크린샷·체크섬 기준선만 증거로 보존했다.
- 기존 경고: 중복 Compile Sources, 관련 없는 미사용 지역 변수, Firebase Debug dSYM, AppIntents 메타데이터, Alamofire 의존성 스캔 경고가 있었다. 이번 삭제와 무관한 항목은 수정하지 않았다.
- 남은 항목: [blocked] 11개 변경 화면의 실제 탐색/레이아웃과 승인된 테스트 계정의 캔 구매·실패 QA. 전체 visual QA 또는 P1-GATE 통과를 주장하지 않는다.
증거 파일 디렉터리: /var/folders/yh/8xsbvpsj5wg2qnxzxdp11_gm0000gn/T/opencode/
| 증거 | 파일 |
|---|---|
| 운영 빌드 | yandex-ios-standard-debug-build.log |
| 개발 빌드 | yandex-ios-dev-debug-build.log |
| 개발 시뮬레이터 빌드 | yandex-ios-simulator-debug-build.log |
| 캔 요청 실행 | yandex-ios-quota-check.log |
| 보존 파일 기준선 | yandex-ios-preserved.sha256 |
| 앱 시작 화면 | yandex-ios-launch-smoke.png |
Decision Log
| 날짜 | ID | 상태 | 결정 | 근거 | 영향 |
|---|---|---|---|---|---|
| 2026-10-13 | PLAN-001 | 확정 | 문서 작성만 수행하고 구현 승인 대기 | 사용자 직접 지시, PRD DEC-003 | 전체 |
| 2026-10-13 | PLAN-002 | 제안 | 기존 정적 검사·빌드·수동 QA로 삭제 검증, 신규 테스트 인프라 없음 | 빌드 가이드, 최소 변경 | P1-GATE |
| 2026-10-13 | PLAN-003 | 제안 | 비활성 Pods 생성물은 그대로 두고 활성 참조만 검사 | PRD DEC-004 | P1-T3, P1-GATE |
| 2026-10-13 | PLAN-004 | 확정 | 사용자 승인으로 구현 착수, PLAN-002~003 적용 | PRD DEC-005 | 전체 |
| 2026-10-13 | PLAN-005 | 확정 | 현재 디렉터리·기존 Progress를 사용, worktree/자동 커밋/추가 실행용 저장소 구조 없음 | 승인 계획을 스킬 기본 절차보다 우선 | 전체 |
| 2026-10-13 | PLAN-006 | 확정 | 코드 리뷰와 전체 수동 Gate를 분리, 미검증 UI·실구매는 차단으로 남김 | 실제 검증 범위와 독립 리뷰 판정 | P1-GATE |
발견된 문제
| ID | 상태 | 관찰 | 처리 |
|---|---|---|---|
| YAN-STATE-001 | 잔여 참조 확인 | SDK·상수는 제거됐으나 앱 소비 코드가 남음, 빌드는 아직 미실행 | 승인 후 P1-T1~T3 |
| YAN-STATE-002 | 범위 제외 | 과거 Pods 리소스 스크립트·목록 10개에 참조 잔존, 활성 Copy Pods Resources 단계 없음 | 직접 편집하지 않음 |
| YAN-STATE-001-FOLLOWUP | 해결 | 잔여 참조 제거 및 운영·개발 Debug 빌드 성공 | P1-T1~T3 완료 |
| YAN-QA-001 | 외부 조건 대기 | 11개 화면 전체와 실서버 캔 구매 미검증 | P1-GATE [blocked], 테스트 계정·데이터 및 native 조작 환경 필요 |