C-6·D-5 탐지 결과 저장 — 지금은 출력이 버려진다

무엇을

call_guard_flag·voice_outlier 테이블에 실제로 쓰는 경로를 만든다. 스키마는 2026-09-09 에 만들었다(_project/decisions/205 ②③) — 배선이 없다.

왜 — 오늘 구현한 기능의 출력이 사라지고 있다

스키마 QA 가 짚은 것: C-6 탐지 결과(CallGuardFlag)와 D-5 이상 구간 (SpeakerTemperature)을 담을 테이블이 아예 없었다. 그래서 —

compliance_flag 로 대체할 수 없다 — rule_code 가 compliance_rule(C-1~C-4)에 FK 로 묶여 있고, 무엇보다 화자가 반대라 섞으면 D-4 재학습 데이터가 오염된다.

⚠ 2026-09-14 정정 — C-6 배선은 걷어냈다

같은 날 장민석 님이 server 브랜치에서 C-6 을 다른 방식으로 배선했다(w4-call-guard-wiring(server 브랜치) — 콜 미디에이터가 POST /hub/call-guard-checks 를 부르고 결과를 대시보드로도 보낸다). 둘 다 들어가면 같은 발화를 두 번 탐지·저장한다. 사용자 결정으로 민석 님 방식을 남기고 이 티켓의 전사 수신 경로 배선·call_guard_flag 리포지토리·기록 포트를 걷어냈다. 결과를 대시보드로 보낼 수 있는 쪽이 그쪽이다. 아래 완료 조건 중 C-6 두 줄은 그 티켓에서 끝난다.

남은 이 티켓의 몫: D-5 저장 경로 · robust_z 비노출 테스트 · document 적재 스크립트 · 탐지기 strip() 오프셋 버그 수정. 민석 님 저장소는 조항이 document 에 없으면 근거를 NULL 로 넣는다 — 적재 스크립트를 돌리면 근거가 이어진다.

완료 조건

설계 결정 (2026-09-14)

검증

server 341 · ai 204 · 계약 4+3종 KEPT · integration 6(로컬 postgres:17 + 현재 schema.sql) · 실제 앱 → 실제 DB 로 「전화번호 + 욕설 + 위기 신호」 발화를 넣어 call_guard_flag 에 insult(5.1)·distress(5.4) 두 행이 마스킹된 자막 구간으로 남는 것을 확인