회기 무발화 0턴 분리, 자기예측 락 불변식 및 TDD 회귀 검증 완료
Some checks failed
API contract / OpenAPI type drift (push) Failing after 3m27s

This commit is contained in:
Yun Chan 2026-09-08 23:28:06 +09:00
parent a479db7a5a
commit a0311c5957
100 changed files with 4884 additions and 11210 deletions

View file

@ -15,8 +15,8 @@ Vignette 저장소의 모든 검증 수단(백엔드 단위 테스트, 웹 타
| 검증 | 작업 디렉터리 | 명령 | DB | API(8000) | 웹(5173) | 엔진GW(9099) | 브라우저 | 현재 통과 |
|---|---|---|---|---|---|---|---|---|
| 백엔드 단위 테스트 | `apps/api` | `python -m pytest app/ -q` | 불필요 | 불필요 | 불필요 | 불필요 | 불필요 | 2026-08-29 전체 실행 1074 passed / 1 skipped |
| 엔진 게이트웨이 테스트 | `apps/api` | `python -m pytest engine_gateway/ -q` | 불필요 | 불필요 | 불필요 | 불필요 | 불필요 | 2026-08-28 전체 실행 68 passed |
| 백엔드 단위 테스트 | `apps/api` | `py -3.11 -m pytest app/ -q` | 불필요 | 불필요 | 불필요 | 불필요 | 불필요 | 2026-09-07 전체 실행 1090 passed / 1 skipped / 1 warning |
| 엔진 게이트웨이 테스트 | `apps/api` | `py -3.11 -m pytest engine_gateway/ -q` | 불필요 | 불필요 | 불필요 | 불필요 | 불필요 | 2026-09-07 전체 실행 71 passed / 1 warning |
| API 타입 생성 체크 | `apps/web` | `npm run check:api-types` | 불필요 | 불필요 | 불필요 | 불필요 | 불필요 | pass |
| 웹 타입체크 | `apps/web` | `npm run typecheck` | 불필요 | 불필요 | 불필요 | 불필요 | 불필요 | pass |
| 웹 빌드 | `apps/web` | `npm run build` | 불필요 | 불필요 | 불필요 | 불필요 | 불필요 | pass |
@ -25,10 +25,16 @@ Vignette 저장소의 모든 검증 수단(백엔드 단위 테스트, 웹 타
핵심 원칙: **단위 테스트(pytest)와 타입체크/빌드는 외부 서비스 없이 단독 실행된다.**
**E2E만 풀스택(DB+API+웹+브라우저)을 요구한다.** 아래 각 절에서 근거와 절차를 설명한다.
2026-09-07 앱 전체 실행의 1 skipped는 기존 선택형 격리 DB 테스트
`test_admin_usage_postgres.py``VIGNETTE_USAGE_TEST_DATABASE_URL` 미설정일 때 건너뛰는 경우다. 새 skip은
아니며, warning 1건은 통과 수와 분리해 기록한다.
---
## 1. 백엔드 단위 테스트 (pytest)
Windows에서 기본 `python`이 Python 3.11이 아니거나 pytest를 갖지 않을 수 있다. 이 저장소의 기준은 `py -3.11`이며, 새 가상환경은 `py -3.11 -m venv .venv`로 만든 뒤 활성화한다. 특정 사용자 절대경로를 문서나 명령에 넣지 않는다.
### 1.1 대상과 구성
- 작업 디렉터리: `apps/api`
@ -42,15 +48,15 @@ Vignette 저장소의 모든 검증 수단(백엔드 단위 테스트, 웹 타
```sh
# apps/api
python -m pytest app/ -q # 앱 단위 테스트: 2026-08-29 전체 실행 1074 passed / 1 skipped
python -m pytest engine_gateway/ -q # 게이트웨이 단위 테스트: 2026-08-28 전체 실행 68 passed
py -3.11 -m pytest app/ -q # 앱 단위 테스트: 2026-09-07 전체 실행 1090 passed / 1 skipped / 1 warning
py -3.11 -m pytest engine_gateway/ -q # 게이트웨이 단위 테스트: 2026-09-07 전체 실행 71 passed / 1 warning
```
수집만 빠르게 확인하려면:
```sh
python -m pytest app/ --collect-only -q
python -m pytest engine_gateway/ --collect-only -q
py -3.11 -m pytest app/ --collect-only -q
py -3.11 -m pytest engine_gateway/ --collect-only -q
```
수집량은 위 명령의 현재 출력으로 확인한다. `--collect-only` 숫자는 통과 수가 아니므로 실행 결과와 섞어
@ -80,7 +86,7 @@ python -m pytest engine_gateway/ --collect-only -q
#### 개선관리 워크북 focused 증거 (2026-08-27~28)
아래는 전체 API 1074 passed/1 skipped·gateway 68 passed와 별도로 해당 계약을 좁혀 실행한 확정 증거다. 같은 묶음의 테스트가 여러 요구사항
아래는 2026-09-07 전체 API 1090 passed/1 skipped/1 warning·gateway 71 passed/1 warning와 별도로 해당 계약을 좁혀 실행한 확정 증거다. 같은 묶음의 테스트가 여러 요구사항
경계를 함께 검증할 수 있으므로 숫자를 요구사항별 전체 합계로 더하지 않는다.
| 항목 | focused 명령/파일 | 확인 결과 |
@ -305,7 +311,9 @@ VITE_API_BASE=http://127.0.0.1:8000 npm run e2e # 프록시 대신 API
- `npx playwright test`를 직접 실행하면 로컬에서 세 프로젝트가 같은 worker pool에 섞일 수 있다.
전체 게이트는 반드시 `npm run e2e`, focused DB/engine 게이트는 프로젝트와 worker를 명시한
`npx playwright test --project=chromium-single-run --workers=1 --grep "..."`을 사용한다.
- 실패 시 trace(첫 재시도)·스크린샷·비디오를 `node_modules/.tmp/`에 남긴다.
- 기본 캡처는 `testInfo.outputPath(...)``node_modules/.tmp/` 아래에 남긴다. 실패 시 trace(첫 재시도)·스크린샷·비디오도 같은 임시 결과 경로를 사용한다.
- 날짜가 붙은 `docs/ops/evidence/` 증거는 명시적 검토·승격이 있을 때만 이 임시 산출물에서 복사한다. 자동 보존하지 않는다.
- `E2E_EVIDENCE_DIR`를 명시하면 `self-directed-learning-loop` 캡처만 해당 디렉터리에 현재 파일명으로 export한다. 날짜·승격 의미를 자동 부여하지 않는다.
### 3.6 실측 테스트 개수 (현재)