patent-block-diagramlisted
Install: claude install-skill lsj4232/KR_PATENT_SKILL
# 특허 블록도 자동 작도 (.pbd 생성)
## 무엇을 하는가
자연어 도면 설명 → `.pbd`(에디터 네이티브 JSON) 작성 → 앱에 주입해 렌더 → 이미지 육안 검증 →
좌표 보정 → 출원용 3배 PNG 내보내기. 산출된 `.pbd`는 더블클릭하면 그 도면이 열린 상태로
에디터가 뜨므로, 이후 수정은 사람이 GUI에서 이어서 한다.
**핵심 원칙: 반드시 렌더해서 눈으로 본다.** 좌표만 보고 "됐겠지" 하면 반드시 겹친다.
최소 1회 렌더 → Read로 이미지 확인 → 보정 → 재렌더 루프를 돈다 (실전에서 3회전 걸렸다).
## 앱 위치와 실행
- 앱: `$APP_DIR` (Electron). 이 레포에 동봉된 에디터 소스는 `patent-block-diagram-app/`
이며, 로컬 설치 위치를 `$APP_DIR` 로 잡는다 (예: `~/Desktop/patent-block-diagram`).
최초 1회 `cd "$APP_DIR" && npm install` 로 Electron 의존성을 받는다.
- 평소 실행: 바탕화면 `특허 블록도 에디터.vbs`, 또는 `.pbd` 파일 더블클릭
- **작업용 실행(CDP 필요)** — 반드시 `--user-data-dir`로 사용자 창과 분리한다:
```bash
cd "$APP_DIR" && \
./node_modules/.bin/electron.cmd . --remote-debugging-port=9222 \
--user-data-dir="$TMP/pbd-agent" > /dev/null 2>&1 &
# CDP가 뜰 때까지 기다린 뒤 렌더
node "~/.claude/skills/patent-block-diagram/scripts/render_pbd.mjs" <입력.pbd> <출력.png> [scale]
```
> ⚠️ **`--user-data-dir` 를 빼면 사용자 창을 빼앗는다.** `main.js` 가 `requestSingleInstanceLock()`
> 을 쓰고 그 락은 userData 폴더 단위다. 같은 폴더로 띄우면 두 번째 프로세스는 즉시 종료되고
> **먼저 떠 있던 창**(= 사용자가 쓰던 창, 또는 구버전 코드가 로드된 창)이 대신 잡힌다. 결과로
> ① 내 테스트 도면이 사용자 화면에 나타나 사용자가 앱 버그로 오인하고,
> ② 방금 고친 코드가 아니라 옛 코드를 테스트하게 된다. 실측으로 둘 다 겪었다 (2026-08-04).
> 같은 이유로 `taskkill //F //IM electron.exe` 로 싹 죽이지 않는다 — 사용자가 편집 중인 창까지 날아간다.
`render_pbd.mjs`는 `.pbd`를 앱의 `window._app.state`에 주입하고 앱 자체 내보내기 함수로 PNG를 만든다.
scale 2 = 검토용, 3 = 출원 제출용. 작업이 끝나면 `_app.reset()`으로 도면과 **실행 취소 기록까지**
비운다(`state`만 비우면 Ctrl+Z 한 번에 테스트 데이터가 되살아난다).
- 창이 좁게