합성 통화 E2E 왕복 검사 — 대본 → 콜 미디에이터 → 서버 → DB → 대시보드 API
무엇을
합성 대본 한 건이 실제 통화와 같은 길 — 재생기 → 콜 미디에이터 /dev/text → POST /hub/calls·/hub/transcripts →
마스킹·트리거·검색·콜 가드·컴플라이언스 → PostgreSQL → /ws → 통화 후 POST …/close → 대시보드가 읽는
GET /hub/calls/{id}/transcript·/record — 를 끝까지 갔다 오는지 규칙으로 판정하는 도구(e2e_check.py)와 보고서.
왜
09-17 로컬 E2E 는 사람이 눈으로 봤다(4건). 대본이 24건으로 늘면 눈으로는 못 본다. 대본에 라벨(expected)이 있으니
왕복·SEC-1·라벨 재현을 자동으로 대조할 수 있다.
판정 (전부 규칙)
- 왕복: 확정 자막 수 == 턴 수 · 화자 순서 · DB
transcript_segment행 수 - SEC-1: 대본의 가짜 PII 원문이 DB 본문·
/transcript응답에 한 글자도 없음 - 라벨 재현: 기대 콜 가드 갈래 · 컴플라이언스 seq · 필요서류가
/record·DB 에 있는지 — 누락·과잉 건별 - 통화 후: 요약 초안 존재
완료 조건
e2e_check.py+ 순수 판정 함수 pytest(13)- 실행 보고서(
data/processed/persona-e2e/2026-09-18-1618.md) — 실패는 원인 가설과 함께 그대로 - 24건 실행 — ✅ 3 · ❌ 21(전부 시스템 쪽: 컴플라이언스 미배선 · 필요서류 규칙표 미등록/1순위 카드 의존 · SYN-020 이름 누출)
- 대시보드 실화면 확인 — SYN-020(자막·마스킹·필요서류·통화 후 처리·상담기록 자막 보기, 09-18)
- 결함 처리 후 재실행(09-18 2차) — ✅ 22 · ❌ 2(남은 둘은 검색 순위 →
decisions/208). 컴플라이언스 배선·저장, 규칙표 29, C-5 이름·P4, 대본 정합,document시드
한계 (절대 원칙 10)
STT 미경유 — 인식 오류 0 이므로 여기서 나오는 통과·실패는 배선·규칙의 동작 확인이지 성능이 아니다. source: synthetic.
2026-09-21 — 닫음
완료 조건 다섯이 다 찼다(24건 ✅22·❌2). 남은 ❌2(SYN-011·021)는 BM25 순위 문제라 운영에 dense 가 켜져야 풀린다 — decisions/208 은 121(전용 GPU EC2)로 대체됐고, 그 인스턴스가 붙으면 같은 e2e_check.py 를 다시 돌린다(새 티켓으로).
머지 주석 (2026-09-21, 정성윤) — 아래 「보드 최신화」는 위 닫음 기록(
ai11:06)과 거의 같은 시각(main976f42e, 11:14)에 서로 못 본 채 따로 쓴 것이다. 상태는 front matter(done)가 맞고, 아래 메모의 「상태는 그대로」·「류준 님이 정한다」는 위 닫음으로 이미 답이 났다. 지우지 않고 남긴다(절대 원칙 8).
보드 최신화 (2026-09-21, 정성윤 — 사용자 지시로 전체 보드를 한 번에 맞췄다).
in-progress→done. 완료 조건 다섯이 전부 체크돼 있다(09-18 2차 실행 ✅22 · ❌2). 남은 ❌ 둘(SYN-011·021)은 검색 순위 문제라 모델이 운영 경로에 붙어야 풀린다 —208이 아니라decisions/121의 몫이 됐다 → w6-gpu-model-instance. 판정이 틀렸으면 류준 님이 되돌린다.
2026-09-21 — 로컬 dense 재검사: ❌2 는 풀렸고 SYN-023 이 새로 깨졌다
같은 로컬 스택(검사 DB · ES 9.5.1 · 서버 · 콜 미디에이터)에 서버만 모델 설정으로 띄워 돌렸다. /health spokes 로 구성을 확인했다. 커밋 97f7b25-dirty, e2e_check.py --speed 6.
| 구성 | SYN-011 | SYN-021 | SYN-023 | 24건 |
|---|---|---|---|---|
| 규칙 + BM25 (09-18, 운영과 같음) | ❌ | ❌ | ✅ | ✅22 · ❌2 |
dense 만 (retrieval_dense) |
✅ | ✅ | ❌ | — (3건만) |
dense + 리랭커 (rerank) |
✅ | ✅ | ❌ | ✅23 · ❌1 |
- SYN-011·021 은 dense 만으로 풀린다 — 리랭커는 필요 없다.
decisions/121(모델은 GPU EC2) 판단 자료다. - SYN-023 이 새로 깨졌다. 대본은 「판정 0건이 정상」(집 안 옥내 배관 수리 — 시 소관 아님, TERM-3.15 에는 필요서류 규칙이 없다)인데 판정이 5~7건 나왔다. 검사 DB 로 시각을 맞춰 보면 첫 판정(TERM-3.7 누수 요금 감면,
incomplete)은 고객의 두 번째 발화 「수도관에서 물이 새요」 직후에 나왔고, 끝의 「감면은 나중에」 뒤에는 TERM-4.12 도 붙었다. 원인은 트리거가 아니라 콜 미디에이터의 절차 고르기 규칙(09-18 결정 — 「상위 카드를 순서대로 보며 규칙표에 있는 첫 조항을 절차로 삼는다」)이다. 1순위 3.15 에 규칙이 없으니 건너뛰고, dense 가 끌어올린 인접 절차 3.7 을 잡았다. BM25 에서는 3.7 이 상위 5 에 없어 가려져 있었다. 라벨을 고쳐 통과시키지 않았다(절대 원칙 8). 제안은 미결. - 보고서:
data/processed/persona-e2e/2026-09-21-1105.md(리랭커, 2건) ·-1116.md(리랭커, 24건) ·-1434.md(dense 만, 3건). 한계는 그대로 — 로컬이지 운영이 아니고 STT 를 거치지 않는다.