Repository navigation
fix(a11y): 머리글 메뉴·분석 이력 표를 키보드로 조작한다 — role="menu" 키 계약 · 언어 변경 포커스 복귀 · 행 링크·정렬 버튼 (#1746 K15) - #1776
Conversation
🟡 SCAManager 분석 결과총점: 62/100 (등급 C) 점수 상세
정적 분석 이슈 (상위 10건)
|
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
…귀 · 행 링크·정렬 버튼 (#1746 K15) - 테마·언어 메뉴: APG 메뉴 버튼 계약(↓/↑ 열기 · ↑↓ 순환 · Home/End · Escape · Tab) — 마우스로 열면 포커스 유지 - 키보드로 언어를 바꾸면 body 교체 뒤에도 포커스가 언어 버튼에 남는다 - 리포 상세 분석 이력: 첫 칸에 진짜 링크, 정렬 머리글은 th 안의 버튼 - e2e/test_keyboard_operability.py 4건(수정 전 3 red) · 24px 스윕이 menuitemradio 를 보게 함 - e2e 431 → 435 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01R4jYRzichV75XnYLSEFguX
3e75bd5 to
d148657
Compare
🟡 SCAManager 분석 결과총점: 62/100 (등급 C) 점수 상세
정적 분석 이슈 (상위 10건)
|
|



pytest tests/unit → 8632 passed / 4 skipped
무엇을 고쳤나 (#1746 K15 — 키보드 조작성)
마우스 없이 «조작» 이 안 되던 네 자리. 포커스 «표시» 스윕은 CDP 로
:focus를 강제해 칠해진 모양만 재서, 포커스가 그 자리에 «닿는지»·키가 무엇을 하는지는 아무도 재지 않았다.role="menu")tabindex="0"detail 0) 첫 항목 · ↑↓ 순환 · Home/End · Escape 닫고 버튼으로 · Tab 닫고 지나감. 마우스로 열면 포커스를 옮기지 않는다. 항목tabindex="-1"· 메뉴aria-labelledby· 버튼aria-controlsouterHTML로 바뀌며 포커스가 문서 처음으로#langToggle)로 되돌린다(테마 팔의toggleBtn.focus()와 짝)<tr onclick>만 — Tab 으로 닿지 않음<a href>· 행 클릭은 tbody 위임 처리기(링크·컨트롤 위 클릭은 제 동작)th의 click 처리기뿐th안의<button class="sort-btn">— click 이 th 로 올라가 기존 처리기가 받는다. 상태는 그대로th[aria-sort], 글리프는aria-hiddene2e/test_keyboard_operability.py4건 — 실제 키를 누르고document.activeElement를 본다[role=menuitem]이menuitemradio를 못 맞혀 머리글 항목 7개가 밖[role^=menuitem]+ 두 메뉴를 진짜 토글로 열고 재기 + «잰 항목 ≥ 7» 되짚기첫 칸에 링크를 둔 이유: 커밋 열은 ≤480px 에서 숨는다(
.tbl td:nth-child(2) { display: none }) — 거기 두면 좁은 화면 키보드·보조기술 사용자가 링크를 잃는다.증거
verify.md「판정식을 쓸 때」 4): 메뉴 항목에padding:1px 14px; line-height:1을 심으면 새 셀렉터는/admin/tenants에서 24px 미만 7건으로 red(정확히 머리글 항목 7개), 옛 셀렉터[role=menuitem]은 같은 심음에서 초록 — 옛 계기가 그 축을 못 봤다. 심음은 되돌렸다.e2e/EXPECTED_COUNT·docs/STATE.mdE2E 셀 · README 2배지).Grok claim-review
진행: 처음 묶어 물은 질문(주장 7개,
f2d38ef0)과 htmx 질문이 300 s 를 넘겼다 → 키보드 계약을 버튼/항목 두 조각으로 쪼갰고 둘 다 다시 300 s 초과 → 지침대로 같은 세션 600 s 재개, 셋 다 1턴에 끝났다. 판정은 질문에 넣은 코드 발췌 범위만이다 — 실제 브라우저 동작은 위 e2e 4건이 잰다.사람이 눈으로 볼 것
a의 accent 색을 끊었다). 행 hover 강조선·배경도 그대로. Tab 으로 행 링크·정렬 머리글에 포커스 링이 보이는지.스스로 판단한 것
cursor:pointer선택자를 훑어 나머지는 전부 진짜 컨트롤(button·a·select·summary)임을 확인했다.var e=document.activeElement … if(t.elt&&!se(t.elt)&&ee(t.elt,"id")){… i.focus(a)}확인). settle 의[autofocus]경로는 앱에autofocus가 0건이라 끼어들지 않는다. 회귀하면 e2e 가 red.role="tab"이슈 탭(분석 상세)도 APG 상 화살표 이동을 «기대» 하지만, 버튼이라 Tab+Enter 로는 조작된다 — 이번 범위(«약속한 계약이 아예 없음») 밖으로 두고 원장에 후보로 적는다.문서
docs/workflow/ui-i18n.md«화면» 에 10번 한 줄(누르는 것은button·a[href]/ 메뉴 키 계약 앵커). +46자 · 줄 수 동일 — 뺀 것: 8번 «Chromium 이 열로 센다» · 9번 «칩 면이라 catppuccin 에서 그 위 등급 글자가 AA 미달이다»(둘 다 «왜» 문구) · 설정 토글 5번 «(선례:ai_review_enabled는 프리셋 밖)».K15 남은 것 (이 PR 밖)
P1-57(랜딩 모션 감소) · P1-58(모션 감소의 유일한 관측이 부분문자열) · P1-61 · P2-57 · P2-59 · P2-60 · P2-64 · P2-65 · P2-66 · P2-70 · P2-74 — 원장 #1746 에 그대로 둔다.
🤖 Generated with Claude Code
https://claude.ai/code/session_01R4jYRzichV75XnYLSEFguX