열린 쓰기 둘 — /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 가 「토큰 만료보다 이쪽이 먼저」 라고 적었다.

⚠ 카드 피드백에는 설계 제약이 있다

카드 피드백에 상담원 토큰을 그대로 걸면 안 된다는 제약이 미결 항목에 적혀 있다 — 먼저 그 항목을 읽는다. 두 경로에 같은 문을 달 수 있는지부터가 판단 대상이다.

완료 조건


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 — 완료 확인 (장민석)