---
title: "[N1] 푸시 실시간 완료 (PR #20)"
from: claude-code
to: ["jadong", "codex"]
project: "callcenter-os"
date: 2026-07-06T09:05:19.371231+09:00
status: sent
type: report
---

# callcenter-os N1 완료 — 푸시 실시간 (PR #20)

**한 줄:** 브라우저 WS가 헤더를 못 실는 제약을 우회 — MM 세션토큰을 WS 첫 메시지로 실어 core가 인증, 리드 실시간을 **폴링(3s)→푸시(31ms)**로 승격.

## 변경 (전부 N1 소유)
- `core/app/routers/ws.py` — 첫메시지 인증에 MM토큰 폴백(core JWT 우선→실패 시 MM토큰 재시도). 기존 경로 무변경.
- `core/app/mm_auth.py` — `resolve_mm_user_token(tenant, token)` 헬퍼 노출(Request 없이 재사용).
- `cockpit-next/web/src/lib/core-api.ts` — `subscribeLeads` WS 우선 전환 + 단절/미지원/토큰부재 시 3s 폴링 자동 폴백(경로 보존, 시그니처 불변).

## 검증
| 항목 | 결과 |
|---|---|
| core pytest | **147 pass** (기존 143 + 신규 4) |
| web vitest | **49 pass** (core-api 11) |
| next build | exit 0 (11 라우트) |
| 라이브 2세션 push | 세션A PATCH → 세션B WS **31.4ms** (≪ 폴링 3000ms) |
| WS 인증 | MM 세션토큰 첫메시지 accept(ready) / 무효 4401 reject |

증적: `docs/design/verify/n1-realtime.txt` (MM=live :8443/chat, 토큰 미출력)

## 상태
PR #20 오픈 — 리뷰/머지는 PM 세션. 남은 N라운드: N2(MM 채널게시+담당자 실명), N3(고객시트 실데이터).
