# Character UI 통합 4-PR — 2026-05-11 인수인계

## 한 줄 요약
어제(2026-05-10) Character UI 통합 4-PR 시리즈 작성 완료. **97/97 tests OK, 머지 + 라이브 브라우저 검증만 남음.**

## 컨텍스트 (왜 이 작업을 했는가)
사용자 지적:
> "어드민 웹페이지에 성향 설정에 대하여 글자로 설정하는 부분과 원 그래프를 이용하여 조정하는 부분이 충돌할수 있는 요인으로 작동할 우려가 보인다. 성향 그래프쪽으로 이동시켜서 사용자가 직관적으로 설정할수 있게끔 깔끔하게 설정 장치를 통합 대안 제시해라. 성향의 종류를 좀더 다양화하고 여러가지 성향의 상관관계가 서로간의 늘어나고 줄어드는 정도를 잘 반영하게끔 사용자가 직관적인 알수 있도록 편의성 있는 캐릭터 설정 페이지로 만들어보자."

⚙️ 설정의 자유텍스트 '성향/역할' 필드와 🎭 성향 캐릭터의 radar 차트가 의미적으로 충돌 → radar 쪽으로 통합.

## 4-PR Stack (머지 순서대로)

| # | 브랜치 | 내용 | 테스트 |
|---|--------|------|--------|
| **#160 (P1)** | `feat/v0.2-character-p1-backend-traits-correlations` → main | 16 traits (Group F 신규) + 15 correlations + ripple (damping=0.3) + GET `/admin/character/correlations` | 29 |
| **#161 (P2)** | `feat/v0.2-character-p2-interactive-radar` → P1 | SVG radar 드래그 + 상관 edge 시각화(녹/적 점선) + ripple 애니메이션 + 모바일 호환 | 35 |
| **#162 (P3)** | `feat/v0.2-character-p3-remove-text-persona` → P2 | ⚙️ 설정 페르소나 자유텍스트 제거 + 🎭 Identity 섹션 신설 | 22 |
| **#163 (P4)** | `feat/v0.2-character-p4-prompt-cleanup` → P3 | 백엔드 `get_system_prompt` style/custom 주입 제거 + deprecation log | 11 |

P1 머지 → P2 base 가 자동으로 main 으로 rebase → P2 머지 → P3 rebase → P3 머지 → P4 rebase → P4 머지. 순서 위반 시 conflict.

## 신규 traits (P1)
| ID | 한글명 | 기본값 | Group |
|----|------|------|------|
| conciseness | 간결성 | 0.5 | F |
| directness | 직설성 | 0.5 | F |
| optimism | 낙관성 | 0.5 | F |
| risk_tolerance | 위험감수 | 0.4 | F |
| patience | 인내심 | 0.6 | F |

기존 11 traits (Group A~E)는 그대로 보존 (preferences DB 호환).

## 상관관계 그래프 (P1, 15 edges)
```
boldness   → risk_tolerance  (+0.5)   과감 ↑ → 위험감수 ↑
caution    → risk_tolerance  (-0.4)   신중 ↑ → 위험감수 ↓
caution    → security        (+0.4)   신중 ↑ → 보안의식 ↑
empathy    → collaborative   (+0.3)
collaborative → empathy      (+0.2)   양방향 (강도 다름)
focus      → patience        (+0.3)
curiosity  → creativity      (+0.3)
intuitive  → creativity      (+0.2)
analytical → directness      (+0.2)
boldness   → directness      (+0.2)
independent → directness     (+0.2)
conciseness → directness     (+0.3)
directness → empathy         (-0.2)   직설 ↑ → 공감 표현 약화
creativity → optimism        (+0.2)
patience   → empathy         (+0.2)
```

설계 원칙: 짝(_OPPONENTS, A-D 그룹)은 100% flip — CORRELATIONS 와 중복 X. damping=0.3 으로 cascade 폭주 방지.

## 라이브 브라우저 검증 체크리스트

```powershell
Get-Process python -ErrorAction SilentlyContinue | Stop-Process -Force
git pull origin main
python server_llmwiki.py
```

`/admin` → 🎭 성향 캐릭터 페이지에서:

- [ ] 16개 trait vertex 가 SVG radar 위에 보이는지
- [ ] vertex 점을 드래그 (안/바깥) → 값 변경되는지
- [ ] Group A~D 짝(예: 신중함 ↑) 드래그 시 짝(과감함) 즉시 flip 되는지 (sum=1.0)
- [ ] 상관관계 edge (점선) 가 보이는지 (양 = 녹색, 음 = 빨강)
- [ ] vertex 드래그 후 영향받는 trait 가 pulse (불빛) 애니메이션 실행되는지
- [ ] 우측 패널 "선택한 성향의 영향력"에 짝 + 상관 trait 목록 뜨는지
- [ ] 모바일에서 드래그 시 페이지 스크롤 X (touch-action: none)
- [ ] 하단 정밀 조정 슬라이더 ↔ radar 양방향 동기화
- [ ] '💾 저장' 클릭 → toast 성공 메시지
- [ ] '↩ 기본값' 클릭 → 16 trait 모두 default 값 복원
- [ ] ⚙️ 설정 페이지 → '페르소나 설정' 섹션 사라지고 '답변 언어' 단독 섹션만 남았는지
- [ ] 🎭 캐릭터 페이지 상단의 Identity 섹션에서 이름 입력 + '이름 저장' 동작
- [ ] (DB에 옛 persona.style 있는 경우) 서버 콘솔에 deprecation 로그 1회 출력

## 회귀 위험
- **DB persona.style/persona.custom row 보존** — P4 deprecation 로그만 출력, 자동 삭제 안 함. 사용자가 직접 정리하고 싶으면 SQL: `DELETE FROM persona WHERE key IN ('style','custom');`
- **engine.py prompt 조립 변경 없음** — `store.get_system_prompt() + character_profile.get_prompt_modifiers()` 두 곳에서 받아 합치는 구조 유지.
- **STEP 7 baseline 미변경** — character UI 작업이므로 retrieval/graph/reasoning 비변경.

## 알려진 향후 작업 (이 사이클 외)
- v0.3 옵션 2 (file 삭제 시 entity/relation 동기 정리) — `docs/design/v0.3-knowledge-cascade.md`
- expression metadata 구조 (자유 페르소나 의미 보존 — 선택)
- admin UI 의 'persona legacy cleanup' 버튼 — 사용자 시각화

## 다음 작업 후보 (검증 후)
- **Axis 6 real-data** (#5 / #6 / #8 / #14)
- **#68 evolution phase 2**
- **Axis 3 phase 2**

## 참고
- 메모리 `project_state.md` 갱신 완료 (4-PR 시리즈 + 다음 큐)
- 모든 PR body 에 Summary / Verification / Out of scope / Co-Authored-By 포함
- CLAUDE.md 5 critical rules 통과 (도메인 추가 X, core/ 20KB 게이트 통과)
