8월 7일까지 워킹트리에만 남아 있던 미커밋 작업을 커밋한다. 여러 사본 폴더(worktree·clone)에 흩어져 있던 중간 스냅샷을 정리하기 전에 원본을 git 이력으로 고정하는 것이 목적이다. - contracts/routes/services: measurement, outcome_trajectory, rupture_repair, deliberate_practice, calibration_transfer, supervision_research, multimodal_alliance, continuous_improvement 계열 신규 모듈과 테스트 - infra/db/init: 07~16 마이그레이션(측정 기반~calibration transfer 실행) - apps/web: 세션 리뷰 카드·관리 화면·E2E 스펙 추가 - docs/ops: G0~G8 라이브 통합·배포·롤백 증거 문서와 evidence JSON/PNG - scripts: smoke·ledger·릴리스 에이전트·NAS 프리뷰 운영 스크립트 engine.public 로그 .bak과 apps/web/test-results 산출물은 커밋에서 제외했다.
62 lines
3.3 KiB
Markdown
62 lines
3.3 KiB
Markdown
# G7 Multimodal Alliance 실제 통합 증거 — 2026-08-06
|
|
|
|
## 판정
|
|
|
|
로컬 실제 API(`127.0.0.1:8014`)와 개발 PostgreSQL에서 G7의 동의·오디오 시계·독립 측정·
|
|
보정 융합·역할 경계·철회·삭제 원장을 통과했다. 입력은 1.2초 synthetic WAV에서 계산한 메타데이터이며,
|
|
원음 바이트나 축어록 본문을 API 원장 또는 이 문서에 싣지 않았다.
|
|
|
|
- 실행기: `scripts/smoke-multimodal-alliance-api.py`
|
|
- 기계 판독 증거: `docs/ops/evidence/multimodal-alliance-live-api-2026-08-06.json`
|
|
- benchmark: `apps/api/app/data/multimodal_alliance_benchmark_g7.v1.json`
|
|
|
|
## 실제 영속 식별자
|
|
|
|
- learner: `ed210cd6-b32f-4758-8ccf-6bc85fc07970`
|
|
- session: `92631bf3-ebee-4c5b-aec0-d28ae498cb7a`
|
|
- consent snapshot: `d0d25930-42b7-4894-a5e4-9f0482074dbb`
|
|
- timeline: `74a76d59-0fc7-4efc-a26c-cfa62b2982af`
|
|
- audio asset metadata: `355ea278-aae3-4759-b608-8e710be609e2`
|
|
- fusion records:
|
|
- `839c77ad-96ef-442d-8951-74c6989df86f`
|
|
- `c4dc7e0e-9588-4ba9-8f32-8239e825971f`
|
|
- `be038390-cfd0-47b4-b9f4-3d3f869978c5`
|
|
- withdrawal snapshot: `b40e5a0e-acf5-4ef8-935c-944a71da0972`
|
|
- deletion requests:
|
|
- learner explicit: `64d742cc-6c17-46db-aa0b-a3a7dfe77924`
|
|
- consent withdrawal: `dbed4464-ce58-5328-a336-064eebe37d6f`
|
|
|
|
## 통과한 경계
|
|
|
|
1. 내부 ingestion은 토큰 없음 `401`, 오토링 불일치 `403`으로 DB acquire 전에 차단됐다.
|
|
2. 같은 submission 재시도는 동일 ID와 `idempotent_replay=true`, 내용 변경 재시도는 `409`였다.
|
|
3. 한 오디오 시계에 word timestamp 2개와 silence/overlap/interruption/prosody 이벤트 4개가 정렬됐다.
|
|
4. text와 voice 측정은 세 축에 각각 독립 원장으로 6개 저장됐다.
|
|
5. benchmark의 음성 추가 이득 판정은 `[true, false, false]`였다. 이득이 없거나 음성이 오류인 경우
|
|
text-only로 보수적으로 내려갔다.
|
|
6. learner와 같은 cohort teacher는 안전 메타데이터를 읽었고, teacher 원음 접근은 `403`, 다른 cohort
|
|
teacher의 세션 접근은 `404`였다.
|
|
7. 응답에 raw transcript, utterance text, emotion label, diagnosis, total score가 없고
|
|
`clinical_claim_allowed=false`가 유지됐다.
|
|
8. 동의 철회 뒤 새 voice timeline ingestion은 `409`로 닫혔다.
|
|
9. learner 명시 삭제와 철회 연동 삭제를 모두 tombstone으로 완료했다. 이후 raw audio 목록은 비었고,
|
|
word/event 및 voice measurement/fusion도 read model에서 제거됐다. transcript 보존 정책은 별도 유지됐다.
|
|
|
|
## 검증 명령
|
|
|
|
```powershell
|
|
$token = 'g7-' + ('y' * 40)
|
|
C:\Users\encep\AppData\Local\Programs\Python\Python311\python.exe -X utf8 `
|
|
scripts\smoke-multimodal-alliance-api.py `
|
|
--api-base-url http://127.0.0.1:8014 `
|
|
--internal-token $token
|
|
```
|
|
|
|
실행 결과는 전 항목 통과였다. 별도 저장소 단위·DB 회귀는 G7 관련 97개 테스트를 통과했고,
|
|
`scripts/smoke-multimodal-alliance-ledger.py`도 실제 PostgreSQL에서 통과했다.
|
|
|
|
## 외부 환경 경계
|
|
|
|
이번 증거는 제품 원장과 HTTP 경계를 닫는 synthetic-audio 실증이다. 실제 Deepgram interim/final,
|
|
물리 마이크, 공개 WSS, 50분 양방향 장시간 운전은 기존 B2 음성 캐스케이드 외부 환경 게이트가 계속 소유한다.
|
|
이 항목을 로컬 synthetic 증거로 대체하거나 DONE으로 위장하지 않는다.
|