[Agent] 승인 메시지에서 죽는 preview 링크를 뺀다 [ #391 ] - #393
Merged
Merged
Conversation
두 승인 게이트가 대화 메시지 본문에 태스크의 previewUrl 을 넣고 있었다. 그런데
POST /preview-sessions/{id}/access 가 accessToken 을 회전시켜 이전 주소를 죽인다
(G4, #77). 사용자가 화면에서 프리뷰를 여는 것이 곧 그 호출이므로, 이 링크는
사용자가 프리뷰를 여는 순간 404 가 되고 대화 이력은 남으므로 영구히 죽은 링크가
된다.
BE 가 스스로 이걸 문서화해 놓고 있었다 — PreviewSessionController:47 이 "이전에
받은 주소(작업 응답의 previewUrl 포함)는 즉시 404가 됩니다" 라고 적는다. 알면서
그 URL 을 메시지에 넣고 있었다.
2026-09-25 dev 검증에서 실제로 걸렸다. nginx 로그가 둘을 가른다 — 회전된 새
토큰으로 연 iframe 은 200(cafe-home 자산 전부), 대화창 링크의 옛 토큰은 404.
FE 코드는 #77 때 이미 방어돼 있었는데도 그 메시지를 믿고 움직인 쪽은 죽은 주소를
잡았다.
안내조차 남기지 않았다. 승인 카드가 이미 화면에 프리뷰와 함께 뜨므로 주소도
안내도 중복이고, 주소는 거기에 해롭기까지 했다.
FRONTEND_API_GUIDE.md 483행도 고쳤다. "previewUrl 은 태스크 응답에서 얻습니다"
라고만 적혀 있어 501행("반드시 access 응답의 previewUrl 을 사용")과 충돌했다 —
483행만 읽으면 죽은 주소를 쓴다.
필드 이름이 같은 것이 함정의 뿌리라는 건 #392 로 분리했다(호환 깨는 변경).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013y8USoCXTsRTATAhy88M93
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
두 승인 게이트가 대화 메시지 본문에 태스크의
previewUrl을 넣고 있었다.그런데
POST /preview-sessions/{id}/access가 accessToken 을 회전시켜 이전 주소를 죽인다(G4, #77). 사용자가 화면에서 프리뷰를 여는 것이 곧 그 호출이므로:BE 가 스스로 이걸 문서화해 놓고 있었다
PreviewSessionController:47:알면서 그 URL 을 메시지에 넣고 있었다. 내부적으로 모순이었다.
실제로 걸렸다 — 로그가 둘을 가른다
2026-09-25 dev 검증(project 63,
cafe-home):FE 코드는 #77 때 이미 방어돼 있었다(
agentPreview.utils.ts:8: "Agent 태스크 응답의 previewUrl이 아니다 — 그쪽은 토큰이 회전되어 이미 무효일 수 있다"). 그런데도 이 메시지를 믿고 움직인 쪽은 죽은 주소를 잡았다. 실제 사용자도 같다.고친 내용
주소를 뺀다. 안내조차 남기지 않았다 — 승인 카드가 이미 화면에 프리뷰와 함께 뜨므로 주소도 안내도 중복이고, 주소는 거기에 해롭기까지 했다.
FRONTEND_API_GUIDE.md483행도 고쳤다. "previewUrl 은GET /agent/tasks/{taskId}응답에서 얻습니다" 라고만 적혀 501행("반드시 access 응답의 previewUrl 을 사용")과 충돌했다 — 483행만 읽으면 죽은 주소를 쓴다. 회전 경고와 이번 사고를 함께 박았다.검증
chatMessageShowsThePreviewUrlAndThe…→…ButNeverThePreviewUrl로 바꾸고contains(url)을doesNotContain으로 뒤집었다. 승인을 가리키는 정보(승인 ID·타입·저장소 기본 이름)는 그대로 남는지도 같이 본다 — 링크만 빼는 것이고 메시지를 비우는 게 아니다별건
필드 이름이 같은 것(
previewUrl이 두 응답에 있고 하나만 유효)이 함정의 뿌리다. #392 로 분리했다 — 호환 깨는 변경이고 FE 는 main 머지가 곧 프로덕션이라 순서를 맞춰야 한다.Closes #391
🤖 Generated with Claude Code
https://claude.ai/code/session_013y8USoCXTsRTATAhy88M93