diff --git a/docs/TODO.md b/docs/TODO.md index ee3a776..574848f 100644 --- a/docs/TODO.md +++ b/docs/TODO.md @@ -10,7 +10,7 @@ --- -## 개선관리 워크북 동기화 (2026-08-27) +## 개선관리 워크북 동기화 (2026-08-28) > 이 표는 워크북 ID와 현행 구현을 잇는 얇은 추적표다. 내부 기술 DONE의 focused 증거는 > `guides/testing.md`, 상세 계약은 SSOT `dev_dashboard.html`이 소유한다. C-001은 기술 사전검증과 외부 @@ -25,11 +25,15 @@ | REQ-002 | **DONE · 내부 기술** | admin protocol draft→active→retired, 라이선스 C/D 외부 LLM 금지, evaluator-only RAG·rollback; migration 17 owner-run/readiness-only | | REQ-003 | **DONE · 내부 기술** | 페르소나 주호소가 JSON 키 순서나 surface 상태보다 우선 | | REQ-004 | **DONE · 내부 기술** | learner 현재 설정 AND 세션 snapshot. OFF는 AI 파생 API 403/UI 무요청·혼합 결과 redaction, 사용자 입력·privacy 보존; teacher/admin 유지 | -| REQ-005 | **DONE · 내부 기술** | 새 회기는 승인 페르소나 `persona_id/version` 고정, 시작/상세 계약 노출, durable create 실패 503 | +| REQ-005 | **DONE · 내부 기술·운영 실증** | 새 회기는 승인 페르소나 `persona_id/version` 고정. P20의 `suicide_ideation_stage=0.9 → int(0) → DB 1..5` 장애를 clamp로 제거했고, 공개 P20 회기 생성·실제 AI 응답·종료·평가를 확인 | | REQ-006 | **DONE · 내부 기술** | prompt와 구조화 결과의 상담자/내담자 identity를 `[COUNSELOR]`/`[CLIENT]`로 역할 마스킹 | | REQ-007 | **DONE · 내부 기술** | 회기 종료를 평가보다 먼저 영속화해 옛 평가 실패 뒤에도 새 회기 생성·턴 진행 가능 | | REQ-008 | **DONE · 내부 기술** | 기본 엔진+live-client readiness, 구조화 done 없는 SSE EOF는 `client_stream_incomplete`로 실패 | +운영 반영 기준은 clean commit `2a396361…89c`, Pages production +`1f1ddf18-9d5c-4d83-95a7-8cd71245e646`이다. API/engine/web/STT/TTS/cloudflared와 두 예약 작업은 +같은 릴리스 루트에 고정했고 watchdog 8개 check, 공개 Google callback, P20 회기 폐루프를 통과했다. + --- ## A. 배포·공개 런타임 게이트 [환경] diff --git a/docs/dev_dashboard.html b/docs/dev_dashboard.html index 1da26bd..c028276 100644 --- a/docs/dev_dashboard.html +++ b/docs/dev_dashboard.html @@ -1197,14 +1197,14 @@
admin.spec.ts --grep manage real server-known usersPLAYWRIGHT_PORT=5174 npm run e2eE2E_PUBLIC_AUTH=1 npx playwright test --list --project=chromium-public-authpublic-auth-turn.spec.ts --grep production-safe/turn proof는 아직 미완료이며 owner storageState가 필요하다./auth/config + /auth/login?provider=googlehttps://api-vignette.chanpaca.net/auth/callback, dev-login disabled. Google login start는 GET 302와 __Host-vignette_oauth_state HttpOnly/Secure cookie를 반환한다. Authenticated public /turn proof는 owner storageState가 필요하다.public-auth-turn.spec.ts --grep production-safe / authenticated in-app browser03dddadd-adf3-4922-acbf-31002470da52를 생성하고 자기점검 원장 잠금, 학습자 발화, 실제 AI 내담자 응답, 종료, 2발화 리뷰, AI 평가 완료, P20 1회 기록 영속과 다음 회기 버튼 재노출까지 확인했다./auth/config + /auth/login?provider=googleallowed_email_domains=[], redirect URI https://api-vignette.chanpaca.net/auth/callback, dev-login disabled. 로그인 DOM은 모든 Google 계정을 명시하고 실제 Google 선택기에 yunchan@twentyoz.kr와 yunchan8804@gmail.com이 함께 노출됐다. 기존 Google 계정 선택→callback→/admin 성공을 확인했다. 신규 Gmail 선택은 Vignette 계정 생성이므로 사용자 행동시점 확인 뒤 별도 실증한다.GET /personas/personas는 401 not authenticated를 반환한다.auth.spec.ts --grep public loginstart/watch/boot-public-runtime*.ps1 · install-public-runtime-task.ps1 · register-boot-task.ps1bf5f7352…0092·tree c39f917b…c88와 exact boot 4f368b2d…5197·watchdog 6cd3c869…8242·start c8c837fd…6cf1 SHA에 로그온·watchdog 두 task를 재등록했다. action working directory/root/commit/tree/SHA pin은 PASS, watchdog은 LastTaskResult=0·Ready·failcount 0이다. 부트 task는 현재 healthy surface를 불필요하게 건드리지 않도록 RunNow하지 않았고, 실제 Windows 재부팅 후 자동복구 smoke만 별도 운영 gate로 남는다.http://127.0.0.1:8001/health / https://api-vignette.chanpaca.net/healthstatus=ok·db=true·engine=true, public은 같은 응답을 연속 3/3 반환했다. 실제 공개 로그인 DOM·스크린샷도 정상이며 console error/warning은 0이다. DB container는 기존 recovered named volume을 그대로 유지한다.health + provenance + Scheduled Tasksbf5f7352…0092·tree c39f917b…c88에서 API-only 복구했고 web·engine·cloudflared는 살아 있던 프로세스를 유지했다. 기존 G7 fresh receipt와 무마이크 rehearsal은 역사 증거로 보존하며, 이번 routine 복구를 새 배포·G7 승격으로 오표기하지 않는다.https://vignette.chanpaca.net/login / https://api-vignette.chanpaca.net/health / https://alpaca-home.taile93291.ts.net/loginstart/watch/boot-public-runtime*.ps1 · install-public-runtime-task.ps1 · register-boot-task.ps12a396361…89c·tree c26bf816…fef에 로그온·watchdog 두 task를 재등록했다. action working directory/root/commit/tree/SHA pin은 PASS다. watchdog 수동 실행은 Running→Ready, LastTaskResult=0·failcount 0이며 17:12:10 KST engine/API/voice/web/cloudflared/DB/public API 8개 check가 모두 healthy였다. Boot task는 Ready이며 이전 user-terminated 결과 0x41306은 이력으로 남는다. 실제 Windows 재부팅 자동복구 smoke는 별도 운영 gate다.http://127.0.0.1:8001/health / https://api-vignette.chanpaca.net/healthstatus=ok·environment=prod·db=true·engine=true. voice는 local/public 모두 local_whisper small·melotts-korean·WS queue 4, web은 local/public 200과 동일 asset index-DJPgoeJy.js/index-CXOy3QyV.css를 반환했다. DB는 백업 vignette-dev-db-vignette-20260828-065331Z.dump를 검증하고 recovered named volume을 보존한 채 migration 17을 적용했다.health + provenance + Scheduled Tasks + Pages2a396361…89c·tree c26bf816…fef로 API/engine/web/STT/TTS/cloudflared 전 프로세스를 정렬했다. old bf5f7352 참조 runtime은 0개다. Cloudflare Pages production 1f1ddf18-9d5c-4d83-95a7-8cd71245e646은 source 2a39636이며 current와 이전 5세대 entry/lazy JS·CSS를 custom/preview 양쪽에서 MIME·SHA 일치로 검증했다.https://vignette.chanpaca.net/login / https://api-vignette.chanpaca.net/health / https://alpaca-home.taile93291.ts.net/loginPLAYWRIGHT_BASE_URL=http://127.0.0.1:5175 auth.spec.tslearner.spec.ts + readiness.spec.ts desktop/mobilelearn-empty-desktop.png / learn-empty-mobile-compact.pngclaude_cli / 9099 / gateway-default, durable, db). ② 상주 엔진풀 probe — 단일 session_id 2회 reused stream, TTFT 1667–4199ms, cost 누적 0.068→0.123. ③ 상주 엔진풀 RSS — gateway session 1개에서 claude -p child RSS 363.3MB, gateway RSS 16.2MB. ④ Postgres RLS/audit smoke 5 checks PASS. ⑤ turn cost telemetry — app.turns client_ai 13행에 provider/model/cost_usd 실적재(합 $1.22). ⑥ 레이아웃 시각 게이트 최신 9/9 + 2026-06-28 적대적 재검수 7/7 accept./turn(OAuth start는 확인, 실제 계정 storageState 필요) · 실배포 infra/.env owner-secret fill-in · vnet.18ka.net/api-vnet.18ka.net DNS·OAuth redirect 등록 · 한신대 데이터/SSO 거버넌스 · G7 명시 동의 물리 마이크 3,120초와 공통 3,000초 운영 high-water, 독립 human voice-gain pack, canonical checker exit 0 · claude_cli↔Messages API 폴백 동일성 · 실제 Windows 재부팅 후 watchdog smoke · Phase 3 파일럿 게이트. current source 공개 배포, local voice exact ready, authenticated WSS 무마이크 rehearsal은 완료했다. 운영 원칙상 가짜 증거로 DONE 표기하지 않는다.vnet.18ka.net/api-vnet.18ka.net DNS·OAuth redirect 등록 · 한신대 데이터/SSO 거버넌스 · G7 명시 동의 물리 마이크 3,120초와 공통 3,000초 운영 high-water, 독립 human voice-gain pack, canonical checker exit 0 · claude_cli↔Messages API 폴백 동일성 · 실제 Windows 재부팅 후 watchdog smoke · Phase 3 파일럿 게이트. current source 공개 배포, generic Google callback, P20 실제 턴·종료·평가, local/public voice exact ready, authenticated WSS 무마이크 rehearsal은 완료했다. 운영 원칙상 가짜 증거로 DONE 표기하지 않는다.람다가 단독으로 정하면 월권인 항목이었다. 2026-06-30 owner 결정으로 전건 확정됐고, 각 결정의 구현·실측은 후속 build/GATE로 남는다.