diff --git a/docs/HANDOFF.md b/docs/HANDOFF.md index f04eeae..a4717a4 100644 --- a/docs/HANDOFF.md +++ b/docs/HANDOFF.md @@ -11,7 +11,7 @@ - 공개 웹: `https://vignette.chanpaca.net` - 공개 API: `https://api-vignette.chanpaca.net` - 최신 앱 배포 소스: commit `12bdc594970be8fbd8727800c720d14d7d5b4e25` (`master`, origin push 완료). 사용자 제공 1536×1024 세션 시안 기반의 326px 컨텍스트 레일, 중앙 인물 무대·자막, 357px 라이브 코칭 레일, 116px 제어바와 투명 WebP 식물 장식을 포함한다. -- 최신 Cloudflare Pages production deploy: 2026-07-31 guarded manual deploy `https://ed0cddb4.vignette-b1q.pages.dev`, branch `main`, custom domain entry `assets/index-CzevzoM7.js`. 세션 청크 `Session-BWMFTqgE.js`·`Session-D7DZVnh0.css`와 `session-botanical/leaf-1.webp`가 커스텀 도메인에서 올바른 MIME으로 200을 반환한다. 공개 로그인 실렌더, Google 버튼 2개 enabled, boot diagnostic 0, 브라우저 warning/error 0을 확인했다. +- 최신 Cloudflare Pages production deploy: 2026-07-31 final HEAD-linked deploy `https://f9b06388.vignette-b1q.pages.dev`(deploy metadata commit `32c0b97d`), branch `main`, custom domain entry `assets/index-CzevzoM7.js`. 세션 청크 `Session-BWMFTqgE.js`·`Session-D7DZVnh0.css`와 `session-botanical/leaf-1.webp`가 커스텀 도메인에서 올바른 MIME으로 200을 반환한다. 공개 로그인 실렌더, Google 버튼 2개 enabled, boot diagnostic 0, 브라우저 warning/error 0을 확인했다. - 최신 학습 세션 런타임: 실시간 내담자 응답은 `VIGNETTE_LIVE_CLIENT_PROVIDER=claude_cli` 전용 lane으로 evaluator와 분리하고, 응답 저장·SSE done 뒤 fast-loop 평가는 백그라운드 처리한다. 입력창은 생성·TTS 중에도 초안 작성과 보존이 가능하다. 로컬 `-UseHiggsVoice`는 설치된 `higgs-audio-v3-tts-4b`를 P1에 사용하지만 연구/비상업 라이선스 때문에 dev 전용이며, 공개 `/voice/health`는 `openai / gpt-4o-mini-tts`로 유지한다. - 관리자 AI 엔진 capability: 공급자 6종을 드롭다운으로 선택하고 설치·인증 상태에 따라 live 모델과 추론 강도만 선택한다. 공개 인증 E2E에서 Codex 7개 모델의 기본 `gpt-5.6-terra / medium`, Agy 11개 모델의 기본 `gemini-3.6-flash-high / high`를 확인했으며 설정은 저장하지 않았다. Anthropic API는 키가 없어 fail-closed unavailable이다. - Google OAuth 허용 이메일 도메인: `hs.ac.kr`, `twentyoz.kr` diff --git a/docs/dev_dashboard.html b/docs/dev_dashboard.html index 13334e1..cc31631 100644 --- a/docs/dev_dashboard.html +++ b/docs/dev_dashboard.html @@ -607,7 +607,7 @@

154차 적용(2026-07-30): 153차 AI 엔진 capability 변경을 공개 런타임까지 반영했다. API PID 11788과 gateway PID 44488를 신규 코드로 교체하고 Cloudflare Pages production 2f52f8e3-f992-441f-ada4-f6396cbb1a2b를 게시했다. 최종 custom domain은 index-B54GMBSf.jsAdminAi-ClAJvCvx.jsapplication/javascript 200으로 제공한다. 최초 production a3819e6e 검증에서 5세대 전 엔트리 index-Cwtfyfq5.js의 보존 누락을 발견했기 때문에, scripts/preserve-pages-assets.ps1가 최근 production preview의 HTML·JS·CSS 의존 그래프를 재귀적으로 수집하고 MIME을 검사해 현재 dist에 병합하도록 고친 뒤 최종 배포로 교체했다. custom domain에서 현재와 이전 4세대 엔트리가 모두 JavaScript 200이며, lazy 청크 첫 요청 강제 실패도 문서 재로드 1회 뒤 1/1 복구됐다. 실제 Google 슈퍼 관리자 사용자 행에 연결한 15분 임시 세션으로 공개 /admin/ai에서 공급자 6개, Codex 7개 / gpt-5.6-terra / medium, Agy 11개 / gemini-3.6-flash-high / high를 확인했고 저장 없이 세션을 즉시 삭제했다. 공개 health는 status=ok, environment=prod, db=true, engine=true이며 auth config 200, 비인증 personas·admin capability 401, watchdog LastTaskResult=0다. 153차의 공개 배포 전 상태 표기는 이 증거로 대체한다.

155차 적용(2026-07-31): 세션 텍스트 입력이 AI 생성·TTS 종료까지 잠기고 답변 표시 뒤에도 evaluator가 끝날 때까지 다음 전송이 약 24초 묶이던 학습 UX를 실제 브라우저와 gateway/API 계량으로 분해했다. textarea는 회기 종료·일시정지에서만 잠기며 생성·음성 준비·재생 중에는 다음 질문 초안을 계속 작성·보존하고, 내담자 응답 저장 직후에는 음성 재생과 무관하게 다음 전송을 허용한다. 관리자 DB의 Agy/Gemini 설정은 evaluator/review에 유지하되 실시간 client 역할은 VIGNETTE_LIVE_CLIENT_PROVIDER=claude_cli 전용 lane으로 분리해 회기별 claude -p 프로세스를 재사용한다. stream learner/client turn과 결정론 상태를 먼저 durable 저장하고 SSE done을 보낸 뒤 fast-loop 평가는 백그라운드에서 같은 learner turn normalized row에 붙이며 평가 기반 코칭 충전도 한 번만 적용한다. Agy fallback도 stream-json delta를 실제 SSE token으로 전달한다. 로컬 음성은 -UseHiggsVoice로 설치된 higgs-audio-v3-tts-4b를 loopback 상주시켜 P1 실제 답변을 24kHz WAV로 합성하며 저장소의 무참조 synthetic seed만 reference로 허용하고 non-dev는 fail-closed한다. 실증: 변경 전 full API 완료 24.17/24.57초, 변경 후 실제 UI 첫 응답·전송 해제 9.58초와 상주 연속 턴 6.96초, 생성 중 초안 enabled/보존, TTS 중 보내기 enabled. Higgs full API 362,924 bytes/7.56초 WAV, provider/model 헤더 확인. backend 432/432, gateway 44/44, typecheck·API types·build, session stream 1/1, voice skip/draft 1/1 통과. 배포·공개 실증: commit c7883434를 origin/master에 push하고 Cloudflare Pages production 505155c4-01f3-4eac-ad59-c2d323a0bb51로 게시했다. custom/preview 모두 index-BU5JjRnR.js를 JavaScript 200으로 서빙하고 최근 5개 배포의 의존 자산을 보존한다. 공개 API는 prod·db=true·engine=true, auth config Google configured/dev login disabled, 비인증 personas·voice speech 401, Google 시작 302다. 실제 공개 로그인 1280×720 렌더에서 버튼 2개 enabled, 브라우저 warning/error 0을 확인했다. 공개 음성은 라이선스 경계상 openai / gpt-4o-mini-tts를 유지한다.

156차 적용(2026-07-31): 활성 상담 세션이 전역 테마와 무관하게 .sx-page--active에서 다크 팔레트를 다시 정의해, 라이트 설정에서도 화면은 다크인데 공통 Surface inset인 AI 코치만 밝게 뜨는 혼합 테마 결함을 수정했다. 세션 전용 --bg-surface/--text-*/--accent 덮어쓰기를 제거하고 전역 data-theme·tokens.css·공통 Surface를 그대로 사용해 라이트는 종이·글래스, 다크는 차콜·세이지로 함께 전환한다. 우측 레일은 AI 코치 → 현재 신호 → 음성·AI 응답 상태 순으로 재배치하고 의미 없는 equalizer 막대와 중복 화면 모드 행을 제거했다. 700px 이하 높이에서는 발화 예시·보조 흐름을 먼저 접고 코치 판단과 근거/이력 액션을 보존하며, 기존 사각지대였던 881~1180px에서도 코칭 모드에 AI 코치 카드만 전폭으로 남긴다. 검증: npm run check:design-ssot, typecheck, build 통과, 세션 전수 desktop/mobile 30 passed / 2 skipped, session-layout 8/8, 7폭 layout-visual-gate 15/15, 라이트 1366×640 코치·1024×640 압축 코치 및 다크 1440/1024/390 캡처 직접 확인. 로컬 작업트리 기준이며 배포 전이다.

-

157차 적용(2026-07-31): 사용자 제공 1536×1024 활성 세션 시안을 실제 세션 화면에 반영했다. 데스크톱을 좌측 단일 컨텍스트 레일 326px / 중앙 인물 무대+자막 / 우측 단일 라이브 코칭 레일 357px / 하단 116px 제어바로 재구성하고, 상태 신호 모드에서도 AI 코치의 개입 시점·남은 기회·코칭 포인트를 미리 이해할 수 있게 했다. 제공된 수채화 잎 5장은 BEN2로 투명 분리한 뒤 600×800 이하 알파 WebP로 최적화해 합계 약 158KB로 줄였고, 좌우 캔버스와 아바타 뒤에 장식 계층으로 연결했다. 새 E2E는 1408px 상단/본문, 1468px 제어바, 326/357px 레일, WebP 응답과 computed background 연결을 1536×1024에서 고정한다. 1366×768 이하에서는 스테이지를 압축해 자막이 주 작업영역을 잃지 않게 했다. 검증: npm run check:design-ssot, typecheck, build 통과, 세션 전수 desktop/mobile 32 passed / 2 skipped, session-layout 8/8, 7폭 layout-visual-gate 15/15, 1536×1024 라이트 캡처 직접 확인. commit 12bdc594를 Cloudflare Pages production ed0cddb4로 배포했고, 커스텀 도메인의 index-CzevzoM7.js, Session-BWMFTqgE.js, Session-D7DZVnh0.css, leaf-1.webp가 각각 올바른 JavaScript/CSS/WebP MIME으로 200을 반환했다. 공개 로그인 실렌더·브라우저 warning/error 0, API prod/db/engine=true, 비로그인 personas 401, Google OAuth 시작 302, watchdog 5항목 healthy도 확인했다.

+

157차 적용(2026-07-31): 사용자 제공 1536×1024 활성 세션 시안을 실제 세션 화면에 반영했다. 데스크톱을 좌측 단일 컨텍스트 레일 326px / 중앙 인물 무대+자막 / 우측 단일 라이브 코칭 레일 357px / 하단 116px 제어바로 재구성하고, 상태 신호 모드에서도 AI 코치의 개입 시점·남은 기회·코칭 포인트를 미리 이해할 수 있게 했다. 제공된 수채화 잎 5장은 BEN2로 투명 분리한 뒤 600×800 이하 알파 WebP로 최적화해 합계 약 158KB로 줄였고, 좌우 캔버스와 아바타 뒤에 장식 계층으로 연결했다. 새 E2E는 1408px 상단/본문, 1468px 제어바, 326/357px 레일, WebP 응답과 computed background 연결을 1536×1024에서 고정한다. 1366×768 이하에서는 스테이지를 압축해 자막이 주 작업영역을 잃지 않게 했다. 검증: npm run check:design-ssot, typecheck, build 통과, 세션 전수 desktop/mobile 32 passed / 2 skipped, session-layout 8/8, 7폭 layout-visual-gate 15/15, 1536×1024 라이트 캡처 직접 확인. 앱 commit 12bdc594를 Cloudflare Pages production에 배포하고 배포 증거 commit 32c0b97d를 연동한 최종 production f9b06388까지 완료했다. 커스텀 도메인의 index-CzevzoM7.js, Session-BWMFTqgE.js, Session-D7DZVnh0.css, leaf-1.webp가 각각 올바른 JavaScript/CSS/WebP MIME으로 200을 반환했다. 공개 로그인 실렌더·브라우저 warning/error 0, API prod/db/engine=true, 비로그인 personas 401, Google OAuth 시작 302, watchdog 5항목 healthy도 확인했다.

래스터만 사용이미지 생성 도구 산출물은 PNG 기반 시안이다. SVG·벡터·와이어프레임·로고 시트로 해석하지 않는다.
기능 우선메인 라우트의 실제 액션과 정보 구조를 먼저 반영한다. 장식은 기능을 가리지 않는 수준에서만 쓴다.