vignette/docs/HANDOFF.md

56 lines
7.5 KiB
Markdown

# Vignette 현행 인수인계
> 기준일: 2026-09-09 KST
> 상태·결정의 SSOT는 [`dev_dashboard.html`](./dev_dashboard.html)이다. 이 문서는 다음 실행 순서와 금지 경계만 요약한다.
> 2026-08-18 이전 상세 기록은 [정리 전 HANDOFF 원문](./archive/project-cleanup-2026-09-07/HANDOFF-before-cleanup.md)에 보존했다.
## 현재 기준
2026-09-09 최신 [개선관리 워크북](https://docs.google.com/spreadsheets/d/1MNRDfXoIQJbLzIcSRdHnQHREWELbKqV4/edit?pli=1&gid=1294900115#gid=1294900115)을 읽기 전용으로 재점검했다. 다운로드 원본 SHA-256 `f64bbc859354e8bfdd62bb3393cffd841ca3a0d865983967a149aea7cf569773`의 14개 항목은 완료 13·검토 1(C-001)이며 REQ-008~011도 원본 완료다. [항목별 구현 매핑](./ops/spreadsheet-implementation-audit-2026-09-09.md)은 원본 완료 표기, 현재 로컬 검증, 배포 상태를 분리한다. 원본 워크북은 수정하지 않았다.
REQ-010의 추가 결함은 0턴/client-only 회기가 대시보드의 첫 완료·반복·경험 배지 집계에 포함되는 것이었다. 기존 완료 집계와 같은 counselor/learner 발화 조건으로 정렬했고, 계약 RED 4건 뒤 GREEN 4건, 지정 API 20건과 API 전체 1108 passed / 1 skipped / 1 warning을 통과했다. `uc-session-conversation``calibration-transfer` route fixture browser 재검증도 44 passed / 0 failed / 0 skipped로 수용했다. 이 문단의 증거는 워크북 감사 단계의 local fixture 기록이며 당시 build·새 public live 검증·배포 미실행을 뜻한다.
2026-09-08 Forgejo master `a0311c59`(배포 문서 포함 `d9bb5b36`)의 NAS/Cloudflare Pages 배포, 사전 DB 덤프·컨테이너 교체·당시 public health/auth/web 폐루프와 API 1104 passed 기록은 [배포 파이프라인](./ops/deployment-pipeline.md)과 [1차 배포 증거](./ops/evidence/nas-prod-deploy-2026-09-01.json)에 보존한다. 이는 오늘의 새 live 검증이나 현재 작업트리 배포 상태가 아니다.
2026-09-09 SHA `1306c524`은 Forgejo에 동기화해 NAS API·engine 이미지 `c02036e8c814…`, web 이미지 `74f334f52d78…`, Pages preview `04f97f32`/`index-CEq_FjVS`로 배포했다. API·engine 동시 기동 중 사용자가 다운을 보고했으나 rollback 없이 같은 버전에서 healthy, 공개 `/health`의 db/engine true, `/auth/me` 401, 웹 200, P4 학습자 회기 1회 6턴과 DB 전체 집계 전후 동일을 확인했다. 이는 운영 실배포 완료 기록이며 무중단 증거는 아니다. GitHub 미러 push는 auto-review 거절로 실행하지 않아 Forgejo 동기화만 완료했다.
실배포 CUA 128 시나리오는 카탈로그 생성만 끝났고 전체 검증은 끝나지 않았다. H09 기록 검색·필터 복귀는 SHA `1306c524` 실제 배포에서 PASS로 재확인했지만, T18 감독·연구 drilldown은 수정 배포 뒤에도 learner 브라우저만 있어 기존 RED를 종결하지 않았다. 관리자와 일반 학습자 로그인에서 학습자의 `/admin`·`/teach``/learn` 차단과 P4 추천, R09 잠금과 R14 워크시트 보존을 확인했다. 순수 teacher, 독립 관찰자 공개 검증, OFF 계정, 교수자 쓰기와 모바일 실행은 남아 있다. 상세는 [실배포 CUA 보고](./qa/production-computer-use-report-2026-09-09.md)를 따른다.
## 남은 실행 항목
1. C-001 외부 임상 검수: 외부 검토 입력·서명 증거·canonical checker를 모두 충족할 때까지 `review_complete=false`를 유지한다.
2. NAS 재부팅 자동복구 smoke: 실제 재부팅 뒤 자동 복구를 관찰한다. Windows 개발 워크스테이션 task 이력은 이 운영 NAS 게이트를 대체하지 않는다.
3. 백업 운영화: 실패 알림, off-host 암호화 복제, 정기 restore drill을 운영 증거로 남긴다.
4. 아바타 fail-closed 후보: 원본과 DB 참조를 보존한 채 public fallback·digest receipt·브라우저 검증을 마친 뒤에만 승격 판단한다.
5. G7/G8 외부 게이트: G7은 동의 기반 물리 마이크와 독립 voice-gain 증거, G8은 실DB append-only 사람 게이트와 public proof가 남아 있다.
6. REQ-009~011: 원본은 모두 완료다. API와 route fixture browser 로컬 재검증은 수용했지만 build·새 public live 검증·배포는 수행하지 않았다.
7. CUA-128: 허용된 관리자 P16 회기 1개와 학습자 P4 회기 1개를 사용해 총 2/2를 종료했다. P4 회기는 2분 19초·6턴·실제 AI 3왕복으로 종료했고, 기존 승인 범위의 대화·리뷰·워크시트 권한은 유지한다. 순수 teacher·OFF 계정, 교수자 쓰기와 모바일 실행이 남아 있다.
세부 ID·차단 이유·완료 조건은 [`TODO.md`](./TODO.md)와 [열린 백로그](./ops/backlog-2026-06-26.md)에 있다.
## 재개 순서
1. OS·셸·현재 Git 상태를 확인하고, dashboard와 이 문서·TODO·backlog를 읽는다.
2. 필요한 항목의 배포 증거와 현재 NAS 상태를 read-only로 구분해 확인한다.
3. 외부 게이트는 증거 수집만 진행하며, 외부 입력·소유자 승인·비밀값을 추정하거나 생성하지 않는다.
4. 코드 또는 문서 변경 뒤에는 범위에 맞는 테스트와 SSOT checker를 실행한다.
2026-09-09 REQ-010 API 재검증은 Python 3.11 API 전체 1108 passed/1 skipped/1 warning이다. API의 1 skipped는 `VIGNETTE_USAGE_TEST_DATABASE_URL` 미설정 때만 건너뛰는 기존 선택형 격리 DB `test_admin_usage_postgres.py`이고 새 skip은 없다. `uc-session-conversation``calibration-transfer`의 route fixture browser 재검증은 44 passed/0 failed/0 skipped다. 이 수치는 local fixture 증거이며 build·새 public live 검증·배포를 뜻하지 않는다.
최종 UI 회귀는 `session-mvp`+`uc-session-coach-voice` 58 passed/0 skipped(exit 0, 2.6분), alliance+admin 39 passed/1 skipped(exit 0, 1.7분)로 합계 97 passed/1 skipped다. skip은 `uc-review-alliance-pulse` 320px 테스트의 desktop 중복 실행 제외이며 mobile은 실행·통과했다. `session-review`의 disabled AI feedback privacy 제어 focused 1 passed(exit 0, 4.4초)도 유지한다. dashboard 10은 별도 검증이다.
같은 날 source-only로 `test_session_turn_persistence.py`, `test_calibration_transfer_store.py`, `test_session_continuity_guard.py`는 78 passed와 `PendingDeprecationWarning` 1건이었다. 이는 당시 증거이며 REQ-009~011의 현 browser 재검증이나 운영 증거가 아니다. 신규 제품 이슈의 현재 열린 상태와 다음 행동은 위 목록 및 [`TODO.md`](./TODO.md)를 따른다.
## 승인과 금지 경계
- NAS compose 교체, DB migration 적용, 데이터·업로드 삭제, secret 변경, 원격 push, Pages 배포는 소유자 승인 뒤에만 한다.
- C-001의 외부 검수 입력, G7 물리 마이크 캡처, G8 승인 결정은 자동화나 fixture로 대체하지 않는다.
- 원본 아바타 bytes·DB reference·운영 백업은 보존 우선이다.
- `CLEANUP-001`: `outputs/local-history/project-cleanup-2026-09-07.zip`(SHA-256 `6a98d817d856c35654da6a11b74a6387c17adca0be55efda58c06c30b101b1ab`)과 manifest는 84 regular source file의 hash 대조 및 4 junction metadata를 보존한다. `tmp/`, `apps/web/tmp/`, 추적된 legacy `.bak` 4개, 정리 대상 attachment·중복 generation 결과는 `outputs/local-history/retained-sources-2026-09-07/`로 가역 이동했고 source 경로 정리는 완료했다. 원본 영구 삭제는 0건이며 기존 `outputs/` 최종 workbook은 보존한다.
## 최소 문서 검증
```powershell
python -X utf8 scripts/check-dev-dashboard-ssot.py --json
git diff --check
```