vignette/docs/ops/evidence/usecase-tdd-2026-08-18.json
Yun Chan 0a00ff245a NAS current GREEN 달성과 심야 연쇄 복구 증거
- 대청소 사건·Docker 사망·WinNAT 포트 예약·DHCP IP 회수 연쇄 복구 기록
- 릴레이 bf5f7352 재핀(r3) + 192.168.0.224 계약 이전(방화벽·NAS .env 재구성)
- NAS agy_cli 전환으로 health 3/3 engine true + actual-origin turn→review smoke 통과
  — 201차 current GREEN 조건 전부 충족, TODO 항목 종결
- 직렬 게이트 잔여: 동맹 포인터 타임아웃 결정 재현(3/3)·스윕 협폭 결함과 함께 조사 이관 기록
- 대시보드 213차 노트, 수집량 1111 갱신(체커 요구), SSOT 59 PASS
2026-08-23 13:49:52 +09:00

63 lines
6.3 KiB
JSON

{
"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": " ' ' (agy vs , ) breakpoint-sweep settings/learner 91 2 GREEN . (· , NAS actual-origin smoke )",
"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. ' '(support.ts completeAlliancePreCheckpoint 15 ) (3/3). 11:10 13:59 agy (SSE/ender ) . ."
}
},
"boundaries": "route fixture /API/DB . DB-backed @single-run·closed-loop ."
}