# Vignette 백로그 — 열린 실행 항목 > 상태와 증거의 SSOT는 [`docs/dev_dashboard.html`](../dev_dashboard.html), 실행 인덱스는 [`docs/TODO.md`](../TODO.md)다. > 2026-09-07 이전 완료 기록과 장문 이력은 [정리 전 백로그 원문](../archive/project-cleanup-2026-09-07/backlog-2026-06-26-before-cleanup.md)에 보존했다. > 2026-09-01 NAS 배포는 당시 [배포 증거](./evidence/nas-prod-deploy-2026-09-01.json)로 완료 기록을 남겼으며, 현재 live 상태 주장이나 후속 게이트 완료 선언이 아니다. ## 제품 이슈 — 최신 워크북 원본과 로컬 재검증 > 최신 원본: [개선관리 워크북](https://docs.google.com/spreadsheets/d/1MNRDfXoIQJbLzIcSRdHnQHREWELbKqV4/edit?pli=1&gid=1294900115#gid=1294900115)를 2026-09-09 읽기 전용으로 재점검했다. 다운로드 원본 SHA-256 `f64bbc859354e8bfdd62bb3393cffd841ca3a0d865983967a149aea7cf569773`, 14개 항목은 완료 13·검토 1(C-001)이며 REQ-008~011도 완료다. [항목별 구현 매핑](./spreadsheet-implementation-audit-2026-09-09.md)에서 원본 상태와 로컬 재검증을 분리한다. 과거 9 완료·2 검토, 신규 3 대기, 원본 `#REF!` 주장은 당시 11개 항목 replica의 역사 기록이며 최신 원본 상태가 아니다. 원본은 수정하지 않는다. | ID | 원본 사실 | 조치 및 결과 | 완료 조건 | 검증 증거 | |---|---|---|---|---| | REQ-009 | 원본 완료. | 스트림 오류 입력 복원·부분 턴 미저장·재시도/닫기·음성 상태 복원을 local browser 재검증으로 수용했다. | 배포 상태 분리. | `uc-session-conversation`·`calibration-transfer` route fixture browser 44 passed/0 failed/0 skipped. build·새 public live 검증·배포는 수행하지 않았다. | | REQ-010 | 원본 완료. | 0턴/client-only 회기가 첫 완료·반복·경험 배지에 포함되던 결함을 기존 완료 집계와 같은 counselor/learner 발화 조건으로 정렬했다. | 배포 상태 분리. | 계약 RED 4건→GREEN 4건, 지정 API 20건, API 전체 1108 passed/1 skipped/1 warning, route fixture browser 44 passed/0 failed/0 skipped. build·새 public live 검증·배포는 수행하지 않았다. | | REQ-011 | 원본 완료. | 자기예측 저장·잠금을 local browser 재검증으로 수용했다. | 배포 상태 분리. | `uc-session-conversation`·`calibration-transfer` route fixture browser 44 passed/0 failed/0 skipped. build·새 public live 검증·배포는 수행하지 않았다. | | SRC-001 | 역사 replica 수식 보정. | 과거 replica의 `#REF!`와 15행 집계 범위 보정은 보존한다. | 최신 원본 오류로 오인하지 않는다. | 과거 수정본: `outputs/01a04217-f73b-7303-b597-401fa7f5d290/Vignette_개선관리_완료.xlsx` | REQ-009 초기 검증 명령: ```powershell cd apps/api py -3.11 -m pytest app/test_session_turn_persistence.py -k 'stream and (incomplete or engine_error or clean_eof)' -q cd ../web npx playwright test e2e/uc-session-conversation.spec.ts --grep '스트림 도중 오류|done 없이' --project=chromium-desktop --workers=1 ``` 2026-09-07 Python 3.11 source-only 묶음은 `test_session_turn_persistence.py`, `test_calibration_transfer_store.py`, `test_session_continuity_guard.py`에서 78 passed와 `PendingDeprecationWarning` 1건이었다. 이는 당시 증거이며 REQ-009~011의 현 재검증이나 운영 증거가 아니다. ## P0 운영 게이트 | ID | 다음 행동 | 완료 조건 | 차단 / 경계 | |---|---|---|---| | AVATAR-001 | fail-closed 후보의 API/Web/브라우저 검증 | source union·DB reference 보존, decode-valid 응답, public fallback, digest receipt, 승인 배포 | Docker·API·DB avatar URL·upload root 변경은 승인 전 금지 | | REQ-008 | NAS 재부팅 자동복구 smoke | 실제 재부팅 뒤 health·로그인·데이터·이미지·SHA 확인 | Windows 개발 task는 legacy 참조이며 NAS 운영 증거가 아님 | | BACKUP-001 | 백업 실패 알림·off-host 복제·restore drill | 실패 경보, 암호화 복제, 복원 주기·보존 정책의 운영 evidence | 첫 일일 sidecar 실행은 당시 성공 기록일 뿐 | | 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 취급·주입은 소유자 경계 | | 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 검증 전 미이행 | ## 외부 거버넌스·파일럿 | ID | 다음 행동 | 완료 조건 | |---|---|---| | C-001 | 외부 임상 검수 수집 | 사례별 검수 30개·청소년 답변 6개·승인 10필드·서명 증거와 canonical checker `review_complete=true` | | GOV-001 | 한신대 데이터/SSO 서면 증거 | SSO claims, 추가 축어록·미성년 동의, privacy 문서의 기관 확인 | | L1-001 | 저작권/등재 문서 정합화 | FastAPI 현행 사유와 Node 계약 우선 전환 계획의 제출 증거 | | P3-001 | 20명 파일럿 운영 | roster, consent 법무승인, 회기 완료 증거 | | P3-002 | KPI 측정 | SUS·자기효능감·κ/ICC·환각률 보고서 | | P3-003 | 재귀학습 승인 export·동의 감사 | consent/PII/IAA/legal 승인과 withdrawal log 종결 | ## 비차단 제품·정리 후보 | ID | 다음 행동 | 완료 조건 | |---|---|---| | VOICE-001 | s2s 2차 PoC | 20턴 비교 보고서와 채택/폐기 판단 | | FASTLOOP-001 | 외부 fallback | 동의·전송 가드·관측을 포함한 테스트 | | FINETUNE-001 | 재귀학습 fine-tuning pipeline | 동의·데이터셋 gate 뒤 pipeline과 few-shot 자동갱신 범위 검증 | | RETENTION-001 | health retention | raw 90일 / rollup 365일과 수동 escalation 검증 | | EVALHOOK-001 | fast-loop `eval_hook` 사용 정책 | hook 활성화 조건과 관측 경계의 소유자 결정 | | NODE-001 | Node gateway 전환 후보 | endpoint conformance, `TurnEvaluationPayload` adapter, admin mapper의 작업 패킷과 회귀 | | MIGRATION-001 | idempotent DB migration runner | init SQL과 runner의 역할 경계·인프라 영향·소유자 승인 | | OPS-001 | 운영 티켓 자동 분류 | 관리자 승인·audit 경계를 갖춘 구현 패킷 | | E2E-001 | 전 기능 E2E 후속 분류 | focused 범위의 locator 18건 교정·keyboard 1건 해결 뒤 `npm run e2e`에서 범위 밖 케이스를 실행하고, 실패별 재현·원인·수정 명령을 분류한다. 과거 sweep 실패를 오늘 결함으로 단정하지 않으며 실API/DB·장치 검증은 fixture 결과와 분리한다. | | CUA-128 | 실제 배포 Computer Use 재검증 | 128 시나리오 카탈로그 생성은 완료했지만 전체 실배포 검증은 미완료다. SHA `1306c524`에서 H09와 일반 학습자 로그인·교차 역할 차단·P4 추천·R09 잠금·R14 워크시트 보존을 재확인했지만, T18은 learner 브라우저만 있어 기존 RED를 종결하지 않았다. 순수 teacher·OFF 계정, 교수자 쓰기, 모바일과 독립 관찰자 공개 검증이 남아 있다. | ## 완료 기록 경계 2026-09-01 A 경로의 NAS 배포, migration 20/21/22 적용, OAuth 실계정 회기 E2E와 당시 backup sidecar 첫 실행은 완료 이력이다. 2026-09-08 Forgejo master `a0311c59`/`d9bb5b36`의 NAS Production 컨테이너 교체, Cloudflare Pages 배포, 사전 DB 덤프(12MB), 0턴 세션 분리·OAS calibration bounds/lock·composer 복원 TDD(API 1104 passed)는 당시 배포 증거다. 이는 2026-09-09의 새 live 검증이나 현재 작업트리의 배포 상태를 뜻하지 않는다. B3 및 B3-신규의 소유자 결정과 완료된 구현도 archive snapshot에 보존한다. `CLEANUP-001`은 84 regular source와 supplementary 4 files·junction 4개의 대조 뒤 `outputs/local-history/retained-sources-2026-09-07/`으로 가역 보존 이동을 마쳤고 영구 삭제는 0건이다. `RUNTIME-001`은 Windows public-runtime/watchdog scripts를 복구 경로로 보존하기로 결정했으며 이 PC의 두 Disabled Scheduled Task는 운영 서버 다운을 뜻하지 않는다. `REFACTOR-001`은 `sessionViewModel` 분리와 `voiceCapture` 책임 유지를 수용했고, lifecycle setter bag hook은 채택하지 않았다. Space retry→pause와 empty-audio fixture를 교정했으며, `learnerFeedbackEnabled:true` 누락으로 숨던 review feedback UI는 fixture 보완 뒤 focused login→review 1 passed(exit 0)로 확인했다. 제품 feedback guard는 유지했다. `REFACTOR-002`는 repository와 persistence values로 평가 저장 경계를 분리했다. 열린 백로그에 완료 이력을 다시 적지 않는다. ## 확인 명령 ```powershell python -X utf8 scripts/check-dev-dashboard-ssot.py --json git diff --check ```