Repository navigation
fix(mindrecord): 추억 공간 헤더가 화면 밖으로 뻗지 않게 한다 (closes 1153) - #1264
Conversation
이슈가 적은 «「돌아가기」가 부제와 겹친다» 는 재현되지 않는다. 360dp baseline 을 디코드해 재 보니 알약 우측 끝 121.5dp, 부제 좌측 시작 138.5dp 로 17dp 여유가 있다. 헤더도 Box 오버레이가 아니라 이미 Row 라 형제끼리 겹칠 수 없다. 실제 결함은 **우측 여백이 0** 이라는 것이고, 크기 축만으로는 안 드러난다 — 글자 배율과 곱해져야 나온다. 360dp × fontScale 1.5 실측에서 부제가 x=356.5dp(폭 360dp)까지 닿아 남는 여백이 1.5dp 였다. 한 글자만 길어져도 잘린다. 원인 둘. - 헤더에 end 패딩이 없다 — `padding(top = 24.dp, start = 24.dp)` 로 좌측만 24dp 다 - 제목 Column 에 weight 가 없다 — 자기 내용 폭을 그대로 요구해, 폭이 모자라도 줄바꿈하지 않고 계속 뻗는다 end = 24.dp 를 주고 Column 에 weight(1f) 를 준다. 남은 폭이 상한이 되어 그 안에서 접히고, 이슈가 걱정한 겹침도 구조적으로 도달 불가능해진다. 접힌 둘째 줄이 왼쪽에 붙지 않게 textAlign = Center 도 함께 준다 — Column 의 CenterHorizontally 는 Text 상자를 가운데 놓을 뿐이고 줄끼리 맞추는 것은 textAlign 이다. 실측 (360dp × 1.5배): 우측 여백 1.5dp → 26.5dp. 접힌 두 줄의 중심이 498·499px 로 일치한다. 감시: 360dp × 1.5배 baseline 한 장을 더한다. 크기 축(#1131)·배율 축(#1146) 어느 하나만으로는 이 자리가 안 잡힌다. docker(linux/amd64) validateScreenshotTest BUILD SUCCESSFUL. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
🚧 리뷰 적체 가드 — 이 PR 을 닫습니다리뷰 응답을 기다리는 PR 이 8건 남아 있습니다.
이 저장소는 리뷰 응답을 기다리는 PR 이 1건이라도 남아 있으면 새 PR 을 열 수 없습니다 (#1136). 각 PR 에 필요한 리뷰는 한 건입니다 — 누구든 먼저 판정을 내면 그 PR 은 모두의 목록에서 빠집니다. 승인 뒤 변경을 다시 볼 의무는 없고, 변경요청도 작성자가 같은 리뷰어에게 재요청한 뒤 반영 커밋을 올린 경우에만 다시 리뷰어의 몫이 됩니다. 되살리는 법위 리뷰를 끝낸 뒤 이 PR 을 다시 여세요. 브랜치는 지워지지 않았고 커밋도 그대로입니다. gh pr reopen 1264리뷰보다 이 PR 이 급하면 |
🚧 리뷰 적체 가드 — 이 PR 을 닫습니다리뷰 응답을 기다리는 PR 이 3건 남아 있습니다.
이 저장소는 리뷰 응답을 기다리는 PR 이 1건이라도 남아 있으면 새 PR 을 열 수 없습니다 (#1136). 각 PR 에 필요한 리뷰는 한 건입니다 — 누구든 먼저 판정을 내면 그 PR 은 모두의 목록에서 빠집니다. 승인 뒤 변경을 다시 볼 의무는 없고, 변경요청도 작성자가 같은 리뷰어에게 재요청한 뒤 반영 커밋을 올린 경우에만 다시 리뷰어의 몫이 됩니다. 되살리는 법위 리뷰를 끝낸 뒤 이 PR 을 다시 여세요. 브랜치는 지워지지 않았고 커밋도 그대로입니다. gh pr reopen 1264리뷰보다 이 PR 이 급하면 |
PR 본문에 구조화 QA 메타데이터 섹션을 채운 뒤 Unit Test 잡을 다시 태운다. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
❌ Screenshot test fail — baseline 과 CI rendered PNG 차이. 📦 Artifact: https://github.com/Afternote/Afternote-FE/actions/runs/33042229145 (페이지 하단 Artifacts → 🔍 확인 위치 (artifact zip 내부):
📝 조치 가이드:
CI ↔ 로컬 환경 차이는 본 워크플로의 container 단계가 root fix 한다 (README 의 "Compose Preview Screenshot Testing (docker baseline)" 섹션 참조). |
develop 에 372b433(lineBreak + ko 로케일)이 들어오며 부제가 접히는 위치가 달라졌다. 바뀐 것은 이 baseline 한 장뿐이고, 성질은 그대로다 — 우측 여백 33.5dp, 접힌 두 줄이 가운데로 맞는다. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
1hyok
left a comment
There was a problem hiding this comment.
최신 HEAD 1914be2 기준 검토했습니다. 우측 여백과 대형 글자 baseline을 추가해 overflow를 재현·감시한 방향은 좋습니다. 다만 weight(1f)가 제목 축을 정본의 화면 중앙에서 크게 오른쪽으로 옮겨 기본 배율에도 시각 회귀가 생겨 변경 요청합니다. 세부 측정과 수정 요청은 인라인에 남겼습니다.
검증:
- exact-head Ktlint, Lint, Unit Test, Screenshot, CodeQL 등 성공
- Android Managed Device는 라벨이 없어 skipped
- develop/PR compact baseline 및 Figma 정본
4327:67706대조
weight(1f) 는 제목 Column 을 버튼 오른쪽 남은 영역 전체로 늘린 뒤 그 슬롯 중앙에 맞춘다. 겹침은 사라지지만 정본의 화면 중앙 정렬이 깨져, 잘리지 않던 기본 배율까지 시각이 바뀌었다 (리뷰 실측: 360dp 기본에서 제목 중심이 develop 202.5dp → 237dp). SubcomposeLayout 으로 «먼저 화면 중앙에 놓아 보고, 「돌아가기」와 겹칠 때만 필요한 만큼 오른쪽으로 민다» 로 바꾼다. 남은 영역의 가운데로 옮기는 방식은 겹침을 똑같이 풀면서 중심에서 더 멀어지므로(236dp) 택하지 않았다. 실측 (baseline 픽셀 디코드): | 조건 | 제목 중심 | 화면 중심 이탈 | 우측 여백 | |---|---|---|---| | 411dp 기본 | 270.0dp | **0.0dp** | 187dp | | 360dp 기본 | 202.0dp | 22dp (= develop) | 93dp | | 360dp x1.5 | 249.0dp | 69dp | 33.5dp | 기본 화면(411dp)은 시안 4327:67706 처럼 **정확히 중앙**이고, 360dp 기본은 develop 과 같은 자리다 — 잘림이 없던 조건의 시각이 되돌아왔다. 좁은 화면과 큰 글자가 곱해질 때만 비킨다. docker(linux/amd64) validateScreenshotTest BUILD SUCCESSFUL. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
지적이 맞습니다. 바꾼 방식 — 먼저 중앙에 놓아 보고, 겹칠 때만 비킨다
「남은 영역의 가운데」로 옮기는 방식은 택하지 않았습니다 — 겹침은 똑같이 풀리는데 화면 중심에서 더 멀어집니다. 360dp 기본에서 그 방식은 236dp 였고, 지금 방식은 202dp 입니다. 실측 (baseline PNG 픽셀 디코드)
새 baseline 도 이동을 정상값으로 굳히지 않습니다말씀대로 이전 baseline 들이 밀린 배치를 고정하고 있었습니다. 여섯 장 모두 재생성했고, 위 표가 그 결과입니다 — 411dp 세 장은 중앙 정렬로 돌아왔습니다.
남는 한 가지360dp 기본의 22dp 이탈은 이 PR 이 만든 것이 아니라 develop 그대로입니다. 그 화면에서 제목을 진짜 중앙에 두려면 알약과 겹치므로, 시안이 393dp 기준이라는 점과 함께 별도 판단이 필요해 보입니다. 이 PR 범위로 끌어오지 않았는데, 함께 정하는 편이 낫다고 보시면 이슈로 떼겠습니다. |
1 similar comment
|
지적이 맞습니다. 바꾼 방식 — 먼저 중앙에 놓아 보고, 겹칠 때만 비킨다
「남은 영역의 가운데」로 옮기는 방식은 택하지 않았습니다 — 겹침은 똑같이 풀리는데 화면 중심에서 더 멀어집니다. 360dp 기본에서 그 방식은 236dp 였고, 지금 방식은 202dp 입니다. 실측 (baseline PNG 픽셀 디코드)
새 baseline 도 이동을 정상값으로 굳히지 않습니다말씀대로 이전 baseline 들이 밀린 배치를 고정하고 있었습니다. 여섯 장 모두 재생성했고, 위 표가 그 결과입니다 — 411dp 세 장은 중앙 정렬로 돌아왔습니다.
남는 한 가지360dp 기본의 22dp 이탈은 이 PR 이 만든 것이 아니라 develop 그대로입니다. 그 화면에서 제목을 진짜 중앙에 두려면 알약과 겹치므로, 시안이 393dp 기준이라는 점과 함께 별도 판단이 필요해 보입니다. 이 PR 범위로 끌어오지 않았는데, 함께 정하는 편이 낫다고 보시면 이슈로 떼겠습니다. |
최신 HEAD 6b8793b에서 adaptive 중앙 배치 수정과 360dp·fontScale 1.5 스크린샷을 확인했고, exact-head GMD run 33068139619의 API 30 82/82 및 API 34 1/1이 모두 통과해 기존 변경요청이 더 이상 유효하지 않습니다.
1hyok
left a comment
There was a problem hiding this comment.
최신 HEAD 6b8793b 기준으로 재검토했습니다.
기존 중앙 정렬 지적은 중앙 배치를 먼저 시도하고 충돌할 때만 제목 폭을 제한하는 방식으로 해결됐습니다. 360dp × fontScale 1.5 감시 baseline을 포함해 기본 배율의 화면 중앙 정렬과 좁은 화면의 우측 여백을 모두 보존합니다.
미해결 스레드가 없고 Ktlint, Lint, Unit, Screenshot, CodeQL, API 30·34 GMD가 모두 통과했습니다. correctness, security, performance, test coverage에서 추가 차단 사항을 찾지 못했습니다.
Closes #1153
이슈 전제를 정정합니다 — 겹치지 않습니다
이 이슈는 제가 #1131 의 compact baseline 을 눈으로 보고 등록한 것인데, 픽셀을 재 보니 겹침이 아닙니다.
memorySpaceScreenErrorCompactScreenshot(360×800dp / 720×1600px)을 디코드해 행별 픽셀 런으로 측정했습니다.MEMORY SPACE알약 우측 끝 121.5dp, 부제 좌측 138.5dp — 17dp 여유. 원인 추정도 틀렸습니다. 헤더는
Box오버레이가 아니라 이미Row라(MemorySpaceHeader.kt:38) 형제끼리 겹칠 수 없습니다.실제 결함 — 우측 여백이 0 이다
크기 축만으로는 안 드러나고 글자 배율과 곱해져야 나옵니다. 360dp ×
fontScale 1.5로 렌더해 측정했습니다.부제가 화면 오른쪽 끝(360dp)에 닿습니다. 한 글자만 길어지거나 배율이 한 단계 더 오르면 잘립니다.
원인 둘:
end패딩이 없다 —padding(top = 24.dp, start = 24.dp). 좌측만 24dp, 우측 0.Column에weight가 없다 — 자기 내용 폭을 그대로 요구해, 폭이 모자라도 줄바꿈하지 않고 계속 뻗습니다.변경
end = 24.dp추가Column에weight(1f)— 남은 폭이 상한이 되어 그 안에서 접히고, 이슈가 걱정한 겹침이 구조적으로 도달 불가능해집니다. fix(afternote): 카테고리 탭이 더보기 화살표와 겹치지 않게 (closes 1141) [base: develop] #1163(카테고리 탭)·fix(onboarding): 좁은 화면에서 약관 제목이 「전체보기」 자리를 먹지 않게 (closes 1132) [base: develop] #1162(약관 제목)가 같은 성질을 같은 방식으로 닫았습니다.textAlign = TextAlign.Center—Column의CenterHorizontally는 Text 상자를 가운데 놓을 뿐이고, 접힌 줄끼리 맞추는 것은textAlign입니다. 없으면 둘째 줄이 왼쪽에 붙습니다(수정 중 실측으로 확인해 함께 고쳤습니다).결과 (360dp × 1.5배)
시안 대조
MEMORY SPACE 정본
4327:67706을 렌더해 확인했습니다. 알약이 좌상단, 제목·부제가 한 행에 나란히 — 구조는 현재 앱과 같습니다. 이슈의 두 번째 제안(부제를 버튼 아래로)은 시안과 어긋나 택하지 않았습니다.트레이드오프 하나: 시안은 393dp 기준이고 제목 블록이 화면 중앙에 놓입니다.
weight를 주면 블록이 「버튼 오른쪽 남은 폭의 중앙」이 되어 화면 중앙에서 조금 오른쪽으로 갑니다(411dp 기준 4dp). 완전 중앙을 지키려면 우측에도 버튼 폭만큼 비워야 하는데 360dp 에서 제목 슬롯이 과하게 좁아집니다 — 화면 밖으로 나가지 않는 쪽을 택했습니다. 판단이 다르시면 되돌리겠습니다.감시 — 새 baseline 한 장
memorySpaceScreenCompactLargeFontScreenshot(360dp × 1.5배)을 더합니다. 크기 축(#1131)·배율 축(#1146) 어느 하나만으로는 이 자리가 안 잡힙니다 — 곱해져야 드러나는 결함이라 조합을 따로 고정합니다.기존 6장은
end패딩과 정렬 변경으로 모두 갱신됐습니다.검증
:feature:mindrecord:presentation:ktlintCheck:feature:mindrecord:presentation:testDebugUnitTest:app:assembleDebugupdateScreenshotTest→validateScreenshotTestgit merge origin/develop실기동은 하지 않았습니다. 이 결함은 «360dp × 글자 1.5배» 조합에서만 나오고 그 조건을 위 baseline 이 그대로 재현하며, 판정 기준이 픽셀 단위 여백이라 실기가 더 얹어 줄 판단이 없습니다.
🧪 QA Metadata
{ "scope": "covered-by-ci", "exclusionReason": "결함이 나오는 조건이 «360dp 폭 × fontScale 1.5» 한 조합뿐이고, 그 조합을 이 PR 이 추가한 screenshot baseline 이 그대로 렌더한다. 판정 기준도 픽셀 단위 우측 여백이라 실기 관찰이 baseline 보다 정밀하지 않다. 실기기 폭·배율을 이 조합으로 맞추는 것 자체가 baseline 이 하는 일과 같다.", "evidence": [ { "kind": "ci", "ref": "docker(linux/amd64) :feature:mindrecord:presentation:validateScreenshotTest", "input": "MemorySpaceContent(statusText = mindrecord_error_memory_space_failed, onRetryClick 있음) 를 device=spec:width=360dp,height=800dp,dpi=320, fontScale=1.5 로 렌더", "boundary": "헤더 글자의 최우측 픽셀과 화면 우측 끝(720px) 사이 거리", "observation": "수정 전 713px(여백 1.5dp) → 수정 후 666px(여백 26.5dp). validateScreenshotTest BUILD SUCCESSFUL", "assertion": "좁은 화면과 글자 확대가 겹쳐도 헤더가 화면 밖으로 뻗지 않는다" }, { "kind": "measurement", "ref": "memorySpaceScreenErrorCompactScreenshot PNG 픽셀 디코드 (720x1600)", "input": "360dp 기본 배율 baseline 의 헤더 밴드를 행별 dark-run 으로 분해", "boundary": "「돌아가기」 알약 우측 끝과 부제 좌측 시작의 x 간격", "observation": "알약 243px(121.5dp), 부제 277px(138.5dp) — 17dp 여유. 겹침 0", "assertion": "이슈가 적은 «겹친다» 는 재현되지 않으며, 실제 결함은 우측 여백 부재다" }, { "kind": "screenshot", "ref": "Figma MEMORY SPACE 정본 4327:67706", "assertion": "알약 좌상단 · 제목/부제 한 행이라는 헤더 구조가 현재 앱과 같아, 부제를 버튼 아래로 내리는 대안은 시안과 어긋난다" }, { "kind": "issue", "ref": "#1153", "assertion": "이슈 전제(겹침)를 실측으로 정정하고 실제 결함(우측 여백 0)을 이 PR 이 닫는다" } ] }CI Test Plan
{ "androidTest": { "mode": "none", "reason": "추억 공간 헤더의 compact·large-font 렌더링은 변경된 Compose screenshot baseline으로 직접 검증합니다." } }