운영 복구 상태를 문서화

This commit is contained in:
Yun Chan 2026-08-28 18:27:02 +09:00
parent 99779a6ab2
commit 391fb9f4d0
4 changed files with 48 additions and 36 deletions

View file

@ -28,11 +28,13 @@
| 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`로 실패 |
| REQ-008 | **DONE · 내부 기술** | 기본 엔진+live-client readiness, 구조화 done 없는 SSE EOF는 `client_stream_incomplete`로 실패. 복구 launcher는 전역 mutex·단계별 상한·프로세스 트리 종료·전체 다운 즉시복구로 보강 |
운영 반영 기준은 clean commit `2a396361…89c`, Pages production
`1f1ddf18-9d5c-4d83-95a7-8cd71245e646`이다. API/engine/web/STT/TTS/cloudflared와 두 예약 작업은
같은 릴리스 루트에 고정했고 watchdog 8개 check, 공개 Google callback, P20 회기 폐루프를 통과했다.
현재 공개 API/engine/web/STT/TTS/cloudflared와 Pages production
`1f1ddf18-9d5c-4d83-95a7-8cd71245e646`의 서비스 소스는 clean `2a396361…89c`다. 재부팅 복구용
로그온·watchdog 작업은 detached-clean `99779a6a…fbc8`·tree `57da86aa…6b91`로 별도 승격했고,
60분 상한·`IgnoreNew`·복구 mutex·전체 다운 즉시복구를 고정한 뒤 두 작업 수동 실행 결과 0을 확인했다.
새 학습자 라포 헤더 번들은 준비됐지만 Pages 승격은 명시 승인 전이라 아직 공개되지 않았다.
---
@ -67,8 +69,9 @@
- [ ] **자동 DB 백업·정기 복원 리허설**`scripts/backup-vignette-db.ps1`의 custom dump→TOC 검증→
SHA manifest 원자 게시와 현재 public-target 일회용 복원(129 tables/9,646 rows/orphan 0)을 통과했다.
남은 범위는 예약 실행, 실패 알림, NAS/off-host 암호화 복제, 주기적 restore drill과 보존 정책이다.
- [ ] **공개 Google OAuth 실제 `/turn` proof** — 로그인 계정으로 `storageState` 캡처 → `E2E_PUBLIC_AUTH=1` +
`chromium-public-auth` 1회 통과. 실행 명령은 대시보드 "다음 실행 명령"/`HANDOFF.md`. (소유자 보류 중)
- [x] **공개 Google OAuth 실제 `/turn` proof** — 2026-08-28 기존 Google 세션으로 callback→관리자 진입을
확인하고 P20 회기 생성→자기점검 잠금→실제 학습자 발화/AI 내담자 응답→종료→리뷰·평가→다음 회기 버튼
재노출까지 공개 브라우저 폐루프를 통과했다. 별도의 신규 Gmail 선택은 새 Vignette 계정 생성 확인 항목이다.
- [x] **공개 Web 모바일 보정 Pages 배포** — 2026-08-18 소유자 승인 후 detached-clean `cf899b7f…7c96`
완료했다(00f851a6 후보의 모바일 보정을 포함한 상위 커밋). API type/typecheck, 2회 결정적 build(599파일
sha256 전일치), 7개 origin 자산 143개 보존(최종 742파일) 후 Cloudflare Pages production `4edc02d3` 배포 —
@ -127,10 +130,12 @@
- [ ] **stable-source task 재등록 + 재부팅 후 watchdog smoke** — 2026-08-27 stale AF_UNIX socket으로
Docker Desktop 백엔드와 공개 DB가 중단된 사건을 기존 container·volume 삭제/교체 없이 복구했다. 부모 IPC 폴더는
timestamp `.stale` 이름으로 보존했고, 기존 `vignette-dev-db``vignette_recovered_prod_20260807`만 재기동했다.
detached-clean `bf5f7352…0092`·tree `c39f917b…c88`에 watchdog·로그온 boot task를 재등록해
action root/commit/tree/script SHA pin, 5분 watchdog `LastTaskResult=0`·failcount `0`, local/public health
`status=ok·db=true·engine=true` 3/3을 확인했다. 남은 것은 실제 Windows 재부팅 후 엔진/API/터널 자동 복구와
authenticated public `/turn` 실측이다. DNS 개통 후 `api-vnet.18ka.net`
2026-08-28에는 detached-clean `99779a6a…fbc8`·tree `57da86aa…6b91`로 watchdog·로그온 boot task를
다시 등록했다. 두 작업 모두 `ExecutionTimeLimit=PT1H`·`MultipleInstances=IgnoreNew`, scheduler 재시도 0이며,
launcher 전역 mutex·bounded API/voice/web build·부모/자식 process-tree 종료와 cloudflared 또는 전체 동적
서비스 hard-down 즉시복구를 회귀 50건으로 고정했다. action root/commit/tree/script SHA pin, watchdog
18:10:57 KST·boot 18:14:27 KST 수동 실행 `LastTaskResult=0`, failcount 0을 확인했다. 로그인 뒤 수동 복구는
증명됐지만 실제 Windows 재부팅 후 엔진/API/터널 자동 복구는 아직 실측하지 않았다. DNS 개통 후 `api-vnet.18ka.net`
`-AdditionalPublicHealthUrls`로 명시 추가한다.
- [x] **노트북 로컬 음성 스택 STT 구현** — 2026-08-08 소유자 결정으로 음성 양쪽을 노트북 상주
로컬 모델로 쓴다(STT faster-whisper, TTS는 아래 항목대로 MeloTTS). 이전에는 코드에 로컬 STT 경로가 아예 없었고