- 누적 작업트리 커밋: 회기 평가 복구·durable 저장, 라이브 코치 이력/근거, 교수자 학생분석, 음성 비언어 메타, PII 마스킹, 운영 티켓/헬스 등 - 문서: 완료 기록 docs/archive/ 냉동 보관, docs/ 단일 인덱스(docs/README.md)+통합 TODO(docs/TODO.md)로 정리 - 리팩터(행위 보존): Stage enum SSOT(taxonomy 소유·state_machine re-export), store recent/masked_turns 중복 제거, speaker_ko_label 단일 헬퍼, _list_sessions N+1 제거(state/turns 배치 + 턴평가 하이드레이션 배치) - 검증: 백엔드 pytest 352 passed, _list_sessions E2E chromium-single-run 2 passed
8.6 KiB
Vignette 할 일 (안된 것들) — 통합 TODO
한 곳에서 보는 "남은 작업" 인덱스. 여러 문서에 흩어져 있던 열린 작업을 주제별로 모았다. 권위 기준은 SSOT
dev_dashboard.html, 열린 게이트 추적은ops/backlog-2026-06-26.md(얇은 현행본)다. 이 파일은 그 둘을 집계·링크하는 뷰이며, 상태가 어긋나면 대시보드를 기준으로 맞춘다. 완료된 작업 기록은archive/(냉동 보관)에 있고 평상시 읽지 않는다.태그: [환경] 이 워크스테이션에서 증거 생산 불가 · [외부] 기관/소유자 서면·결정 필요 · [구현] 코드로 진행 가능 · [임상] 임상팀(구훈정·어유경) 외부 콘텐츠 소유.
A. 배포·공개 런타임 게이트 [환경]
출처:
ops/backlog-2026-06-26.mdB2 · 대시보드 운영 탭 ·ops/tailscale-vnet-runtime-2026-06-27.md·ops/public-runtime-watchdog.md·HANDOFF.md
- 공개 Google OAuth 실제
/turnproof — 로그인 계정으로storageState캡처 →E2E_PUBLIC_AUTH=1+chromium-public-auth1회 통과. 실행 명령은 대시보드 "다음 실행 명령"/HANDOFF.md. (소유자 보류 중) - 실배포
infra/.envowner-secret + real preflight —APP_DB_PASSWORD,OAUTH_GOOGLE_CLIENT_ID/SECRET,OPENAI_API_KEY,SESSION_SECRET, prod-safe engine/voice flags 주입 후check-deploy-preflight.pyDB 모드 + 배포지 health. vnet.18ka.net/api-vnet.18ka.net공개 live — DNS A record 등록, cloudflared의18ka.netzone 권한, Google redirect URIhttps://api-vnet.18ka.net/auth/callback등록. (현재 prod API 8001은 health OK)- 재부팅 후 watchdog smoke — 실제 Windows 재부팅 후 엔진/API/터널 자동 복구 + public
/turn실측. DNS 개통 후api-vnet.18ka.net을-AdditionalPublicHealthUrls로 명시 추가. - 음성 캐스케이드 live — 실제 Deepgram interim/final WSS, 물리 마이크, 공개 WSS, 50분 양방향 장시간 실측.
- claude_cli ↔ Messages API 폴백 동일성 —
ANTHROPIC_API_KEY필요.
B. 외부 거버넌스 [외부]
출처: 백로그 B4 ·
ops/hanshin-data-governance-gate.md·ops/source-docs-gap-analysis-2026-06-26.md·MASTERPLAN.md
- 한신대 데이터/SSO 거버넌스 서면 증거 — 공식 문의서 발송·서면 응답 수령, 동의범위 매트릭스, SSO claim map,
privacy review, 미성년 원본 활용동의, 개인정보 처리방침. 로컬 골격은
ops/hanshin-data-governance-gate.md. - L1 스택 정합성·저작권 등재 문서 반영 — 신청서/등재 문서에 FastAPI 유지 사유 + 계약 우선 Node 전환 계획 반영.
결정 기록:
decisions/backend-node-transition.md.
C. Phase 3 교육용 파일럿 [외부] + [구현 scaffold 완료]
출처: 백로그 Phase3 ·
phase3/*· 대시보드 P3 탭. 문서·checker·exporter scaffold는 준비됨.
- 20명 파일럿 운영 — roster, consent 법무승인(G-P3-02), session completion evidence 수집.
- 효과성/KPI 측정 — SUS·자기효능감·κ≥0.70/ICC≥0.75·환각률≤3%. 3척도 pre/post 실측 →
kpi_report.json. - 재귀학습 데이터셋 approved 산출 —
approved_for_recursive_learning_seed(consent/PII/IAA/legal 승인) + 승인 export 실행. - 개인정보/동의 감사 서명 —
phase3/privacy-consent-audit.md서명 완료, withdrawal_log 종결.
D. 소유자 결정 완료(2026-06-30) → 구현 후속 [구현]
출처: 대시보드 "윤찬 결정 상세" 탭 ·
decisions/· 백로그 B3. 결정 자체는 전건 확정, 아래는 후속 build.
- s2s 2차 비교 PoC 구현·실측 —
decisions/voice-s2s-poc.md기준표(전사·안전·감사·지연)로 20턴 비교 리포트 → 최종 채택/폐기. - fast-loop 외부 폴백 구현 — 로컬 상주 분류기 우선 + Haiku/Solar 폴백, 전송 가드(데이터주권·로그·동의)·관측.
- 대체 TTS provider 선정·통합 — 상업 라이선스 명확한 provider. dev sample(
VIGNETTE_VOICE_POC_SAMPLE_TTS)과 서비스 경로 분리 유지. - 재귀학습 fine-tuning 파이프라인 — 동의/데이터셋 게이트 충족 후. few-shot 자동갱신은 선행 가능.
- 헬스 retention 적용·검증 — raw 90일 / rollup 365일. escalation/그룹 자동화는 미도입 고정.
E. 코드 품질·리팩터 로드맵 [구현] (비게이트 — 여유 시)
출처:
ops/code-quality-research-2026-06-26.md·decisions/backend-node-transition.mdnext candidates. 2026-07-02 실측: 로드맵 상당수는 이미 해결(turn_runtime·tier 제거·eval_hook 주입 등). 아래는 코드 재확인 기준 현행 상태.
- Stage enum SSOT 통합 —
taxonomy.Stage를 라벨 단일 정의(SoT)로,services.state_machine이 re-export(중복class Stage제거). 검증: 단일 enum 정체성 확인, 백엔드 pytest 352 passed, 수집 379 import 무결. (2026-07-02) - store
recent_turns/masked_turnsType-2 중복 제거 —recent_turns = masked_turns()[-k:]위임으로 단일 소유. 검증: 백엔드 352 passed. (2026-07-02) - 화자 한글 라벨 4× 중복 →
taxonomy.speaker_ko_label단일 헬퍼 — evaluator/live_coach/memory 프롬프트의'상담자'/'내담자'삼항 통합. 검증: 헬퍼 단위 + 백엔드 352 passed. (2026-07-02) 턴 파이프라인 dedup—turn_runtime.py의load_owned_session/record_completed_turn로 이미 추출됨.— teacher/sessions_iso중복 통합_iso중복 해소됨(현재_iso_text/_iso_dt는 별개 목적 함수).tier dead-contract 제거·voice 경로 eval_hook 미주입— gateway tier 제거 + voice eval_hook 주입 완료.- Speaker/Role 계약 레벨 — 검토 결과 조치 불요 — DB actor 매핑은 1곳(
session_persistence.py, 중복 아님),Roleapp↔db는 이미 단일 dict(DB_ROLE_BY_APP/APP_ROLE_BY_DB), 엔진AIRole은 이미 단일Literal. 실제 중복이던 표시 라벨은 위에서 통합됨 → 별도 추상화 불요. (2026-07-02 실측) _list_sessionsN+1 제거(1차: state/turns) — 세션별session_state/turnsfetch 루프(1+2N) →= ANY($ids)배치 3쿼리 + Python 그룹핑. 검증: 실 DB 동등성 50세션/109턴 불일치 0, 왕복 101→3, 백엔드 352 passed(회귀 테스트 mock 시퀀스 갱신). (2026-07-02)_list_sessionsN+1 제거(2차: 턴평가 하이드레이션) — 상세 뷰에서 세션별 evaluator 연결+평가 로드 루프 → 전 세션 turn_refs 배치(_hydrate_sessions_turn_evaluations, 연결 1회). 싱글 헬퍼는 플러럴 위임으로 행위 보존(_load_turn_evaluations는 이미turn_id = ANY배치). 검증: 백엔드 352 passed. (2026-07-02)- E2E 검증(실 스택): dev API(8000, 내 코드 반영)+웹+DB에서
chromium-single-run2 passed — "위기→교수자 대시보드", "학습자 턴→리뷰+교수자 대시보드"(list_all_sessionsinclude_turn_evaluation=True로 1·2차 N+1 경로 모두 브라우저 end-to-end). (2026-07-02)
- E2E 검증(실 스택): dev API(8000, 내 코드 반영)+웹+DB에서
- fast-loop
eval_hook사용 정책 제품 결정 (현재 주입은 됨; 켤지/끌지 확정은 소유자). - Node 게이트웨이 구현 시: 라이브 엔드포인트 conformance,
TurnEvaluationPayload어댑터 추출,admin.py매퍼 정리. - init SQL과 별도의 idempotent DB migration runner 도입 (인프라 추가 — 소유자 결정 권장).
F. 임상팀 콘텐츠 [임상] (외부 소유)
출처:
ops/source-docs-gap-analysis-2026-06-26.md· 백로그 B0. 코드 구조는 선제 구축, 문안·기준은 외부 정의.
- C1 사례개념화 확정 루브릭 콘텐츠 + AI 추출/채점 calibration (현재 scaffold_only).
- CBT 체인·이론부합 루브릭.
- 위기개입 프로토콜 임상 문안.
- 평가 골든셋 콘텐츠.
G. 운영 후속 [구현] (비차단)
출처: 백로그 B1
- 운영 티켓 자동 분류·처리 — Claude Recipe headless 자동 수정 후보, 관리자 승인 후 이슈 등록·PR/작업 스레드 생성, 처리 결과 audit trail 확장. 자동 수정은 운영자 승인 전까지 실행하지 않는다.
지금 임계경로 (한 줄)
납품(공개 데모)의 핵심 블로커는 A(공개 /turn proof + 배포 secrets). 그 다음이 **B(한신대 거버넌스)**와
C(Phase 3 파일럿). D~G는 품질·확장 작업으로 게이트가 아니다. 상세 상태·검증 증거는 SSOT 대시보드가 소유한다.