배치면 초기설정의 자동 확정 스위치를 제거하고, PDF 분석으로 외벽선을 미확정
상태로 그린 직후 '외벽선 자동 확정' 팝업(스위치+확인)을 띄워 분기한다.
- ON: outerLineFix 확정 + saveCanvas 영속화 → 지붕형상 설정 직행
- OFF: 미확정 유지 → 외벽선 확정 팝업(WallLineSetting)
신규 메뉴 상수 AUTO_OUTERLINE_FIX + useMenu case 로 MenuDepth01 이 자동 표시
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
docs(outerline): 외벽선 확정(handleFix) 흐름 및 PDF 자동 확정 가이드 문서 추가
```
- 외벽선 확정 (`handleFix`) 로직의 상세 흐름과 확정 후 캔버스/Recoil 불변 조건을 문서화합니다.
- PDF 도면 분석을 통한 외벽선 자동 확정 기능 구현 시 참고할 설계 가이드와 체크리스트를 포함합니다.
- `handleFix` 본체와 `useEffect`, `ccwCheck` 등 관련 로직의 역할 및 주의사항을 명확히 합니다.
```
- usePdfImport.applyOuterline 에 autoFix 옵션 추가 — outerLineFix 확정 여부를 토글에 따라 분기
- PlacementShapeSetting.handleSaveBtn 에서 토글값으로 메뉴 분기(ON→ROOF_SHAPE_SETTINGS / OFF→EXTERIOR_WALL_LINE); 모달은 MenuDepth01 이 currentMenu 변화로 자동 오픈하므로 직접 addPopup 제거
- fix: basicSettingSave 의 setMenuByRoofSize 를 skipSideEffects 가드 안으로 이동 — ON 인데도 async 저장(await post) 직후 메뉴가 EXTERIOR_WALL_LINE 로 덮어써져 외벽선 작성 팝업으로 되돌아가며 확정이 풀리던 문제 수정
- docs(claude): PDF 임포트 절에 자동 확정 분기·MenuDepth01 메뉴 연동·skipSideEffects 주의 반영
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
배치면 초기설정 PDF 입력 화면에 '외벽선 자동 확정' 토글을 추가한다.
- autoOuterLineFixState 전역 atom 신설(기본값 true), outerLineFixState 와 별개의 옵션 플래그
- ko/ja i18n 라벨·설명 키 추가
- toggle-btn 스위치를 읽기 페이지 설정 행 아래 배치, 분석 중에는 비활성화
실제 PDF 자동 확정 동작 연결(usePdfImport)은 별도 작업으로 분리.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- '읽기 페이지 설정'의 평면도/입면도 페이지 번호가 프롬프트 힌트로만 쓰이고
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>
[작업내용] :
- fitAndCenter 가 큰 도면(9.6m 초과)에 scale<1 을 좌표에 곱해 'QLine 길이×10=표시 mm' 불변식을
깨뜨리던 문제 해소 — 좌표는 실측 그대로 평행이동만 하는 centerOnCanvas 로 대체
- 화면맞춤은 fitViewport 로 분리: 캔버스 중앙 고정 viewportTransform 줌 + canvasZoomState 동기화
(useCanvasEvent 의 setZoom 은 동일 zoom 값에서 translation 을 보존)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
[작업내용] :
- 진행 중인 PDF 분석 요청을 pdfRunRef 로 추적, 모달 언마운트 시 AbortController.abort() 호출
- fetch 완료 후·저신뢰 confirm 후 두 지점에서 컨트롤러 동일성 가드 — 언마운트로 무효화된 늦은 결과가
비워진 canvas 에 적용되고 saveCanvas 가 이전 플랜 DB 를 outline-only 로 덮어쓰던 데이터 손실 경로 차단
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
[작업내용] :
- useLine.addLine 경유로 outerLine 생성 — attributes/planeSize/fontSize 부여(지붕형상 설정·처마/케라바 편집·재로드 복원에 필수)
- canvas.outerLineFix + outerLineFixState 설정 — 미설정 시 지붕형상 설정 진입이 wall.line.not.found 로 즉시 차단되던 문제 해소
- skeletonBuilder 가 소비하는 outerLinePoint 정점 circle 생성(수동 플로우와 동일)
- 조기 WALL 폴리곤 생성 제거 — 수동 플로우와 동일하게 지붕형상 설정 적용 시점에 WALL/ROOF 생성
- 짧은엣지 dedup 을 '직전 유지 정점' 기준으로 수정하고 닫힘 엣지(Gemini 닫힌 링 반환 포함)까지 검사, 임계값을 addLine 의 1unit 과 일치
- PDF 적용 후 외벽선 그리기 메뉴(진입 시 재드로잉 강등) 대신 지붕형상 설정 메뉴로 직행
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- .agents/skills/grill-me/SKILL.md, skills-lock.json 추가
- CLAUDE.md 섹션 사이 빈 줄 보정 및 Always Do의 type check 항목 제거
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
LOW-PITCH-DIAG 진단 제거로 debugCapture 사용처가 0 이 되었고, 대상
/api/debug 라우트도 구현된 적이 없어 한 번도 동작하지 않던 죽은 코드다.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
/api/debug 라우트가 구현된 적이 없어 debugCapture.log 호출이 매번 404 를
유발하던 콘솔 노이즈를 제거한다. 해당 진단은 주석에 "검증 후 제거"로 표시된
임시 코드였다(앱 동작에는 무영향).
- PlacementShapeSetting.jsx, useRoofAllocationSetting.js 에서 debugCapture
import 과 LOW-PITCH-DIAG 호출 3건 제거
- 진단 전용으로만 쓰이던 isLowPitchRestricted·LOW_PITCH_RESTRICTED_ROOF_IDS
import 도 함께 제거(notifyLowPitchRestrictionForRoofs 실기능 import 는 유지)
Co-Authored-By: Claude Opus 4.8 (1M context) <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 분석 요청 실패/행(hang) 시 전역 스피너가 영구히 멈춰 화면 복귀가
불가능하던 문제를 해소한다.
- 네트워크 구간을 try/finally 로 감싸 성공·실패·타임아웃 어떤 경로든
스피너(pdfAnalyzing·isGlobalLoading)를 반드시 해제하도록 보장
- AbortController + 120s 타임아웃으로 무한 행 차단
- alert 은 스피너 해제 후 표시(스피너 z-index 가 alert 보다 높아 가려지는 것 방지)
- pdf.import.error.timeout 메시지 키 추가(ko/ja)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- analyzePdfAndApply에서 confidence < 0.6이면 반영 전 useSwal confirm으로 사용자 확인
- pdf.import.confirm.low.confidence 메시지 키 ko/ja 추가
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit introduces a new HTML document detailing the functionality of the PDF 도면 to 외벽선 자동작성 feature, including styles and layout for improved presentation.
- Adds a new `start:btob` script to `package.json` for launching the Next.js application on port 5060 for the BtoB environment.
- Introduces `startscript-btob.js` as a convenience executable to run the `start:btob` command.
- 「배치면 초기설정」 모달 寸法入力方法 라디오에 '도면 파일 업로드' 옵션 추가
- 선택 시 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>
[작업내용] :
- 대전제 반영: 케라바 ridge 가 생기는 분기에서 c1·c2 에 붙은 outer hip 2개 제거
· inner hip(junction 너머) 보존
· __removedHipsSnapshot 첨부 → revert 시 hip 2개 자동 복원
- revert 분기에서 hip 스냅샷 + ridge 스냅샷 둘 다 순회 복원하도록 대칭 보강
- 케라바 패턴 생성 라인 strokeWidth 2 → 4 (SK 라인과 동일, 6개소)
Integrates a PreToolUse hook that provides context from the 'graphify' knowledge graph.
When the AI is about to use search commands (e.g., `grep`, `find`, `ripgrep`),
it will be prompted to consult `GRAPH_REPORT.md` if a graph exists, guiding it to
leverage structured knowledge before searching raw files.
- .env.development / .env.production 에 GEMINI_API_KEY 추가 (PDF 평면도 분석 기능용)
- docs/ 에 PDF → Gemini → 캔버스 반영 기능 구현 계획서(html) 추가
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>