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
위 코멘트가 링크한 3814:18898 은 back up 페이지 34:116 아래(최종 이용자 프로토타입 화면 34:959)라 정본이 아닙니다.
같은 내용의 복제본이 3. 최종 페이지 4163:19264 에도 4163:20587 로 있습니다.
세 프레임의 TEXT 노드는 각각 15개이고 문자열이 전부 같습니다(전수 비교, 차이 0건). 어느 것을 보든 원문은 같습니다.
온보딩 문자열과의 대조
정본 프레임의 본문/제목 13개를 feature/onboarding/presentation/src/main/res/values/strings.xml 의 onboarding_terms_detail_* 13개와 맞춰 봤습니다. 정규화는 두 가지만 했습니다. 시안의 불릿은 문자가 아니라 리스트 서식(lineTypes: UNORDERED)이라 리소스의 • 문자와 같게 봤고, 시안 인트로의 U+2028 을 개행으로 봤습니다.
13개 중 11개가 글자까지 일치합니다. 남은 2건은 이렇습니다.
항목
문자열 리소스
시안 4327:65279
section_3 마지막 줄
애프터노트는 사용자의 기록을 안전하게 보관합니다.
애프터노트는 사용자의 기록을 안전하게 보 (4327:65290 의 characters 가 여기서 끊깁니다)
section_4_title
4. 계정 및 데이터 관리
계정 및 데이터 관리 (4327:65292, 번호가 characters 가 아니라 ORDERED 리스트 서식입니다. 나머지 다섯 제목은 번호가 characters 안에 있습니다)
재사용 가능 여부
온보딩 TermsDetailScreen 이 읽는 문자열 리소스가 정본 시안의 원문을 이미 담고 있습니다. 시안 쪽이 더 가진 문구는 없고, 오히려 한 곳은 시안의 텍스트가 단어 중간에서 끊겨 있습니다. 콘텐츠 재사용을 막는 차이는 대조에서 나오지 않았습니다.
실측: 콘텐츠는 재사용 가능하지만 화면 껍데기는 그대로 못 쓰고, 진입 지점은 열린 PR 이 물고 있다
기준은 origin/develop7d87aa3f. 위 2026-09-13 코멘트가 끝낸 문자열 대조는 반복하지 않고, 그 코멘트가 다루지 않은 두 가지만 적습니다. 코드 변경 0줄, PR 0건입니다.
1. 재사용을 막는 것은 콘텐츠가 아니라 화면 껍데기다
feature/onboarding/presentation/.../terms/TermsDetailScreen.kt:27 이 상단 제목을 R.string.onboarding_signup_title 로 박아 뒀습니다. 값은 feature/onboarding/presentation/src/main/res/values/strings.xml:65 의 "회원가입" 입니다. 설정에서 이 화면을 그대로 열면 이용약관 제목이 "회원가입" 으로 뜹니다.
같은 파일 28행이 하단 CTA 를 R.string.onboarding_terms_next 로 박아 뒀습니다. 값은 strings.xml:114 의 "프로필 설정하러가기" 입니다.
core/ui/.../scaffold/FlowStepScaffold.kt:58 의 actionButtonText: String 은 nullable 이 아닌 필수 파라미터이고, 96~122행의 bottomBar 는 조건 분기 없이 110행에서 AfternoteButton 을 그립니다. 이 Scaffold 를 쓰는 한 CTA 를 빼는 선택지가 없습니다. 설정 진입에는 "다음" 이 없으므로, 화면을 그대로 쓰려면 Scaffold 를 고치거나 화면을 따로 떼야 합니다.
TermsDetailScreen.kt:21 의 title: String 파라미터는 본문에서 한 번도 읽히지 않습니다(53~73행의 title = 은 같은 파일 88행 private fun TermsSectionText 의 인자입니다). 프로덕션 호출처 OnboardingNavHost.kt:193 은 "" 를 넘기고, 스크린샷 baseline TermsDetailScreenScreenshotTest.kt:19 는 "이용약관" 을 넘깁니다. 둘 다 화면에 나오지 않습니다. baseline 만 보면 제목이 "이용약관" 으로 렌더되는 것처럼 오해하기 쉬운 자리입니다. 제목을 갈아 끼울 통로가 시그니처에 이미 있는데 죽어 있는 상태라, 재사용 결정이 오면 되살려 쓰면 됩니다. 지금 지우지 않습니다.
모듈 경계 비용도 붙습니다. gradle.properties:23 이 android.nonTransitiveRClass=true 라, 설정이 온보딩 문자열을 읽으려면 feature/setting/presentation/build.gradle.kts 에 projects.feature.onboarding.presentation 을 더하고 com.afternote.feature.onboarding.presentation.R 을 직접 import 해야 합니다. 피처끼리 presentation 을 무는 선례는 있습니다(feature/home/presentation/build.gradle.kts:22,29 가 mindrecord·receiver presentation 의존). 금지는 아니지만 설정이 온보딩 모듈 전체를 끌고 들어오는 값을 치릅니다.
develop 의 feature/setting/presentation/.../navigation/SettingNavGraph.kt:59 는 onTermsClick = {} 입니다.
열린 PR fix(setting): 무응답 메뉴 안내와 콜백 정리 분리 (#2000) #2002 의 diff 가 SettingScreen 에서 onTermsClick 파라미터 자체를 제거하고, 이용약관 행(SettingScreen.kt:234-235)의 onClick 을 공용 onUnavailableClick 으로 바꿉니다. 그 콜백은 "현재 이 메뉴는 이용할 수 없습니다." 스낵바와 확인 버튼을 띄웁니다. PR 본문에는 Closes #2000, Refs #564, #1695 가 있고 이용약관 화면 구현 #786 은 제목에도 본문에도 없습니다.
현재 범위 2번("온보딩 TermsDetailScreen과 콘텐츠를 재사용할 수 있는지 대조")은 이미 끝났습니다. 위 2026-09-13 코멘트가 정본 시안과 onboarding_terms_detail_* 13개를 전수 대조했습니다. 본문에는 아직 미착수 항목처럼 남아 있습니다.
개요는 "게시 원문이 확정되기 전 문자열 복제를 구현 계획으로 두지 않는다" 를 전제하지만, develop 은 이미 6개 절 원문 전체를 feature/onboarding/presentation/src/main/res/values/strings.xml 의 99111행(본문)과 121126행(제목)에 싣고 있고 OnboardingNavHost.kt:191-197 을 통해 회원가입 흐름에서 실제 사용자에게 보여 주고 있습니다. 실태는 "앱에 원문이 없다" 가 아니라 "설정에서 들어갈 길만 없다" 입니다. 경계할 대상은 원문 도입이 아니라 두 번째 사본입니다.
Activity
1hyok commentedon Aug 27, 2026
Figma 시안
minii7582, 2026-08-23[-]feat(setting): 이용약관 화면 구현[/-][+]이용약관 화면 구현[/+]1hyok commentedon Sep 13, 2026
실측: 정본 시안은
4327:65279이고, 온보딩 문자열이 그 원문을 이미 담고 있다현재 범위 2번("온보딩 TermsDetailScreen 과 콘텐츠를 재사용할 수 있는지 대조")을 Figma REST 로 직접 떠서 대조했습니다.
어느 프레임이 정본인가
4327:65279입니다. 조상 체인이 설정4327:99449→ 정리 Screen Design4327:43064입니다.3814:18898은 back up 페이지34:116아래(최종 이용자 프로토타입 화면34:959)라 정본이 아닙니다.4163:19264에도4163:20587로 있습니다.온보딩 문자열과의 대조
정본 프레임의 본문/제목 13개를
feature/onboarding/presentation/src/main/res/values/strings.xml의onboarding_terms_detail_*13개와 맞춰 봤습니다. 정규화는 두 가지만 했습니다. 시안의 불릿은 문자가 아니라 리스트 서식(lineTypes: UNORDERED)이라 리소스의•문자와 같게 봤고, 시안 인트로의 U+2028 을 개행으로 봤습니다.13개 중 11개가 글자까지 일치합니다. 남은 2건은 이렇습니다.
4327:65279section_3마지막 줄4327:65290의 characters 가 여기서 끊깁니다)section_4_title4327:65292, 번호가 characters 가 아니라 ORDERED 리스트 서식입니다. 나머지 다섯 제목은 번호가 characters 안에 있습니다)재사용 가능 여부
온보딩
TermsDetailScreen이 읽는 문자열 리소스가 정본 시안의 원문을 이미 담고 있습니다. 시안 쪽이 더 가진 문구는 없고, 오히려 한 곳은 시안의 텍스트가 단어 중간에서 끊겨 있습니다. 콘텐츠 재사용을 막는 차이는 대조에서 나오지 않았습니다.여전히 미확정인 것
현재 범위 1번의 세 가지는 그대로 열려 있습니다.
셋 다 2026-09-12 에 Figma 핀 노드
34:959의 댓글로 이미 올라가 있고 답변 전입니다. 여기서 다시 묻지 않고 기록만 남깁니다.1hyok commentedon Sep 13, 2026
실측: 콘텐츠는 재사용 가능하지만 화면 껍데기는 그대로 못 쓰고, 진입 지점은 열린 PR 이 물고 있다
기준은
origin/develop7d87aa3f. 위 2026-09-13 코멘트가 끝낸 문자열 대조는 반복하지 않고, 그 코멘트가 다루지 않은 두 가지만 적습니다. 코드 변경 0줄, PR 0건입니다.1. 재사용을 막는 것은 콘텐츠가 아니라 화면 껍데기다
feature/onboarding/presentation/.../terms/TermsDetailScreen.kt:27이 상단 제목을R.string.onboarding_signup_title로 박아 뒀습니다. 값은feature/onboarding/presentation/src/main/res/values/strings.xml:65의 "회원가입" 입니다. 설정에서 이 화면을 그대로 열면 이용약관 제목이 "회원가입" 으로 뜹니다.R.string.onboarding_terms_next로 박아 뒀습니다. 값은strings.xml:114의 "프로필 설정하러가기" 입니다.core/ui/.../scaffold/FlowStepScaffold.kt:58의actionButtonText: String은 nullable 이 아닌 필수 파라미터이고, 96~122행의bottomBar는 조건 분기 없이 110행에서AfternoteButton을 그립니다. 이 Scaffold 를 쓰는 한 CTA 를 빼는 선택지가 없습니다. 설정 진입에는 "다음" 이 없으므로, 화면을 그대로 쓰려면 Scaffold 를 고치거나 화면을 따로 떼야 합니다.TermsDetailScreen.kt:21의title: String파라미터는 본문에서 한 번도 읽히지 않습니다(53~73행의title =은 같은 파일 88행private fun TermsSectionText의 인자입니다). 프로덕션 호출처OnboardingNavHost.kt:193은""를 넘기고, 스크린샷 baselineTermsDetailScreenScreenshotTest.kt:19는"이용약관"을 넘깁니다. 둘 다 화면에 나오지 않습니다. baseline 만 보면 제목이 "이용약관" 으로 렌더되는 것처럼 오해하기 쉬운 자리입니다. 제목을 갈아 끼울 통로가 시그니처에 이미 있는데 죽어 있는 상태라, 재사용 결정이 오면 되살려 쓰면 됩니다. 지금 지우지 않습니다.gradle.properties:23이android.nonTransitiveRClass=true라, 설정이 온보딩 문자열을 읽으려면feature/setting/presentation/build.gradle.kts에projects.feature.onboarding.presentation을 더하고com.afternote.feature.onboarding.presentation.R을 직접 import 해야 합니다. 피처끼리 presentation 을 무는 선례는 있습니다(feature/home/presentation/build.gradle.kts:22,29가 mindrecord·receiver presentation 의존). 금지는 아니지만 설정이 온보딩 모듈 전체를 끌고 들어오는 값을 치릅니다.2. 진입 지점은 열린 PR #2002 가 이미 물고 있다
feature/setting/presentation/.../navigation/SettingNavGraph.kt:59는onTermsClick = {}입니다.SettingScreen에서onTermsClick파라미터 자체를 제거하고, 이용약관 행(SettingScreen.kt:234-235)의onClick을 공용onUnavailableClick으로 바꿉니다. 그 콜백은 "현재 이 메뉴는 이용할 수 없습니다." 스낵바와 확인 버튼을 띄웁니다. PR 본문에는Closes #2000,Refs #564, #1695가 있고 이용약관 화면 구현 #786 은 제목에도 본문에도 없습니다.refactor/1992-setting-previews) → develop 이고 셋 다 열려 있습니다.SettingNavGraph.kt:59에 목적지를 꽂으면 버려지는 작업이 됩니다. 다음 착수자가 그 줄만 보고 곧장 꽂는 것을 막으려고 남깁니다.본문이 develop 실태와 어긋나는 곳
onboarding_terms_detail_*13개를 전수 대조했습니다. 본문에는 아직 미착수 항목처럼 남아 있습니다.feature/onboarding/presentation/src/main/res/values/strings.xml의 99111행(본문)과 121126행(제목)에 싣고 있고OnboardingNavHost.kt:191-197을 통해 회원가입 흐름에서 실제 사용자에게 보여 주고 있습니다. 실태는 "앱에 원문이 없다" 가 아니라 "설정에서 들어갈 길만 없다" 입니다. 경계할 대상은 원문 도입이 아니라 두 번째 사본입니다.onTermsClick = {})는 fix(setting): 무응답 메뉴 안내와 콜백 정리 분리 (#2000) #2002 머지와 동시에 낡습니다. 위 2번과 같은 이야기입니다.3814:18898은 정본이 아닙니다. 정본은4327:65279입니다. 위 코멘트가 정정했지만 본문 참고란에는 반영돼 있지 않아, 본문만 읽고 착수하면 폐기된 프레임을 기준으로 잡게 됩니다.본문 자체는 고치지 않았습니다. 위 다섯은 완료 조건을 좁히는 편집이 아니라 진행 상태 정정이라 코멘트에만 둡니다.
남은 게이트
위 코멘트와 같습니다. 승인 원문과 그 버전, 앱 내 표시인지 외부 문서 링크인지, 원문 버전 관리 주체 셋 다 핀 노드
34:959의 2026-09-12 댓글로 올라가 답변 전입니다. 이 셋이 정해지기 전에는 화면도 문자열 이관도 착수하지 않습니다.1hyok commentedon Sep 19, 2026
2026-09-19 정리로 닫는다. 이 이슈의 완료 조건은 PM의 결정에 달려 있어 결정 전에는 FE 가 무엇을 만들지 쓸 수 없다. 그런 이슈는 FE 저장소에 열어 두지 않고 결정이 나면 그때 새 이슈로 다시 연다.
기다리는 결정: 약관 원문·버전 관리·제공 방식(BE 포함).
PM 질문은 창구가 정해지는 대로 보낸다(일혁이 목록 보관).