Commit graph

36 commits

Author SHA1 Message Date
Yun Chan
69fece56bf 학생 분석 목록 펼침 보강 2026-07-01 12:41:17 +09:00
Yun Chan
51053af536 안전 이벤트 대시보드 보강 2026-07-01 12:34:46 +09:00
Yun Chan
fe2796f05a 세션 평가와 교수자 분석 보강 2026-07-01 12:10:52 +09:00
Yun Chan
5c4ac04e06 preview host 허용 회귀 가드 추가 (check:preview-hosts)
배포 도메인 블랭크(vite preview allowedHosts 누락) 재발을 막는 행동 검증
스크립트를 추가. preview를 띄워 공개 Host(vnet/api-vnet/chanpaca) 3종이
200으로 허용되고 임의 Host는 403으로 차단(DNS 리바인딩 보호 유지)되는지
http.request로 직접 Host 헤더를 보내 확인한다. package.json에
check:preview-hosts로 등록.

검증: npm run check:preview-hosts → 공개 3 allowed + unlisted blocked PASS,
exit 0. 대시보드 104차 갱신.
2026-06-30 12:27:46 +09:00
Yun Chan
09d3220f68 배포 도메인 관리자 페이지 블랭크 수정 (vite preview allowedHosts)
vnet.18ka.net 공개 배포에서 vite preview 서버가 Host 검증으로 공개 도메인
요청을 "Blocked request. This host is not allowed." 403으로 막아 SPA 전체가
블랭크로 뜨던 문제를 수정. server.allowedHosts와 같은 목록을 preview에도
적용하고 기본 허용 호스트에 vnet.18ka.net/api-vnet.18ka.net/vignette.chanpaca.net 추가.

검증: curl -H "Host: vnet.18ka.net" 127.0.0.1:5174 가 수정 전 Blocked →
수정 후 200+정상 index, 로컬 dev·preview 일반/슈퍼관리자 전 페이지 정상 렌더,
npm run typecheck. 대시보드 104차 기록.
2026-06-30 12:16:51 +09:00
Yun Chan
4e6b0045e3 관리자 워크스페이스 접근 확장과 소유자 결정 7건 확정 반영
- 관리자(role=admin)가 학습자·교수자·관리자 워크스페이스를 모두 접근하도록
  can_access_role/require_role와 프론트 auth 헬퍼·Sidebar 내비를 정리하고
  admin 워크스페이스 내비 E2E를 추가.
- 소유자 결정 7건 전건 확정(2026-06-30)을 SSOT 대시보드·백로그에 반영하고
  결정 필요 7→0으로 동기화. SSOT drift 게이트 기대 카운트도 갱신.
- 확정된 H1 평가설계(κ≥0.70·ICC≥0.75·환각률≤0.03·t-검정 α=0.05·무작위 배정)를
  approved-export κ 게이트(checker·dataset_export·recursive export)와
  KPI 측정계획·export manifest 문서에 반영.

검증: npm run typecheck, npm run check:api-types, 백엔드 pytest 290 passed,
admin 내비 E2E 1 passed, 레이아웃 시각게이트 9/9, session-layout 4 passed,
SSOT drift 게이트 PASS.
2026-06-30 10:57:46 +09:00
Yun Chan
3bf38c50df 메일 알림 시스템 추가 2026-06-29 17:07:01 +09:00
Yun Chan
206018b088 런타임 계약과 학습자 흐름 보강 2026-06-29 08:12:14 +09:00
Yun Chan
f456b8997a 세션 진행 패널 스타일 보강 2026-06-29 00:01:40 +09:00
Yun Chan
30441bd93b 워크시트 검수 UI와 세션 다크톤 정리 2026-06-28 23:53:37 +09:00
Yun Chan
391639c1de 평가 및 화면 구조 정리 2026-06-28 21:50:21 +09:00
Yun Chan
3a9f70a97b 운영 화면과 회기 리뷰 UI 갱신 2026-06-28 20:13:21 +09:00
Yun Chan
ac7db95542 음성 재생과 운영 배포 정리 2026-06-28 12:18:20 +09:00
Yun Chan
8ed185ce6c 외부 계정 수동 등록 허용 2026-06-28 11:31:07 +09:00
Yun Chan
bd389a97cc 사례개념화 워크시트 저장 추가 2026-06-27 19:27:34 +09:00
Yun Chan
7f4a2d90c7 P4-P7 페르소나와 Tailnet 허용 보강 2026-06-27 19:04:46 +09:00
Yun Chan
17b114f647 세션 계약 SSOT 정리 2026-06-27 18:47:55 +09:00
Yun Chan
250787cb18 다크 테마 설정 정리 2026-06-27 18:34:36 +09:00
Yun Chan
480fbd543a 계약 DTO SSOT 3차 2026-06-27 18:27:30 +09:00
Yun Chan
1007eaf7d9 세션 종료 UX 정리 2026-06-27 18:09:48 +09:00
Yun Chan
f472883c31 대시보드 이슈 정리 1차 2026-06-27 17:51:54 +09:00
Yun Chan
0ec266a761 동의 게이트와 런타임 안정화 2026-06-27 17:22:38 +09:00
Yun Chan
0cdbf8e4fe 세션 시작 화면 아바타 문구 보정 2026-06-27 16:09:58 +09:00
Yun Chan
c0dddab594 현재 작업 전체 반영 2026-06-27 16:08:41 +09:00
Yun Chan
5560638e54 P1 아바타 PSB 최신본 기본 적용 2026-06-27 16:05:57 +09:00
Yun Chan
6bd91b0d5e 현재 작업 상태 저장 2026-06-27 11:20:24 +09:00
Yun Chan
085460b5e0 대시보드 폴드아웃/드릴다운 정리 + 페르소나 역린·misconduct 반응 + 게이트웨이 격리·RAG 비차단 수정
SSOT 대시보드:
- 한신대 기술분석 PDF(19쪽) 정합성 분석 + 이번 세션 발견 섹션 추가
- 섹션 폴드아웃(접기)·상단 목차(드릴다운)·모두 펼치기/접기 — 내용 보존, 레이아웃만 정리

페르소나 반응 강화('저항·반응 조절' 핵심 차별):
- PersonaCard.triggers(역린) 필드 + CCD 핵심상처 파생 역린 블록
- L0에 무례·모욕·조롱 시 현실적 동맹 균열 반응 지침

버그·성능 수정(라이브/E2E로 포착):
- 게이트웨이 페르소나 격리: --append-system-prompt를 --system-prompt(교체)로 + --exclude-dynamic-system-prompt-sections (내담자 캐릭터 붕괴·개발맥락 누출 차단)
- RAG: 임베더 동기 로드(약 7-13초)를 _warm_rag_caches 백그라운드 warm으로(세션 생성 블로킹 회귀 수정)
- voice TTS RMS 데드힌트 제거, init_state OpennessParams 파라미터객체화
- 한국어 PII(날짜·금액·주소) 마스킹 보강
- 레이아웃 시각 게이트: 폼 컨트롤 값 스크롤 오탐 제외(7/7)

검증: 백엔드 84/84, E2E 42(데스크톱 27·모바일 11·아바타 4), 시각 게이트 7/7
2026-06-27 02:30:46 +09:00
Yun Chan
543d48cd04 Block legacy Live2D asset routes 2026-06-26 15:11:54 +09:00
Yun Chan
435cbafbc5 Remove bundled Live2D demo assets 2026-06-26 15:09:32 +09:00
Yun Chan
188e899394 Stabilize runtime auth and E2E coverage 2026-06-26 14:47:00 +09:00
Yun Chan
f869d257ec fix(web): 학습자홈 '연습 시작' → 상담세션 라우팅 (라이브 진입 버그)
- startPractice가 console.info만 찍고 navigate 누락 → 학습자홈에 갇혀 mock만 보임
- useNavigate로 /learn/session/:personaCode 라우팅 추가
- puppeteer 풀흐름 검증: 학습자홈→연습시작→session→회기시작→말걸기→서연 실응답(turn 200)
2026-06-26 02:01:00 +09:00
Yun Chan
18b8ef3ef2 fix(web): 상담세션 라이브 연결 — start session_id를 turn에 사용(liveSessionId)
- 버그: handleStart가 sessionApi.start 결과 session_id 미저장, handleSend가
  URL :sessionId(임의값)로 turn 호출 → 백엔드 세션 불일치 → mock 폴백
- 수정: liveSessionId state에 start 결과 저장, turn/consume이 이걸 사용
- consumeClientReply: 동기 client_reply 있으면 SSE 스킵하고 타이핑 표시
- persona_code seoyeon→P1(시드 페르소나)
- puppeteer 실화면 검증: 회기시작→말걸기→서연 실응답 확인
2026-06-26 00:24:18 +09:00
Yun Chan
eca1f6a413 fix(web): 기본 라이트 테마 고정 — OS 다크선호 미추종(다크는 명시 토글로만) 2026-06-25 23:44:33 +09:00
Yun Chan
24b1b7a6e1 feat: P1 풀빌드 — React 프론트 7화면 + 백엔드 상담루프·평가·음성·RAG
web (Vite+React19+TS, Cloudflare Pages 배포):
- 디자인토큰(세이지틸/테라코타 SSOT), 앱셸, 공통 UI 프리미티브
- 7화면: 로그인/학습자홈/상담세션/회기리뷰/교수자/관리자/설정
- ClientAvatar: SVG 반구상 흉상 4상태 + RMS 립싱크 + 6파라미터 정서
- 회기리뷰는 외부 레퍼런스 디자인을 Vignette 토큰으로 리스킨

api (FastAPI):
- 게이트웨이 /v1/generate·/v1/stream 어댑터(상주풀/EngineSession 보존)
- services: 페르소나 L0~L6 빌더 / 결정론 상태머신 / 가드레일 /
  턴 오케스트레이터 / 회기간 메모리 / 평가AI / 음성 / RAG
- store: DB off 폴백(in-memory), sessions 실구현

검증:
- web: node22 tsc+vite build 통과(node23 segfault 회피), Pages 배포 200
- api: app.main import 통과
- 핫픽스: Topbar initials undefined-safe (undefined.trim 크래시)
- E2E: 서연(P1) 상담 1턴 — 좋은/나쁜 상담에 차등 반응 실증
2026-06-25 23:37:22 +09:00
Yun Chan
204726f707 feat(infra): 이식 가능한 Docker 배포 구성
- docker-compose.yml: web/api/db(pgvector)/rag/proxy 한 방 기동
- 엔진 어댑터 분리: ENGINE_URL/ENGINE_MODE로 로컬 claude -p ↔ API 전환(코드 무수정 이전)
- Caddy: 자동 TLS + SSE flush/WSS 무버퍼(실시간 음성)
- DEPLOYMENT.md: 이식/엔진분리/스케일업/외부노출 가이드
- 페이지 레이아웃 시안 6종(login/learner-home/session-review/professor/admin/settings)
2026-06-25 21:24:19 +09:00
Yun Chan
709baadd01 chore: Vignette 모노레포 초기 스캐폴드 + 설계 문서 이관
- apps/web(React) · apps/api(FastAPI) · infra(Docker) · docs(설계 SoT)
- 마스터플랜·적대검증·메모리설계·디자인컨셉 docs 이관
- 미성년 사례데이터는 .gitignore로 제외(개인정보 보호)
2026-06-25 21:16:45 +09:00