diff --git a/docs/qa/evidence/2c7295c3a3506e14c64b601031f34fa9416b6cef.json b/docs/qa/evidence/2c7295c3a3506e14c64b601031f34fa9416b6cef.json new file mode 100644 index 0000000000..37abe78243 --- /dev/null +++ b/docs/qa/evidence/2c7295c3a3506e14c64b601031f34fa9416b6cef.json @@ -0,0 +1,55 @@ +{ + "schema": 1, + "source": { + "original_file": "2c7295c3a3506e14c64b601031f34fa9416b6cef.json", + "schema": 1, + "field_mapping": { + "result": "result", + "scenario": "scenario", + "not_covered": "not_covered", + "recorded_at": "recorded_at" + }, + "redactions": [] + }, + "repository": "Afternote/Afternote-FE", + "head_sha": "2c7295c3a3506e14c64b601031f34fa9416b6cef", + "head_ref": "fix/2105-receiver-list-response", + "base_sha": null, + "base_ref": null, + "recorded_at": "2026-09-23T03:20:00+00:00", + "result": "fail", + "scenario": "#2120 head 로 3차 QA 성공 경로. 홈이 이름·수신인 지정 완료·오늘의 질문과 함께 정상으로 뜬다(develop 에서 같은 계정·같은 시점에 실패하던 화면). 설정 하위 화면 순회: 공지사항(빈 안내, 목록은 NavGraph 에서 emptyList 고정이라 서버 조회 없음), 프로필 수정, 연결된 계정, 푸시 알림 설정, 수신자 목록(relation null 행 포함 2건), 수신자 등록, 사후 전달 조건, 패스키 관리(등록 진입 화면), 앱 잠금 비밀번호 설정은 진입 정상. 고객센터는 눌러도 반응이 없고(#564) 비밀번호 변경은 '현재 이 메뉴는 이용할 수 없습니다'(#564, 연결은 #2094 대기). 타임레터 목록 1건 조회 정상, 수신인 선택에 2건 노출. 발송 날짜 없이 등록하면 등록 버튼이 회색이고 요청·안내가 없다(#624 재현). 애프터노트 목록·상세·수정 진입(수신자 prefill 정상)·남기실 말씀 추가 후 저장 PATCH 200·목록 재조회 정상. 관찰: 목록의 '최종 작성일'은 목록 응답의 createdAt 이라 수정해도 바뀌지 않는다. 2차 패스(12:27~12:40 KST): 에뮬에 화면잠금 PIN 과 지문을 등록하고 앱에서 패스키를 등록했다(지문 BiometricPrompt 통과, 서버 요청 없음). 패스키 목록은 등록 뒤에도 자리표시자 한 줄('이름'·'생성일시'·애플 아이콘)만 보인다(#555 재현). 마음의 기록 쓰기: 데일리 질문 답변 PATCH 200·today isAnswered true, 홈 CTA 문구는 답변 여부와 무관하게 같다(홈에 답변 상태 분기 없음, 관찰). 일기 등록 POST 200·월 목록 재조회·'1개의 기록 완료', 수정 PATCH 200 반영, 임시저장 POST isDraft true·임시저장 수 11→12·다시 열면 제목 prefill. 일기 삭제는 확인 없이 바로 DELETE 200 이 나간다(#2142 등록, 확인 대화상자는 데일리 질문 목록에만 있다). 리치 에디터 본문에 셸 입력 명령으로 여러 글자를 한 번에 넣으면 글자가 빠지지만 한 글자씩은 전부 들어가 입력 도구 조건으로 본다. 3차 패스(15:24~15:32 KST, release/minify): 같은 HEAD 를 임시 keystore 로 assembleRelease 해 API 26 에뮬(google_apis, 1080x1920 급)에 설치했다. release 는 debuggable 이 아니라 adb root 로 DataStore 에 QA 토큰을 넣었다. 콜드 스타트 294ms, 순회 내내 같은 프로세스 유지, crash 버퍼 0줄. 순회: 홈(수신자 relation null 행 포함 목록이 R8 뒤 직렬화에서 정상 디코드), 기록 3탭, 타임레터 목록·상세·편집기·수신인 선택, 노트 목록·상세 2건, 편집기 종류 5개(AfternoteType enum 라우트, 재산 처리는 준비 중 안내), 추억 플레이리스트, 에디터 이탈 가드, 설정 하위 화면 전부, 마음의 기록 편집기. 관찰: 새 애프터노트 편집기는 작성자의 수신자 전체로 미리 채워진다. KDoc(loadAuthorReceivers)에 명시된 의도라 결함이 아니다.", + "not_covered": [ + "수신자 열람 승인 이후 화면(#607)은 보지 않았다.", + "리치 에디터 글자 누락은 실제 IME·하드웨어 키보드 연속 입력으로 재현하지 않았다.", + "실기기 고유 축 5종은 실기기 패스 몫이다.", + "release 순회는 조회·진입까지만 했고 저장·업로드처럼 데이터를 만드는 경로는 release 로 실행하지 않았다." + ], + "device": { + "is_emulator": true + }, + "details": { + "details": { + "screen": { + "size": "1080x2400", + "density": 420, + "api_level": 35 + }, + "build_type": "debug", + "issues_reproduced": [ + 624, + 564, + 555 + ], + "issues_filed": [ + 2142 + ], + "release_smoke": { + "api_level": 26, + "startup_ms": 294, + "minified": true, + "signing": "temporary keystore" + } + } + } +} diff --git a/docs/qa/evidence/b402415ecfa555f67a8e638a96d8dd562bebe1c0.json b/docs/qa/evidence/b402415ecfa555f67a8e638a96d8dd562bebe1c0.json new file mode 100644 index 0000000000..57e456452f --- /dev/null +++ b/docs/qa/evidence/b402415ecfa555f67a8e638a96d8dd562bebe1c0.json @@ -0,0 +1,54 @@ +{ + "schema": 1, + "source": { + "original_file": "b402415ecfa555f67a8e638a96d8dd562bebe1c0.json", + "schema": 1, + "field_mapping": { + "result": "result", + "scenario": "scenario", + "not_covered": "not_covered", + "recorded_at": "recorded_at" + }, + "redactions": [] + }, + "repository": "Afternote/Afternote-FE", + "head_sha": "b402415ecfa555f67a8e638a96d8dd562bebe1c0", + "head_ref": "fix/1868-upload-size-feedback", + "base_sha": null, + "base_ref": null, + "recorded_at": "2026-09-23T06:20:00+00:00", + "result": "fail", + "scenario": "3차 QA 실기기 패스(갤럭시 S25). 기기 고유 축만 돌렸다. 1) 카카오 앱-투-앱 로그인(#2120 head 2c7295c3a debug, 공유 debug keystore 서명): TalkAuthCodeActivity -> 카카오톡 CapriLoggedInActivity -> 앱 복귀, 웹 폴백 없음. 2) 10 MiB 초과 사진(8160x6120, 17,279,369 B): 애프터노트 추억 노트 영정사진 등록 시 presigned 400 code 1803 과 함께 '파일 크기가 업로드 허용 한도를 초과했습니다.' 스낵바, 재시도 액션 없음(#2119 의도대로). 마음의 기록 이미지 첨부는 여전히 '다시 시도해 주세요'(#1868 의 그 경로는 #2119 범위 밖). 대조군 3,776,479 B 는 presigned 200·S3 PUT 200. 3) 하드웨어 Keystore: 패스키 등록 때 afternote_biometric_gate 키가 TRUSTED_ENVIRONMENT 에 생성되고 지문 auth token 뒤 연산 성사. 노트 탭 지문 게이트도 인증 뒤 목록 200. 패스키 목록은 자리표시자 한 줄(#555). 4) 삼성 키보드 한글 입력: 마음의 기록 본문에 사람이 직접 친 '오늘은 날씨가 맑았다 ㅎㅎ' 가 누락·중복 없이 들어가고 글자 수 14 가 조합 중 글자까지 맞는다. 5) S25 글자 70%(density 420, font_scale 0.8): 주요 5개 화면 잘림·겹침 없음. 6) predictive back(제스처 내비게이션, 가장자리 스와이프를 도중에 멈춘 상태 캡처): 앞 화면은 축소되지만 배경이 투명해 뒤 화면 글자가 비친다(#2145 등록, #2058 이후 남은 몫). 새로 등록: #2143(4:3 사진이 원형 프로필에서 위아래 잘림, ProfileImage 에 contentScale 없음), #2144(마음의 기록 작성 중 뒤로가기가 확인 없이 내용 폐기), #2145.", + "not_covered": [ + "release(minify) 산출물은 origin/main 이 f5ad611 에서 움직이지 않아 이번에 다시 돌리지 않았다(0904 기록 f5ad611 참조).", + "predictive back 은 motionevent 로 멈춘 상태를 흉내 냈고 사람 손가락 제스처로는 보지 않았다.", + "삼성 키보드는 한 문장만 봤고 자동완성·붙여넣기는 보지 않았다." + ], + "device": { + "is_emulator": false + }, + "details": { + "details": { + "screen": { + "size": "1080x2340", + "density": 420, + "physical_density": 480, + "font_scale": 0.8 + }, + "api_level": 36, + "build_type": "debug", + "issues_commented": [ + 2119 + ], + "issues_reproduced": [ + 555, + 1868 + ], + "issues_filed": [ + 2143, + 2144, + 2145 + ] + } + } +} diff --git a/docs/qa/evidence/f69332d995a2e9890605b3c8075c427b2dd0cc8c.json b/docs/qa/evidence/f69332d995a2e9890605b3c8075c427b2dd0cc8c.json new file mode 100644 index 0000000000..9e08e35be5 --- /dev/null +++ b/docs/qa/evidence/f69332d995a2e9890605b3c8075c427b2dd0cc8c.json @@ -0,0 +1,48 @@ +{ + "schema": 1, + "source": { + "original_file": "f69332d995a2e9890605b3c8075c427b2dd0cc8c.json", + "schema": 1, + "field_mapping": { + "result": "result", + "scenario": "scenario", + "not_covered": "not_covered", + "recorded_at": "recorded_at" + }, + "redactions": [] + }, + "repository": "Afternote/Afternote-FE", + "head_sha": "f69332d995a2e9890605b3c8075c427b2dd0cc8c", + "head_ref": "develop", + "base_sha": null, + "base_ref": null, + "recorded_at": "2026-09-23T03:10:00+00:00", + "result": "fail", + "scenario": "3차 QA 에뮬레이터 패스. 1) 서버 닫힘(11:52~11:58 KST) 실패 경로, 토큰 주입 로그인 상태: 홈·노트·마음의 기록(데일리 질문·일기·주간리포트)은 오류 안내와 다시 시도가 뜬다(8/25 의 기술 원문 노출은 해소). 타임레터는 서버 실패를 '아직 등록된 타임레터가 없어요' 빈 목록으로 가린다(#714 재현, 같은 계정에 타임레터 1건이 있음을 서버 복구 뒤 확인). 설정은 로그아웃 한 줄만 남는다(#708 재현). 타임레터 작성 중 뒤로가기는 확인 없이 내용이 사라진다(#576 재현), 하단바 미디어 버튼 라벨이 '링크 삽입'(#594 재현). 애프터노트 에디터 이탈 가드는 정상. 2) 서버 열림(12:06 KST): 홈이 진입 즉시 '정보를 불러오지 못했습니다'로 떨어진다. users/me·users/receivers·daily-questions/today·mind-record 가 모두 200 인데, 수신자 목록 응답의 relation null 행이 ReceiverListDto.relation(String) 디코드를 깨고 홈이 수신자 조회를 필수로 묶어 화면 전체가 실패한다. 애프터노트 작성 > 수신자 추가도 같은 원인으로 '수신자 목록을 불러오지 못했습니다'. #2105 에 영향 범위를 캡처와 함께 코멘트했다.", + "not_covered": [ + "나머지 성공 경로는 수신자 디코드 실패에 가려져 #2120 head 빌드로 봤다(별도 기록).", + "실기기 고유 축(실사 사진 10MiB, 하드웨어 Keystore, predictive back, 삼성 IME, S25 글자 크기)은 기기 배분상 실기기 패스 몫이다." + ], + "device": { + "is_emulator": true + }, + "details": { + "details": { + "screen": { + "size": "1080x2400", + "density": 420, + "api_level": 35 + }, + "build_type": "debug", + "issues_commented": [ + 2105 + ], + "issues_reproduced": [ + 714, + 708, + 576, + 594 + ] + } + } +} diff --git a/docs/qa/evidence/manifest.json b/docs/qa/evidence/manifest.json index 3078fba335..e54ffe8721 100644 --- a/docs/qa/evidence/manifest.json +++ b/docs/qa/evidence/manifest.json @@ -1,8 +1,8 @@ { "schema": 1, "initial_migration_count": 34, - "record_count": 36, - "last_updated_on": "2026-09-04", + "record_count": 39, + "last_updated_on": "2026-09-23", "records": [ { "file": "05b5a49170952a4c6f9dea6e1aa4145ba097ad54.json", @@ -34,6 +34,12 @@ "head_sha": "280f937d102a3e81d5c30be76c85aa7971c20268", "sha256": "4004dea7de0d583475a32d3cab5668efe2da29ebf932be25a31f07860c623481" }, + { + "file": "2c7295c3a3506e14c64b601031f34fa9416b6cef.json", + "source_file": "2c7295c3a3506e14c64b601031f34fa9416b6cef.json", + "head_sha": "2c7295c3a3506e14c64b601031f34fa9416b6cef", + "sha256": "2d4469b735c4bd46b0b6c1c5e4a441482d0590aa3d11bf141cbf843ac4866c32" + }, { "file": "3445d93228ce184e4e4634361d27486f6576035c.json", "source_file": "3445d93228ce184e4e4634361d27486f6576035c.json", @@ -154,6 +160,12 @@ "head_sha": "a3b3b1f24ce280f88cd3bdc0adeddbdba9d7b9db", "sha256": "a5d16dc8e188e809a3b1976bc67c8a52b77368c1ef491de947778b38f18f57d6" }, + { + "file": "b402415ecfa555f67a8e638a96d8dd562bebe1c0.json", + "source_file": "b402415ecfa555f67a8e638a96d8dd562bebe1c0.json", + "head_sha": "b402415ecfa555f67a8e638a96d8dd562bebe1c0", + "sha256": "9e282397d46aa7d705e3458a828a5a356212ed91f6d26ac462f57666292f6083" + }, { "file": "b765ddb642b55e341a8d213f5787cf05019200c5.json", "source_file": "b765ddb642b55e341a8d213f5787cf05019200c5.json", @@ -219,6 +231,12 @@ "source_file": "f5ad611b23a32c6db2de4795bd9cee9fb32aacf0.json", "head_sha": "f5ad611b23a32c6db2de4795bd9cee9fb32aacf0", "sha256": "b195fc3331fff4cc9afb97bc4a5997d5c9d93bf0cadb00d8cc69376465586fee" + }, + { + "file": "f69332d995a2e9890605b3c8075c427b2dd0cc8c.json", + "source_file": "f69332d995a2e9890605b3c8075c427b2dd0cc8c.json", + "head_sha": "f69332d995a2e9890605b3c8075c427b2dd0cc8c", + "sha256": "716d5b2ea591892236ace65183bb84fb4082854fc4f6185a82b60c7e0812384c" } ] }