You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
fix(timeletter): 크기 초과(1803) 첨부 실패가 일반 저장 실패로 뭉개져 재시도를 권한다 (#1868 표시 몫 분리) #2081
#1868 의 타임레터 표시 몫이다. 타임레터 작성의 이미지 블록도 같은 PhotoUploadRepository 를 타므로, 10 MiB 를 넘는 사진을 고르면 서버가 code 1803 으로 거절한다. 그런데 작성 화면은 그 거절을 일반 저장 실패로 접어 재시도를 권한다. 파일 크기가 그대로인 한 재시도는 같은 거절을 다시 받는다.
usecase/ResolveTimeLetterBlocksUseCase.kt:38 이 업로드 실패를 getOrElse { throw it } 로 그대로 다시 던지고, viewmodel/TimeLetterWriteViewModel.kt:499 가 TimeLetterServerRejectionException 이 아닌 실패를 전부 TimeLetterWriteError.SaveFailed 로 접는다. 화면은 screen/sender/TimeLetterWriteScreen.kt:603 에서 그 상태를 문자열 하나로 그린다.
<stringname="timeletter_write_save_failed">저장에 실패했어요. 다시 시도해주세요.</string>
같은 UseCase 의 validateLocalMedia 는 MIME 만 검사하고 크기는 보지 않는다. 업로드가 저장 시점에 일어나므로 사용자는 편지를 다 쓰고 저장을 누른 뒤에야 실패를 만나며, 안내는 어느 블록이 문제인지도 알려주지 않는다.
실기기 재현은 #1868 이 마음의 기록 경로에서만 했다. 여기는 같은 저장소 구현을 타고 같은 contentLength 를 그대로 실어 보낸다는 코드 대조까지다. 착수 시점에 실기기로 한 번 확인할 것.
선행
#2089 가 core:domain 에 FileUploadFailure.FileSizeExceeded 를 세우고 PhotoUploadRepository, VideoUploadRepository 의 실패를 그 타입으로 옮긴다. 그 타입이 서야 여기서 가를 수 있으므로 blocked_by 로 건다. 처음에는 #1868 에 걸었는데, 그 타입 수립분이 #2089 로 떨어져 나가 선행을 그 번호로 옮겼다.
문구는 #446 이 PM 에게 확인 중이고 완료 조건이 그 답변에 걸려 있으므로 #446 도 blocked_by 로 건다. 종전에는 #1868 을 거쳐 전이로 걸려 있었는데, 선행을 #2089 로 옮기면 그 전이가 끊겨 문구 게이트가 사라진다. #446 이 확정한 공통 팝업 4종에 크기 초과 경우가 없고, 그중 "업로드 실패" 팝업은 버튼이 "다시 시도하기"라 이 결함을 그대로 물려받는다.
완료 조건
업로드 실패가 저장 실패와 갈려 전달된다. UseCase 가 던지는 예외를 ViewModel 이 SaveFailed 로 뭉개지 않는다
FileUploadFailure.FileSizeExceeded 가 다른 업로드 실패와 다른 안내로 표시된다
이 이슈가 기다리던 선행분은 core:domain 에 FileUploadFailure.FileSizeExceeded 를 세우고 두 업로드 저장소의 실패를 그 타입으로 옮기는 일이다. 그 몫이 #1868 에서 #2089 로 떨어져 나갔다. #1868 에는 애프터노트 에디터 표시 연결과 #446 문구 결정 대기가 남는다. 그래서 blocked_by 를 #1868 에서 #2089 로 바꿨다.
함께 #446 을 직접 걸었다. 종전에는 #1868 을 거쳐 전이로 걸려 있었는데 선행을 옮기면 그 전이가 끊긴다. 이 이슈의 완료 조건 마지막 줄이 "표시할 문구는 #446 이 PM 답변으로 확정한 값을 쓴다" 라 #446 없이는 닫을 수 없으므로, 문구 게이트가 관계에서 그대로 읽히게 두는 편이 맞다.
본문의 선행 문단과 분리 출처 줄도 새 번호로 고쳤다. 착수 순서는 #2089 가 먼저 들어오고 #446 의 답변이 온 뒤다. 판단 근거 전문은 #1868 코멘트에 있다.
Activity
github-actions commentedon Sep 13, 2026
bug 이슈는 사이드바 Fields > Priority 로 심각도를 지정해야 합니다. 판정 기준:
값이 비어 있어도 이슈를 닫지는 않습니다. 이 안내는 이슈당 한 번만 답니다.
OnlyReadOneBook commentedon Sep 13, 2026
선행을 #1868 에서 #2089 로 옮겼다
이 이슈가 기다리던 선행분은
core:domain에FileUploadFailure.FileSizeExceeded를 세우고 두 업로드 저장소의 실패를 그 타입으로 옮기는 일이다. 그 몫이 #1868 에서 #2089 로 떨어져 나갔다. #1868 에는 애프터노트 에디터 표시 연결과 #446 문구 결정 대기가 남는다. 그래서blocked_by를 #1868 에서 #2089 로 바꿨다.함께 #446 을 직접 걸었다. 종전에는 #1868 을 거쳐 전이로 걸려 있었는데 선행을 옮기면 그 전이가 끊긴다. 이 이슈의 완료 조건 마지막 줄이 "표시할 문구는 #446 이 PM 답변으로 확정한 값을 쓴다" 라 #446 없이는 닫을 수 없으므로, 문구 게이트가 관계에서 그대로 읽히게 두는 편이 맞다.
본문의 선행 문단과 분리 출처 줄도 새 번호로 고쳤다. 착수 순서는 #2089 가 먼저 들어오고 #446 의 답변이 온 뒤다. 판단 근거 전문은 #1868 코멘트에 있다.
OnlyReadOneBook commentedon Sep 30, 2026
10MB 초과 사진의 안내 문구·버튼과 자동 축소 여부를 PM 질문방에 올렸습니다(2026-09-30, #1868·#2080·#2081 공통): https://discord.com/channels/1423516014330646760/1425390413128138862/threads/1554867003897028780