- '읽기 페이지 설정'의 평면도/입면도 페이지 번호가 프롬프트 힌트로만 쓰이고
PDF 전체가 Gemini 로 전송되던 문제 해결 — pdf-lib 로 지정 페이지만 잘라 전송
- 분할본이 12MB 이하면 inlineData(base64) 즉시 전송 → Files API 업로드·폴링 제거,
초과 시에만 Files API 로 fallback
- 분할 시 buildPrompt 를 페이지번호 힌트 대신 평면도/입면도 순서 매핑으로 전환
- 유효 페이지 0개 → 422 INVALID_PAGE_RANGE, 분할 실패 → 422 PDF_SPLIT_FAILED
- 설계 문서 추가(docs/superpowers/specs/2026-06-21-pdf-page-split-design.md)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
[작업내용] :
- 서버가 120,011ms 에 200 으로 정상 완료했는데 클라이언트 AbortController 가 정확히 120,000ms 에
fetch 를 끊어 타임아웃 toast 가 뜨던 문제 — gemini-3.1-pro-preview(thinking 비활성 불가)
+ MEDIA_RESOLUTION_HIGH PDF 분석은 정상 응답도 2분을 넘길 수 있어 300초로 확대
- 추후 진단용으로 서버에 단계별 소요시간(fileReady/generate) debug 로그 추가
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
[작업내용] :
- iron-session 세션 검사 추가 — 페이지용 layout redirect 가 API 라우트를 보호하지 않아
익명 요청으로 Gemini 과금이 가능하던 문제 차단(401)
- 사용자별 분당 5회 in-memory 레이트리밋(429) — 연타 업로드 과금 폭주 방지
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
finally 에서 await fileManager.deleteFile(...) 가 catch 의 return 을 게이팅해,
정리용 네트워크 호출이 행되면 500 응답조차 클라이언트로 송신되지 않던 문제를 해소한다.
- deleteFile 을 await 하지 않고 fire-and-forget + .catch 로 분리해 응답을 정리 완료에 묶지 않음
- 상주 Node 서버(PM2 next start)이므로 응답 후에도 detached 삭제가 정상 완료되며,
미삭제 시에도 Gemini 측에서 자동 만료
- 클라이언트 120s 타임아웃과 짝을 이뤄 한쪽이 행되어도 스피너에 갇히지 않음
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 「배치면 초기설정」 모달 寸法入力方法 라디오에 '도면 파일 업로드' 옵션 추가
- 선택 시 PDF 파일 업로드 + 읽기 페이지 설정(전체/입면도·평면도 지정) UI 노출
- 保存 클릭 시 /api/gemini/floor-plan 호출 → 외곽선을 캔버스에 반영한 후 기존 저장 흐름 진행
- Gemini File API 업로드 + finally 파일 폐기, 정점/면적 검증, 페이지 힌트 프롬프트 주입
- usePdfImport 훅: mm→canvas 좌표 변환, CCW 정규화, 기존 외곽선 덮어쓰기 confirm 후 QLine/QPolygon 생성
- @google/generative-ai 의존성 추가, GEMINI_MODEL env 4개 환경에 동기화
- 다국어(ja/ko) 메시지 추가, .playwright-mcp/ gitignore
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>