P4-P7 페르소나와 Tailnet 허용 보강

This commit is contained in:
Yun Chan 2026-06-27 19:04:46 +09:00
parent 17b114f647
commit 7f4a2d90c7
12 changed files with 121 additions and 30 deletions

View file

@ -80,7 +80,7 @@ vignette/
`lifespan`(startup/shutdown)에서:
1. `init_pool()` → DB 풀 생성, `ensure_runtime_tables()` / `ensure_review_tables()` 보장.
2. `settings.auto_seed_personas``materialize_seed_personas()`로 시드 P1~P3을 `app.persona_card`에 upsert.
2. `settings.auto_seed_personas``materialize_seed_personas()`로 시드 P1~P3과 저장소 `data/personas/P4~P7.json``app.persona_card`에 upsert.
3. `engine_client.startup()` / `voice_service.startup()`로 httpx 클라이언트 준비.
4. **DB 초기화 실패 시** `environment == "dev"`이면 예외를 삼키고 경고만 남긴 채 degraded 기동한다
(그 외 환경은 raise). `app/main.py:47-53`.
@ -150,13 +150,17 @@ assistant/user 히스토리(L6) → `user(이번 마스킹 발화, L5)`. 게이
- 자살·자해의 구체적 '방법/수단'은 절대 발화하지 않는다.
- `_format_openness_directive()``effective_openness` 수치를 연기 강도 지시문으로 환산한다(수치 자체는 비노출).
시드 페르소나(개발 부트스트랩): `SEED_PERSONAS = {P1, P2, P3}``get_seed_persona(code)`.
시드 페르소나(개발 부트스트랩): `SEED_PERSONAS = {P1, P2, P3}`와 저장소 `data/personas/P4~P7.json``persona_repository.built_in_personas()`.
| 코드 | 인물 | 난이도 | 이론타깃 | 특징 |
|---|---|---|---|---|
| P1 | 서연(고2) | hard | humanistic | 우울/자살사고(ideation_stage=2), 비자발·고저항(base 0.7) |
| P2 | 민재(32) | moderate | cbt | 범불안/신체화, 자살사고 없음(ideation 1) |
| P3 | 지우(28) | moderate | humanistic | 미혼모 역할부담·소진, 라포/무조건적 존중 연습용 |
| P4 | 하늘(고2) | easy | cbt/humanistic | 학업/시험 불안, 완벽주의·자동사고 탐색 연습용 |
| P5 | 도윤(중3) | moderate | humanistic/cbt | 또래관계 갈등·소외감, 거절민감성·라포 형성 연습용 |
| P6 | 하린(고3) | moderate | humanistic/cbt | 진로갈등(부모기대 vs 본인욕구), 가치 탐색·인지왜곡 탐색 연습용 |
| P7 | 도현(고3) | hard | humanistic/cbt | 입시 번아웃·무기력, 저항 높은 내담자 라포와 무망감 인지 다루기 연습용 |
### 2.4 결정론 상태머신 — `app/services/state_machine.py`
@ -310,7 +314,8 @@ GET {ENGINE_URL}/ready|/health — readiness/liveness
DB `app.persona_card`가 승인 페르소나의 SoR. 이 모듈이 in-proc `PersonaCard`와 DB 행을 잇는 경계다.
- `materialize_seed_personas()` — 시드 P1~P3을 `status='approved'`로 upsert(admin 롤).
- `load_file_personas()` / `built_in_personas()` — in-code P1~P3과 저장소 `data/personas/P4~P7.json`을 deterministic catalog로 합친다.
- `materialize_seed_personas()` — built-in P1~P7을 `status='approved'`로 upsert(admin 롤).
- `get_approved_persona(code)` / `list_approved_personas()` — 승인된 최신 버전 조회(AI 컨텍스트).
- `get_catalog_persona(code)` — 승인 카드 조회, 실패 시 `settings.allow_seed_persona_fallback`이면
`seed_fallback_persona`(degraded=True)로 폴백.