전수 E2E 순회·소유자 결정 6건 구현·디자인 감사 반영

- 전수 순회: IA 전 라우트 412개 기능 인벤토리를 체크리스트 백로그로 관리
  (docs/ops/e2e-full-sweep-2026-07-27.md), 신규 full-sweep 스펙 10파일 추가.
  RED→GREEN으로 결함 12건 수정: 관리자 무한 렌더 프리즈(TanStack autoReset
  루프), 복수 코호트 저장 유실, 페르소나 보관 503(SQL 컬럼 모호성), PII 과잉
  마스킹, /admin/ai watchdog 오탐 오버레이, 모바일 겹침 2건, 설정 스크롤
  스파이, 온보딩 전화번호 무검증, 리뷰 조사·난도 라벨, pending 피드백 등.
- 소유자 결정 구현: 설정 아바타 변경, 동의 철회·재동의 전체 흐름, 신규
  학습자 기초 우선 추천, 학생 분석 테이블 가상화(@tanstack/react-virtual),
  저작 모드 죽은 레일 정리, 감정 밸런스 타임라인 차트(deep turn_valence +
  결정론 파생 폴백).
- 디자인 감사(142차): 라이트 팔레트 AA 대비, 다크 토큰 별칭 통일, 미정의
  CSS 변수 정리, 한글 keep-all 전역화, 탭 타깃 24px, LCP preconnect.
- 검증: npm run e2e 병렬 432 수집 GREEN + 직렬 49/49 exit 0, 백엔드 pytest
  421, gateway 29, typecheck/build/design-ssot/dead-code/중복 게이트 통과,
  layout-visual-gate 15/15, session-layout 8/8. 상세는 SSOT 대시보드
  142~144차 노트.
This commit is contained in:
Yun Chan 2026-07-27 14:25:24 +09:00
parent 0ae94499f2
commit 4511383cd9
55 changed files with 9333 additions and 573 deletions

View file

@ -838,7 +838,7 @@
}
.ad-user-sort__indicator {
color: var(--accent);
color: var(--text-accent);
font-family: var(--font-num);
font-size: 13px;
}
@ -980,7 +980,7 @@
.ad-approval-head h2 {
margin: 0;
color: var(--text-strong);
font-size: var(--fs-lg);
font-size: var(--fs-h3);
line-height: 1.25;
}
@ -1278,14 +1278,31 @@
background: var(--bg-surface);
}
/* 티켓 필터 툴바.
기존에는 기본값이 7트랙 (minmax(220px,...) + 132px*3 + 140px + 버튼 2개)이라
최소 954px를 요구했다. 그런데 1180~1257px 구간은 사이드바(262px) 펼쳐지면서
툴바의 실제 컨테이너가 876~950px밖에 된다. 그래서 1180px에서 마지막
"초기화" 버튼이 left=1142 / right=1216 으로 뷰포트(1180) 36px까지 밀려나 잘렸다.
(1179px 이하에서는 max-width:1179px 규칙이 3트랙으로 접어줘서 문제가 없었다.)
해결: 기본값을 4트랙 2줄로 낮추고 모든 유연 트랙을 minmax(0, ...) 두어
컨테이너가 좁아져도 트랙이 끝까지 줄어들 있게 한다(구조적으로 넘칠 없음). */
.ad-ticket-filter {
display: grid;
grid-template-columns: minmax(220px, 1fr) repeat(3, minmax(132px, 0.45fr)) minmax(140px, 0.5fr) max-content max-content;
grid-template-columns: minmax(0, 1.4fr) repeat(3, minmax(0, 1fr));
align-items: center;
gap: 8px;
margin: 12px 0;
}
/* 컨테이너가 954px 이상 확보되는 (뷰포트 1320px~, 컨테이너 1016px~)에서만
7트랙 줄로 편다. 최소치를 0으로 둬서 구간에서도 넘침이 불가능하다. */
@media (min-width: 1320px) {
.ad-ticket-filter {
grid-template-columns:
minmax(0, 1.6fr) repeat(3, minmax(0, 1fr)) minmax(0, 1.1fr) max-content max-content;
}
}
.ad-ticket-filter input,
.ad-ticket-filter select {
min-width: 0;
@ -1469,13 +1486,10 @@
font-size: 20px;
}
@media (max-width: 1179px) {
.ad-ticket-filter {
grid-template-columns: minmax(180px, 1fr) minmax(132px, 0.6fr) minmax(132px, 0.6fr);
}
}
/* max-width:1179px .ad-ticket-filter 3트랙 규칙을 제거했다.
1179px(컨테이너 875px) 1180px(컨테이너 876px) 실제 사용 가능한 폭이 1px 차이인데
트랙 수만 3 -> 7 튀면서 1180px에서만 넘침이 생겼다. 이제 981~1319px 구간이
위의 기본 4트랙을 공유하므로 경계에서 레이아웃이 튀지 않는다. */
@media (max-width: 980px) {
.ad-kpis,
.ad-flow-grid,