열린 쓰기 둘 — /close 와 카드 피드백에 문이 없다
무엇을
POST /hub/calls/{id}/close 와 카드 피드백이 어느 토큰도 요구하지 않는다(미결 항목 09-21).
둘에 맞는 문을 단다.
지금 상태
server/main.py 주석은 「대시보드가 직접 부르는 쓰기는 사람 토큰(require_agent) 몫」이라 적지만
실제로 걸린 것은 요약 확정·재수정뿐이다(postcall_router.py·card_feedback_router.py 에 require_agent 0회).
서비스 토큰 문(decisions/120)도 이 둘은 비껴간다. decisions/122 가 「토큰 만료보다 이쪽이 먼저」 라고 적었다.
⚠ 카드 피드백에는 설계 제약이 있다
카드 피드백에 상담원 토큰을 그대로 걸면 안 된다는 제약이 미결 항목에 적혀 있다 — 먼저 그 항목을 읽는다. 두 경로에 같은 문을 달 수 있는지부터가 판단 대상이다.
완료 조건
- 두 경로 각각 — 토큰 없음 401 · 틀린 토큰 401 · 맞는 토큰 200 테스트
- 프론트(
apps/call)가 그 토큰을 실어 보내는지 조서희 님과 맞춘다 — 서버만 잠그면 화면이 깨진다 - 읽기 경로(통화 목록·전사·기록) 무인증은 이 티켓 범위 밖임을 적고 미결에 그대로 둔다
2026-09-22 장민석 — 서버 쪽을 넣었다(
_project/decisions/315, 운영 배포 전)./close는 상담원 토큰 또는 서비스 토큰, 카드 피드백은 상담원 토큰을 확인하되 신원을 버린다(설계 제약을 이렇게 풀었다). 두 경로 각각 없음·틀림 401 · 맞음 200/201 테스트, 재생기--close는CORE_API_TOKEN을 싣는다. 남은 완료 조건: 프론트(apps/call)가 토큰을 싣는 것 — 조서희 님께 미결로 넘겼다 (상담원 토큰을 PC 에 남기는 것 포함). 그 전엔 머지하지 않는다. 읽기 경로 무인증은 범위 밖이고 미결에 그대로 있다.
2026-09-22 장민석 — 이어서:
POST /hub/routing-decisions도 서비스 토큰 문에 넣었다(decisions/126이 넘긴 몫, 쓰기 경로 여덟째). 부르는 곳이 생기기 전에 잠갔다 — 콜 미디에이터의 서버 호출은 이미CORE_API_TOKEN을 싣는다(0.2.2). 프론트는 부르지 않는다(전수 grep). 앞의 두 경로는 PR #111 로 운영에 나갔다(0.1.25) —closeCall토큰은 #116 으로 들어갔고, 카드 피드백 토큰은 아직 프론트에 없다.
2026-09-22 — 완료 확인 (장민석)
- 서버:
0.1.25로 배포(decisions/315) —test_close_and_feedback_guards.py5건 - 프론트:
coreClient.ts가 카드 피드백(373행)·/close(437행)에Authorization: Bearer를 싣는다(조서희 #116·#120) - 읽기 경로 무인증은 범위 밖 — 미결 「읽기 경로 인증 없음」에서 이어서 한다