합성 통화 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·라벨 재현을 자동으로 대조할 수 있다.

판정 (전부 규칙)

완료 조건

한계 (절대 원칙 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, 정성윤) — 아래 「보드 최신화」는 위 닫음 기록(ai 11:06)과 거의 같은 시각(main 976f42e, 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