실계정 headful 폐루프와 백업 자동화 증거를 확정
This commit is contained in:
parent
b98eecbb36
commit
a479db7a5a
4 changed files with 28 additions and 4 deletions
|
|
@ -302,7 +302,7 @@
|
|||
<span class="eyebrow">project pulse</span>
|
||||
<h1>지금 위치: <em>NAS <code>vignette-prod</code> 정식 배포 완료(SHA <code>dce85620</code>)</em> — public API/웹 모두 새 빌드 서빙, 데이터 보존 확인. 실계정 로그인 폐루프와 C-001·REQ-008 사람 게이트가 남았다.</h1>
|
||||
<p class="pulse-state"><b>2026-08-31 배포 파이프라인 재정립(소유자 지시):</b> git 관리·배포는 <code>git.chanpaca.net</code>(Forgejo 11.0.16) 중심으로 이관 완료 — <code>yunchan/vignette</code> 레포 생성, <code>master</code>=<code>be08c0b5</code> push, 소스 SSOT 지정. <code>github.com</code>(origin)은 <b>private 백업/미러</b>로 유지(제거 아님). 배포 대상은 <b>NAS Production</b>(<code>docker-compose.nas.yml</code>, <code>vignette-prod</code>)이며 이 PC는 단순 개발용. Cloudflare는 <b>서비스 공개 서빙용만 유지</b>, cloudflare tunnel은 제거 대상. 관리 도구 <code>scripts/vignette-pipeline.py --check</code>로 기준선 무결성 점검(ALL OK): 문서 <a href="./ops/deployment-pipeline.md">deployment-pipeline.md</a>.</p>
|
||||
<p class="pulse-state"><b>현재(2026-09-01 A 경로 실배포):</b> Forgejo master <code>dce85620</code>를 NAS에서 직접 clone·빌드해 <code>vignette-prod</code> api/engine/web을 교체했고, Cloudflare Pages production도 새 빌드(<code>index-BFKGXJQi.js</code>, 이전 세대 자산 보존)로 배포했다. 사전 dump <code>cab6826b…</code>(11.0MB·TOC 1783)·env 백업·구 이미지 보존으로 롤백 경로를 고정했다. 중복 활성 회기 14쌍 30행은 최신 유지 정책으로 종료(영수증 보존·삭제 0)하고 마이그레이션 20/21/22를 온라인 적용했다. 이 과정에서 mig22의 <code>name[]=text[]</code> 캐스트 결함과 master의 게이트웨이 openai provider 누락 회귀를 발견해 즉시 교정했다(테스트 71 passed). 배포 후 public health <code>ok·db/engine true</code>, OpenAPI 200, <code>/auth/me</code> 401, dev-login 404, 데이터 집계 전후 동일(app_user 1380/sessions 618/turns 1743). 증거: <a href="./ops/evidence/nas-prod-deploy-2026-09-01.json">nas-prod-deploy-2026-09-01.json</a>. <b>다음:</b> headful 실계정 로그인→회기 폐루프(소유자 창내 로그인), C-001 외부 임상 검수, NAS 재부팅 자동복구 smoke.</p>
|
||||
<p class="pulse-state"><b>현재(2026-09-01 A 경로 실배포):</b> Forgejo master <code>dce85620</code>를 NAS에서 직접 clone·빌드해 <code>vignette-prod</code> api/engine/web을 교체했고, Cloudflare Pages production도 새 빌드(<code>index-BFKGXJQi.js</code>, 이전 세대 자산 보존)로 배포했다. 사전 dump <code>cab6826b…</code>(11.0MB·TOC 1783)·env 백업·구 이미지 보존으로 롤백 경로를 고정했다. 중복 활성 회기 14쌍 30행은 최신 유지 정책으로 종료(영수증 보존·삭제 0)하고 마이그레이션 20/21/22를 온라인 적용했다. 이 과정에서 mig22의 <code>name[]=text[]</code> 캐스트 결함과 master의 게이트웨이 openai provider 누락 회귀를 발견해 즉시 교정했다(테스트 71 passed). 배포 후 public health <code>ok·db/engine true</code>, OpenAPI 200, <code>/auth/me</code> 401, dev-login 404, 데이터 집계 전후 동일(app_user 1380/sessions 618/turns 1743). 증거: <a href="./ops/evidence/nas-prod-deploy-2026-09-01.json">nas-prod-deploy-2026-09-01.json</a>. <b>headful 실계정 폐루프도 완료:</b> NAS env의 OAuth secret 오류(<code>invalid_client</code>)를 발견·교정한 뒤 소유자 실계정 로그인→기존 회기 20건 표시(데이터 보존)→새 사례 회기 생성(mig22 실증)→실턴 SSE·AI 응답→종료→리뷰 생성까지 GREEN(sessions 619·turns 1745·case_profile 566). 일일 검증형 DB 백업 사이드카도 가동(첫 덤프 11.2MB OK). <b>다음:</b> C-001 외부 임상 검수, NAS 재부팅 자동복구 smoke, 백업 실패 알림·off-host 복제.</p>
|
||||
<details class="pulse-details">
|
||||
<summary>운영 복구·watchdog·배포 상세 보기</summary>
|
||||
<p class="pulse-state"><b>2026-08-31 사례 연속성 후보:</b> source candidate에는 같은 NPC의 <code>완전히 새로 시작</code>(빈 새 case)과 <code>이어서 진행</code>(선택 case의 압축 기억)을 분리했고, 사례별 누적 회기·상담자 가시 턴·누적 시간을 시작 전 표시하며 기억은 lazy foldout으로 숨겼다. migration 22는 legacy case unique만 해제하고 migration 21의 단일 활성 회기 제약을 유지한다. 이는 source/test 후보 상태이며 NAS DB 적용·배포·실제 production 브라우저 GREEN은 아직 하지 않았다.</p>
|
||||
|
|
|
|||
|
|
@ -227,10 +227,11 @@
|
|||
- [x] 중복 활성 회기 14쌍·30행을 최신 유지 정책으로 종료(영수증 `receipts/stale-active-cleanup-20260901.csv`, 삭제 0) 후 마이그레이션 20/21/22 온라인 적용. mig22의 `name[]=text[]` 캐스트 결함 발견→`5a74302e` 교정. master에 게이트웨이 openai provider가 누락된 회귀 발견→구 운영 이미지에서 이식(`dce85620`, 테스트 71 passed)
|
||||
- [x] readiness: public health `ok·db/engine true·openai OK`, OpenAPI 200, `/auth/me` 401, dev-login 404, 컨테이너 healthy, 데이터 보존(app_user 1380/sessions 618/turns 1743/case_profile 565 전후 동일)
|
||||
|
||||
### A-3. 로그인·작동 E2E 검증 (실브라우저) — 진행 중
|
||||
### A-3. 로그인·작동 E2E 검증 (실브라우저) — **2026-09-01 완료 (전건 GREEN)**
|
||||
- [x] public 로그인 화면 렌더(단일 Google CTA·콘솔 오류는 예상된 401 1건) + OAuth redirect_uri `https://api-vignette.chanpaca.net/auth/callback`·PKCE S256 검증 — headful 브라우저
|
||||
- [ ] 실제 Google 계정 로그인→callback→회기·턴 생성(production DB mutation) — **소유자 창내 로그인 대기**(자격증명은 소유자 직접 입력)
|
||||
- [x] 배포 WEB: Pages production `9224a64b`, 새 entry `index-BFKGXJQi.js` 200·정상 MIME, 직전 entry `index-Bm30Ozeb.js` 200 보존(이전 세대 자산 175개 보존)
|
||||
- [x] 실제 Google 계정 로그인→callback→회기·턴 생성 완료 — 첫 시도에서 NAS env의 OAuth secret 오류(`invalid_client`)를 발견해 동작 실적 secret으로 교정 후 성공. headful 폐루프: 로그인(소유자 직접 입력)→기존 회기 20건 표시(이전 데이터 보존)→활성 회기 가드·시간 만료 fail-closed 확인→stale 회기 정식 종료→**새 사례(fresh case) 회기 생성(mig22 운영 실증)**→pre pulse 잠금→실턴 SSE·AI 내담자 응답→종료→리뷰 생성. DB 실증: sessions 618→619·turns 1743→1745·case_profile 565→566. 증거: `ops/evidence/prod-e2e-review-2026-09-01.png`
|
||||
- [x] 배포 WEB: Pages production `9224a64b`, 새 entry `index-BFKGXJQi.js` 200·정상 MIME, 직전 entry `index-Bm30Ozeb.js` 200 보존(이전 세대 자산 175개 보존). 관리자 콘솔 렌더·서비스 상태 5/5 확인
|
||||
- [x] **DB 백업 예약 실행 운영화(1단계)** — `db-backup` 사이드카(일일 pg_dump→`pg_restore -l` 검증→원자 게시, 14일 보존)를 정식 스택에 추가, 첫 자동 덤프 11,202,927B 성공. owner 비번-볼륨 불일치도 env와 일치화. 실패 알림·off-host 암호화 복제·restore drill 주기는 후속 게이트로 유지
|
||||
|
||||
### 잔여(재부팅 외) — 그대로 유지
|
||||
- [ ] 실배포 완료 전까지는 아래가 열린 게이트 유지: `public API/DB·아바타 정식 승격`, `G8 실DB/public 사람 게이트`,
|
||||
|
|
|
|||
|
|
@ -66,5 +66,28 @@
|
|||
"login_screen": "렌더 정상 (단일 Google CTA)",
|
||||
"console_errors": "비로그인 /auth/me 401 1건뿐 (예상 동작)",
|
||||
"oauth_redirect": "accounts.google.com, redirect_uri=https://api-vignette.chanpaca.net/auth/callback, PKCE S256, scope openid email profile"
|
||||
},
|
||||
"oauth_secret_fix": {
|
||||
"symptom": "google_oauth_callback_failed token_exchange_failed 401 invalid_client",
|
||||
"cause": "NAS env.nas의 OAUTH_GOOGLE_CLIENT_SECRET이 잘못된 값(secret sha16 ef2cc311c2f2ce39)",
|
||||
"fix": "동작 실적 있는 PC 런타임 env의 secret(sha16 77becad9b95f2131)으로 교체 후 api 재생성 — 로그인 성공",
|
||||
"backup": "private/env.nas.before-oauth-secret-fix-20260901"
|
||||
},
|
||||
"headful_closed_loop": {
|
||||
"login": "소유자 실제 Google 계정 로그인 (자격증명은 소유자 직접 입력) → auth_session 1건 생성, 관리자 권한 유지",
|
||||
"data_visibility": "기존 회기 20건 목록 표시 (7/13~8/31, 34턴·40턴 회기 포함) — 이전 데이터 보존 확인",
|
||||
"guards": "활성 회기 존재 시 새 사례 시작 차단 문구, 시간 만료 회기 유예 후 서버 발화 거부 (fail-closed)",
|
||||
"fresh_case": "P1 새 사례 시작 → session 9fb604a1-cb41-4138-bfee-b52b8475913e 생성 (migration 22 운영 실증)",
|
||||
"pre_pulse": "목표/과업/유대 3관점 잠금 후 첫 발화 준비",
|
||||
"turn": "학습자 발화 1건 → AI 내담자(P1 서연, openai 엔진) 응답 1건 SSE 수신·저장",
|
||||
"end_review": "회기 종료 → 리뷰 페이지 실제 축어록 2개 기반 생성, 탭 UI(축어록/피드백/워크시트) 정상",
|
||||
"db_delta": "sessions 618→619, turns 1743→1745, case_profile 565→566, 새 회기 ended_at 기록",
|
||||
"admin_console": "현재 서비스 상태·리소스 5/5 렌더, 페이지 오류 0",
|
||||
"screenshot": "prod-e2e-review-2026-09-01.png"
|
||||
},
|
||||
"backup_automation": {
|
||||
"service": "db-backup 사이드카 (postgres 이미지, 일일 pg_dump -Fc → pg_restore -l 검증 → 원자 mv, 보존 14일)",
|
||||
"first_dump": "vignette-20260901-033517.dump 11,202,927 bytes OK",
|
||||
"owner_password_alignment": "볼륨 실비번과 env.nas POSTGRES_PASSWORD 불일치를 ALTER ROLE로 일치화 (socket 경유)"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
BIN
docs/ops/evidence/prod-e2e-review-2026-09-01.png
Normal file
BIN
docs/ops/evidence/prod-e2e-review-2026-09-01.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 MiB |
Loading…
Add table
Add a link
Reference in a new issue