주기 회기 진단과 로그인 폭 보강

This commit is contained in:
Yun Chan 2026-08-12 16:33:59 +09:00
parent 946661926b
commit f97e7fadac
10 changed files with 216 additions and 17 deletions

View file

@ -20,7 +20,7 @@ Vignette 저장소의 모든 검증 수단(백엔드 단위 테스트, 웹 타
| API 타입 생성 체크 | `apps/web` | `npm run check:api-types` | 불필요 | 불필요 | 불필요 | 불필요 | 불필요 | pass |
| 웹 타입체크 | `apps/web` | `npm run typecheck` | 불필요 | 불필요 | 불필요 | 불필요 | 불필요 | pass |
| 웹 빌드 | `apps/web` | `npm run build` | 불필요 | 불필요 | 불필요 | 불필요 | 불필요 | pass |
| Playwright E2E(전체) | `apps/web` | `npm run e2e` | **필요(+시드)** | **필요** | 자동기동 | 일부만 | **필요** | 현재 수집 627 tests / 45 files · 현 작업트리 전체 GREEN 미검증 |
| Playwright E2E(전체) | `apps/web` | `npm run e2e` | **필요(+시드)** | **필요** | 자동기동 | 일부만 | **필요** | 현재 수집 629 tests / 45 files · 현 작업트리 전체 GREEN 미검증 |
핵심 원칙: **단위 테스트(pytest)와 타입체크/빌드는 외부 서비스 없이 단독 실행된다.**
**E2E만 풀스택(DB+API+웹+브라우저)을 요구한다.** 아래 각 절에서 근거와 절차를 설명한다.
@ -271,8 +271,8 @@ VITE_API_BASE=http://127.0.0.1:8000 npm run e2e # 프록시 대신 API
### 3.6 실측 테스트 개수 (현재)
2026-08-09 `npx playwright test --list` 기준 **현재 수집 627 tests / 45 files**다.
이 숫자는 수집량이지 통과량이 아니다. 현 작업트리 전체 627개 완주는 아직 증거가 없으며,
2026-08-12 `npx playwright test --list` 기준 **현재 수집 629 tests / 45 files**다.
이 숫자는 수집량이지 통과량이 아니다. 현 작업트리 전체 629개 완주는 아직 증거가 없으며,
과거 전체 GREEN 기록과 이번 focused/release gate 결과를 구분해 적는다.
NAS-origin 112건은 전부 실 API/DB 회기가 아니다. release receipt는 `session-layout`·`session-persistence`
@ -284,9 +284,13 @@ NAS-origin 112건은 전부 실 API/DB 회기가 아니다. release receipt는 `
persisted episode를 UI에 hydrate하지 못하는 제품 결함을 각각 fail-closed로 검출했다. 5·6차는 핵심 동일 학습자
SSE·review·G4/G5 `0→1→1`을 연속 통과했지만 fixture 공유와 mobile success-state locator를 각각 검출했다. 보정 후 7차
clean `aa81af29…`는 same-learner SSE·review·G4/G5 `0→1→1`, 별도 zero-state returned desktop/mobile 4/4, route mock 0,
exact cleanup 0으로 첫 전체 GREEN receipt `periodic-learner-e2e-20260810-020117.json`을 만들었다. 보호 runtime 접촉은 0이다.
hourly heartbeat는 최신 GREEN이 6시간 이상 오래됐거나 material milestone이 바뀔 때만 preflight 뒤 full runner를 최대 1회
실행하며, 실패 시 같은 heartbeat에서 재시도하지 않는다.
exact cleanup 0으로 첫 전체 GREEN receipt를 만들었다. 최신 full GREEN은 clean `64e1b221…`
`periodic-learner-e2e-20260812-150209.json`·SHA-256 `a7b2f758…8071`이다. current `94666192…` run은
disposable DB init health에서 브라우저 전에 FAILED했지만 보호 runtime 접촉 0·exact cleanup 0을 유지했다.
당시 cleanup 전에 DB/API 로그를 보존하지 않아 exact 원인은 미확정이다. runner는 이제 실패 시 cleanup 전에
`compose ps`와 db/api log tail을 수집하고 secret·email·UUID·민감 query를 제거한 뒤 raw SHA와 함께 receipt에 결속한다.
contract 14/14를 통과했다. hourly heartbeat는 최신 GREEN이 6시간 이상 오래됐거나 material milestone이 바뀔 때만
preflight 뒤 full runner를 최대 1회 실행하며, 실패 시 같은 heartbeat에서 재시도하지 않는다.
- **병렬 시나리오**: 166 tests (desktop 83 + mobile 83)
- **`@single-run` 직렬 시나리오**: 49 tests (DB 영속화·세션 MVP·음성 성공경로·인증 시각 테마·회기말 평가 저장·교수자 명시 재평가 저장·교수자 턴 재평가 저장·교수자 UI 평가 재시도·교수자 사용자별 분석·source pack sync·이론모드 저장·동의 철회 후 voice 차단·브라우저 stream PII 마스킹·음성 transcript 저장 실패 UI 표면화 등)