Repository navigation
fix(a11y): «동작 줄이기» 가 랜딩에도 닿는다 — 전역 모션 감소 리셋을 공용 CSS 로 · 무한 애니메이션 반복 1회 · 브라우저 타이밍 e2e (#1746 K15) - #1779
Conversation
🔵 SCAManager 분석 결과총점: 84/100 (등급 B) 점수 상세
정적 분석 이슈 (상위 10건)
|
0634b92 to
f85163b
Compare
🔵 SCAManager 분석 결과총점: 84/100 (등급 B) 점수 상세
정적 분석 이슈 (상위 10건)
|
…1회 · 브라우저 타이밍 e2e (#1746 K15) - 리셋을 base.html 인라인에서 components.css 로(랜딩은 base 를 상속하지 않아 meshShift·pulse 가 계속 돌았다) - animation-iteration-count: 1 — 지속만 줄이면 무한 애니메이션이 0.01ms 주기로 계속 돈다 - e2e/test_reduced_motion.py 7건: getAnimations() 타이밍 6 + «감소 안 함» 대조군, 페이지 넘김 스크롤 1(클릭과 같은 동기 구간에서 읽는다). 부분문자열 시험 삭제 - 페이지 넘김 smooth 스크롤도 감소를 따른다 · 죽은 .skeleton(무한 shimmer) 삭제 - e2e 435 → 442 · 통합 208 → 207 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01R4jYRzichV75XnYLSEFguX
f85163b to
047b275
Compare
🔵 SCAManager 분석 결과총점: 84/100 (등급 B) 점수 상세
정적 분석 이슈 (상위 10건)
|
|
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |



pytest tests/unit → 8631 passed / 5 skipped
무엇을 고쳤나 (#1746 K15 — 모션 감소)
base.html을 상속하지 않아 전역 모션 감소 리셋이 닿지 않았다 — «동작 줄이기» 를 켜도 전체화면 고정 그라데이션meshShift(14초 무한 확대·회전) · 배지 점pulse(무한) · 미리보기 줄reviewReveal이 그대로 돌았다base.html인라인<style>에서components.css로 옮겼다 — 두 레이아웃이 모두 읽는 파일이다animation-iteration-count: 1을 함께 건다"prefers-reduced-motion" in css부분문자열(리포 인사이트 CSS 한 파일)e2e/test_reduced_motion.py6건 — 브라우저가 계산한document.getAnimations()타이밍을 읽는다. 부분문자열 시험은 지웠다(통합 208 → 207)scrollIntoView({behavior:'smooth'})는 CSS 리셋이 닿지 않는다matchMedia('(prefers-reduced-motion: reduce)')면'auto'base.html인라인<style>의.skeleton+@keyframes shimmer(1.4초 무한) — 리포 어디에서도 안 쓰는 죽은 규칙계기 (P1-58)
화면마다 «감소 안 함» 과 «감소» 를 둘 다 잰다.
orb-drift를 가진다) — 0건이면 계기가 눈먼 것과 구별되지 않으므로 red.running인 애니메이션 중 반복이 무한이거나 지속이 1ms 를 넘는 것 = 0.anonymous_page) ·/dashboard· 리포 상세 · 리포 인사이트 · 설정 · 분석 상세.증거
meshShift on .landing-bg::before iterations=inf duration=14000ms·pulse on .badge-dot iterations=inf duration=2000ms·reviewReveal on .review-line ×4 (500ms). 앱 화면 5건은 초록(기존 리셋 + 개별 규칙).test_history_page_flip_scrolls_at_once_when_reduced_motion_is_requested, 머지 직전 추가): 클릭과 같은 동기 구간에서 기록 머리 위치를 읽는다. 수정 걷어냄(항상 smooth) → red(감소인데after=-100.3, 아직 출발 전) · 항상 즉시 스크롤을 심음 → 대조군 red(감소 안 함인데after=-0.3) · 수정 있음 → 초록, 3회 반복 초록.animation-iteration-count: 1한 줄만 빼면 랜딩 red —meshShift … iterations=inf duration=0.01ms·pulse … iterations=inf duration=0.01ms. 지속만 줄이는 리셋으로는 무한 반복이 남는다는 주장의 실측.test_first_paint·test_repos_mode·test_state_indication·test_reduced_motion) — 전체 e2e 는 CI 가 돈다e2e/EXPECTED_COUNT·docs/STATE.md· README 2배지), 통합 208 → 207(SSOT 불릿 +--fix).test_keyboard_operability·test_reduced_motion) 10 passed, 스크롤 시험을 더한 뒤test_reduced_motion.py전체 7 passed.역-뮤테이션 게이트
reverse-mutation-not-applicable: 이 PR 의 관측자는 전부 e2e(
e2e/test_reduced_motion.py— 애니메이션 타이밍 6 · 페이지 넘김 스크롤 1)라 tests/ 만 돌리는 이 게이트 밖이다. 같은 되돌림을 e2e 로 돌려 red 를 확인했다(위 증거). tests/ 변경은 거짓 관측자였던 부분문자열 시험의 삭제뿐이고, base.html 쪽은 죽은 규칙·중복 리셋 삭제라 관측할 동작이 없다.Grok claim-review
사람이 볼 것
reduce에서만 켜진다).스스로 판단한 것
tests/integration/test_repo_insights_css.py하나 → 21 passed). 머지 직전에 그것을 보고, 관측 시험이 없던 페이지 넘김 스크롤 분기에 e2e 를 붙인 뒤 위 면제 문구를 적었다(면제는 job summary 에 계수된다).*리셋 하나였고, 현재 감소 블록 6곳의 선택자도 전부 살아 있어 문장 그대로는 재현하지 못했다. 대신 fix(ui): 3개월 반 동안 «렌더된 적 없는» 분석 상세 CSS 361줄을 살린다 #1651 의 죽은-CSS 사냥이 훑지 않은 인라인<style>에서 실제로 죽은 무한 애니메이션(.skeleton)을 찾아 지웠다 — 원장에는 «부분» 으로 적는다.K15 남은 것
P1-61 · P2-57 · P2-59 · P2-60 · P2-64 · P2-65 · P2-70 · P2-74 (+ #1776 이 맡은 P1-59·P1-60·P2-67·P2-68·P2-69).
🤖 Generated with Claude Code
https://claude.ai/code/session_01R4jYRzichV75XnYLSEFguX