Jev 운영 배포 검증과 남은 확인 항목 기록
This commit is contained in:
parent
969d9e2c3c
commit
20dc30c8aa
7 changed files with 291 additions and 15 deletions
|
|
@ -24,7 +24,8 @@
|
|||
| G8-EXTERNAL | G8 실DB/public 사람 게이트를 실행한다. | 승인·보류·반려 사유와 append-only effect를 실제 DB·공개 경로에서 증명. local fixture는 대체 불가. |
|
||||
| G7-EXTERNAL | 동의 기반 외부 음성 종료 게이트를 준비한다. | 장치 선택·명시 동의 후 3,120초 양방향 soak, 3,000초 공통 high-water, 독립 human voice-gain pack, canonical checker exit 0. |
|
||||
| ANTHROPIC-001 | `claude_cli`와 Anthropic API live 동일성을 비교한다. | 기관 키를 게이트웨이 호스트에 승인 주입한 뒤 응답·계량·오류 표면화 비교. 키 주입 전에는 실행하지 않는다. |
|
||||
| JEV-001 | 커밋 시 고정 artifact 갱신 절차를 실행하고, 충분한 한국어 독립 평가와 전체 지연 반복 비교를 마친다. | 구현은 수용했지만 품질 승격은 보류하며, 완료 조건은 위 게이트를 닫고 운영 배포 여부를 별도로 판단하는 것이다. 최신 probe·수용/반려 근거는 [Jev 결정문](./decisions/jev-client-affect.md)을 따른다. |
|
||||
| JEV-001 | 충분한 한국어 독립 평가와 전체 지연 반복 비교를 마친다. | 운영 API 배포와 합성 3턴 runtime은 수용했지만 품질 승격은 보류한다. 인증 브라우저 회기·DB 감정 영속화 검증과 위 품질 게이트를 닫은 뒤 전체 사용자 흐름 완료 여부를 판단하며, 최신 probe·수용/반려 근거는 [Jev 결정문](./decisions/jev-client-affect.md)을 따른다. |
|
||||
| G6-PRODUCER-CONFLICT | 기존 submission id와 content hash를 읽기 전용으로 대조한다. | `SupervisionResearchConflictError`의 동일 id 재실행 idempotency 충돌을 해소하고 해당 테스트와 실제 cycle 성공을 확인한다. Jev·세션 경로와 분리된 기존 운영 충돌이며, 이번 배포 회귀로 단정하지 않는다. |
|
||||
| VNET-001 | `vnet.18ka.net` 공개 전환의 외부 설정을 마친다. | DNS, Cloudflare zone 권한, Google redirect URI가 모두 준비된 뒤 live 검증. |
|
||||
| PIPELINE-001 | Forgejo 기준 NAS 자동배포 hook을 구성한다. | 수동 git-container clone·SHA 검증·NAS build/compose 절차를 보존한 자동화와 rollback/approval 경계를 검증한다. |
|
||||
| INGRESS-001 | Cloudflare tunnel 제거 지시의 대체 ingress gate를 닫는다. | NAS ingress 대체 경로의 보안·가용성·OAuth 경계를 검증한 뒤에만 tunnel retirement를 승인한다. |
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Jev 기반 가상 내담자 감정 상태
|
||||
|
||||
결정일: 2026-09-22. 상태: 감정 경로 구현과 OpenRouter 실제 판단 검증 수용. 운영 적용과 한국어 품질 승격은 미완료.
|
||||
결정일: 2026-09-22. 상태: 감정 경로 구현, OpenRouter 실제 판단 검증, 신규 artifact 보존 갱신·전체 회귀, 운영 API 배포와 합성 3턴 runtime을 수용했다. 한국어 품질 승격과 인증 브라우저 운영 회기 검증은 미완료다.
|
||||
|
||||
## 문제와 목표
|
||||
|
||||
|
|
@ -48,9 +48,9 @@
|
|||
|
||||
실제 대화 연결은 `scripts/probe-jev-dialogue.py --output scratch/jev/dialogue-live.json --turns 2`로 수집했다. 기존 경로와 Jev 경로 각각 2턴이 완료되고 합성 세션이 정리됐다. 기존 경로 첫 토큰 지연은 5972/2684ms, Jev 경로는 6873/3368ms였다. 기존 출력 검증 버퍼 때문에 첫 토큰 시각은 전체 완료와 거의 같다. 순서를 고정한 소수 사례이므로 성능 비교 결론이나 정확도 주장은 하지 않으며, 이번 관측에서 Jev가 전체 응답을 빠르게 만들지는 않았다.
|
||||
|
||||
전체 회귀는 API 1165 passed·1 failed·1 skipped, gateway 82 passed, API 타입 동기화 통과다. 실패 항목 `test_runtime_observation_artifact_matches_current_exact_case_execution`은 이번 미커밋 orchestrator 변경과 과거 고정 증거의 지문 불일치다. 기존 자료나 검증 조건을 완화하지 않았다. 현재 작업트리의 위기 기술 검증은 `scratch/jev/current-crisis-technical-observations.json`에 별도로 수집해 6/6 통과를 확인했다. 임상 외부 판정은 0건이며, 커밋과 공식 증거 갱신 시 고정 지문 게이트 재검증이 필요하다.
|
||||
2026-09-22 신규 artifact 보존 갱신 뒤 전체 회귀는 API 1172 passed·1 skipped·0 failed, gateway 82 passed, web typecheck·build·API 타입 동기화 통과다. 현재 작업트리의 위기 기술 검증은 `scratch/jev/current-crisis-technical-observations.json`에 별도로 수집해 6/6 통과를 확인했고, 임상 외부 판정은 0건이다. 이전 미커밋 작업트리와 고정 증거의 지문 불일치는 역사 기록이며 현재 차단 항목이 아니다.
|
||||
|
||||
운영 승격에는 동일 조건의 기존 경로 대비 충분한 다중 턴 비교, 사례 사실 모순율, 역할 이탈, 감정 변화와 혼합의 전문가 검토, 첫 토큰 및 전체 응답의 p50/p95, 장애율이 필요하다. 로컬 연결 검증과 품질 승격을 구분한다. 로컬 비공개 설정은 Jev/OpenRouter로 활성화했으며 운영 배포는 수행하지 않았다.
|
||||
전체 사용자 흐름 검증과 품질 승격에는 동일 조건의 기존 경로 대비 충분한 다중 턴 비교, 사례 사실 모순율, 역할 이탈, 감정 변화와 혼합의 전문가 검토, 첫 토큰 및 전체 응답의 p50/p95, 장애율이 필요하다. 로컬 연결 검증과 품질 승격을 구분한다. 2026-09-22 운영 API 배포 뒤 공개 main JS `index-BA_Q0J7Y.js` 200, health 200(db·engine true), Jev configured, 비인증 `/auth/me` 401, `/sessions` OPTIONS preflight 200과 정확한 origin의 credential CORS를 확인했고, health의 `live_verified=false`는 의도된 상태 플래그로 실제 Jev 판단은 별도 probe로 확인했다. 인증 Google 브라우저 회기 생성·턴·종료와 DB 감정 영속화는 패스키 확인 대기라 아직 운영에서 검증하지 않았다. 배포 중 일시 502 관측이 있어 무중단을 주장하지 않는다. 배포 영수증은 [운영 증거](../ops/evidence/jev-production-deploy-2026-09-22.json)에 보존한다.
|
||||
|
||||
## 후속 개선 설계 — 2026-09-22
|
||||
|
||||
|
|
@ -77,4 +77,6 @@
|
|||
|
||||
첫 토큰은 전체 출력 검사 때문에 전체 완료 시각과 거의 같다. 전후 수치는 감소했지만 적은 표본·실행 시점·생성문 차이가 있어 코드 변경의 인과 효과나 일반적 속도 우위를 주장하지 않는다. 최종 동시기 비교에서도 Jev 경로는 기존 경로보다 느리다. 원문과 지문은 `scratch/jev/improve-before.json`, `improve-after.json`(중간 결함 포함), `improve-final.json`에 보존했다. 마지막 보고서 12/12 완료와 모든 합성 세션 정리를 확인했으며, 검증용 gateway만 종료했다.
|
||||
|
||||
후속 전체 API 회귀는 1,171 passed·1 failed·1 skipped다. 마지막 사실 지시 보강 후 감정/마스킹/페르소나 48개를 재검증해 통과했다. 측정 러너 3개와 현재 작업트리 위기 기술 사례 6/6도 통과했다. 남은 실패는 앞서 기록한 `matches_head` 미커밋 지문 게이트이며, frozen 자료·테스트 조건을 바꾸지 않았다. 증거는 `scratch/jev/improve-api.stdout.log`, `improve-crisis-technical-observations.json`이다. **판정: 구현과 계약 검증 수용, 일반적 속도 우위·한국어 감정 정확도·운영 승격 주장은 보류.**
|
||||
신규 artifact 보존 갱신 뒤 전체 API 회귀는 1,172 passed·1 skipped·0 failed다. gateway 82 passed와 web typecheck·build·API 타입 동기화도 통과했고, 마지막 사실 지시 보강 후 감정/마스킹/페르소나 48개와 현재 작업트리 위기 기술 사례 6/6을 재검증해 통과했다. 이전 `matches_head` 미커밋 지문 불일치는 역사 기록으로 보존하되 현재 게이트로 두지 않는다. 코드 SHA `969d9e2c3c94b4f3356defbf02bc863e1c8e30e1`와 API 이미지 `sha256:ba4a6ed98262ead78147e81cf54777f1bd655cf9aeb4f645d73624580b38b516`를 NAS에 적용했고, source hash 7개와 Git 후보가 일치하며 DB·업로드 보존 검사를 통과했다. `production-dialogue-final-20260922.json`의 3턴 합성 probe는 모두 done이고 Jev 판단 지연은 612/245/271ms였다. **판정: 구현·계약·운영 API 배포와 합성 runtime 검증 수용, 일반적 속도 우위·한국어 감정 정확도·인증 브라우저 운영 회기를 포함한 전체 사용자 흐름 검증과 품질 승격은 미완료.**
|
||||
|
||||
운영 API 기동 로그에는 기존 G6 background 연구 producer의 `SupervisionResearchConflictError` 1건이 관측됐다. producer는 cohort별 예외를 격리해 계속 실행했고 Jev·세션 경로와 분리되며, 이번 배포 diff에는 해당 producer·store 변경이 없다. 따라서 이번 Jev 배포 회귀로 단정하지 않지만 전체 운영 기능 정상 주장을 하지 않는다. 열린 항목 `G6-PRODUCER-CONFLICT`는 기존 submission id와 content hash를 읽기 전용으로 대조하고, 같은 id 재실행의 idempotency 충돌을 해소한 뒤 해당 테스트와 실제 cycle 성공으로 닫는다.
|
||||
|
|
|
|||
|
|
@ -303,7 +303,8 @@
|
|||
<h1>지금 위치: <em>개선관리 원본 14개 재점검</em> — 2026-09-09 읽기 전용 확인에서 완료 13·검토 1(C-001)이다. REQ-009~011의 로컬 재검증은 수용했고, SHA `1306c524` 운영 배포 뒤 H09를 새 live 검증으로 PASS 확인했다. 2026-09-01·09-08 배포는 역사 증거이며, 9/9 배포가 기존 PASS 전체의 새 검증을 뜻하지는 않는다.</h1>
|
||||
<p class="pulse-state"><b>실배포 CUA 128:</b> 카탈로그는 생성됐지만 전체 검증은 미완료다. H09(기록 검색·필터 복귀)는 SHA `1306c524`에서 PASS로 재확인했고 T18(감독·연구 drilldown)은 수정 배포 뒤에도 learner 브라우저만 있어 RED를 종결하지 않았다. 관리자와 일반 학습자 로그인에서 학습자의 `/admin`·`/teach`→`/learn` 차단, P4 추천·R09 잠금·R14 워크시트 보존을 확인했다. 순수 teacher·OFF 계정, 교수자 쓰기, 모바일과 독립 관찰자 공개 검증은 남아 있다.</p>
|
||||
<p class="pulse-state"><b>2026-09-12 비넷 UX 감사:</b> <b>DONE · 로컬 시각 검수 수용</b>. 역할별 메뉴·모바일 라벨, 학습자 정보 위계와 긴 목록, 상담 시작 버튼 겹침, 교수·관리자 표의 넘침, 설정과 약관 배치를 수정했다. 전체 레이아웃 15 passed, 마지막 관리자 폭 보정 후 2 passed, 회기 8 passed, 접근성 44개(38+6) 통과와 직접 이미지 검수를 수용했다. 상세 판정·반려 기록·실제 API와 fixture 증거 경계는 <a href="./ops/ux-audit-2026-09-12.md">감사 기록</a>에 있다. 이후 SHA <code>e8b770e4d9023238bf210b412de75dcb98bfc08e</code>는 Forgejo master에 push했고, 17:55:31 KST 배포 시작 뒤 Pages 공개 배포와 NAS web 전용 교체를 18:06 KST까지 완료했다. API·engine·DB는 유지했다. 인증 내부 UI는 401 세션 만료로 미검증이므로 전체 운영 내부 화면 GREEN이나 전체 기능 출시 완료를 뜻하지 않으며 <a href="./ops/deployment-pipeline.md">배포 현황</a>을 따른다.</p>
|
||||
<p class="pulse-state"><b>JEV-001 가상 내담자 감정 판단:</b> <b>로컬 구현 수용·품질 승격 검증 중</b>. 최신 probe는 결정문에 기록하며 성능 우위·정확도와 DONE 주장은 보류한다. 코드 기본값 <code>legacy</code>와 운영 미배포를 유지하고, 상세 수용/반려와 다음 게이트는 <a href="./decisions/jev-client-affect.md">Jev 결정문</a>을 따른다.</p>
|
||||
<p class="pulse-state"><b>JEV-001 가상 내담자 감정 판단:</b> <b>운영 API 배포 수용·품질 승격 검증 중</b>. API 1172 passed·1 skipped·0 failed, gateway 82 passed, web typecheck·build·API types 통과와 NAS 합성 3턴 runtime을 수용했다. 공개 main JS와 health, <code>/sessions</code> CORS preflight는 200이고 Jev가 configured지만, 독립 한국어 품질 평가·성능 우위·정확도·인증 브라우저 회기와 DB 감정 영속화·DONE 주장은 보류한다. 인증 브라우저는 Google 패스키 확인 대기다. 코드 기본값 <code>legacy</code>를 유지하며 SHA <code>969d9e2c3c94b4f3356defbf02bc863e1c8e30e1</code>와 API image를 적용했다. 배포 중 일시 502가 있어 무중단을 주장하지 않으며, 상세 수용/반려와 다음 게이트는 <a href="./decisions/jev-client-affect.md">Jev 결정문</a>을 따른다.</p>
|
||||
<p class="pulse-state"><b>G6-PRODUCER-CONFLICT:</b> API 기동 중 기존 background 연구 producer의 <code>SupervisionResearchConflictError</code> 1건을 관측했다. Jev·세션 경로와 분리됐고 이번 배포 diff에 producer·store 변경이 없어 배포 회귀로 단정하지 않는다. 다음은 기존 submission id/content hash의 읽기 전용 대조, idempotency 충돌 해소, 해당 테스트와 실제 cycle 성공이다.</p>
|
||||
<p class="pulse-state"><b>2026-08-31 배포 파이프라인 재정립(역사 기록):</b> git 관리·배포는 <code>git.chanpaca.net</code>(Forgejo) 중심으로 이관했고, <code>github.com</code>(origin)은 private 백업/미러로 유지한다. 배포 대상은 NAS Production(<code>docker-compose.nas.yml</code>, <code>vignette-prod</code>)이며 이 PC는 개발용이다. Cloudflare tunnel은 NAS ingress의 현재 경로이므로 대체 ingress 검증 전에는 제거하지 않는다. 문서 <a href="./ops/deployment-pipeline.md">deployment-pipeline.md</a>.</p>
|
||||
<p class="pulse-state"><b>최근 확인된 배포 증거(2026-09-01 당시):</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 백업 sidecar 첫 덤프도 11.2MB로 성공했다. <b>남은 운영·외부 게이트:</b> C-001 외부 임상 검수, NAS 재부팅 자동복구 smoke, 백업 실패 알림·off-host 복제.</p>
|
||||
<details class="pulse-details">
|
||||
|
|
@ -1037,7 +1038,7 @@
|
|||
<div class="task-row"><div><span class="task-status s-done">DONE</span></div><div><b>과거 Live2D demo 자산 제거</b><p>Mao/Haru 샘플, Pixi/Cubism 런타임, 공개 <code>/live2d/*</code> 캐시 잔여 접근을 차단했다.</p></div><div><b>산출물</b><p><code>apps/web/functions/live2d/[[path]].js</code>, SVG 도형 기반 파라미터 리그</p></div><div><b>검증</b><p>운영 <code>/live2d/mao/*</code>, Cubism core <code>404</code></p></div></div>
|
||||
<div class="task-row"><div><span class="task-status s-done">DONE</span></div><div><b>프로세스 난립 정리</b><p>운영 확인용 프로세스와 로컬/Tailnet 검증용 dev 프로세스를 의도적으로 분리해 유지한다.</p></div><div><b>산출물</b><p>9099 engine, 8001 prod API, 8000/8010 dev API, 5173 web, cloudflared tunnel 1개</p></div><div><b>검증</b><p><code>Get-NetTCPConnection</code>에서 대상 포트별 listener 확인</p></div></div>
|
||||
<div class="task-row"><div><span class="task-status s-plan">GATE</span></div><div><b>한신대 공문/데이터 거버넌스 게이트 정리</b><p>SSO 클레임, 추가 축어록 수급, 미성년 원본 활용동의, 개인정보 처리방침을 P1 진입 전 외부 의존성으로 명확히 둔다. 로컬 문서 골격은 준비됐지만 한신대/데이터 steward의 written evidence는 아직 필요하다.</p></div><div><b>산출물</b><p><code>docs/ops/hanshin-data-governance-gate.md</code>, 공문 질의 항목, 동의 범위 체크리스트, SSO claim mapping 표</p></div><div><b>검증</b><p>문서 artifact 작성 완료; IRB 게이트가 아니라 데이터/SSO 게이트로 외부 증거 필요 상태 유지</p></div></div>
|
||||
<div class="task-row"><div><span class="task-status s-doing">JEV-001</span></div><div><b>Jev 감정 판단 실증과 기존 내담자 경로 반복 비교</b><p>수용: 구현, app 1171 passed/1 failed/1 skipped, engine 82 passed, API types 통과와 위기 기술 관찰 6/6 pass·임상 결정 0. 반려: 성능 우위·정확도·품질 승격 및 full-suite GREEN 주장.</p></div><div><b>산출물</b><p>runner/probe와 artifact exact-match evidence는 <a href="./decisions/jev-client-affect.md">Jev 결정문</a>에서 관리한다.</p></div><div><b>검증</b><p>frozen artifact는 HEAD와 일치하지만 현재 미커밋 작업트리와 불일치한 exact-match test를 보존한다. 다음은 커밋 시 artifact 갱신, 한국어 독립 평가, 전체 지연 반복 비교, 운영 미배포다.</p></div></div>
|
||||
<div class="task-row"><div><span class="task-status s-doing">JEV-001</span></div><div><b>Jev 감정 판단 실증과 기존 내담자 경로 반복 비교</b><p>수용: 신규 artifact 보존 갱신, app 1172 passed/1 skipped/0 failed, engine 82 passed, web typecheck/build/API types 통과, NAS API 배포·공개 JS/CORS preflight와 합성 3턴 runtime. 보류: 성능 우위·정확도·품질 승격과 인증 브라우저 운영 회기.</p></div><div><b>산출물</b><p>runner/probe·배포 artifact는 <a href="./decisions/jev-client-affect.md">Jev 결정문</a>과 <a href="./ops/evidence/jev-production-deploy-2026-09-22.json">운영 증거</a>에서 관리한다.</p></div><div><b>검증</b><p>공개 main JS·health·<code>/sessions</code> preflight 200과 3/3 done을 확인했다. 인증 UI 회기 create/turn/end와 DB 감정 영속화는 Google 패스키 확인 대기이며, 독립 한국어 평가와 전체 지연 반복 비교도 남는다. 일시 502 관측 때문에 무중단을 주장하지 않는다.</p></div></div>
|
||||
<div class="task-row"><div><span class="task-status s-done">DONE</span></div><div><b>한신대 실사용 피드백 1차 개선팩</b><p>오류분석 자료를 컨텍스트 보존, 내담자 출력 품질, 리뷰 privacy/오류문구 UX, 교수자 설명 가능성으로 분해했고 1차 구현을 완료했다. P1은 role mapping + client-only history injection을 원자 패치로 닫았고, P2/P3/P4는 저장형 fallback 없이 빠른 UX 개선으로 배포 가능한 상태다.</p></div><div><b>산출물</b><p><code>gateway._split_messages(ai_role=client)</code>, <code>guardrail.sanitize_client_reply()</code> 품질 게이트, SSE full-response buffer, 리뷰 표시 자연어화, raw error mapper, 교수자 <code>AI 평가 범위</code> 패널, 계획/레드팀/대레드팀 문서</p></div><div><b>검증</b><p><code>engine_gateway/test_gateway_model.py app/test_orchestrator_masking.py app/test_client_reply_quality.py app/test_session_turn_persistence.py</code> 84 passed, <code>npm run typecheck</code>, <code>npm run check:api-types</code>, <code>session-review.spec.ts</code> focused 8 passed, <code>layout-visual-gate.spec.ts</code> 12 passed, <code>session-layout.spec.ts</code> 8 passed.</p></div></div>
|
||||
</div>
|
||||
<div class="source-note"><b>팀장 판정:</b> 로컬 회귀와 공개 prod-safe 게이트는 통과했다. 2026-06-29 수동 Cloudflare Pages production 배포가 현재 custom domain asset으로 확인됐고, 운영 반영 전 남은 핵심 증거는 공개 Google OAuth 실제 <code>/turn</code> smoke다. 런타임 mock/demo 자산은 운영 번들에서 제거하고 테스트 fixture만 남긴다.</div>
|
||||
|
|
|
|||
|
|
@ -36,7 +36,8 @@ npx playwright test e2e/uc-session-conversation.spec.ts --grep '스트림 도중
|
|||
| G8-EXTERNAL | 실DB/public 사람 게이트 | 승인·보류·반려와 append-only effect의 실제 public proof | local fixture와 route E2E는 대체 불가 |
|
||||
| G7-EXTERNAL | 동의 기반 음성 외부 proof | 3,120초 soak, 3,000초 overlap high-water, 독립 human pack, checker exit 0 | 장치 선택·명시 동의 전 마이크를 열지 않음 |
|
||||
| ANTHROPIC-001 | provider live 동일성 비교 | 승인 주입한 기관 키로 응답·계량·오류 표면화 비교 | credential 취급·주입은 소유자 경계 |
|
||||
| JEV-001 | 한국어 독립 평가와 전체 지연 반복 비교 | 감정·사실 품질과 지연을 평가하고, 커밋 시 고정 evidence 지문을 재검증한다. | 구현 수용·품질 승격 보류, 운영 미배포. 상세 수용/반려·최종 probe는 [Jev 결정문](../decisions/jev-client-affect.md)을 따른다. |
|
||||
| JEV-001 | 한국어 독립 평가와 전체 지연 반복 비교 | 운영 API·공개 JS·CORS preflight와 합성 3턴 runtime을 수용했다. 감정·사실 품질과 지연을 평가한다. | 구현 수용·품질 승격 보류, 인증 브라우저 회기·DB 감정 영속화는 패스키 확인 대기. 상세 수용/반려·최종 probe는 [Jev 결정문](../decisions/jev-client-affect.md)을 따른다. |
|
||||
| G6-PRODUCER-CONFLICT | 기존 submission id/content hash 읽기 전용 대조 | 동일 id 재실행 idempotency 충돌을 해소하고 해당 테스트와 실제 cycle 성공을 확인 | 기존 background producer 충돌 관측; Jev·세션 경로와 분리, 이번 배포 회귀로 단정하지 않음 |
|
||||
| VNET-001 | vnet 공개 전환 | DNS·Cloudflare zone 권한·Google redirect URI와 live 검증 | 현재 NAS ingress를 넓히지 않음 |
|
||||
| PIPELINE-001 | Forgejo 기준 NAS 자동배포 hook | 수동 git-container clone·SHA 검증·NAS build/compose 절차를 보존한 자동화와 rollback/approval 경계 | 현 수동 실증 절차를 우회하지 않음 |
|
||||
| INGRESS-001 | Cloudflare tunnel 제거 지시의 대체 ingress gate | NAS ingress 대체 경로의 보안·가용성·OAuth 경계를 검증한 뒤 tunnel retirement 승인 | tunnel 제거는 사용자 지시이나 대체 ingress 검증 전 미이행 |
|
||||
|
|
|
|||
94
docs/ops/evidence/jev-production-deploy-2026-09-22.json
Normal file
94
docs/ops/evidence/jev-production-deploy-2026-09-22.json
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
{
|
||||
"title": "Jev 운영 API 배포와 합성 runtime 검증",
|
||||
"date": "2026-09-22",
|
||||
"source": {
|
||||
"forgejo_sha": "969d9e2c3c94b4f3356defbf02bc863e1c8e30e1",
|
||||
"api_image_sha256": "sha256:ba4a6ed98262ead78147e81cf54777f1bd655cf9aeb4f645d73624580b38b516",
|
||||
"source_hash_verification": {
|
||||
"candidate_matched_paths": 7,
|
||||
"matches_git_candidate": true
|
||||
}
|
||||
},
|
||||
"pre_deploy_preservation": {
|
||||
"db_dump": {
|
||||
"path": "/volume1/docker/vignette-prod/backups/pre-deploy-jev-20260922.dump",
|
||||
"bytes": 11784055,
|
||||
"pg_restore_list_passed": true
|
||||
},
|
||||
"rollback_inputs": {
|
||||
"environment_backup": "private/env.nas.before-jev-20260922",
|
||||
"compose_backup": "private/compose.before-jev-20260922.yml"
|
||||
},
|
||||
"data_checks": {
|
||||
"table_count": 133,
|
||||
"row_digest_before_after_equal": true,
|
||||
"uploads": {
|
||||
"file_count": 93,
|
||||
"bytes": 52973,
|
||||
"manifest_before_after_equal": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"deployed_runtime": {
|
||||
"api_container_id": "c7ee7b5f374c",
|
||||
"api_healthy": true,
|
||||
"api_restart_count": 0,
|
||||
"engine_db_web_ids_unchanged": true
|
||||
},
|
||||
"public_readiness": {
|
||||
"web_http_status": 200,
|
||||
"main_javascript": {
|
||||
"path": "/assets/index-BA_Q0J7Y.js",
|
||||
"http_status": 200,
|
||||
"content_type": "application/javascript"
|
||||
},
|
||||
"health_http_status": 200,
|
||||
"db": true,
|
||||
"engine": true,
|
||||
"jev_configured": true,
|
||||
"auth_me_unauthenticated_status": 401,
|
||||
"cors": {
|
||||
"exact_origin": true,
|
||||
"credentials": true,
|
||||
"sessions_options_preflight_status": 200
|
||||
},
|
||||
"health_live_verified": false,
|
||||
"live_verified_note": "의도된 health 상태 플래그이며 실제 Jev 판단은 아래 합성 probe로 별도 확인했다."
|
||||
},
|
||||
"synthetic_dialogue_probe": {
|
||||
"artifact": "scratch/jev/production-dialogue-final-20260922.json",
|
||||
"status": "done",
|
||||
"completed_turns": 3,
|
||||
"requested_turns": 3,
|
||||
"appraisal": {
|
||||
"provider": "openrouter",
|
||||
"model": "typesafe/jev-1.13-20260917",
|
||||
"latency_ms_by_turn": [612, 245, 271]
|
||||
},
|
||||
"generation": {
|
||||
"provider": "openai",
|
||||
"model": "gpt-5.6-terra"
|
||||
},
|
||||
"total_ms_by_turn": [4045.1, 2197.8, 3730.9],
|
||||
"cleanup": {
|
||||
"http_status": 200,
|
||||
"closed": false,
|
||||
"status": "not_required",
|
||||
"note": "stateless 경로의 정상 결과다."
|
||||
},
|
||||
"provenance": "synthetic_only",
|
||||
"quality_pass": false
|
||||
},
|
||||
"observations": {
|
||||
"deployment_availability": "배포 중 일시 502를 관측했으므로 무중단을 주장하지 않는다.",
|
||||
"previous_probe": "scratch/jev/production-dialogue-20260922.json은 cleanup 결과를 오판한 역사 증거로 보존한다.",
|
||||
"g6_producer_conflict": "기동 로그에 SupervisionResearchConflictError 1건을 관측했다. cohort별 예외 격리로 스케줄은 계속됐고 Jev·세션 경로와 분리되며, 이번 배포 diff에 producer·store 변경은 없다."
|
||||
},
|
||||
"open_gates": [
|
||||
"독립 한국어 감정·사실 품질 평가",
|
||||
"기존 경로 대비 전체 지연 반복 비교",
|
||||
"Google 인증 브라우저의 운영 회기 create/turn/end",
|
||||
"운영 DB 감정 영속화 확인",
|
||||
"G6-PRODUCER-CONFLICT: existing submission id/content hash 읽기 전용 대조, 동일 id 재실행 idempotency 충돌 해소, 해당 테스트와 실제 cycle 성공"
|
||||
]
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue