From dcb76a23733f0da4b176a009d53f9210034ea372 Mon Sep 17 00:00:00 2001 From: Yun Chan Date: Fri, 28 Aug 2026 17:17:34 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9A=B4=EC=98=81=20=EB=B0=B0=ED=8F=AC=20?= =?UTF-8?q?=EA=B2=80=EC=A6=9D=20=EA=B7=BC=EA=B1=B0=EB=A5=BC=20=EB=B0=98?= =?UTF-8?q?=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/TODO.md | 8 ++++++-- docs/dev_dashboard.html | 14 +++++++------- docs/guides/testing.md | 3 +++ docs/ops/backlog-2026-06-26.md | 8 +++++--- 4 files changed, 21 insertions(+), 12 deletions(-) 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 manage-usersadmin.spec.ts --grep manage real server-known usersroute-mock desktop/mobile 2 passed에 더해 2026-08-27 실제 DB/browser 1 passed. pending 계정의 `/personas` 403·`/learn→/pending`, 승인 뒤 동일 세션 200, AI 피드백 OFF PATCH·GET 영속 재조회, 계정 비활성화·active session 0과 격리 포트 종료를 확인했다. Full E2E baselinePLAYWRIGHT_PORT=5174 npm run e2e2026-06-27/28 기준선 113 passed Public auth discoveryE2E_PUBLIC_AUTH=1 npx playwright test --list --project=chromium-public-auth2 tests listed - Public pre-auth readinesspublic-auth-turn.spec.ts --grep production-safeproduction-safe smoke 1 passed. 인증된 public /turn proof는 아직 미완료이며 owner storageState가 필요하다. - Public OAuth start/auth/config + /auth/login?provider=google2026-06-30 복구 후 auth config 200, Google configured true, redirect URI https://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 pre-auth readinesspublic-auth-turn.spec.ts --grep production-safe / authenticated in-app browserproduction-safe smoke 1 passed. 2026-08-28 실제 공개 Google 세션으로 P20 회기 03dddadd-adf3-4922-acbf-31002470da52를 생성하고 자기점검 원장 잠금, 학습자 발화, 실제 AI 내담자 응답, 종료, 2발화 리뷰, AI 평가 완료, P20 1회 기록 영속과 다음 회기 버튼 재노출까지 확인했다. + Public OAuth start/auth/config + /auth/login?provider=google2026-08-28 public auth config 200, Google configured true, allowed_email_domains=[], redirect URI https://api-vignette.chanpaca.net/auth/callback, dev-login disabled. 로그인 DOM은 모든 Google 계정을 명시하고 실제 Google 선택기에 yunchan@twentyoz.kryunchan8804@gmail.com이 함께 노출됐다. 기존 Google 계정 선택→callback→/admin 성공을 확인했다. 신규 Gmail 선택은 Vignette 계정 생성이므로 사용자 행동시점 확인 뒤 별도 실증한다. Persona auth boundaryGET /personas2026-06-30 복구 후 public unauth /personas는 401 not authenticated를 반환한다. Public loginauth.spec.ts --grep public login1 passed - Public runtime scripts · source pinstart/watch/boot-public-runtime*.ps1 · install-public-runtime-task.ps1 · register-boot-task.ps12026-08-27 detached-clean bf5f7352…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로 남는다. - Public API healthhttp://127.0.0.1:8001/health / https://api-vignette.chanpaca.net/health2026-08-27 복구 후 local은 status=ok·db=true·engine=true, public은 같은 응답을 연속 3/3 반환했다. 실제 공개 로그인 DOM·스크린샷도 정상이며 console error/warning은 0이다. DB container는 기존 recovered named volume을 그대로 유지한다. - Public runtime current snapshothealth + provenance + Scheduled Tasksclean source bf5f7352…0092·tree c39f917b…c88에서 API-only 복구했고 web·engine·cloudflared는 살아 있던 프로세스를 유지했다. 기존 G7 fresh receipt와 무마이크 rehearsal은 역사 증거로 보존하며, 이번 routine 복구를 새 배포·G7 승격으로 오표기하지 않는다. - Public/local/Tailnet login recoveryhttps://vignette.chanpaca.net/login / https://api-vignette.chanpaca.net/health / https://alpaca-home.taile93291.ts.net/login2026-06-30 public web login HEAD 200, public API health 200, auth config 200, Google login start 302. Earlier Tailnet checks remain recorded separately; vnet DNS A records are still 0. + Public runtime scripts · source pinstart/watch/boot-public-runtime*.ps1 · install-public-runtime-task.ps1 · register-boot-task.ps12026-08-28 detached-clean 2a396361…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다. + Public API healthhttp://127.0.0.1:8001/health / https://api-vignette.chanpaca.net/health2026-08-28 17:11:47 KST local/public 모두 status=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을 적용했다. + Public runtime current snapshothealth + provenance + Scheduled Tasks + Pagesclean source 2a396361…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 일치로 검증했다. + Public/local/Tailnet login recoveryhttps://vignette.chanpaca.net/login / https://api-vignette.chanpaca.net/health / https://alpaca-home.taile93291.ts.net/login2026-08-28 public web 200, public API health 200, auth config 200, Google login start와 callback 성공, P20 실제 회기·응답·종료·평가 폐루프 성공. Earlier Tailnet checks remain recorded separately; vnet DNS A records are still 0. Local 5175 loginPLAYWRIGHT_BASE_URL=http://127.0.0.1:5175 auth.spec.tsdesktop/mobile passed Learner/readiness E2Elearner.spec.ts + readiness.spec.ts desktop/mobile14 passed Learner screenshotslearn-empty-desktop.png / learn-empty-mobile-compact.pngdocument overflow 0, empty history visible @@ -1243,7 +1243,7 @@ $env:E2E_PUBLIC_STORAGE_STATE=".\node_modules\.tmp\public-auth.json" powershell -NoProfile -ExecutionPolicy Bypass -File scripts\start-public-runtime.ps1
닫은 항목(live 증거): ① engine config 운영값(claude_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.
-
환경 제약으로 이 세션에서 못 닫는 항목(정직 표기): 공개 Google OAuth 실제 /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 표기하지 않는다.
+
환경·외부 승인 때문에 아직 못 닫는 항목(정직 표기): 신규 Gmail 선택→Vignette 계정 생성은 사용자 행동시점 확인 필요 · C-001 외부 임상 검토자 이름·소속 기관·검토일·서면 결정 · 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 표기하지 않는다.