Repository navigation
마음의 기록 전체 기능 QA 회귀 체크리스트 #269
Copy link
Copy link
Open
3 / 33 of 3 issues completedLabels
Description
📜 Overview (Required)
마음의 기록 (Mind Record) 도메인 전체 기능에 대한 전수 QA. fix/253 (PR #255 머지 완료) 와 그 직전·이후 마음의 기록 영역 누적 변경의 회귀를 한 번에 잡고, 평소 미커버되던 엣지를 정리. 발견된 버그는 child issue 로 spawn — 본 이슈는 QA 진행 추적/체크리스트.
0) 횡단 회귀 (Cross-cutting)
- VM 에 Context 미주입 —
grep "@ApplicationContext.*Context" feature/mindrecord/presentation/.../*ViewModel.kt결과 0 hit - UiText 패턴: 에러 메시지가
Dynamic(서버 message)우선, 없으면Resource(fallback)매핑되어 표시 - CategoryError sealed: 컴파일 시점에 신규 케이스 추가 누락이 강제 — 신규 case 1개 임시 추가 후 컴파일 에러 발생 확인
-
SharingStarted.WhileSubscribed(5_000)동작: 화면을 떠난 5초 안 재진입 시 cache 유지, 5초 초과 시 재 collect - 회전 / 다크모드 / 폰트 스케일 (large) 각각에서 레이아웃 깨짐 없음
- 빈 네트워크 (airplane mode) 진입 시 각 에러 상태 → 재시도 후 정상 복구
1) 데일리 질문 (Daily Question)
목록 (DailyQuestionAnswerListScreen — 리스트/캘린더 토글)
- 리스트 뷰: 오늘 질문 헤더 + 과거 답변 카드 정상 표시
- 리스트 뷰: 오늘 질문 없고 답변도 없을 때
MindRecordEmptyState표시 - 캘린더 뷰: 답변한 날만 dot 표시, 오늘 강조
- 캘린더 뷰: 월 이동 시 해당 월 데이터 갱신
- 네트워크 실패 → ErrorBox 메시지 (서버 message 우선, 없으면
mindrecord_error_daily_question_list_failed) - FAB 클릭 → 작성 화면 이동, 작성 완료 후 돌아오면 목록 자동 refresh
작성 (DailyQuestionWriteScreen)
- 오늘 질문 로딩 중 → "오늘 질문을 불러오는 중..." 헤더
- 오늘 질문 로딩 실패 → 에러 텍스트가 헤더 위치에 표시
- 답변 빈칸이면 등록 버튼 비활성, 1자라도 있으면 활성
- 등록 중 (InProgress) → 버튼 비활성, 이중 클릭 방지
- 등록 성공 → 화면 자동 종료, 목록 refresh
- 등록 실패 → 인라인 에러 텍스트 (Red), 버튼 재활성
- 키보드 툴바: 링크 아이콘 (core:ui 통합 리소스) 정상 표시
2) 일기 (Diary)
목록 (DiaryScreen — 리스트/그리드 토글)
- 리스트 뷰: 월별 캘린더 + DiaryComponent, 이모지 표시, 빈 상태 처리
- 그리드 뷰 (2-column): DiaryCard 썸네일/제목/이모지, DiaryReportCard 상단 fixed
- 월 이동 시 해당 월 데이터 fetch
- 네트워크 실패 → ErrorBox 표시
작성 (DiaryWriteScreen)
- 날짜 선택 —
BottomSheetCalendar정상 동작, 미래 일자 선택 가능 여부 확인 - 무드 선택 (😊 / 😐 / 😢) 토글, 선택 칩 배경 변경
- 제목/본문 빈칸이면 등록 비활성, 둘 다 있으면 활성
- 위치 추가 / 사진 추가 버튼 — 백엔드 미연동이면 noop 명시
- 등록 성공/실패 흐름,
mindrecord_error_diary_submit_failedfallback
3) 깊은 생각 (DeepThought)
목록 (DeepThoughtScreen — 리스트/캘린더 토글)
- 리스트 뷰: 카테고리 탭 (전체 + 사용자 카테고리), 탭 선택 시 필터링
- 리스트 뷰: 태그 (TAGS) 영역 — 칩 클릭 시 필터, 다시 클릭 시 해제
- 리스트 뷰: 카테고리 설정 아이콘 →
CategorySettingBottomSheet - 캘린더 뷰: 작성한 날 dot 표시
- 카테고리 변경 후 (
LaunchedEffect(categoryState.categories)) 목록 자동 refresh - 네트워크 실패 → ErrorBox
작성 (DeepThoughtWriteScreen)
- 기본 카테고리 "나의 가치관" 자동 시드 (
LaunchedEffect(Unit)) - 제목/본문/카테고리 모두 입력 시 등록 활성
- 카테고리 변경 바텀시트
- 등록 성공/실패, fallback
mindrecord_error_deep_thought_submit_failed
카테고리 CRUD — CategoryError sealed 분기 검증
- 추가 빈 이름 →
CategoryError.EmptyName(메시지 표시 와이어업 시) - 추가 정상 → 리스트 즉시 반영
- 추가 서버 실패 →
CategoryError.AddFailed - 이름 변경 정상 / 빈 이름 / 서버 실패
- 삭제 정상 / 서버 실패
-
consumeError()호출 후 errorMessage null 복원
4) 위클리 리포트 (Weekly Report)
상단 요약 카드 (WeeklyReportReviewCard)
- 사용자 이름 (
GET /users/me응답) 굵게 + 액센트 컬러로 인라인 - 주차 드롭다운 라벨 —
WeekOption.monday→ "N월 N주차 리포트" 포맷 (UI 측 stringResource) - 과거 5주 (
WEEK_OPTION_COUNT = 5) 선택 가능, 선택 변경 시 리포트 재조회 - dateRange 상단 표시 (
yyyy.MM.dd. - yyyy.MM.dd.) - 카운트 3종 (데일리질문/일기/깊은생각) 표시
- 작성 기록일 수 (
N일포맷) 액센트 컬러
무드 캘린더 (WeeklyMoodCalendar)
- 요일 라벨 (월~일) —
DayOfWeek로부터stringResource(...)매핑 - 일기 작성 + 이모지 →
EmojiWithDot - 이모지만 →
EmojiOnly - 일기만 (이모지 없음) →
NumberWithDot - 비어있음 →
NumberOnly - 배경: HAPPY=Green, SAD=Pink, 그 외 None
감정 키워드 / 인사이트
- Top 4 emotion bubble — percentage 내림차순 슬롯 배치 (1위 가장 크고 진함)
- Summary text, Insight 카드 정상 표시
- HISTORY — Daily question 목록, 날짜 포맷 다양성 (
yyyy.MM.dd 요일/ ISO) 모두 파싱
에러 흐름
- 리포트 + 프로필 동시 조회 (
coroutineScope { async ... }) 중 하나 실패 → ErrorBox - fallback
mindrecord_error_weekly_report_failed
5) 디바이스/매트릭스
- API 26 / 31 / 34 각각 정상 동작
- 다크모드 (지원 시)
- 폰트 스케일 large 에서 텍스트 잘림 없음
- 언어: ko-KR (en/ja 미지원 가정)
📌 Child Issue(Optional)
QA 중 발견된 버그는 child issue 로 spawn 후 본 이슈 본문에 누적 링크.
📍 Note (Optional)
- fix/253 (PR fix: 마음의 기록 QA — API 연동/시각 규칙/사용자 이름 #255) 누적 변경 + 그 후 추가된 마음의 기록 PR 전체 회귀 확인 목적
- 실 디바이스 + 실 백엔드 환경에서 진행 — mock 으로는 회귀 못 잡음
- 화면 한 번씩 모두 진입해서 ANR/크래시/네비게이션 backstack 도 같이 본다
Reactions are currently unavailable
Activity
Merge pull request #1107 from Afternote/docs/269-mindrecord-regression
[-]test(mindrecord): 마음의 기록 전체 기능 QA 회귀 체크리스트[/-][+]마음의 기록 전체 기능 QA 회귀 체크리스트[/+]Sadturtleman commentedon Sep 1, 2026
1차 QA 회귀 — 실기 진행분
Medium_Phone에뮬레이터(API 36) · 실 백엔드 · 2026-09-01. 체크리스트 순서대로 진입해 확인했습니다.체크리스트가 낡았습니다 — 먼저 정리
DeepThoughtScreen·DeepThoughtWriteScreen·CategorySettingBottomSheet모두 코드에 0건. 카테고리 CRUD·CategoryErrorsealed 검증도 함께 사라졌습니다CategoryError sealed항목MemorySpaceScreen(추억 공간) ·RecordDetailScreen(기록 상세) ·DraftListScreen(임시저장 목록) · 수신자 마음의 기록체크리스트를 지금 구조로 다시 쓰는 편이 좋아 보입니다. 이번 회차는 실재하는 화면만 돌았습니다.
통과한 것
MindRecordEmptyState표시EmotionKeywordCardKDoc #725), 결함 아님발견한 결함 — 자식 이슈 2건
contentPadding이 없어, 항목이 적어 스크롤이 없을 때는 볼 방법이 없습니다.곁들여 — 열려 있는 PR 의 전제 하나를 정정했습니다
#793(PR #1668) 본문에 「다시 읽기 버튼에 목적지가 없어 눌러도 아무 일이 없다」고 적어 뒀는데, 실기에서 눌러 보니 추억 공간으로 이동합니다(develop
HomeTabMindRecordLazyItems.kt:129). 「비어 있다」가 아니라 「섹션과 중복된다」가 맞아 PR 본문을 고쳤습니다.남은 범위
Sadturtleman commentedon Sep 2, 2026
2차 QA 회귀 — 서버 복구 후 이어서
Medium_Phone에뮬레이터(API 36) · 실 백엔드 · 2026-09-02 12:20~12:30 KST. 1차에서 남긴 범위를 이어 돌았습니다.통과한 것
새로 발견한 결함 — 자식 이슈 2건
WeeklyReportReviewCard가.height(200.dp)고정인데 내용은 배율을 따릅니다. 저시력 사용자가 정확히 이 화면에서 정보를 잃습니다.AfternoteTheme이isSystemInDarkTheme()로darkColors()를 실제로 물리는데, mindrecord main 소스의 하드코딩 색 29곳이 반전을 따라가지 못해 부분 반전 상태로 깨집니다. 지원 여부부터 판정이 필요합니다.체크리스트가 또 낡은 것
「일기 작성 — 날짜 선택
BottomSheetCalendar정상 동작」 항목은 성립하지 않습니다. 날짜는 의도적으로 표시 전용입니다 — 서버가 생성·수정 어느 쪽에서도date를 받지 않아 피커를 걷어냈고, 코드에 그 근거와 「BE 가 수용하면 되돌린다」가 적혀 있습니다(#1008). 실기에서도 눌리지 않습니다.열린 이슈 전제를 실기로 재확인
contentPadding이 같은 LazyColumn item 이라 함께 해소됨PR #1615 시연
refactor/1615-media-select-sheet를 설치해 확인했습니다 — 작성 화면 툴바의 링크 버튼 → core:ui 정본 시트가 뜹니다. 드래그 핸들·「미디어 추가하기」 헤더·4개 항목·들여쓰기된 디바이더(정본 지오메트리)가 시안대로이고, 「링크 추가하기」를 누르면 URL 입력 시트로 정확히 이어집니다.남은 범위
Sadturtleman commentedon Sep 2, 2026
3차 QA 회귀 — 수정 흐름 · 회전
Medium_Phone에뮬레이터(API 36) · 실 백엔드 · 2026-09-02 13:12~13:16 KST.통과한 것
beedit→beedit TE)체크리스트 항목 2건이 더 성립하지 않습니다
AndroidManifest.xml:85이android:screenOrientation="portrait"로 앱 전체를 세로 고정합니다.user_rotation을 강제로 바꿔도 화면이 돌지 않는 것을 확인했습니다BottomSheetCalendar정상 동작」 (2차에서 보고)date를 받지 않아 피커를 의도적으로 걷었습니다 (#1008)곁들여 — 결함으로 올리진 않은 관찰
input text로 빠르게 입력하면 본문 글자가 일부 누락됩니다. 앱 결함이 아닙니다 — 0.4초 간격으로 한 글자씩 넣으면 8타 → 8글자로 정확합니다. 도구 속도 문제라 기록만 남깁니다.남은 범위
Sadturtleman commentedon Sep 7, 2026
횡단 회귀(0절) 정적 확인 (2026-09-07, develop)
기기 QA 는 아직 돌리지 않았다. 다만 0절 항목 중 코드로 판정되는 것은 지금 확인할 수 있어 먼저 실측해 둔다. 나머지(회전·다크모드·폰트 스케일·비행기 모드)는 기기에서 해야 한다.
feature/mindrecord/presentation의*ViewModel.kt에@ApplicationContext0건SharingStarted.WhileSubscribed(5_000)CategoryErrorsealed 강제CategoryError심볼이 0건이라 이 항목은 판정 대상 자체가 사라졌다. 오류 표현은 화면별UiState의 sealed·@StringRes·UiText로 갈라져 있다UiText 항목은 지금 정책과 반대다
체크리스트는 「에러 메시지가
Dynamic(서버 message) 우선, 없으면Resource(fallback)」를 기대한다. 그 방향은 이후에 뒤집혔다.UiText.DynamicOrResource가 fallback 을 덮어 예외 원문이 화면에 실리는 결함을 고쳤다(닫힘).feature/mindrecord/presentation의UiText.Dynamic사용은 0건이다.즉 이 모듈은 「서버 원문 우선」이 아니라 「원문을 화면에 싣지 않는다」 가 정본이다. 0절의 이 줄은 그대로 두면 QA 가 현행 동작을 결함으로 잡게 되므로, 기기 QA 착수 전에 문구를 뒤집어야 한다.
기기 QA 는 별도로 진행한다.