- 누적 작업트리 커밋: 회기 평가 복구·durable 저장, 라이브 코치 이력/근거, 교수자 학생분석, 음성 비언어 메타, PII 마스킹, 운영 티켓/헬스 등 - 문서: 완료 기록 docs/archive/ 냉동 보관, docs/ 단일 인덱스(docs/README.md)+통합 TODO(docs/TODO.md)로 정리 - 리팩터(행위 보존): Stage enum SSOT(taxonomy 소유·state_machine re-export), store recent/masked_turns 중복 제거, speaker_ko_label 단일 헬퍼, _list_sessions N+1 제거(state/turns 배치 + 턴평가 하이드레이션 배치) - 검증: 백엔드 pytest 352 passed, _list_sessions E2E chromium-single-run 2 passed |
||
|---|---|---|
| .. | ||
| admin.spec.ts | ||
| auth.spec.ts | ||
| avatar-expression-lab.spec.ts | ||
| avatar-expression.spec.ts | ||
| db-persistence.spec.ts | ||
| dev-dashboard.spec.ts | ||
| kb-source-packs.spec.ts | ||
| layout-visual-gate.spec.ts | ||
| learner.spec.ts | ||
| live2d-assets.spec.ts | ||
| public-auth-turn.spec.ts | ||
| readiness.spec.ts | ||
| README.md | ||
| session-layout.spec.ts | ||
| session-mvp.spec.ts | ||
| session-persistence.spec.ts | ||
| session-review-fixture.ts | ||
| session-review.spec.ts | ||
| settings.spec.ts | ||
| support.ts | ||
| teacher.spec.ts | ||
| voice-success.spec.ts | ||
| voice.spec.ts | ||
Playwright E2E
This directory contains both full-stack E2E tests that exercise the app through
the Vite /api proxy and a running local FastAPI server, and focused UI
regression tests that pin states with Playwright route fixtures. Treat a test as
DB-backed/real-API evidence only when the spec does not fulfill the endpoint
being verified and asserts the actual API response or persisted read model.
Required local services:
# apps/api
python -m uvicorn app.main:app --host 127.0.0.1 --port 8000
# apps/web, started automatically by Playwright unless already running
npm run dev -- --host 127.0.0.1 --port 5173
Useful overrides:
PLAYWRIGHT_PORT=5174 npm run e2e
PLAYWRIGHT_BASE_URL=http://localhost:5173 npm run e2e
VITE_API_BASE=http://127.0.0.1:8000 npm run e2e
Feature evidence map:
session-persistence.spec.tsis the primary DB-backed evidence for session runtime flows. It covers browseropenSessionStream()persistence, Korean PII masking through the browser stream into DB-backed detail/review payloads, crisis learner-only safety persistence without a client AI reply, AI tutor live coach history, source-pack metadata round-trip, voice metadata persistence, learner worksheet/review persistence, session-end evaluation storage, explicit teacher session/turn reevaluation, and manual teacher UI evaluation retry from a real failed row into durable DB state. The AI tutor history test must seestatus=readyandlatency_ms>0; degraded fallback must not pass as normal engine-backed coaching.kb-source-packs.spec.tsis DB-backed source-pack sync evidence. It checks admin-only sync and source-scoped evaluator RAG lookup for the licensed source packs; evaluator retrieval 503 is a failure, not a skipped proof.session-review.spec.tsis route-fixture UI regression evidence for review states, including delayed평가 대기to평가 완료polling,평가 실패,AI 평가 재시도, and pre/post input validation states. It does not prove that the evaluator wrote a DB row unless paired withsession-persistence.spec.ts.teacher.spec.tsmixes DB-backed teacher console paths with route-fixture queue/readability checks. Use the individual test body before citing it as persisted evidence.session-mvp.spec.tsis mostly route-fixture UI regression evidence. The AI tutor tests mock normal coaching, stale quota refresh, quota exhaustion over an old card, degraded fallback, history load failure, and runtime persistence source to prove the UI does not show replacement coaching, missing history, stale credits, or temporary storage as a silent success; the voice tests mock the browser microphone/WebSocket to prove both a final transcript followed byturn_persistence_unavailableand a voiceconversation_stoppedcrisis reply remain visible as failure/safety states instead of successful client turns. These are not DB-backed engine success evidence.
Public Google OAuth /turn smoke:
# 1) Verify the public API is not accidentally serving the dev runtime.
$env:E2E_PUBLIC_AUTH="1"
npx playwright test e2e/public-auth-turn.spec.ts --project=chromium-public-auth --grep "production-safe"
# 2) Open a browser, sign in with an allowed Google account, then close codegen.
npx playwright codegen https://vignette.chanpaca.net/login --save-storage=./node_modules/.tmp/public-auth.json
# 3) Reuse that authenticated storage state for the public API turn smoke.
$env:E2E_PUBLIC_AUTH="1"
$env:E2E_PUBLIC_STORAGE_STATE="./node_modules/.tmp/public-auth.json"
npx playwright test e2e/public-auth-turn.spec.ts --project=chromium-public-auth
Notes:
E2E_PUBLIC_AUTH=1targets the public site and does not start the local Vite web server.public-auth.jsoncontains the HttpOnly API session cookie exported by Playwright. Treat it as sensitive and keep it undernode_modules/.tmp.- The API session TTL is currently 8 hours, so recapture storage state when the smoke begins returning
401.
Install browser binaries once with:
npx playwright install chromium