{ "schema": "vignette.usecase-tdd-campaign.v1", "captured_at": "2026-08-18T11:05:00+09:00", "goal": "사용자 유스케이스 200개 이상을 RED 우선 TDD로 작성하고 실패를 제품 수정 또는 근거 있는 테스트 교정으로 닫는다", "method": "route-fixture 전용(모든 /api/** catch-all 404 선등록, mocked auth, 실제 AI 엔진 턴 생성 0). 테마별 병렬 작성 후 chromium-desktop(1440x900)/chromium-mobile(Pixel 5) 동시 수집.", "themes": [ "uc-auth-onboarding(15)", "uc-learner-home-dashboard(16)", "uc-learner-practice-history(14)", "uc-session-prestart(14)", "uc-session-conversation(14)", "uc-session-timer(14)", "uc-session-coach-voice(14)", "uc-session-review-core(15)", "uc-review-alliance-pulse(14)", "uc-review-rupture-repair(15)", "uc-practice-g4-g5(14)", "uc-settings-consent(15)", "uc-teacher-console(14)", "uc-admin-console(14)", "uc-error-resilience-shell(15)", "uc-a11y-mobile(22)" ], "scenario_total": 239, "collected_inventory": "1109 tests / 61 files (npx playwright test --list, 2026-08-18)", "red_findings_fixed_in_product": [ { "area": "settings/support-ticket", "finding": "서버 계약 POST /users/support-tickets가 있는데 웹 어디에도 티켓 작성 진입점이 없었다", "fix": "설정 지원 요청 섹션에 새 요청 작성 폼(제목/내용/전송)과 접수 확인 상태 추가 (Settings.tsx, api.ts, settings.css)" }, { "area": "admin/ticket-resolution-note", "finding": "AdminTicketPatch.resolution_note 계약과 학습자 화면의 해결 메모 표시가 있는데 관리자가 노트를 남길 입력 수단이 없었다", "fix": "관리자 티켓 액션에 해결 노트 textarea를 추가하고 해결 시 trim 후 전송 (Admin.tsx, admin-console.css)" }, { "area": "a11y/focus-visibility", "finding": "글래스 인셋 box-shadow가 전역 :focus-visible 링을 덮어 로그인·교수자 홈에서 키보드 포커스가 보이지 않았다", "fix": "outline 채널로 3px focus ring 추가 (ui.css, shell.css — WCAG 2.4.7)" }, { "area": "a11y/labels-headings-contrast", "finding": "설정 계정 입력 라벨 미연결, 설정/리뷰 h1 헤딩 구조 결함, 설정 저장 CTA 대비 미달, 리뷰 44px 미달·설정 모바일 가로 오버플로", "fix": "라벨 연결·헤딩 레벨 정정·대비 토큰 보정·터치 타깃/오버플로 CSS 수정 (Settings.tsx, SessionReview.tsx, settings.css, session-review.css, session.css)" } ], "test_side_corrections": "기존 스펙 5파일(full-sweep-admin-ai, full-sweep-auth, full-sweep-session-review, full-sweep-shell, readiness, teacher)의 실패는 제품 회귀가 아니라 계약 확장(/admin/usage 필드 추가 등)·StrictMode 이중 mount·hit-test 계약을 반영하지 못한 테스트 드리프트로 판별해 교정했다. 어설션 약화 없음.", "verification": { "web_typecheck": "tsc -b PASS", "backend_pytest": "986 passed (engine_gateway 62 포함)", "a11y_theme_rerun": "uc-a11y-mobile 44/44 (desktop 22 + mobile 22)", "full_parallel_gate": "docs/HANDOFF.md 2026-08-18 절이 최종 수치를 소유한다", "serial_single_run_gate_followup": { "initial_run": "2026-08-18 11:10-11:22 KST npm run e2e:single-run: 52 passed / 5 failed / 4 skipped (12.1m)", "triage_and_rerun": "① breakpoint-sweep '실기기 대표 폭 누락'은 widthsFor 솎아내기가 DEVICE_WIDTHS 를 boundary 중복이라고 제외 후 상한 솎기로 탈락시키는 테스트 결함(제품 아님) — keep 시드를 전체 DEVICE_WIDTHS 로 교정하고 3연폭 예외 조건을 솎아내기 발생 여부 기준으로 고침 → focused 1 passed. ② kb-source-packs 500은 게이트웨이 수정 커밋(4771b97c) 이전에 기동한 낡은 dev API(:8000) 프로세스가 원인 — 재기동 후 focused 1 passed. ③ voice-success 2 tests 재실행 2 passed(일시적 환경). ④ session-persistence 교사 재평가 2건은 엔진 실생 턴 필요 — Claude 구독 세션 한도('resets 3pm Asia/Seoul')로 엔진 가용 게이트가 skip 처리.", "pending": "① 70d7cb34 코칭 기능의 세션 UI 통합 마감(버튼 중복 해소·체크포인트 오버레이 정리) ② 해소 후 교사 재평가 2건 포함 직렬 게이트 전체 GREEN 재검증 ③ breakpoint-sweep settings/learner 협폭 레이픙 결함 91건 제품 수정. 부기: 70d7cb34에 *.bak 로그 4개가 우연 커밋됨(제거 권장).", "rerun_2026_08_18_15:05": "엔진 한도 리셋 직후 재실행: 31 passed / 14 failed / 4 skipped / 12 did-not-run(직렬 연쇄 중단). 교사 재평가 2건은 파일 내 선행 실패로 실행하지 못했다. 삼각화: (a) breakpoint-sweep 3종은 파서 수정 후 처음 실행된 실측 스윕이 settings/learner 320px 등에서 레이아웃 결함 91건을 보고 — 아침 실행에서는 파서 테스트 실패로 스윕이 연쇄 중단돼 실행되지 않았던 것. (b) session-mvp strict-mode 위반('코칭' 버튼 3개), session-persistence·layout-visual-gate '동맹 기준 포인터 선택' 타임아웃, voice 2종 실패는 아침 11:10 동일 웹 코드(cf899b7f)에서 통과했으므로 웹 커밋이 아닌 스택·데이터 드리프트(9099 게이트웨이 6369f294 교체, dev DB 누적 데이터)가 의심되며 원인 조사 진행 중. 게이트 엔진 경로 자체는 정상(클로드 일회/세션 턴 실측 응답).", "rerun_2026_08_18_evening": "인프라 완전 복구 후(Docker/사이드카/워크트리/node_modules 재설치, 엔진 agy 전환) 재실행: voice·mvp·layout·persistence 4파일 19 failed / 2 passed / 14 did-not-run. 원인 후보가 좁혀졌다: 재실행 작업트리에 소유자의 신규 기능 커밋 70d7cb34(22:15, AI 코칭 버튼·버블 팝업)가 포함돼 있었다. session-mvp '코칭' 버튼 3개 strict 위반은 이 기능의 새 DOM이 직접 설명하고, '동맹 기준 포인터 선택' 타임아웃(결정적 3/3)도 코칭 버블/패널이 체크포인트 오버레이를 가리는 상호작용이 일차 용의다(차선: agy 스트리밍 케이던스). 엔진·스택 헬스는 모두 정상. 기능 통합 마감 + 헬퍼/제품 조정은 소유자와 함께 별도 작업으로." } }, "boundaries": "route fixture 검증이므로 실제 로그인/API/DB 증거가 아니다. 실 DB-backed 증거는 기존 @single-run·closed-loop 스펙이 소유한다." }