Skip to content

refactor(core): MVI 전환 — core·platform·onboarding·receiver·afternote 몫 총괄 #1812

Closed as not planned
7 of 7 issues completed
Closed as not planned

Description

@OnlyReadOneBook

작업 유형

refactor — 동작 변경 없는 구조·책임·경계 개선

주 담당 모듈

core — 코어

개요

MVI 전환(#1811) 중 core·platform·onboarding·receiver·afternote 담당 몫을 묶는다. 공통 기반이 여기 있으므로 다른 두 역할 총괄이 이 총괄을 기다린다.

자식

이슈 성격 비고
#1800 기반 MviViewModel 베이스 — 세 역할 전부의 선행
#1801 기반 konsist 강제 + docs/convention/mvi.md
#1802 전환 onboarding 파일럿 — 관용구 확정, 세 역할 전부의 선행
#1803 전환 receiver (VM 8, Consumed 5)
#1804 전환 afternote (VM 9, @Test 246)
#1809 마무리 app VM 2 + konsist allowlist 종료
#1810 판정 Navigation 3 이관과의 접점 — 코드 0줄

이 역할이 다른 역할에 지는 책임

자식 이슈

참고

전체 총괄: #1811

Activity

  1. added
    refactor동작 변경 없이 코드 구조·책임·경계를 개선하는 작업
    area:core공용 코어·네트워크 기능 영역
    on Sep 3, 2026
  2. OnlyReadOneBook commented on Sep 13, 2026

    @OnlyReadOneBook
    CollaboratorAuthor

    총괄 실측 기록 (origin/develop 7d87aa3f4 기준)

    이 이슈에서 코드로 뗄 독립 범위가 없어 기록만 남긴다. 열린 자식 5개가 전부 이미 열린 PR 에 물려 있다.

    자식 PR base
    #1802 #1825 refactor/1863-onboarding-failure (PR #1963)
    #1803 #2039 develop
    #1804 #1972 refactor/1902-memorial-photo (스택 #1839 → #1837 → #1838 → #1971 → #1972)
    #1809 #2033 develop
    #1810 #2038 develop

    기준선

    feature/*/presentation 의 ViewModel 선언 50개 중 MviViewModel 을 상속한 것은 0개다. MviContractKonsistTest.kt 의 PENDING_MVI_MIGRATION 은 51개이고, 실존 50개에 사문 1건이 더해진 값이다. 사문 항목은 MviContractKonsistTest.kt:431 의 com.afternote.feature.receiver.presentation.home.ReceiverHomeViewModel 이고, develop 의 실제 위치는 feature/home/presentation/src/main/kotlin/com/afternote/feature/home/presentation/receiver/ReceiverHomeViewModel.kt 다. PR #2039 가 ISSUE_1803_RECEIVER 를 블록째 지우면서 이 줄도 같이 사라지므로 따로 조치할 것은 없다.

    기반은 이미 들어와 있다. 베이스는 core/ui/src/main/kotlin/com/afternote/core/ui/mvi/MviViewModel.kt (#1800 닫힘), konsist 강제와 docs/convention/mvi.md 도 있다(#1801 닫힘). 남은 것은 전환뿐이다.

    1. 자식 트리에서 새는 범위가 둘 있다

    #1968(편집기 외 afternote ViewModel 8개)과 #2022(MainViewModel 판정과 전환 종료 검사)는 각각 #1804 와 #1809 에서 분리됐는데, GraphQL 로 확인한 parent 가 둘 다 없다. afternote 와 platform 은 이 이슈가 본문에서 선언한 자기 범위다.

    지금 subIssuesSummary 는 total 7 / completed 2 (28%) 다. 열린 자식 5개가 닫히면 7/7 로 완료 표시가 되지만, 그 시점에도 이것들이 남는다.

    두 이슈를 이 이슈의 자식으로 붙이거나, 붙이지 않는다면 이 이슈가 닫혀도 둘이 남는다는 것을 본문에 명시해야 한다.

    2. onboarding 네 번째 ViewModel 이 미귀속이다

    feature/onboarding/presentation/src/main/java/com/afternote/feature/onboarding/presentation/findaccount/FindPasswordViewModel.kt 는 #457(PR #1624)로 이미 develop 에 도착해 있다. 전환 전 모양 그대로다.

    • :43 private val _uiState = MutableStateFlow(FindPasswordUiState())
    • :145 onSocialAccountBlockedConsumed()
    • :147 onErrorConsumed()
    • :156 onPasswordResetConsumed()

    그런데 konsist/src/test/kotlin/com/afternote/konsist/MviContractKonsistTest.kt:411-420 의 PENDING_ARRIVAL_ONBOARDING KDoc 은 아직 "아직 develop 에 없다" 로 적혀 있다. 사실이 아니다. PR #1825 는 ISSUE_1802_ONBOARDING 3개만 빼고, 이 항목과 틀린 KDoc 은 그대로 둔다.

    어느 열린 이슈도 이 ViewModel 의 MVI 전환을 맡지 않는다. #1802 완료 조건은 ViewModel 3개(LoginViewModel, SignUpViewModel, FindIdViewModel)뿐이고, #1829 는 Content visibility, #1863 은 실패 모델, #1789 는 온보딩 그래프 배선이다. #1863 과 #1789 가 본문에서 이 파일을 언급하긴 하지만 둘 다 MVI 전환을 완료 조건에 넣지 않는다.

    착수 전에 풀려야 하는 것이 하나 있다. PR #1963 이 FindPasswordUiState.kt 와 FindPasswordViewModel.kt 를 바꿔 errorMessage 와 isSocialSignUpAccount 두 칸을 단일 실패 모델로 갈아엎는다. 그 전에 Intent.ConsumeError, ConsumeSocialAccountBlocked 를 옛 두 칸 위에 세우면 #1863 이 그대로 다시 쓴다. 그러므로 착수는 #1963 머지 뒤이고, 귀속처는 #1802 후속 신규 이슈이거나 #2022 의 영구 예외 판정이다.

    귀속 판정이 날 때까지 이 항목을 추적하는 열린 이슈는 이 이슈(#1812) 하나다. onboarding 담당자에게 어사인된 이슈는 아직 없다. 1번의 조치 없이 이 이슈를 닫으면 추적자가 사라지므로, 판정은 이 이슈가 닫히기 전에 나야 한다.

    3. 본문 자식 표가 분리 전 수치다

    세 줄이 현행 범위와 어긋난다.

    표의 현재 문구 현행 범위
    #1803 VM 8, Consumed 5 ViewModel 7, Screen 8. 홈은 PR #1666 의 feature/home 이동 뒤 #2037 이 가져갔다
    #1804 VM 9, @Test 246 편집기 1개로 좁혀졌다. 나머지 8개는 #1968
    #1809 app VM 2 + konsist allowlist 종료 NotificationPermissionViewModel 하나. MainViewModel 과 종료 검사는 #2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

area:core공용 코어·네트워크 기능 영역refactor동작 변경 없이 코드 구조·책임·경계를 개선하는 작업

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions