6.2 KiB
마이 탭 공지 롤링 리뷰
1. 리뷰 정보
| 항목 | 내용 |
|---|---|
| 대상 | Phase 1 / working tree, 기준 HEAD 8c08861b34222a9c29bfa2bdaea888d111e37829 |
| 일자 | 2026-10-28 |
| 리뷰어 | Oracle 코드 리뷰, 독립 native QA, 부모 검증 |
| 기준 | ../prd.md, ../plan-task.md |
| 상태 | 수정 검증 완료 / 코드 APPROVE / 서버 통합 대기 |
2. 목적과 범위
최신 공지 배열 계약·기존 상세 동작·제목 확장·0/1/2/3 순환·생명주기 회귀를 검토한다. 서버 구현과 기존 홈은 제외한다.
3. 판정 기준
사용자 요구 또는 기존 동작을 깨는 확인된 문제만 차단한다. 전체 앱·실제 터치 검증과 하네스 검증을 구분한다.
4. 검토한 근거
MyPageView.swift,MyPageViewModel.swift,NoticeApi.swift,NoticeRepository.swift,MyPageNoticeRoller.swift, 공통 응답·기존 상세·두 메인 탭 경로.- 신규
work/tests/MyPageNoticesCheck.swift와 runner, 기존 인증 종료 회귀 fixture, 두 앱 타깃 등록. - 부모 실행: 전체 13개 스크립트 PASS. 두 앱 스킴 generic iOS 및 iOS Simulator 빌드 모두 exit 0.
- Oracle 직접 실행: 신규 공지·기존 인증 종료 검사 PASS, diff 공백 검사 PASS.
- native QA: 실제 소스 기반 iPhone SE3 / iOS18.3 화면과 5초 타이머, 36 PNG. S5 실패. 전체 앱/물리 탭 검증 아님.
5. 발견 사항 요약
| ID | 심각도 | 상태 | 제목 | 후속 Goal |
|---|---|---|---|---|
| REV-P1-001 | Medium | 확정 | 배너 외부 padding이 Button 영역 밖으로 이동해 기존 클릭 영역 축소 | P1-R1 |
| REV-P1-002 | High | 확정 | inactive에서 한 번 더 진행하고 active 복귀 후 재개하지 않음 | P1-R1 |
6. 발견 사항 상세
REV-P1-001
MyPageView.swift의 Button label 내부에 contentShape가 있지만 기존 좌우24·상하6 padding은 바깥 ZStack에 있다. 기존에는 padding 뒤 contentShape/onTapGesture로 배너 전체를 눌렀다. padding을 label 내부로 옮긴 뒤 contentShape를 적용하여 기존 영역을 복원한다. 실제 좌표 탭은 환경 도구 지원 범위에 따라 별도 판정한다.
REV-P1-002
scenePhase onChange가 전달하는 새 값을 버리고 restartRollTimer() 내부에서 캡처된 환경 값을 읽는다. native probe는 inactive/active 변경을 기록했지만 배너 동작은 이전 상태를 따른다. 같은 실패가 matrix, 별도 lifecycle, OS background/복귀 bridge에서 재현됐다. 새 phase를 직접 타이머 재시작 판단에 전달하는 최소 변경을 우선 검증한다. Reduce Motion 변경도 새 값을 사용해야 하는지 함께 확인한다.
7. plan·goal 전환
두 항목을 코드 변경 전에 plan-task.md의 P1-R1로 등록했다. 기존 실패 증거를 보존하고 새 캡처·실행 결과를 별도로 누적한다.
8. 최종 판정
현재 REQUEST_CHANGES. API·배열·본문/date·기존 목록 보존은 확인됐으나 위 회귀 수정이 필요하다. 실서버 공개 GET 401은 별도 외부 통합 차단 조건이다.
후속 판정 — 2026-10-28
- APPROVE: Oracle 재리뷰에서 REV-P1-001/002 모두 해결, 추가 확정 제품 코드 차단 사항 없음. 위 REQUEST_CHANGES는 최초 판정 기록으로 보존한다.
- 배너 padding이 label 안에서 contentShape 앞에 적용돼 기존 영역의 소유권이 복원됐다. scenePhase/Reduce Motion의 새 값을 타이머 재시작 함수에 직접 전달한다.
- 수정 후 native 증거: 리뷰어가 핵심 25장을 직접 확인하여 하네스 범위 시각 PASS. 0/1/2/3 순환, 한글 말줄임·화살표, inactive 유지·active 재개·OS 복귀·remount·축소를 확인했다.
- 부모 최종 검증: 전체 13개 검사 PASS,
SodaLive/SodaLive-dev각각 iOS·Simulator 빌드 exit 0. 리뷰 중 남아 있던 dev simulator 실행도 이후 exit 0으로 완료했다. 최종 제품 소스 해시는7f8ac15573ab4c9fe01508431297e40d2e95a22ad37585859f03224475749d02와 일치한다. - QA worker 서비스 연결 실패 후 fallback이 동일 소스로 별도 재실행을 마쳤다. 제품 수정 없이 추가 확인했으며 기존 RED/승인 대상 증거는 보존했다.
- 부모가 프로세스 부재·booted simulator 없음·모든 알려진 소유 TMP 부재를 확인했다. 정리 영수증.
- 미검증: 실제 좌표 탭/가장자리 hit-testing, 전체 앱 상세 이동, VoiceOver·Reduce Motion 런타임, 실기기/iOS16.6, LSP(도구 미제공). 코드·하네스 승인을 전체 E2E 승인으로 확대하지 않는다.
- 외부 출시 조건: 신규 API 무인증 GET의 HTTP 200·실제 payload 확인이 필요하다. 현재 테스트 서버는 401이며 클라이언트 fallback이나 공통 인증 변경은 하지 않았다.
P1-T2 후속 UI 보완 — 2026-10-28
- 사용자가 계약·정상 동작·롤링 정상 확인을 전달했다. 위 401 외부 확인 대기는 사용자 확인으로 해소하며 과거 측정 기록만 보존한다.
- 사용자 추가 요청에 따라 화살표·버튼은 고정하고 제목만 전환한다. 변경은
UpdateBannerView의 제목 ZStack과 id/transition 위치로 한정했다. - 독립 리뷰 APPROVE, 확정 발견 사항 없음. 전체 padded hit area·현재 항목 callback·5초 타이머·생명주기·Reduce Motion 경로를 유지했다.
- native 비교판에서 실제 wrap 중간 제목 이동과 고정 화살표 확인. 부모 비교 스크립트 재실행 exit 0, 10개 프레임 화살표 변경 픽셀 0. 중간 전환 이전에 찍힌
two-mid는 중간 동작 증거에서 제외하고wrap-mid를 사용했다. - 부모 검증: 회귀 스크립트 13개 PASS,
SodaLive-deviOS Simulator 빌드 exit 0, diff 공백 검사 PASS. 제품 SHA-256af77569942c0bbdbad0242431362b5987dc278d8f70d015ccc1ef675b2b264ed. - 물리 탭·전체 상세 이동·VoiceOver/Reduce Motion 런타임 재검증은 이번 범위에서 생략했다. 하네스 렌더링·픽셀 비교와 전체 E2E를 구분한다.