Jev v2 결정문과 SSOT 동기화
Some checks failed
API contract / OpenAPI type drift (push) Has been cancelled

v2 프로토콜 정본·워커 판정 기록, JEV-002 대시보드·TODO·백로그, 테스트 수집 인벤토리와 아키텍처 가이드를 갱신한다.
This commit is contained in:
Yun Chan 2026-09-30 13:23:18 +09:00
parent 293ff7f0ab
commit b7bd24f016
7 changed files with 319 additions and 4 deletions

View file

@ -142,6 +142,8 @@ SSE `done`, `TurnRecord` JSON, `provider_events`에는 포함하지 않는다.
trace insert와 `state_after` upsert를 같은 DB transaction으로 묶고, 실패 시 rollback한다. legacy·위기·실패·취소
경로는 trace 없이 기존 상태 갱신 계약을 유지한다.
Jev v2(2026-09-29)는 한 요청에 A(상담자 발화 판정)·B(감정 9축)·C(표현) 최대 20문항을 묻고, 감쇠 없는 이번 턴 반응·비대칭 기분 전이·개방도 게이트로 L3 `정서 연기 지시`를 만든다. trace는 `schema_version=2`로 판정·반응·표현 계획을 더하고, 학습자·교수자용 고정 문구 속마음 요약 `ClientInnerReactionV1`은 같은 transaction에서 `app.client_inner_reaction`에 저장해 피드백 정책이 켜진 경우에만 stream `done`·`TurnResponse`·음성 `reply`와 리뷰 `ReviewTurn.innerReaction`으로 노출한다. 정본은 [v2 프로토콜](../decisions/jev-client-affect-v2.md)이다.
### 2.3 페르소나 메시지 빌더 — `app/services/persona.py` (L0~L6)
`build_turn_messages(card, state, learner_text_masked, ...)`가 한 턴의 `EngineMessage[]`를 조립한다.
@ -851,7 +853,8 @@ DB는 PostgreSQL 16 + pgvector(단일 SoR). 초기화 SQL은 `infra/db/init/`에
다대다, `supervisor_comment`(rationale/critique + intent_deviation JSONB), `safety_events`.
- **내담자 감정 trace** `app.client_affect_trace` — 완료된 Jev 내담자 턴의 내부 전이 provenance. `turn_id` 기본키와
`session_id`는 `app.turns`/`app.sessions`를 cascade 참조하고, trace와 상태 upsert는 성공한 client append와 같은
transaction에 속한다. trace가 없는 과거·legacy·위기·실패·취소 턴은 추정값으로 채우지 않는다.
transaction에 속한다. trace가 없는 과거·legacy·위기·실패·취소 턴은 추정값으로 채우지 않는다. v1·v2 기록이 혼재하며 관리자 조회가 `schema_version`으로 구분한다.
- **내담자 속마음 요약** `app.client_inner_reaction` — migration 24. Jev v2 성공 턴의 고정 문구 요약(`reaction jsonb`). trace와 같은 transaction에 insert하며, RLS SELECT는 AI 경로를 차단하고 관리자·교수자(cohort)·본인 학습자만 허용한다. UPDATE·DELETE 정책은 없다.
- **사례개념화 제출물** `app.case_worksheet` — 회기 리뷰의 축어록 기반 자동 초안을 학습자가 편집해 저장한 JSONB.
`session_id` 단위 upsert이며, `GET /review`에서 자동 초안보다 우선된다.
- **교수자 검토 상태** `app.session_review_status` — 교수자/관리자의 회기 검토 상태, 메모, 검토 시각을

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` | **필요(+시드)** | **필요** | 자동기동 | 일부만 | **필요** | 현재 수집 1251 tests / 71 files · 현 작업트리 전체 GREEN 미검증 |
| Playwright E2E(전체) | `apps/web` | `npm run e2e` | **필요(+시드)** | **필요** | 자동기동 | 일부만 | **필요** | 현재 수집 1277 tests / 72 files · 현 작업트리 전체 GREEN 미검증 |
핵심 원칙: **단위 테스트(pytest)와 타입체크/빌드는 외부 서비스 없이 단독 실행된다.**
**E2E만 풀스택(DB+API+웹+브라우저)을 요구한다.** 아래 각 절에서 근거와 절차를 설명한다.
@ -326,7 +326,7 @@ VITE_API_BASE=http://127.0.0.1:8000 npm run e2e # 프록시 대신 API
### 3.6 실측 테스트 개수 (현재)
2026-09-22 `py -3.11 -X utf8 scripts/check-dev-dashboard-ssot.py`가 실행한 `npx playwright test --list` 실제 수집 기준 **현재 수집 1251 tests / 71 files**다
2026-09-29 `py -3.11 -X utf8 scripts/check-dev-dashboard-ssot.py`가 실행한 `npx playwright test --list` 실제 수집 기준 **현재 수집 1277 tests / 72 files**다
(유스케이스 16테마 `uc-*.spec.ts` 239 시나리오 포함).
이 숫자는 수집량이지 통과량이 아니다. 현 작업트리 전체 완주는 아직 증거가 없으며,
과거 전체 GREEN 기록과 이번 focused/release gate 결과를 구분해 적는다.