vignette/docs/TODO.md
2026-07-03 19:53:14 +09:00

9.3 KiB
Raw Blame History

Vignette 할 일 (안된 것들) — 통합 TODO

한 곳에서 보는 "남은 작업" 인덱스. 여러 문서에 흩어져 있던 열린 작업을 주제별로 모았다. 권위 기준은 SSOT dev_dashboard.html, 열린 게이트 추적은 ops/backlog-2026-06-26.md(얇은 현행본)다. 이 파일은 그 둘을 집계·링크하는 뷰이며, 상태가 어긋나면 대시보드를 기준으로 맞춘다. 완료된 작업 기록은 archive/(냉동 보관)에 있고 평상시 읽지 않는다.

태그: [환경] 이 워크스테이션에서 증거 생산 불가 · [외부] 기관/소유자 서면·결정 필요 · [구현] 코드로 진행 가능 · [임상] 임상팀(구훈정·어유경) 외부 콘텐츠 소유.


A. 배포·공개 런타임 게이트 [환경]

출처: ops/backlog-2026-06-26.md B2 · 대시보드 운영 탭 · ops/tailscale-vnet-runtime-2026-06-27.md · ops/public-runtime-watchdog.md · HANDOFF.md

  • 공개 Google OAuth 실제 /turn proof — 로그인 계정으로 storageState 캡처 → E2E_PUBLIC_AUTH=1 + chromium-public-auth 1회 통과. 실행 명령은 대시보드 "다음 실행 명령"/HANDOFF.md. (소유자 보류 중)
  • 실배포 infra/.env owner-secret + real preflightAPP_DB_PASSWORD, OAUTH_GOOGLE_CLIENT_ID/SECRET, OPENAI_API_KEY, SESSION_SECRET, prod-safe engine/voice flags 주입 후 check-deploy-preflight.py DB 모드 + 배포지 health.
  • vnet.18ka.net/api-vnet.18ka.net 공개 live — DNS A record 등록, cloudflared의 18ka.net zone 권한, Google redirect URI https://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/그룹 자동화는 미도입 고정.
  • 한신대 실사용 피드백 1차 개선팩ops/hanshin-feedback-improvement-plan-2026-07-03.md, redteam/hanshin-feedback-plan-redteam-2026-07-03.md, redteam/hanshin-feedback-plan-counter-redteam-2026-07-03.md 기준 P0~P4 1차 완료. 완료 범위: role mapping + client-only stateless history injection, review UI 표시 자연어화, raw error display mapper, fast/deep 라벨, 명백한 출력 결함 차단, SSE full-response buffer, 교수자 설명 패널. 검증 수치는 SSOT 대시보드만 소유한다. 남은 후속은 저장형 fallback/synthetic 계약, 지연을 줄이는 partial stream buffer, fast/deep reconciliation, resident session namespace, 임상팀 루브릭/CBT/약물·평가 문구 확정.

E. 코드 품질·리팩터 로드맵 [구현] (비게이트 — 여유 시)

출처: ops/code-quality-research-2026-06-26.md · decisions/backend-node-transition.md next 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_turns Type-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)
  • 턴 파이프라인 dedupturn_runtime.pyload_owned_session/record_completed_turn로 이미 추출됨.
  • _iso 중복 통합 — teacher/sessions _iso 중복 해소됨(현재 _iso_text/_iso_dt는 별개 목적 함수).
  • tier dead-contract 제거 · voice 경로 eval_hook 미주입 — gateway tier 제거 + voice eval_hook 주입 완료.
  • Speaker/Role 계약 레벨 — 검토 결과 조치 불요 — DB actor 매핑은 1곳(session_persistence.py, 중복 아님), Role app↔db는 이미 단일 dict(DB_ROLE_BY_APP/APP_ROLE_BY_DB), 엔진 AIRole은 이미 단일 Literal. 실제 중복이던 표시 라벨은 위에서 통합됨 → 별도 추상화 불요. (2026-07-02 실측)
  • _list_sessions N+1 제거(1차: state/turns) — 세션별 session_state/turns fetch 루프(1+2N) → = ANY($ids) 배치 3쿼리 + Python 그룹핑. 검증: 실 DB 동등성 50세션/109턴 불일치 0, 왕복 101→3, 백엔드 352 passed(회귀 테스트 mock 시퀀스 갱신). (2026-07-02)
  • _list_sessions N+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-run 2 passed — "위기→교수자 대시보드", "학습자 턴→리뷰+교수자 대시보드"(list_all_sessions include_turn_evaluation=True로 1·2차 N+1 경로 모두 브라우저 end-to-end). (2026-07-02)
  • 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 대시보드가 소유한다.