음성 재생과 운영 배포 정리
This commit is contained in:
parent
8ed185ce6c
commit
ac7db95542
1020 changed files with 46863 additions and 2175 deletions
|
|
@ -15,12 +15,12 @@ Vignette 저장소의 모든 검증 수단(백엔드 단위 테스트, 웹 타
|
|||
|
||||
| 검증 | 작업 디렉터리 | 명령 | DB | API(8000) | 웹(5173) | 엔진GW(9099) | 브라우저 | 현재 통과 |
|
||||
|---|---|---|---|---|---|---|---|---|
|
||||
| 백엔드 단위 테스트 | `apps/api` | `python -m pytest app/ -q` | 불필요 | 불필요 | 불필요 | 불필요 | 불필요 | 113 pass |
|
||||
| 엔진 게이트웨이 테스트 | `apps/api` | `python -m pytest engine_gateway/ -q` | 불필요 | 불필요 | 불필요 | 불필요 | 불필요 | 7 pass |
|
||||
| 백엔드 단위 테스트 | `apps/api` | `python -m pytest app/ -q` | 불필요 | 불필요 | 불필요 | 불필요 | 불필요 | 145 pass |
|
||||
| 엔진 게이트웨이 테스트 | `apps/api` | `python -m pytest engine_gateway/ -q` | 불필요 | 불필요 | 불필요 | 불필요 | 불필요 | 11 pass |
|
||||
| API 타입 생성 체크 | `apps/web` | `npm run check:api-types` | 불필요 | 불필요 | 불필요 | 불필요 | 불필요 | pass |
|
||||
| 웹 타입체크 | `apps/web` | `npm run typecheck` | 불필요 | 불필요 | 불필요 | 불필요 | 불필요 | — |
|
||||
| 웹 빌드 | `apps/web` | `npm run build` | 불필요 | 불필요 | 불필요 | 불필요 | 불필요 | — |
|
||||
| Playwright E2E(전체) | `apps/web` | `npm run e2e` | **필요(+시드)** | **필요** | 자동기동 | 일부만 | **필요** | 102 tests / 17 files |
|
||||
| 웹 타입체크 | `apps/web` | `npm run typecheck` | 불필요 | 불필요 | 불필요 | 불필요 | 불필요 | pass |
|
||||
| 웹 빌드 | `apps/web` | `npm run build` | 불필요 | 불필요 | 불필요 | 불필요 | 불필요 | pass |
|
||||
| Playwright E2E(전체) | `apps/web` | `npm run e2e` | **필요(+시드)** | **필요** | 자동기동 | 일부만 | **필요** | 113 tests / 17 files |
|
||||
|
||||
핵심 원칙: **단위 테스트(pytest)와 타입체크/빌드는 외부 서비스 없이 단독 실행된다.**
|
||||
**E2E만 풀스택(DB+API+웹+브라우저)을 요구한다.** 아래 각 절에서 근거와 절차를 설명한다.
|
||||
|
|
@ -42,15 +42,15 @@ Vignette 저장소의 모든 검증 수단(백엔드 단위 테스트, 웹 타
|
|||
|
||||
```sh
|
||||
# apps/api
|
||||
python -m pytest app/ -q # 앱 단위 테스트 (현재 113 pass)
|
||||
python -m pytest engine_gateway/ -q # 게이트웨이 단위 테스트 (현재 7 pass)
|
||||
python -m pytest app/ -q # 앱 단위 테스트 (현재 145 pass)
|
||||
python -m pytest engine_gateway/ -q # 게이트웨이 단위 테스트 (현재 11 pass)
|
||||
```
|
||||
|
||||
수집만 빠르게 확인하려면:
|
||||
|
||||
```sh
|
||||
python -m pytest app/ --collect-only -q # → "113 tests collected"
|
||||
python -m pytest engine_gateway/ --collect-only -q # → "7 tests collected"
|
||||
python -m pytest app/ --collect-only -q # → "145 tests collected"
|
||||
python -m pytest engine_gateway/ --collect-only -q # → "9 tests collected"
|
||||
```
|
||||
|
||||
> 참고: 실행 중 `PendingDeprecationWarning: Please use 'import python_multipart'`
|
||||
|
|
@ -62,11 +62,13 @@ python -m pytest engine_gateway/ --collect-only -q # → "7 tests collected"
|
|||
|---|---|
|
||||
| `app/test_runtime_policy.py` | 런타임 정책(공개/dev 모드, dev-login 가드) |
|
||||
| `app/test_session_turn_persistence.py` | 세션 턴 영속화(DB/인메모리 양쪽) |
|
||||
| `app/test_session_share.py` | 회기 리뷰 공유 URL, sanitized 공개 payload, 토큰 폐기 |
|
||||
| `app/test_evaluation_persistence.py` | fast-loop 평가 정규화 적재/복원 매핑 |
|
||||
| `app/test_orchestrator_masking.py` | 오케스트레이터 PII 마스킹 게이트 |
|
||||
| `app/test_state_machine_resistance.py` | 저항엔진 상태머신(openness 전이) |
|
||||
| `app/test_rbac_idor.py` | RBAC / IDOR 권한 경계 |
|
||||
| `app/test_auth_providers.py` | 인증 프로바이더(SSO/allowlist) |
|
||||
| `app/test_admin_ops.py` | 관리자 콘솔 운영 저장 모델(헬스·티켓) |
|
||||
| `app/test_persona_review.py` | 페르소나 리뷰 워크플로 |
|
||||
| `app/test_voice_service.py` | 음성 캐스케이드 서비스(STT/TTS) |
|
||||
| `app/test_voice_ws.py` | 음성 WebSocket 경계 |
|
||||
|
|
@ -75,7 +77,7 @@ python -m pytest engine_gateway/ --collect-only -q # → "7 tests collected"
|
|||
|
||||
| 파일 | 검증 영역 |
|
||||
|---|---|
|
||||
| `engine_gateway/test_gateway_model.py` | 게이트웨이 모델 선택·요청/응답 계약(ENGINE_MODE별) |
|
||||
| `engine_gateway/test_gateway_model.py` | 게이트웨이 모델 선택·공유 engine contract·SSE 요청/응답 계약(ENGINE_MODE별) |
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -228,10 +230,13 @@ VITE_API_BASE=http://127.0.0.1:8000 npm run e2e # 프록시 대신 API
|
|||
|
||||
### 3.6 실측 테스트 개수 (현재)
|
||||
|
||||
`npx playwright test --list` 기준 **총 102 tests / 17 files**.
|
||||
`npx playwright test --list` 기준 **총 113 tests / 17 files**.
|
||||
|
||||
- **병렬 시나리오**: 88 tests (desktop + mobile)
|
||||
- **`@single-run` 직렬 시나리오**: 14 tests (DB 영속화·세션 MVP·음성 성공경로 등)
|
||||
- **병렬 시나리오**: 96 tests (desktop + mobile)
|
||||
- **`@single-run` 직렬 시나리오**: 17 tests (DB 영속화·세션 MVP·음성 성공경로 등)
|
||||
- `e2e/voice-success.spec.ts`는 직접 `/voice/ws` 캐스케이드와 Session 마이크 UI를 함께 검증하며,
|
||||
브라우저 `<audio>.play()`가 차단된 조건에서도 Web Audio buffer source 재생이 시작되는지 확인한다.
|
||||
- 2026-06-27 최종 로컬 풀스택 검증: `PLAYWRIGHT_PORT=5174 npm run e2e` **113 passed**.
|
||||
|
||||
레이아웃·시각 회귀 게이트(핵심 합격선):
|
||||
|
||||
|
|
@ -239,12 +244,13 @@ VITE_API_BASE=http://127.0.0.1:8000 npm run e2e # 프록시 대신 API
|
|||
|---|---|---|---|
|
||||
| 세션 레이아웃 | `e2e/session-layout.spec.ts` | 4 테스트 × (desktop+mobile) | **8 / 8** |
|
||||
| 시각 레이아웃 게이트 | `e2e/layout-visual-gate.spec.ts` | `@single-run`, 7개 화면 × 7개 폭 검사 | **7 / 7** |
|
||||
| 레이아웃 포커스(재설계 화면) | `session-layout`·`session-review`·`admin`·`learner`·`settings`·`teacher`, `@single-run` 제외 | desktop+mobile 병렬 | **54** |
|
||||
| 레이아웃 포커스(재설계 화면) | `session-layout`·`session-review`·`admin`·`learner`·`settings`·`teacher`, `@single-run` 제외 | desktop+mobile 병렬 | **58** |
|
||||
|
||||
> `layout-visual-gate`는 7개 폭(390/720/861/900/1024/1280/1440)에서 가로 오버플로·잘린
|
||||
> 컨트롤을 검사하고 전체 페이지 스크린샷을 `node_modules/.tmp/layout-gate/`에 남긴다.
|
||||
> `session-layout`은 회기 전/활성 화면이 뷰포트를 벗어나지 않는지, 우측 패널이 코어 영역을
|
||||
> 침범하지 않는지, 스트림 실패 시 미저장 전사가 남지 않는지를 검증한다.
|
||||
> 침범하지 않는지, 시작 후 실제 `session_id` URL에서 새로고침해도 활성 회기 상세가 유지되는지,
|
||||
> 스트림 실패 시 미저장 전사가 남지 않는지를 검증한다.
|
||||
|
||||
### 3.7 공개 인증 스모크(선택)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue