Files
sodalive-ios/docs/20261016_유저_크리에이터_채팅_다중행_입력/reviews/phase1-multiline-input.md
T

6.7 KiB
Raw Blame History

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 이동으로 첫13줄과 마지막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측정과 독립 시각 검토를 따른다.