131 lines
14 KiB
Markdown
131 lines
14 KiB
Markdown
# Vignette 할 일
|
|
|
|
> 상태·결정·검증 증거의 SSOT는 [`dev_dashboard.html`](./dev_dashboard.html)이다. 이 문서는 실행할 다음 행동의 인덱스다.
|
|
> 2026-09-07 이전 완료 로그와 세부 이력은 [정리 전 TODO 원문](./archive/project-cleanup-2026-09-07/TODO-before-cleanup.md)에 보존했다. 2026-09-01 배포 당시의 근거는 [NAS 배포 증거](./ops/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도 원본에서는 완료다. [14개 항목 매핑](./ops/spreadsheet-implementation-audit-2026-09-09.md)은 원본 상태와 로컬 재검증을 구분한다. 원본을 수정하지 않는다.
|
|
|
|
| ID | 로컬 상태 | 우선 행동 및 조치 결과 | 원본 상태 | 완료 조건 및 검증 증거 |
|
|
|---|---|---|---|---|
|
|
| REQ-009 | 원본 완료 · 기존 구현 재검증 수용 | 스트림 오류의 입력 복원·부분 턴 미저장·재시도/닫기·음성 상태 복원 구현을 route fixture 기반 browser 재검증으로 수용했다. | 완료 | `uc-session-conversation`과 `calibration-transfer` browser 44 passed/0 failed/0 skipped. fixture 기반 local proof이며 이번 재검증은 build·새 public live 검증·새 배포를 수행하지 않았다. |
|
|
| REQ-010 | 원본 완료 · 추가 수정 로컬 검증 수용 · 추가 수정 미배포 | 0턴/client-only 회기가 첫 완료·반복·경험 배지 집계에 섞이는 결함을 찾아 기존 완료 집계와 같은 counselor/learner 발화 조건으로 정렬했다. | 완료 | 계약 RED 4건 뒤 GREEN 4건, 지정 API 20건, API 전체 1108 passed/1 skipped/1 warning, browser 44 passed/0 failed/0 skipped. 이번 추가 수정은 build·새 public live 검증·배포를 수행하지 않았다. |
|
|
| REQ-011 | 원본 완료 · 기존 구현 재검증 수용 | OAS G5 자기예측 저장·잠금의 기존 해결 증거를 route fixture 기반 browser 재검증으로 수용했다. | 완료 | `uc-session-conversation`과 `calibration-transfer` browser 44 passed/0 failed/0 skipped. fixture 기반 local proof이며 이번 재검증은 build·새 public live 검증·새 배포를 수행하지 않았다. |
|
|
| SRC-001 | 역사 replica 수식 보정 완료 · 과거 수식 오류 미재현 | 과거 replica의 `#REF!` 및 15행 집계 범위 보정은 보존한다. 최신 원본 재점검에서는 이를 현재 원본 결함으로 주장하지 않는다. | 해당 없음 | 과거 수정본은 `outputs/01a04217-f73b-7303-b597-401fa7f5d290/Vignette_개선관리_완료.xlsx`에 보존한다. |
|
|
|
|
## P0 운영·외부 게이트
|
|
|
|
| ID | 다음 행동 | 완료 조건 / 차단 이유 |
|
|
|---|---|---|
|
|
| AVATAR-001 | 아바타 fail-closed 후보를 보존 경계 안에서 검증한다. | 93 objects·52,973 bytes inventory, DB 참조 보존, public fallback·GET/HEAD full decode·digest receipt·실브라우저 확인 뒤에만 승격 판단. 배포는 승인 필요. |
|
|
| REQ-008 | NAS 재부팅 자동복구 smoke를 소유자 승인 뒤 실행한다. | 실제 재부팅 뒤 서비스 자동복구, health·로그인·데이터·이미지와 배포 SHA를 확인. Windows 개발 task 이력은 대체 증거가 아니다. |
|
|
| BACKUP-001 | 백업 운영화를 끝낸다. | 실패 알림, off-host 암호화 복제, 정기 restore drill과 보존 정책을 운영 증거로 남긴다. 첫 sidecar 성공만으로 닫지 않는다. |
|
|
| 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 동일성을 비교한다. | 기관 키를 게이트웨이 호스트에 승인 주입한 뒤 응답·계량·오류 표면화 비교. 키 주입 전에는 실행하지 않는다. |
|
|
| 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를 승인한다. |
|
|
|
|
## 외부 거버넌스와 파일럿
|
|
|
|
| ID | 다음 행동 | 완료 조건 / 차단 이유 |
|
|
|---|---|---|
|
|
| C-001 | 적격 외부 임상 검수 패킷을 전달하고 응답을 수집한다. | 사례별 판정·근거·수정 요구·재검토·검토일 30개, 청소년 답변 6개, 승인 10필드와 서명 증거가 hash/version과 일치하고 `review_complete=true`. |
|
|
| GOV-001 | 한신대 데이터/SSO 서면 증거를 수집한다. | SSO claim map, 추가 축어록·미성년 동의, 개인정보 처리방침에 대한 기관/data steward 서면 증거. |
|
|
| L1-001 | 저작권·등재 문서의 스택 설명을 정합화한다. | FastAPI 유지 사유와 계약 우선 Node 전환 계획을 외부 제출 문서에 반영. |
|
|
| P3-001 | 20명 파일럿을 시작한다. | roster, 법무 승인 동의, 회기 완료 증거. |
|
|
| P3-002 | 효과성/KPI를 산출한다. | 3척도 pre/post, SUS, κ/ICC, 환각률을 `kpi_report.json`으로 재현. |
|
|
| P3-003 | 재귀학습 데이터셋 승인과 동의 감사를 끝낸다. | consent·PII·IAA·legal 승인 export 및 withdrawal log 종결. |
|
|
|
|
## 제품·품질 후속
|
|
|
|
| ID | 다음 행동 | 완료 조건 / 차단 이유 |
|
|
|---|---|---|
|
|
| VOICE-001 | s2s 2차 비교 PoC를 수행한다. | 20턴 기준표의 전사·안전·감사·지연 비교 보고서로 채택/폐기 판단. |
|
|
| FASTLOOP-001 | 외부 fallback을 구현한다. | 로컬 우선 분류기, Haiku/Solar fallback, 동의·전송 가드·관측을 테스트한다. |
|
|
| FINETUNE-001 | 재귀학습 fine-tuning 경로를 준비한다. | 동의·데이터셋 gate가 닫힌 뒤 pipeline과 few-shot 자동갱신 범위를 검증한다. |
|
|
| RETENTION-001 | health retention을 적용·검증한다. | raw 90일, rollup 365일, 수동 escalation 정책을 검증한다. |
|
|
| EVALHOOK-001 | fast-loop `eval_hook` 사용 정책을 확정한다. | 주입된 hook의 활성화 조건과 관측 경계를 소유자가 결정한다. |
|
|
| NODE-001 | Node gateway 전환 후보의 계약 범위를 정한다. | live endpoint conformance, `TurnEvaluationPayload` adapter, admin mapper의 작업 패킷과 회귀를 확정한다. |
|
|
| MIGRATION-001 | idempotent DB migration runner 도입 여부를 결정한다. | init SQL과 runner의 역할 경계, 인프라 영향, 소유자 승인을 확정한다. |
|
|
| OPS-001 | 운영 티켓 자동 분류·처리 후속을 설계한다. | 관리자 승인 뒤 이슈/PR/작업 스레드를 생성하는 범위와 audit 경계를 확정한다. |
|
|
| E2E-001 | 전 기능 E2E 후속을 분류한다. | 이번 focused 범위에서 locator 18건을 교정하고 keyboard 1건을 해결했다. `npm run e2e` 전 기능 묶음에서 focused 범위 밖 케이스를 실행하고 실패별 재현·원인·수정 명령을 분류한다. 과거 sweep 실패를 오늘 재현 결함으로 단정하지 않으며, 실API/DB·장치 검증은 fixture 결과와 분리한다. |
|
|
| CUA-128 | 실제 배포 Computer Use 128 시나리오를 역할·승인 경계 안에서 재개한다. | 카탈로그 생성은 완료했으나 실배포 전체 검증은 미완료다. SHA `1306c524`에서 H09와 일반 학습자 로그인·교차 역할 차단·P4 추천·R09 잠금·R14 워크시트 보존을 재확인했지만, T18은 learner 브라우저만 있어 기존 RED를 종결하지 않았다. 순수 teacher·OFF 계정, 교수자 쓰기, 모바일과 독립 관찰자 공개 검증이 남아 있다. [실행 보고](./qa/production-computer-use-report-2026-09-09.md)를 따른다. |
|
|
|
|
## 임상 콘텐츠 후속
|
|
|
|
| ID | 다음 행동 | 완료 조건 |
|
|
|---|---|---|
|
|
| CONTENT-001 | 태깅 축어록 4종 활용 gate | 임상팀 확정본과 source별 활용 범위 |
|
|
| CONTENT-002 | C1 사례개념화 루브릭 | 확정 콘텐츠와 AI 추출/채점 calibration |
|
|
| CONTENT-003 | CBT 체인·이론부합 루브릭 | 임상팀 확정본과 검증 기준 |
|
|
| CONTENT-004 | 평가 골든셋 | 승인된 콘텐츠와 calibration evidence |
|
|
| C-001 | 위기개입 프로토콜 임상 승인 | C-001 외부 검수와 같은 서면 승인 gate |
|
|
|
|
## 완료 요약
|
|
|
|
| 범위 | 상태 | 근거 |
|
|
|---|---|---|
|
|
| 원본 14개 항목 | 원본 완료 13 · 검토 1 | 2026-09-09 최신 원본에서 REQ-001~011과 C-002·C-003은 완료, C-001은 검토다. 과거 완료 9·검토 2는 당시 11개 항목 수집본의 역사 기록이다. |
|
|
| NAS A 경로 | 2026-09-01 당시 완료 | NAS `vignette-prod` 배포, migration 20/21/22, OAuth 실계정 새 사례→턴→리뷰 E2E, 첫 일일 backup sidecar 실행. |
|
|
| NAS 2차 실배포 & Cloudflare Pages | 2026-09-08 당시 배포 기록 | Forgejo/GitHub master `a0311c59`/`d9bb5b36`의 당시 NAS API·Web 컨테이너 교체, 사전 DB 덤프(12MB), Cloudflare Pages 174개 에셋과 당시 health/auth/web 폐루프·TDD 1104 passed 기록을 보존한다. 이는 2026-09-09의 새 live 검증이나 현재 작업트리 배포 상태 주장이 아니다. [배포 파이프라인](./ops/deployment-pipeline.md) 참조. |
|
|
| NAS 3차 실배포 | 2026-09-09 운영 배포 기록 | Forgejo `1306c524`의 NAS API·engine·web과 Pages preview를 배포했다. 동시 API·engine 기동의 공백 관찰 뒤 같은 버전에서 healthy, public health db/engine true, auth 401, web 200, P4 6턴과 DB 전체 집계 동일을 확인했다. 무중단 증거가 아니며 GitHub 미러 push는 실행하지 않았다. |
|
|
| G0~G6·G8 내부 구현 | 완료 증거 보존 | G7 외부 종료와 G8 실DB/public 사람 게이트는 계속 열린다. |
|
|
| B3·B3-신규 소유자 결정 | 결정 및 기존 구현 완료 | 원문은 [정리 전 백로그 원문](./archive/project-cleanup-2026-09-07/backlog-2026-06-26-before-cleanup.md), 남은 후속만 위에 둔다. |
|
|
| 과거 Windows Compose 패키징 gate | SUPERSEDED | 9/1 NAS docker-compose 배포로 현 production 전환 항목에서 제거했다. 새 secret 주입 과제를 만들지 않는다. |
|
|
| CLEANUP-001 | source 경로·문서·코드 경계 정리 완료 | `tmp/`, `apps/web/tmp/`, legacy `.bak` 4개, attachment·중복 generation 결과를 `outputs/local-history/retained-sources-2026-09-07/`에 가역 보존했다. 84 regular source와 supplementary 4 files, junction 4개의 대조를 마쳤고 영구 삭제는 0건이다. API 공통 outcome/practice/auth/admin/turn-memory/voice 경계와 web focus trap·동맹 scale/잠긴 점수·승인 제출 제어도 기존 책임을 보존해 정리했다. `Knip` dead-code·measurement contract·typecheck/build·Ruff, API 전체 1090 passed/1 skipped/1 warning, gateway 전체 71 passed/1 warning을 통과했고 중복은 17 clone/294줄→3 clone/48줄·265 tokens(0.04%)이다. orchestrator retry는 임상 검수 exact-HEAD 원본 고정 경계이며, voice abort·repository query는 서로 다른 lifecycle·도메인 계약으로 유지한다. |
|
|
| RUNTIME-001 | 현시점 보존 결정 | Windows public-runtime/watchdog scripts는 복구 경로로 유지한다. 이 PC의 두 Scheduled Task가 Disabled라는 읽기 전용 사실은 운영 서버 다운을 뜻하지 않으며, 삭제 승인 대기 작업을 새로 만들지 않는다. |
|
|
| REFACTOR-002 | 완료 | `SessionEvaluationWrite`의 SQL/cache를 repository로, 공통 정규화·마스킹을 persistence values로 분리했다. AST 기존 대조 20+12 차이 0, focused 149, API 전체 1090 passed/1 skipped/1 warning, gateway 71 passed/1 warning, API 타입 체크·Ruff 통과. 기존 선택형 격리 DB `test_admin_usage_postgres.py` 1 skipped는 `VIGNETTE_USAGE_TEST_DATABASE_URL` 미설정이며 새 skip은 없다. |
|
|
| REFACTOR-001 | 완료 | `sessionViewModel`로 표시 모델을 분리하고 `voiceCapture`의 캡처·status 책임은 유지했다. lifecycle setter bag hook은 결합도를 키워 채택하지 않았다. Space retry→pause, empty-audio fixture, `SessionReview.learnerFeedbackEnabled:true` 누락을 교정했고 제품 feedback guard는 유지했다. 최종 UI 두 묶음은 97 passed/1 skipped: `session-mvp`+`uc-session-coach-voice` 58 passed/0 skipped, alliance+admin 39 passed/1 skipped다. skip은 `uc-review-alliance-pulse` 320px desktop 중복 제외이며 mobile은 통과했다. disabled AI feedback privacy focused 1 passed(exit 0)도 유지한다. |
|
|
|
|
<details>
|
|
<summary>Outcome & Alliance OS 완료 ID</summary>
|
|
|
|
### I-0. G0 Measurement Truth Foundation
|
|
|
|
완료 증거는 [대시보드](./dev_dashboard.html)에 보존한다.
|
|
|
|
### I-1. G1 Alliance Core
|
|
|
|
완료 증거는 대시보드에 보존한다.
|
|
|
|
### I-2. G2 Longitudinal Outcome Trajectory
|
|
|
|
완료 증거는 대시보드에 보존한다.
|
|
|
|
### I-3. G3 Rupture & Repair Lab
|
|
|
|
완료 증거는 대시보드에 보존한다.
|
|
|
|
### I-4. G4 Deliberate Practice Engine
|
|
|
|
완료 증거는 대시보드에 보존한다.
|
|
|
|
### I-5. G5 Calibration Mirror & Transfer
|
|
|
|
완료 증거는 대시보드에 보존한다.
|
|
|
|
### I-6. G6 Supervision & Research OS
|
|
|
|
완료 증거는 대시보드에 보존한다.
|
|
|
|
### I-7. G7 Multimodal Alliance
|
|
|
|
내부 완료 증거를 보존한다. 외부 종료는 `G7-EXTERNAL`에서 추적한다.
|
|
|
|
### I-8. G8 Autonomous Content & Continuous Improvement
|
|
|
|
내부 완료 증거를 보존한다. 실DB/public 사람 게이트는 `G8-EXTERNAL`에서 추적한다.
|
|
|
|
**AOS-001** provenance inventory · **AOS-002** measurement schema · **AOS-003** benchmark case schema · **AOS-004** legacy adapter · **AOS-005** structured schema · **AOS-006** session measurement API · **AOS-007** self-assessment lock · **AOS-008** Alliance Pulse UI · **AOS-009** measurement drilldown · **AOS-010** drift/calibration job · **AOS-011** deploy proof manifest · **AOS-012** SSOT/TODO 동기화.
|
|
|
|
</details>
|
|
|
|
## 문서 검증
|
|
|
|
```powershell
|
|
python -X utf8 scripts/check-dev-dashboard-ssot.py --json
|
|
git diff --check
|
|
```
|