6.7 KiB
6.7 KiB
Phase 1 다중행 입력 검증·리뷰
1. 리뷰 정보
| 항목 | 내용 |
|---|---|
| 기준 | main, 시작 b0cabf9 / 구현 14b415e |
| 요구사항 | PRD, INPUT-001~005 |
| 계획 | plan-task.md, P1-T1/P1-GATE |
| 상태 | 코드·하네스 시각 검토 승인 / 실제 DM 통합 QA 미실행 |
2. 범위와 판정 기준
유저-크리에이터 DM의 inputBarView만 검토한다. 단일→최대3줄 확장, 초과 내용 내부 스크롤, Return 줄바꿈, 기존 버튼 전송·빈 입력 가드·비연결 입력 가드 보존이 기준이다. 네트워크·서버·날짜 목록·다른 입력창은 변경 범위 밖이다.
3. 검증 근거
- 기존 커뮤니티 입력창이 vertical TextField + lineLimit1...3을 사용한다.
- 메시지 입력 UI의 기존 XCTest seam은 없다. 새 source-string 검사를 만들어 UI 기능 테스트처럼 주장하지 않고 native 전후 동작을 확인한다.
- 현재 노출 도구에 LSP diagnostics가 없어 native compiler/build로 검증하고, LSP 실행 여부와 구분한다.
| 검사 | 결과 |
|---|---|
| 운영/개발 타깃 최종 빌드 | 모두 exit0, 전후 RoomView SHA-256 일치 |
| 기존 검사12개 스크립트/지원 모드19회 | 모두 exit0, 날짜113 assertions 포함 |
| 네이티브 입력 UI 전후 비교 | 동작·소스22검사 + PNG44검사 통과, 부모 재실행 exit0 |
| 독립 코드·시각 리뷰 | 코드 APPROVE, 최종22장 시각 PASS, 필수 수정 없음 |
4. 발견 사항과 외부 조건
확정 발견 사항 없음. 실제 로그인 DM 및 서버의 줄바꿈 저장·재조회는 승인된 계정·roomId 부재로 검증하지 않았다. 하네스의 합성 전송 sink는 실제 서버 전송을 증명하지 않는다.
5. 종료 판정과 후속 기록
최종 코드·실행 증거·리뷰 결과를 이 문서에 누적하며, 확정 수정이 필요하면 계획에 신규 Task를 등록한 뒤 수정한다. 임시 native 앱·시뮬레이터·컴파일 캐시는 작업 소유 자원만 제거한다.
확인한 동작과 증거
| 입력 줄 수 | 기준 높이 | 변경 후 높이 | 변경 후 contentSize |
|---|---|---|---|
| 1 | 18.5pt | 17pt | 17pt |
| 2 | 18.5pt | 34pt | 34pt |
| 3 | 18.5pt | 50pt | 51pt |
| 4 | 18.5pt | 50pt | 67pt |
| 8 | 18.5pt | 50pt | 134pt |
- 8줄 입력의 native offset0→84pt 이동으로 첫1
3줄과 마지막68줄을 확인했고 전체 binding/native 문자열은 같았다. 긴 한글 wrapping은 content301pt,표시50pt로 유지됐다. - native UIKeyInput의 Return 삽입: 기준은 자동 전송·초기화, 변경 후는
첫째 줄\n이며 전송 없음. 후속 삽입 결과는첫째 줄\n둘째 줄로 보존됐다. - native 전체 삭제와 상태 비우기, 원본 sendText 직접 호출 뒤 한 줄17pt로 축소됐다. 원본 전송 handler는 앞뒤 공백 제거·중간 줄바꿈 보존·합성sink 수신·입력 초기화·포커스 해제를 유지했다.
- 입력창·isInputEnabled·isSendEnabled·sendText를 제품 소스에서 그대로 추출했다. 기존 폰트·색상·간격·send asset을 사용했다. 주변화면·연결상태·일부 문자열·전송sink는 임시 하네스다. provenance와 캡처를 따른다.
verification.json의66 checks는 동작·소스22개와44 PNG형식/크기 확인의 합계다. 비즈니스 테스트66개 또는 실제 서버66시나리오로 해석하지 않는다.
실행 명령과 결과
sh work/tests/check-user-creator-chat-date-presentation.sh:113 assertions, exit0.- work/tests/check-*.sh 12개 기본 실행 + received-gift-detail의 foundation/recipient-form/received-states + gift-phase11의 profile/policy/button + gift-address-search의 baseline, 총19회 모두 exit0.
xcodebuild -quiet -workspace SodaLive.xcworkspace -scheme SodaLive -configuration Debug -destination 'generic/platform=iOS' CODE_SIGNING_ALLOWED=NO build:최종 exit0. SodaLive-dev 동일 명령도 exit0. 기존 프로젝트 관리 DerivedData를 재사용했으며 삭제하지 않는다.plutil -lint SodaLive.xcodeproj/project.pbxproj:OK. 제품 파일 Swift parse 및git diff --check도 exit0. LSP 도구는 없어 미실행이다.- 임시 native하네스의 swiftc·actool·설치·실행·simctl screenshot은 모두 exit0. 전후22장씩44개 PNG가750×1334px이며, 최종 소스와 after스냅샷의 일치를 확인했다. 부모도 verify.py를 실행해 native측정·본문·provenance·이미지형식 검사를 재확인했다.
독립 리뷰 판정
- Oracle 코드/기능 검토: APPROVE. 사용자 요구범위의4줄 추가·4줄 삭제이며 차단 결함 없음. 원본 코드 추출과 native측정 경로를 검토했다.
- 시각 검토: 최종after22장과 기준3장을 직접 열어 PASS. 3줄의 끝글자·첫/마지막줄 잘림 없음, 내부 스크롤 전후 표시 일치, 둥근 모서리와 전송버튼 겹침 없음, 팝업 가림 없음. 50pt높이/51ptcontent 차이만으로 결함을 주장하지 않고 실제 글리프를 확인했다.
- 실제 터치·IME·클립보드·전송버튼탭·비연결 GUI입력차단·소프트웨어키보드·전체대화목록·서버·VoiceOver·다른기기/OS는 미검증이다. 이번 승인을 해당 범위로 확대하지 않는다. 추가 제품 코드 수정 요구는 없다.
정리 기록
- native검증자가 소유 simulator
7A3A7C1D-CA68-4E0F-AFD6-73EFD891A17E를 shutdown/delete하고 하네스 PID64504/65240 종료를 확인했다. cleanup.json에 영수증이 있다. - 부모도 custom device set의 빈 기기 목록과 DMInputHarness 프로세스 부재를 확인했다. 증거를 보존한 뒤 작업 소유
dm-input.MBW85o루트(하네스·스크립트·캐시·로그)를 제거하고 경로 부재를 확인했다. 작업 메모도 삭제했다. 공유 simulator·프로젝트 관리 DerivedData는 제거하지 않았다.
픽셀 비교 보조 증거
- visual-qa의
image-diff를 같은 단계의 before/after22쌍에 실행해 모두 exit0으로 JSON을 생성했다. 내용/높이를 의도적으로 바꾸는 작업이므로 픽셀 동일성을 통과 조건으로 사용하지 않는다. - 3줄 비교: 크기 일치, alpha 유지, diffRatio0.055 / similarity94. 주요 변화는 하단 입력창이 세 줄로 확장된 영역이다.
- overflow 하단 비교: 크기 일치, alpha 유지, diffRatio0.0544 / similarity95. 기존 한 줄 표시 대신 마지막6~8줄이 보이는 하단 입력 영역이 변경됐다. 하네스 제목·상태바 차이도 포함된 참고 수치이며 기능 판정은 native측정과 독립 시각 검토를 따른다.