feat(#221): 모바일 반응형 PR1 — 전역 레이어·앱 셸·위저드 (≤640px)#232
Conversation
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CkNHx6UJ5U24PUbpnQycFp
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CkNHx6UJ5U24PUbpnQycFp
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CkNHx6UJ5U24PUbpnQycFp
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CkNHx6UJ5U24PUbpnQycFp
…ation 미커밋) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CkNHx6UJ5U24PUbpnQycFp
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CkNHx6UJ5U24PUbpnQycFp
… R2 스코프 강화 신설 핀 10건은 T3~T5 가 GREEN 화할 때까지 의도적 RED(계획 §2 T1). R2 강화분은 mutation 1회(C2 flex-wrap 위반→FAIL→원복) 실효 검증 — 스캐폴딩 미커밋. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CkNHx6UJ5U24PUbpnQycFp
RED 정직성 실측 기록: 채팅 탭은 232px 그리드에서도 .main 오버플로 미발생(짜부라짐) — 오버플로 단언 blind 판정→1열 스택(232px 트랙 부재)+본문 폭 점유율 computed 단언으로 교체. PR2 케이스는 test.fail() 기계 선언. 데스크톱 641/1280 가드는 현행 값 핀(즉시 GREEN). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CkNHx6UJ5U24PUbpnQycFp
…ive·summary 줄바꿈 미디어쿼리 밖 전 뷰포트 diff 전부를 단일 커밋으로(롤백 단위·계획 §2 T3). 데스크톱 no-op 근거: dvh≡vh(수축 UA 크롬 없음)·meta 는 데스크톱 미반영·max()/calc() additive 는 env=0 에서 기존값· .summary overflow-wrap 은 전 뷰포트 결함 수정. R3 확인: 승인 e2e 4/4(기하 불변). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CkNHx6UJ5U24PUbpnQycFp
…w 랩·배너 폭 캡 C2 블록과 별도 구획. G2/G1(세션)·G5·360 계약·데스크톱 641/1280 가드 GREEN 전환. 잔여 RED = 위저드 bare 버튼 44px(T5 표적). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CkNHx6UJ5U24PUbpnQycFp
RED(래퍼 부재 단언)→GREEN. R8: 기존 AddAiWizard/SessionsPanel 테스트 무수정 green(role/label 쿼리만). 모바일 e2e 하드 케이스 전부 GREEN — PR1 판정기 완결. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CkNHx6UJ5U24PUbpnQycFp
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CkNHx6UJ5U24PUbpnQycFp
… verify 깨는 비대칭 해소 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CkNHx6UJ5U24PUbpnQycFp
§6 렌즈: .chip/.eyebrow 폰 타이포가 파일말미 캐스케이드로 C2 카드 내부 렌더를 바꾸던 P2 를 :not(.modal-card *) 스코프 제외로 차단(§4 폰 무회귀 계약). safe-area 3곳 구선언 병기(env 미지원 파서 선언 드롭 폴백 — dvh 와 동일 규율)·주석 정정. 게이트 렌즈: 16px/44px 셀렉터 결합 핀(대체 충족 차단)·additive 선언 단위 검사·주석 스트립· bare 버튼 measured 카운터·R1 가드에 4변 padding/brand/main/field 핀 추가·PR2 셀렉터 존재 계약. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CkNHx6UJ5U24PUbpnQycFp
…규칙 분리·eslint 주석 계약 topbar 랩 시 .spacer auto 마진이 줄 경계에서 죽어 .live 가 좌측 고아(F1)→자체 margin-left:auto. stateful 체크박스 라벨 터치 표면 44px(F2). :not(복합) 미지원 파서의 셀렉터 리스트 드롭이 .field-label 을 동반 소실시키는 결합(F3)→규칙 분리. deploy/workspace ignore 에 추적파일 금지 계약 주석(F4). brain 커밋 확인: brain.md 단독 2줄(항목7). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CkNHx6UJ5U24PUbpnQycFp
📝 WalkthroughWalkthrough웹 렌더러에 모바일 뷰포트 메타데이터, dvh·safe-area 기반 스타일, 640px 이하 반응형 규칙, 위저드 래퍼를 추가하고 Vitest·Playwright 회귀 검증을 도입했다. 관련 설계·실행 계획 문서와 ESLint 제외 경로도 갱신했다. Changes웹모드 모바일 반응형
Estimated code review effort: 4 (Complex) | ~45 minutes Sequence Diagram(s)sequenceDiagram
participant Browser
participant RendererIndexHTML
participant RendererStylesCSS
participant Playwright
Browser->>RendererIndexHTML: 모바일 viewport 메타 로드
Browser->>RendererStylesCSS: dvh·safe-area·640px 규칙 적용
Playwright->>Browser: 모바일 또는 데스크톱 뷰포트로 앱 실행
Browser-->>Playwright: 오버플로·스타일·터치 타깃 측정값 반환
Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/renderer/styles.responsive.test.ts`:
- Around line 65-74: Update the safe-area declaration validation in the G6② test
so every env(safe-area-inset-*) occurrence is individually verified to be inside
a max() or calc() expression, rather than allowing one valid occurrence to mask
another. Preserve the existing declaration-count and standalone-substitution
checks while iterating over each matched env occurrence in the test.
- Around line 126-128: 반응형 회귀 테스트가 넓은 검색으로 삭제된 계약을 놓치지 않도록 각 대상 선택자와 실제 요소를 직접
검증하세요. src/renderer/styles.responsive.test.ts 126-128의 테스트는 .wizard input/select
폭과 button/label의 44px 선언을 각각 확인하도록 수정하세요.
src/renderer/components/ApprovalModal.test.tsx 695-702에서는 .modal-actions,
.modal-card, reduced-motion 규칙을 각각 검증하세요. e2e/mobile-responsive.web.e2e.ts
154-169는 locator를 .wizard button:not([class])로 제한하고, 177-188의 중복 .field 표본은
.wizard의 bare 폼 컨트롤 검증으로 교체하세요.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: ce89cacb-b337-4ce5-b116-a2302d503790
📒 Files selected for processing (11)
brain.mddocs/superpowers/plans/2026-07-13-issue221-mobile-responsive-plan.mddocs/superpowers/specs/2026-07-13-issue221-mobile-responsive-design.mde2e/mobile-responsive.web.e2e.tseslint.config.mjssrc/renderer/components/ApprovalModal.test.tsxsrc/renderer/components/SessionsPanel.test.tsxsrc/renderer/components/SessionsPanel.tsxsrc/renderer/index.htmlsrc/renderer/styles.csssrc/renderer/styles.responsive.test.ts
G6② 를 선언 정규식에서 env 출현 각각의 부모 함수(max/calc) 괄호 판정으로 강화(다중 env 중 하나만 additive 인 선언 적발). .wizard/모달 핀을 규칙별 셀렉터 결합으로. G5 는 위저드 프로바이더→API 키 실경로로 bare input 16px 실측(동일 노드 이중 표본 해소 — 자체 리뷰 P2-1 완결). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CkNHx6UJ5U24PUbpnQycFp
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 65e77d20ae
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…바꿈+핀 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CkNHx6UJ5U24PUbpnQycFp
|
@codex review |
|
Codex Review: Didn't find any major issues. Bravo. Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
요약
#221 PR1/2 — 모바일 반응형 전역 레이어 + 앱 셸 + 위저드. 폰 브라우저(≤640px)에서 셸(topbar·내비·main·footer)·타이포·터치 타깃·폼·AddAiWizard 가 가로 스크롤 없이 조작 가능해진다. 데스크톱(>640px) 무회귀가 계약: 모든 폰 분기는 신설
@media (max-width: 640px)블록 안, 미디어쿼리 밖 diff 는 아래 열거 예외뿐.Part of #221 (PR2 = 패널 3개+폼이
Closes #221). 스펙 r3·계획 r3 = 이슈 체크포인트 1·2 (Codex clean ×2).§6 열거 예외 — 미디어쿼리 밖 diff 의 데스크톱 no-op 근거
.app·.chat100vh→vh;dvh병기viewport-fit=cover·interactive-widget=resizes-content.topbar·.footer·.update-banner·.modal-actions)max(기존값, env)/calc(기존값+env)— env=0(데스크톱)이면 기존값. 구선언 병기로 env 미지원 파서도 폴백. e2e 데스크톱 가드가 4변 padding 을 computed 핀.summaryoverflow-wrap: break-word.modal-actionspadding-bottommax(0px, env)검증
src/renderer/styles.responsive.test.ts(계약 핀 11 — additive 선언단위 검사·셀렉터 결합 핀·주석 스트립 파서) +e2e/mobile-responsive.web.e2e.ts(390×844·360×740 폰 + 641×900/1280×800 데스크톱 무회귀 가드 + PR2 활성화 예정 케이스는test.fail()기계 선언).main오버플로가 없어(짜부라짐) 오버플로 단언이 blind → 1열 스택 computed 단언으로 교체:not(.modal-card *)·safe-area 병기·16px 셀렉터 결합 핀·데스크톱 가드 확장) · P3 다수 반영--no-file-parallelism실행 green(기존 기록 패턴·권위=CI)품질 게이트 (AGENTS.md — 변경 후 필수)
npm run verifygreen (skills:lint·brain:check·format:check·typecheck·lint·test·build 집계 = 로컬 == CI)npm run dev재시작 확인 (해당 없음 — preload/IPC 무변경)npm run brain갱신 (verify 의 brain:check 가 강제)리뷰
비고
① 3탭 가로 스크롤 없음·탭 전환 정상 ② dvh — 주소창 미수축 구조(내부 스크롤·설계 정합) 확인 ③ 위저드 API 키 입력 포커스 시 자동 줌 미발생·터치 타깃 양호 ④ 재접속 배너 화면 폭 안 정상 ⑤ 상태바/홈 인디케이터 겹침 없음(safe-area) ⑥ C2 승인 바텀시트 무회귀(viewport-fit=cover 도입 후 버튼 가림 없음 — MCP 적용 승인 유발 실측) ⑦ 스크롤 버벅임 없음·타이포 가독 양호
deploy/workspace/**추가 — 라이브 하니스 워크스페이스(gitignore)가 로컬 verify 만 깨는 로컬↔CI 비대칭 해소(추적파일 금지 계약 주석 포함)Summary by CodeRabbit