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
수신자 목록 저장소가 로그인 여부 Boolean으로 캐시 수명을 정해, 로그아웃과 새 로그인 사이의 값을 수집자가 관측하지 못하면 이전 세션의 성공 목록을 유지합니다. #2045의 세션 격리 조건 중 현재 저장소 계약으로 독립 수정할 수 있는 결함을 분리합니다.
현재 develop f69332d995a2e9890605b3c8075c427b2dd0cc8c에서 실제 Preferences DataStore, TokenDataSource, AuthRepositoryImpl, UserReceiverRepositoryImpl을 조립하고 합성 토큰과 HTTP 대역으로 재현했습니다.
계정 A로 로그인하고 수신자 목록 A를 구독합니다.
수집자 디스패처를 잠시 멈춘 동안 공개 logout()과 saveSession(B)를 순서대로 완료합니다.
수집을 재개하면 DataStore의 중간 로그아웃 상태를 놓쳐 true → true가 됩니다. distinctUntilChanged() 뒤의 세션 Flow가 재시작되지 않습니다.
계정 B에서 수신자 생성 후 목록 재조회가 IOException으로 실패하면 목록 A가 다시 방출됩니다.
실제 공개 저장소 호출을 이용한 회귀가 반복 실패했고, 로그아웃 방출을 기다리는 대조군은 통과했습니다. 현재 UI는 로그아웃 뒤 백스택과 해당 ViewModel을 정리하므로 화면에서 다른 계정 목록이 보이는 경로까지 재현한 것은 아닙니다. 현 저장소의 세션 격리 계약 결함과 사용자 화면의 도달성을 구분합니다.
완료 조건:
중간 로그아웃 방출이 생략돼도 새 로그인 세션에서 이전 수신자 캐시를 폐기합니다.
같은 세션의 토큰 갱신은 마지막 성공 목록을 보존하는 기존 동작을 유지합니다.
로그아웃, 새 로그인, 401, 이전 세션의 늦은 조회 결과, 기존 저장 토큰을 함께 검증합니다.
공개 수신자 목록 계약과 현재 화면 동작을 유지하며 테스트를 위해 프로덕션 visibility를 넓히지 않습니다.
실제 DataStore와 공개 저장소 계약을 이용한 회귀 및 관련 모듈 검증을 통과합니다.
참고
로딩·오류 상태 UI, 새 서버 API, 설정 MVI 전환은 포함하지 않습니다. 관련 구현 PR #2051은 닫혀 있으므로 열린 선행 PR로 취급하지 않습니다. 현재 열린 #2130의 HEAD a5b950329670428c9ed9ac383be838d215623fe8를 실제 base로 사용합니다. #2120에서 확정한 목록 DTO와 #2130의 수정 후 재조회 계약을 포함한 상태에서 세션 경계를 검증하며, 두 선행 PR의 변경을 보존합니다. #2127에 대한 blocked_by는 이 통합·병합 순서를 반영합니다. 세션 식별자 구현 자체에 새로운 제품 결정을 요구하는 의존성은 아닙니다.
Activity
github-actions commentedon Sep 21, 2026
bug 이슈는 사이드바 Fields > Priority 로 심각도를 지정해야 합니다. 판정 기준:
값이 비어 있어도 이슈를 닫지는 않습니다. 이 안내는 이슈당 한 번만 답니다.
github-actions commentedon Sep 21, 2026
이 이슈를 맡은 PR 은 #2137 다 (base
fix/2127-receiver-update-refresh).base 가 기본 브랜치(
develop)가 아니라서 GitHub 은 이 이슈의 Development 칸에아무것도 표시하지 않는다. 본문에
Closes #N이 있어도 마찬가지다 — 그 링크는 기본 브랜치를target 하는 PR 에서만 만들어진다.
PR 이 닫히거나 머지되면 이 이슈의
pr-open라벨은 다음 리컨사일에서 떨어진다.fix(core): 수신자 목록 조회의 로딩·실패를 상태 Flow 로 보존한다 (#2045)
test(core): 목록 모델에서 빠진 Receiver.authCode 인자를 테스트에서 걷어낸다 (#2135)
Merge remote-tracking branch 'origin/develop' into fix/714
fix(timeletter): 수신인 선택을 receiverListStateFlow 로 옮겨 실패를 빈 목록과 가른다 (#714)