# 소유자 피드백·지시 로그 (KINTEX AI 전시·행사시스템)

> 이번 세션에서 소유자가 지시한 모든 항목을 전수 기록한다. 상태: ✅완료(배포) · 🚚배포중 · ⏳작업중 · 📋대기.
> 이 파일을 기준으로 누락 없이 처리한다. 새 지시는 여기에 추가한다.
> 최종 갱신: 2026-07-14 (AI 우선 세션 — 플로어플랜 자연어 AI·ReRoomAI·G-02 티켓·V51 링크오류·시연 PPT. 하단 "처리 로그 (2026-07-14 세션)" 참조)

---

## 1. 디자인 시스템 (Nifty / WISE) — 최우선 반복 지시

| # | 지시 | 상태 | 비고 |
|---|------|------|------|
| 1.1 | **Nifty 카드 타입** 적용 (https://preview.themeon.net/nifty/ui-elements/cards/) — 라운딩·그림자·헤더/바디/푸터 구조·보더 톤 | ✅완료 | 276293e `.kx-card` Nifty 구조 정렬, 2026-07-13 배포 |
| 1.2 | **그리드는 Nifty Advanced table headers**로 통일 (tables/static-tables) | ✅완료 | 276293e `.kx-table` 6화면 수렴, 배포됨 |
| 1.3 | **Tabulator 기능** 추가 (tables/tabulator — 정렬·필터·페이지·CSV) | ✅완료 | task #32 — KxDataTable 자체구현(정렬/필터/페이지/CSV BOM), 참가업체·리드스코어·등록자 3화면 적용. 배포됨(2026-07-13 05:17) |
| 1.4 | **상세페이지 = Nifty blog** 스타일 (blog-apps/blog) | ✅완료 | a5a78f1 Nifty detail views, 배포됨 |
| 1.5 | **버튼 = Nifty buttons**, **Dropdowns**, **컴포넌트**, **List Group**, **Typography/Modals/Offcanvas** = ui-elements 전체 채택 | ⏳부분 | Offcanvas 완료, 나머지 정렬 진행 |
| 1.6 | **Nifty 스타일 학습 md 생성** | ✅완료 | `docs/DESIGN_SYSTEM_NIFTY.md`·`docs/analysis/nifty-design-refs.md` |
| 1.7 | **아이콘은 선(line/stroke) SVG**로 직접 (이모지 금지) | ✅원칙 | 전 신규화면 준수 |
| 1.8 | **UI는 WISE(UIWS) 문자 그대로** — 셸·메뉴·캘린더 자체 재해석 금지 | ✅원칙 | 메모리 [[ui-follow-wise-strictly]] |
| 1.9 | **폰트를 페이지마다 안 맞춤** — 전 화면 타이포 일관화 | ✅완료 | 276293e font 179+weight 415 토큰화(`--fs-micro`·공용 제목클래스), 배포됨 |
| 1.10 | **모든 경계선 엷은 회색** | ⏳부분 | 구조 보더는 neutral-200(#e4e7ec) 사용 중. 의미색·hover는 유지, 지정화면 정렬 |
| 1.11 | **좌우 2단 폭 50:50**, 전 화면 **공백 없는 반응형**(풀블리드) | ✅완료 | task #39 스윕 — 루트 fill/scroll 결함 13화면 + 브레이크포인트 부재 2화면 수정. 배포됨(2026-07-13 05:32). 감사기록 `src/frontend/_workspace/responsive_sweep_audit.md` |
| 1.12 | **top 설정 아이콘** 추가 + **설정 레이아웃 커스터마이저**(offcanvas 테마/레이아웃/색상) | ✅완료 | a5a78f1 settings customizer(customizerStore), 배포됨 |

## 2. 캘린더

| # | 지시 | 상태 |
|---|------|------|
| 2.1 | 캘린더를 **Nifty app-views/calendar**처럼 (옅은 회색 격자·연한 today·가벼운 이벤트 칩) | ✅완료 | 배포됨(2026-07-13 라이브) |
| 2.2 | **공휴일 붉은색 + 일자 옆 공휴일명** (2050년까지 데이터) | ✅완료 | c77cba7 홈 캘린더 공휴일 마커 포함, 배포됨 |
| 2.3 | **달력 경계선 모두 회색** | ✅완료 | 배포됨 |
| 2.4 | 일정 **월/주/일** 뷰 (WISE CalendarView) | ✅완료 |
| 2.5 | 전시 일정 50:50 비율·달력 날짜 위로(하단 공백 제거) | ✅완료 |

## 3. 공개사이트 / 메인 / visitor

| # | 지시 | 상태 |
|---|------|------|
| 3.1 | **첫 화면 = 제품 소개** (미인증 루트는 히어로 랜딩, 로그인 폼만 노출 금지) | ✅완료 | 메모리 [[product-identity-first]] |
| 3.2 | 제품명 **'KINTEX AI 전시·행사시스템'** | ✅완료 |
| 3.3 | **visitor 메인 = 세련된 홈페이지** (AI 관람 도우미 중심) | ✅완료 | AiAssistant·기능타일·연월 브리핑·쇼케이스, 배포됨 |
| 3.4 | 메인에 **AI 기능 전면 노출** (AI가 뭘 하는지 한눈에) | ✅완료 | AI 기능 쇼케이스 6타일, 배포됨 |
| 3.5 | AI가 답하는 정보는 **크롤링해서 DB 저장** (실시간 외부호출 X) | ✅완료 | V43 visitor_guide·transport, 공개 AI API 근거응답 |
| 3.6 | **AI는 전시·행사정보 학습** (근거 기반) | ✅완료 | grounding + 인용, 환각 차단 |
| 3.7 | **AI가 연간·월간 전시·행사 기획정보 제시** | ✅완료 | AiPlanningBriefing(연/월 토글), 배포됨 |
| 3.8 | 비지터가 **가장 알고 싶은 정보를 AI로 쉽게** | ✅설계 | 관람 도우미 예시칩·구조화 카드 |
| 3.9 | 코엑스 분석 → **visitor/business/agency 3-트랙** 분리 | ✅완료 | 관문 + 3 서브홈 + TrackSwitcher |
| 3.10 | **"코엑스처럼" 전면 리뉴얼** (히어로 배경·애니메이션·비주얼) | ✅완료 | design.md v2.4 §3C-V 구현, 배포됨 |
| 3.11 | 메인 카드가 **밋밋한 파란 placeholder** (포스터 이미지 없음) | ✅완료 | V46 실제 포스터 이미지로 교체(배포됨) |
| 3.12 | **메인 카드 이미지 크기 안 맞음**(세로 포스터가 16:11 가로 프레임에 늘어남/잘림) | ✅완료 | 3:4 프레임 + `object-fit:cover`, 배포됨 |
| 3.13 | **메인 히어로 이미지 5장 회전(슬라이드)** | ✅완료 | 7316cd9 실사진 5장 회전 히어로, 배포됨 |

## 4. 역할 · 네비게이션

| # | 지시 | 상태 |
|---|------|------|
| 4.1 | **로그인 사용자 구분으로 메인페이지 + 메뉴 그룹 결정** (디폴트 visitor, 로그인 후 business/admin/agency) | ✅완료 | plan_role_routing(roleTrack.ts) + 역할별 메뉴 게이트, 배포됨 |
| 4.2 | **각 트랙 메인페이지 Stitch 디자인 의뢰** | ✅부분 | Stitch 2회 실패 → design.md 스펙 직접 구현(문서화 폴백) |
| 4.3 | **모바일 앱도 동일 로직** | ✅완료 | 기구현 확인 + 결함 수정(roleCode 타입 누락 → 워크스페이스 없는 ADMIN이 티켓으로 오랜딩). 소스 반영 — APK 반영은 다음 EAS 빌드에 포함(2026-07-13) |
| 4.4 | **상세→메인 복귀·브레드크럼·404** 내비게이션 | ✅완료 | Breadcrumb(셸 콘텐츠 상단, 메뉴 IA 정합) + NotFound catch-all(역할별 홈 복귀). 배포됨(2026-07-13 05:17) |

## 5. 데이터 / 시드

| # | 지시 | 상태 |
|---|------|------|
| 5.1 | **모든 테이블에 데이터** (50~100건) | ✅완료 | V42 대량시드(40테이블 2,535행) |
| 5.2 | **정산·결제 데이터 없음** — 행사스코프 정렬 | ✅완료 | V47 `e-2026-live` 정산 폐루프, 배포됨 |
| 5.3 | 테스트 데이터 **더 현실적으로** | ✅완료 | V39·V42 실감형 |
| 5.4 | 행사정보 **크롤링해서 데이터 넣기** | ✅완료 | 크롤 시드 |
| 5.5 | **연간·월간 전시 기획정보**도 적재 | ✅완료 | V43 event 생성열·v_event_calendar 뷰 |
| 5.6 | 포스터 이미지 **다 다운받아 빌드 내장** | ✅완료 | V46 `/media/posters/`, 배포됨 |

## 6. 정산·도메인 화면

| # | 지시 | 상태 |
|---|------|------|
| 6.1 | **정산·결제 패딩 없음** | ✅완료 | `.kx-settle` 패딩, 배포됨 |
| 6.2 | **참가업체 관리가 홈으로 감** — 전용 화면 신설 | ✅완료 | a5a78f1 ExhibitorsPage(screens/exhibitors), 배포됨 |
| 6.3 | 부서 관리 = **WISE 조직도** | ✅완료 |
| 6.4 | 결재관리 **반려·재상신·결재선** (WISE) | ✅완료 |
| 6.5 | 통합검색에 **행사·전시 포함** | ✅완료 |
| 6.6 | 시스템관리 **메시지 관리**({} 플레이스홀더+샘플) | ✅완료 | 백엔드 ✅(276293e V48) + 프론트 MessageAdminPage(/admin/messages — 필터·검색·upsert·렌더 미리보기, i18n×4). 배포됨(2026-07-13 05:17) |
| 6.7 | 물류허브·서류/마일스톤·CMS·일정 = WISE | ✅완료 |
| 6.8 | **그룹권한(역할↔메뉴) 메뉴** 존재 확인 | ✅확인 | RoleAdminPage + RoleMenuAdminPage |

## 7. 버튼 · 색상 · 대비

| # | 지시 | 상태 |
|---|------|------|
| 7.1 | **파란 배경 버튼 = 흰 글자** | ✅완료 | `--color-on-accent`(다크에서도 흰색). 라이브 반영(캐시 새로고침 필요) |
| 7.2 | 다크모드 색상배경 위 **흰 글자 어두워지는 버그** 전수 수정 | ✅완료 | 77곳 on-accent + 통계밴드 2곳, 배포됨 |
| 7.3 | 회색 버튼은 옅은 ghost — 흰 글자 아님(솔리드 진회색만 흰글자) | ✅확인 |

## 8. 파비콘 · 브랜드

| # | 지시 | 상태 |
|---|------|------|
| 8.1 | **KINTEX favicon** 추가 (홈페이지 크롤) | ✅완료 | 리포 favicon.ico가 톰캣 아이콘이던 것 규명→KINTEX .ico 재생성(v3) |
| 8.2 | **브랜드 밑에 영어 병기** | ✅완료 | "AI Exhibition & Event System" |

## 9. 모바일

| # | 지시 | 상태 |
|---|------|------|
| 9.1 | **내정보 (WISE 참조) + 생체인식 + 사진등록** | ✅완료 | app/profile, expo-local-authentication, expo-image-picker. 아바타 API(백엔드) 완료 |
| 9.2 | **전시·공연 앱 벤치마킹** (다운로드·좋아요 상위순) | ✅완료 | docs/analysis/mobile-benchmark-exhibition-performance.md + 백로그 12항목 |
| 9.3 | **앱 위변조 방지 + 시큐어 코딩 + 보안 체크리스트 통과** | ✅완료 | 루트/탈옥·무결성·Hermes+R8·화면캡처·cleartext·권한최소. 체크리스트/감사 문서 |
| 9.4 | **다국어** — 웹 4개국어 완비, 모바일도 4개국어 | ✅완료 | 웹 ✅ + 모바일 ✅(mobile/lib/i18n ko/en/zh/ja + LanguageSelector, react-i18next) |

## 10. AI

| # | 지시 | 상태 |
|---|------|------|
| 10.1 | **AI 기능 쉽게 사용 + 토큰 최소화** | ✅완료 | PLANNING v3.4 §8A(결정론 라우팅·소형모델 우선·RAG축소·캐싱·집계는 SQL·측정지표) |
| 10.2 | AI 기능이 **하나도 구현 안 된 것 같다 → 구현** | ✅완료 | 공개 AI 관람 도우미 라이브(grounded=true, Claude) |
| 10.3 | 나노바나나 유료? | ✅답변 | Google Gemini 유료 |

## 11. 데이터 아키텍처 (표준)

| # | 지시 | 상태 |
|---|------|------|
| 11.1 | **FK 최소화, 공통코드로 관리** | ✅표준 | docs/architecture/data.md §10 (소프트참조·공통코드) |
| 11.2 | **필요한 인덱스 생성** | ✅완료 | V44 성능 인덱스 8건, 배포됨 |
| 11.3 | **view/mview/function 고려** | ✅표준 | data.md §11 |
| 11.4 | **자동화 배치·프로시저 고려** | ✅표준 | data.md §13 배치 카탈로그 |
| 11.5 | **ten_id/tenant_id PK 맨 앞 복합키** | ✅원칙 | 메모리 [[tenant-id-pk-standard]] |

## 12. 인증 / SSO / HR

| # | 지시 | 상태 |
|---|------|------|
| 12.1 | **직원 인사(조직) 정보는 API 방식** | ✅설계 | docs/architecture/sso-hr-integration.md (HrDirectoryClient 어댑터+스냅샷) |
| 12.2 | **Open SSO 도입** | ✅설계 | Keycloak OIDC(PKCE)+SAML, 기존 JWT+2FA 공존(브로커) |

## 13. 평면도 / 기타

| # | 지시 | 상태 |
|---|------|------|
| 13.1 | 도면 안 열림 / AI 시각화 어디감 | ✅원인 | 403(행사 미가입) → 데모계정 멤버십 해소. DWG는 SVG캔버스+JPG 렌더(DWG 바이너리는 좌표소스) |
| 13.2 | ReRoomAI 기능 (나노바나나 image-to-image) | ⏳ | visualizer 트랙 |

---

## 미해결·대기 요약 (다음 우선 처리 — 2026-07-14 갱신)

**소유자 조치 대기:**
1. ~~**Gemini API 유료 키 교체**(시연 블로커)~~ → **해소(2026-07-14, 소유자 "Gemini API 지출 처리")**: 유료 전환 확인 — S7 조감·ReRoom 실렌더 라이브 E2E 성공(아래 세션 3 로그). 
2. **PTR(역방향 DNS) 신청** — `101.79.17.164`의 PTR이 없음(NXDOMAIN). Gmail 스팸 분류의 주 원인 후보. **IP 제공 호스팅/회선사에 "101.79.17.164 → mail.zioinfo.co.kr" 역방향 DNS 등록 신청** 필요(가비아 DNS 아님 — IP 소유 ISP만 설정 가능). 이것만 해소되면 메일 인증 체계는 완성.

**EDM 운영 실발송 개방 완료(2026-07-14 소유자 지시):** 서버 `EDM_TEST_MODE=false` 전환 + EDM 화면에 운영 실발송 버튼 신설 — 기존 버튼은 '테스트 발송'(secondary, live=false 안전 기본)으로 유지, '운영 실발송'(primary)은 **이중 확인**(대상 인원 경고 confirm → 'LIVE' 타이핑) 후에만 live=true 호출. i18n 4개국어. ~~참고: 현 데모 수신자 5명은 `@kintex.test` 시드 주소라 실발송해도 반송됨~~ → **해소(V56, 소유자 지시 "수신자 데이터 실제 이메일로 정비")**: 시드 주소 114행 전량을 소유자 Gmail plus-addressing(`ythong86+<등록ID>@gmail.com`)으로 치환 — 주소별 구분 가능·전부 소유자 수신함으로 실전달·타인 주소 미도입. 운영 실발송 E2E 검증 가능 상태.

~~완료 처리(2026-07-13 배포 확인): Tabulator/KxDataTable(1.3), 브레드크럼·404(4.4), 모바일 역할랜딩(4.3), 메시지 관리 화면(6.6), 반응형 스윕(1.11), Nifty 카드·그리드·폰트(1.1·1.2·1.9), 참가업체 관리(6.2), 상세 Nifty blog(1.4), 설정 커스터마이저(1.12), 히어로 5장 회전(3.13), 카드 3:4(3.12), 모바일 다국어(9.4)~~
~~완료 처리(2026-07-14 배포 확인): ReRoomAI image-to-image(13.2), Nifty 잔여 컴포넌트 버튼/드롭다운/List Group(1.5), 경계선 회색 정렬(1.10), 좌측메뉴 검색+아코디언, 그리드 짤림, 세션 재수화~~

---

## 처리 로그 (2026-07-13 세션)

**배포 검증 (04:33 KST):** push(e67db2e 병합) → Gitea webhook 자동배포 → 프론트 번들(/var/www/kintex)·백엔드 jar 모두 04:33 갱신, HTTPS 200. ★원격 main이 배포 파이프라인에 의해 force-rewrite(58aa844)되어 로컬과 분기 → `-s ours` 병합으로 로컬 정본 유지+원격 이력 보존 후 push. ★외부에서 :8021/:9001 직접 접근은 방화벽 차단 — health 게이트는 SSH(키 `~/.ssh/guardia_server`) 경유 localhost 확인이 정본.

**배포 완료 (라이브):** ecf60aa(Tabulator KxDataTable 3화면 + 브레드크럼/404 + 메시지 관리 화면 /admin/messages + i18n×4) · 7a117a0(모바일 roleCode 랜딩 결함) · 3966077(반응형 스윕 15화면) · d19b742(KxDataTable 4번째=공통코드) — API·웹·번들 게이트 통과. 이번 세션으로 **미해결 요약 1~5번 전부 해소**. 잔여: Nifty 컴포넌트 잔여 정렬(1.5)·경계선 지정화면(1.10)·ReRoomAI(13.2).

**모바일 APK 빌드·QR 배포 (2026-07-13, G3 승인 하):** EAS preview APK v0.2.0(versionCode 2, roleCode 랜딩 수정 포함, 빌드 c0d9332f) → 서버 `/opt/kintex/downloads/kintex.apk`(64MB) → `https://kintex.zioinfo.co.kr/downloads/kintex.apk` 200 (외부 검증) · `/app-qr` 랜딩 200. **영속화**: 웹루트 원자교체 시 APK가 지워지는 문제를 deploy_kintex.sh 스테이징 재주입(1162dd0)으로 해결 — 실배포로 E2E 검증 완료. ★교훈: 배포 게이트는 git HEAD(pull 시점 갱신)가 아니라 **산출물 mtime(index.html·jar)** 로 확인해야 함 — HEAD 갱신≠빌드 완료. APK 교체 절차: 새 아티팩트를 `/opt/kintex/downloads/kintex.apk`에 놓으면 다음 배포부터 자동 유지(즉시 반영은 웹루트 수동 복사 1회).

---

## 처리 로그 (내가 처리·배포한 것 — 2026-07-12 세션)

**배포 완료 (라이브):** 커밋 214b6df → 6e95ac6 → 87f310f/55e27b3 → 3077cb0
- V42 대량시드(40테이블 2,535행) · V43 관람객 가이드/연월 캘린더 뷰 · V44 성능 인덱스 8건 · V45 아바타 컬럼 · V46 포스터 로컬화(73건) · V47 e-2026-live 정산 폐루프
- 공개 AI 관람 도우미 API(grounded·Claude) · 연월 캘린더 API · 3-트랙 관문/서브홈 · 역할별 랜딩+메뉴 게이트
- 미니/큰 캘린더 공휴일 표시·회색 테두리·Nifty 톤 · 코엑스풍 공개사이트 비주얼(히어로·모션·통계밴드) · 실제 포스터 이미지
- 파란버튼 흰글자(`--color-on-accent`) · 다크모드 흰글자 77곳 · favicon(톰캣→KINTEX v3) · 2FA 방패 아이콘 · 브랜드 영문병기 · 정산 패딩

**구현 완료 (미배포 — 다음 배포 대기):**
- **Nifty 디자인 시스템 정렬**(카드 `.kx-card` Nifty 구조·`--fs-micro`/`--fw-*` 토큰·공용 제목클래스·테이블 `.kx-table` 6화면 수렴, font 179+weight 415 토큰화)
- **카드 이미지 3:4 프레임 + object-fit cover**(왜곡/잘림 제거)
- **메시지 관리 백엔드**(V48 sys_message + 렌더 API + 36샘플)
- **통계밴드 흰글자 2곳** · **푸터 "2026 © KINTEX..."** 4개국어

**병렬 진행 중:** 모바일 다국어+역할랜딩 · 잔여 데이터 보강(V49) · 산출물 문서

**설계·표준 문서 산출:** PLANNING v3.4(AI 토큰최소화 §8A) · design.md v2.4(공개 비주얼·모션) · docs/architecture/data.md(FK최소화·공통코드·view/mview·배치) · sso-hr-integration.md(Open SSO+HR) · DESIGN_SYSTEM_NIFTY.md · mobile-security-*.md · mobile-benchmark-*.md

## 산출물(문서) 상태

| 산출물 | 타이밍 | 상태 |
|--------|--------|------|
| 개발계획서 | 개발 전/중 | 📋 생성 착수(PLANNING v3.4 기반) |
| 설계서(아키텍처·ERD·화면·API) | 개발 중 | 📋 생성 착수(design.md v2.4·architecture·backend 계약 기반) |
| 사용자 지침서 | **완성+QA 후**(최종 메뉴 반영) | ⏳ UI 정렬 안정화 후 — 지금 생성 시 재작업(정책: 최종 1회) |
| 운영자 지침서 | **완성+QA 후** | ⏳ 동일 |

> 정책([[deliverables-update-policy]]): deliverables는 최초 1회 + 최종 1회. 개발계획서·설계서는 지금 생성 가능(내용 안정), 지침서는 현재 UI 정렬 파동이 끝난 뒤 최종 메뉴 기준으로 1회 생성.

---

## 처리 로그 (2026-07-14 세션 — AI 기능 우선 + 시연 준비)

**소유자 지시:** ① "AI 있는 기능부터, 특히 플로어플랜스튜디오" ② "ReRoomAI image-to-image도 같이" ③ "AI 시연 해야돼" ④ "시연 절차를 PPT로(입력 예시 포함, 샘플 데이터 등록)" ⑤ 플로어플랜 링크오류 제보 ⑥ graphify.EXE 경로 '/' 누락 제보 ⑦ "배포는 CI/CD로"

**구현·배포 (커밋 ba34aba·0f91dcf·8943c80·1e349aa·5b76557):**
- **플로어플랜 AI(M2)**: 자연어 조건 해석 `POST .../auto-generate/interpret`(AiTextRouter Claude, JSON 강제·주입 방어·서버 클램핑·degraded 폴백) + `auto-generate?ai=true` 배치안별 지표 근거 AI 요약(WISE AI 라벨). AutoLayoutDialog 자연어 입력바.
- **ReRoomAI 사진 시안(M5 확장)**: 참조사진 업로드(매직바이트·10MB·경로방어)→R1 렌더잡(기존 큐/콜백/WS 재사용)→보존잠금+교체지정 4단 프롬프트(스타일 6종 JSON 단일출처)→Before/After 슬라이더+워터마크. 부스설계 스튜디오 "사진 시안 (AI)" 섹션.
- **G-02 티켓 도메인**(GAP P1 해소): V50 스키마+시드, 공개 API 3종(잔여 서버권위·조건부 재고차감 oversell 차단·Mock PG·조회 PII 마스킹+해시 대조), PublicTicketPage 실배선, i18n 15키×4.
- **링크오류 근본원인**: admin 계정 event_member 0건 → 스코프 메뉴가 /home 폴백. V51로 admin을 e-2026-live·smf ORGANIZER 멱등 등록.
- **graphify 훅**: `.claude/settings.json` 훅 경로 백슬래시가 sh에서 소모 → 슬래시 표기로 수정(파이프 테스트 통과).
- **시연 산출물**: `docs/demo/AI_DEMO_SCRIPT.pptx`(10슬라이드 — 4개 데모 흐름·단계별 입력 예시·체크리스트·트러블슈팅). 샘플 데이터 등록: 데모행사 admin 멤버십(V51)·티켓 시드(V50, 조회예시 KTX-2026-500001/010-1234-5678)·ReRoom 샘플사진 `/downloads/demo/sample_booth.jpg`(+alt, Wikimedia CC 출처표기).

**⚠ 시연 블로커(소유자 조치 필요):** Gemini API 키가 무료 티어 → 이미지 모델(`gemini-3.1-flash-image`·2.5 모두) 쿼터 0(429) — **S7 조감·ReRoom 실렌더 불가**. Google AI 유료 결제 활성화 또는 유료 키 교체 필요. 텍스트 AI(Claude)는 정상.

**★CI/CD 교훈(확정):** 00:26·00:52 배포가 연속으로 스테일 jar(신규 클래스·V50/V51 누락)를 내보낸 진짜 원인 = **포트 9999를 점유한 deploy_server.py 프로세스가 7/11 19:44에 뜬 구버전**(메모리에 옛 kintex 블록). 디스크 파일은 최신이었으나 재시작이 누락돼 옛 로직이 계속 실행, 새 인스턴스는 "Address already in use"로 기동 실패. → `systemctl restart zioinfo-deploy`(01:15, PID 1123130)로 해소. **재발방지 수칙: deploy_server.py 갱신 시 서버 반영+재시작은 원자 1세트**(기존 교훈의 재발) + 배포 게이트에 **jar 내용물 검증**(`unzip -l app.jar | grep 최신마이그레이션`) 추가. `/opt/kintex/deploy_kintex.sh`는 미사용 구사본(파이프라인은 repo `deploy/deploy_kintex.sh` 실행).

---

## 처리 로그 (2026-07-14 세션 2 — 라이브 장애 연쇄 해소 + UI 지시 + 기능 배치 완성)

**소유자 제보·지시:** ① "도면 안나옴"(플로어플랜 → /home) ② 서류·마일스톤/물류 허브 응답대기 ③ 옥션 업체 포털 "대시보드를 불러오지 못했습니다" ④ "위 오류 모두 수정해" ⑤ "그리드도 짤린다" ⑥ 부스 판매 등 9개 화면 "행사를 선택해 주세요"(선택기 비어 선택 불가) ⑦ "좌측메뉴 아코디언 + 메뉴검색 추가, 선택 시 이미 펼쳐진 메뉴는 접기" ⑧ "플로어플랜 스튜디오는 언제?" ⑨ "이어서 작업"(끊긴 배치 마무리)

**근본원인 1 — 연쇄 장애(①~③ 공통):** 01:17 배포된 새 jar가 `TicketMapper.xml`의 **미이스케이프 `<=`** 로 SqlSessionFactory 파싱 실패 → 8회 crash-loop → 파이프라인이 구 jar(7/13 빌드)로 롤백 → **새 프론트 + 구 백엔드 불일치** + V50/V51 미적용(admin 멤버십 소실 재발). 수정 `1d46da8`(이스케이프, 전 매퍼 10개 XML 정형성 검사 통과) → 새 jar 라이브(01:52), V50/V51 적용·admin ORGANIZER 멤버십(e-2026-live·smf) 확인. ★교훈: 매퍼 XML raw `<=`는 빌드/테스트 통과 후 **부팅 시점**에만 터짐 — 배포 게이트에 매퍼 XML well-formed 검사 추가.

**근본원인 2 — "행사를 선택해 주세요" 전 화면(⑥):** 토큰은 sessionStorage 지속인데 user/workspaces는 메모리 zustand뿐 → **새로고침 시 workspaces=[] 박제**(세션 재수화 부재). `3860e7e`로 RequireAuth에 /api/auth/me + /api/auth/workspaces 자동 복원(401 시 로그아웃) 추가.

**개별 버그:** `/api/admin/messages` 500 = SysMessageMapper `(#{p} IS NULL OR …)` PG 파라미터 타입 추론 실패 → `::text` 캐스트(`ecc00f8`). 그리드 짤림(⑤) = flex/grid 자식 `min-width:auto` 블로우아웃 + `.kx-dash__table-wrap overflow:hidden` 직접 클립 → 공용 래퍼(`.kx-table-scroll`·`.kx-dt`) `min-width:0` 수렴 + 4화면 보정(`3c80585`).

**UI(⑦):** 메뉴 검색 신규 이식(UIWS NavSearch 패턴 — 전 대분류 횡단·매칭 하이라이트·Escape 클리어·역할 게이트 유지, i18n 4개국어) `a3fdb62`. 아코디언 단일확장은 기존 구조가 이미 충족(라우트 기준 활성 그룹 자동 펼침) — 회귀 없이 유지.

**기능 배치 완성(⑨ — 끊긴 세션 미커밋분, 커밋 ef74006~c664743 8건):** 회의 녹음→STT(whisper env 설정형, 미설정=degraded)→AI 회의록+액션아이템(V52 transcript) · EDM 실발송(수신동의 필터·**테스트모드 기본 ON**·캠페인 상한·분당 레이트·불투명 수신거부 토큰·발송이력 V53) · 마이페이지 프로필/비번변경/알림설정(V55) · CMS AI 번역 · 보고서 PDF(openhtmltopdf+NanumGothic 임베드) · AI 검색(grounded) · 렌더 이력 갤러리(V54 인덱스). 검증: gradle test 통과·tsc 0·V52~V55 라이브 dry-run(BEGIN/ROLLBACK) 후 배포 — jar 내용물 게이트(V52~55 4건)·flyway 52~55 성공·신규 엔드포인트(알림설정/캠페인/스폰서십/회의/검색) 전부 200·error_log 신규 유입 0(프로브 오타 2건 제외).

**답변(⑧):** 플로어플랜 스튜디오는 재로그인(또는 새 번들에서 새로고침) 후 좌측 메뉴 행사 스코프로 진입 — H1 배치안 v1 API 200 확인.

**EDM 테스트 발송(소유자 지시 "EDM 테스트 발송 해봐"):** 1차 시도 2건 전부 `MailAuthenticationException` — 원인은 `mail.smtp.auth` 기본 true + SMTP 계정 공란(빈 자격증명 AUTH 시도, 로컬 Postfix 127.0.0.1:25는 무인증 릴레이). 서버 env에 `SMTP_AUTH=false`·`SMTP_STARTTLS=false`·`EDM_TEST_RECIPIENTS=(소유자 2주소)` 추가 후 재발송 → **Gmail 250 OK·사내 maildir 배달 확인**, 실대상 5명 안전 스킵·`[TEST]` 접두어·mail_log 마스킹 기록. ★교훈: 응답 `sentCount`는 비동기 큐 적재 건수라 SMTP 실패를 못 봄 — **발송 결과 정본은 mail_log**. meta 문구를 "발송 요청 N건 큐 적재(결과는 발송 이력 참조)"로 정직화(코드 반영).

**마감 배치(소유자: "이어서 모든 작업 완성하고 git push"):** Nifty 잔여 컴포넌트(버튼/드롭다운/List Group, 1.5)·경계선 회색 정렬(1.10) 완료, EDM meta 정직화, 본 로그 갱신 — 커밋·배포·게이트 검증 후 마감.

**EDM 운영 실발송 실검증(소유자: "운영 실발송 해봐", 07:18):** cp-live-003(관람객 만족도 설문)을 live=true로 실발송 — 수신동의 5명(V56 plus-주소) 전원에게 발송, **Gmail 250 OK 5통 전달 확인**, 미동의 2명 제외, 캠페인 done 전이(중복 발송 봉인), mail_log 5건 sent(마스킹). 실패 0.

**SPF/DKIM 정비 감사(소유자: "SPF/DKIM 정비해줘"):** 실측 결과 **인증 체계 대부분 이미 건강** — ①SPF `v=spf1 ip4:101.79.17.164 -all`(정확·하드페일) ②DKIM opendkim 가동·`s=mail` 셀렉터 서명, DNS `mail._domainkey` 키 일치(`opendkim-testkey: key OK`), 오늘 EDM 5통 전부 서명 확인 ③DMARC `p=quarantine` 게시·정렬(d=From 도메인 일치) ④발신 TLS opportunistic(may) — 관측성 위해 `smtp_tls_loglevel=1` 적용. **유일 결함 = PTR 부재(NXDOMAIN)** → 소유자 조치 대기 2번 등재(ISP 신청 사안, 서버/가비아에서 불가). 참고: `default._domainkey` 부재는 무해(모든 서명이 s=mail).

**수신거부 링크 E2E(소유자: "수신거부 링크도 테스트해봐"):** vr-live-101 실토큰으로 HTTPS 풀스택 클릭 시뮬레이션 — ①정상 클릭: 완료 안내 HTML + DB 즉시 반영(발송 대상 5→4) ②재클릭: 멱등 완료 안내 ③무효 토큰/토큰 미지정: 안전 실패 안내(정보 미노출). 전 시나리오 통과. 테스트 후 vr-live-101 동의 상태 복구(대상 5명 원복). **EDM 전 구간(동의 필터→테스트→운영 실발송→이력→수신거부) 실검증 완료.** 다음 개선 후보: zioinfo.co.kr SPF/DKIM 정비(스팸함 회피).

---

## 처리 로그 (2026-07-14 세션 3 — Gemini 유료 전환 후 렌더 파이프라인 완결)

**소유자 지시:** ① "이어서 작업 — Gemini API 지출 처리했어" ② "오른쪽 스크롤이 없는 그리드 다수" (후속 처리)

**Gemini 라이브 검증:** 유료 전환 즉시 `gemini-3.1-flash-image-preview` 직접 호출 성공(385KB). 이어 실제 파이프라인 E2E(OTP 로그인→S7 조감 발행→ReRoom 참조사진 업로드→R1 발행)에서 **이미지는 생성되는데 상태가 영원히 QUEUED**인 결함 발견 — 429 시절 가려져 있던 완결 루프 갭 2중:

1. **워커→백엔드 콜백 부재**: 워커는 Redis pub/sub 발행만 하고 백엔드가 기다리는 `POST /api/internal/render/callback`을 호출하지 않음 → DB/조회 상태 미갱신. **수정(b5d29e6)**: worker.py `_callback_backend()`(X-Worker-Token, imageUrl/schemaHash/modelVersion/errorMessage, 실패 비치명).
2. **RENDER_WORKER_TOKEN 불일치**: nanobanana.env와 kintex.env의 토큰이 서로 다름 → 콜백 401. **수정(서버)**: kintex.env 값으로 동기화+워커 재시작.
3. **산출 이미지 서빙 부재**: /renders 정적 서빙이 백엔드·nginx 어디에도 없음. **수정**: WebMvcConfig `/renders/**`→`RENDER_OUTPUT_DIR` + SecurityConfig permit + nginx `/uploads/`·`/renders/` 프록시(기존 /uploads도 SPA 폴백으로 깨져 있던 것 함께 해소).
4. **워커 로그 유실**: stdout 블록버퍼링으로 worker.log에 이벤트/콜백 로그가 안 남음 → 유닛에 `PYTHONUNBUFFERED=1`.

**최종 E2E(라이브)**: S7 조감·R1 ReRoom 모두 발행→워커 라이브 렌더(live=true·degraded=false)→콜백 200→**status DONE + imageUrl**→HTTPS 200(image/png) 완전 자율 완결. 렌더 품질 포토리얼(S7 파란 KINTEX DEMO 부스 조감 / R1 참조사진 기반 목재톤 시안). 스테일 QUEUED 잡 3건 콜백 백필로 DONE 처리. nginx sites-enabled의 `.bak` 사본 로드(중복 vhost 경고) 정리.

**시연 블로커 전부 해소** — AI_DEMO_SCRIPT.pptx 4개 데모 흐름 모두 실동작 가능 상태.

---

## 처리 로그 (2026-07-14 세션 4 — 백로그 잔여 일괄 소진)

**소유자 지시:** "이어서 작업" (세션 3에서 진행 중이던 백로그 스윕 마무리)

**designer 백로그 전량 해소 (design.md v2.5, 커밋 d548044):** B-01 SCR-06 **조립부스 모드** 신설(간판·가구·조명 옵션 패널 + 전용 Stitch 프롬프트, SCR-05 분기) · B-04 화면 집계 정정(P0 코어 15 · 총 89화면, SCR-T0~T3 편입) · B-05 정산 메뉴 IA 정합(SCR-21) · B-06 이메일 인증 로그인 프롬프트 · B-07 공유 버튼 + 위반 핀 1:1 정렬 · B-08 판매면적 산술 정정(4,590㎡) · B-10 Phase 2/3 라벨. **BACKLOG.md designer open 항목 0.**

**reviewer 백로그 전량 해소 (커밋 3f479a9):** R13-01 SCR-13 매출 추세에 **AI 수요예측 점선 실렌더**(클라이언트 최소제곱 선형회귀, 향후 2개월, 점 3개 미만 graceful 생략) · R15-02 카테고리 기본값 "기본값" 배지 표기 · R17-01 스타일가이드 §8 시스템 아이콘 라이브러리(icons.tsx 자동 열거) · R17-02 `CHART.warning`→`violationWarn` 개명(잔여 사용처 0) · 위생: MeetingPage·MultilingualCmsPage stale 헤더 주석 정정. **BACKLOG.md 검증 백로그 open 항목 0.**

**플로어플랜 뷰어 조작 (소유자 지시, 커밋 1c4edb0):** 캔버스 **마우스휠 확대/축소(0.3~4x, non-passive)** + **왼쪽 드래그 이동**(pointer capture, 3px 임계, 드래그 직후 click 캡처 차단으로 부스 선택 오발 방지). ★끊긴 세션의 미배선 1건 발견·해소 — `onZoomChange`가 부모(BoothLayoutEditorPage)에 전달되지 않아 휠 줌이 죽어 있던 것을 배선.

**GAP_AUDIT 재판정 (커밋 41503f7):** G-01~G-09 전량 해소를 코드/엔드포인트/V50~V56 기준 재확인 — **코드 미개발 잔여 0건**. 로드맵 잔여는 서류 HWP 렌더·AppQr iOS(EAS G3) 2건뿐.

**검증:** tsc 0 · vite build 통과 · push 후 배포 게이트(번들 마커 + public API) 통과.


---

## 처리 로그 (2026-07-14 세션 5 — LIVE 데모 배치 완성 + 부스 자동 배치 "평면도 안" 정렬)

**소유자 지시:** ① "LIVE 데모 배치(진행중) → 완성 할 것!" ② "부스 자동 배치" ③ "평면도 안에 배치 해 줘야 하는 것 아닌가? 평면도 안에 자동 배치 해 줘야 한다."

**근본원인 — 부스가 평면도 밖에 보이던 이유(2중):**
1. **도면 정렬 부재**: 홀 도면 JPG는 여백·범례·미니맵을 포함한 전체 도면인데, 캔버스가 이미지를 홀 사각형(0,0~W,H m)에 통째로 스트레치(`preserveAspectRatio=none`) → 부스 그리드가 노란 전시 바닥면 밖(여백·범례 위)까지 덮임.
2. **하드코딩 홀 치수**: BoothLayoutEditorPage가 `hallDims=[126,90]` 고정 — 백엔드는 실측 홀 치수로 배치를 생성하므로 축척 불일치.

**수정 (커밋 0cc7f26):**
- `hallFloorplan.ts`: 홀 1~10 도면 JPG의 전시 바닥면(1전시장 연노랑·2전시장 라임그린) bbox를 **색상 블롭 자동 측정(최대 연결 성분, Pillow)**으로 산출한 캘리브레이션 `FLOOR_REGIONS` 추가.
- `FloorplanCanvas`: 캘리브레이션 영역이 홀 사각형에 오도록 도면을 역산 배치 → **부스 좌표가 도면의 채색 바닥면 "안"에 정확히 놓임**. 언더레이 가시성 0.3→0.55.
- `BoothLayoutEditorPage`: `layout.hall.dimsM` 실측 치수 사용(126×90 하드코딩 제거), 프론트 `LayoutDto`에 누락됐던 `hall`(HallInfoDto) 타입 추가.
- `FloorplanServiceImpl.packBooths`: 무시되던 **주출입구·무대·라운지 수를 예약 영역으로 반영** — 중앙 교차 주통로(40m 이상 변), 출입구 전면 클리어존(9×6m), 무대(12×9m+버퍼, 후면), 라운지(9×9m+버퍼, 중앙). 배치안이 실제 전시 평면도처럼 구획됨.

**세션4 미커밋 WIP 완성 (커밋 c686365):** admin 실집계 통계 API(`/api/admin/stats`, SCR-16)·옥션 실시간 순위 WebSocket 푸시(`/topic/auctions/{id}/ranking`, afterCommit·봉인입찰 마스킹 유지·폴링 폴백)·CMS 예약 게시(30초 DB 폴러+V58 부분 인덱스). 컴파일은 됐으나 `CmsServiceTest`가 신규 `AuditLogService` 생성자 미반영으로 테스트 컴파일 실패 → 수정.

**검증:** gradle test 통과 · tsc 0 · vite build 통과 · 매퍼 XML well-formed 0건 · push→자동배포 → 번들 스왑 확인(D_hzGGkv→Cmx0ZsFU, 캘리브레이션 값 번들 포함 확인) · health UP · **HTTP 스모크 13/13 통과**. ★V58 라이브 dry-run은 이 세션에 SSH 자격증명(KINTEX_SSH_PASSWORD env) 부재로 생략 — V19 기존 컬럼 대상 `CREATE INDEX IF NOT EXISTS` 멱등이라 저위험, 배포 스크립트 health 게이트+롤백이 커버.

**잔여:** 도면 교체 시 캘리브레이션 재측정 필요(스크립트 패턴은 색상 블롭 최대 연결 성분). 배치안 내 무대/라운지 시각 표기(예약 공간만 비움, 오브젝트 미표시)는 후속 후보.

### 세션 5 추가 지시 처리 (같은 날 연속 — 실 운영 전환)

**소유자 지시(순차):** ① "전시장 선택하여 실 운영" ② "평면도 목록 보여라 / 홀 기준인가" ③ "대분류>중분류>소분류" ④ "데이터는 트리구조" ⑤ "이미지 생성은 버튼 클릭할 때만" ⑥ "이미지 클릭 시 확대 팝업" ⑦ "나노바나나 이미지 저장 기능(조회 재열람·입찰 참고용)" ⑧ "자동 배치를 사용자가 쉽게 기획하여 재구성"

**처리(커밋 6c0d364, 배포 검증 완료):**
- **V59**: 홀 치수 전 홀(10) 도면 방향 정렬(예: H1 63×171→171×63, H7 126×90→90×126) + 가정 비상구·트렌치 재유도. 근거: 도면 JPG 10장 전수 실측 — 전 홀이 DB와 90° 뒤집혀 있었음.
- **V60 hall_zone(트리)**: 대분류(전시장)>중분류(홀)>소분류(구역) — 도면 실측 구획(1A/1B·6A/6B/6C·7A/7B·8A/8B·9B/9A·10B/10A, 9·10홀은 A가 아래). `GET /api/halls/tree`.
- **자동배치 3단계 위저드**(AutoLayoutDialog 재구성): ①어디에(트리 캐스케이드) ②조건(자연어+AI 해석) ③3안 비교. 구역 선택 시 `zoneId` 경계 안에서만 패킹.
- **이미지 버튼 전용 생성**: autoGenerate의 S7 자동 발행 제거(Gemini 쿼터 보호), `POST …/auto-generate/preview` 신설 — 카드별 "조감 이미지 생성" 버튼 클릭 시에만 발행.
- **확대 팝업+저장**: 생성 이미지 클릭 → 라이트박스(워터마크 고지 유지) + "이미지 저장"(다운로드). 렌더는 render_job 영속 → 갤러리(boothRef=HALL-{hallId}) 재열람·옥션 MaterialPackage.aiImageUrl 참고 재사용.
- **P0 결함 발견·해소**: 프론트가 apply-option을 호출하지 않아 "이 안으로 편집 시작"이 배치를 저장하지 않았음 → 실저장 배선.
- **캘리브레이션 교정**: H8·H10 도면은 중앙 통로가 색 영역을 갈라 최대 블롭 측정이 하부 절반만 잡았음 → 유의미 블롭 합집합으로 재측정.
- **문서**: PLANNING v3.5(M2-1 이지 플로우, planner)·design.md v2.6(SCR-03/04 위저드·라이트박스, designer).

**검증:** gradle test·tsc·vite build·매퍼 XML 전부 통과 → push→자동배포(번들 CYBPm4tX)→health UP→스모크 13/13. V59/V60은 배포 health 게이트로 검증(SSH 자격증명 이 세션 부재로 사전 dry-run 생략 — 멱등 설계).

**미사용 CAD(DWG) 질의 답변 기록:** JPG는 시각 언더레이용, DWG(1전시장 층별 평면 3장+전기·설비 트렌치 / 2전시장 평면·전력간선·철골기둥 주심도)는 실측 데이터원. DWG는 사유 바이너리라 즉시 파싱 불가 — ODA 변환→DXF→ezdxf 레이어 추출 파이프라인으로 트렌치 실좌표(현 6m 가정 그리드)·기둥(현 미반영)·비상구 실좌표(현 변 중앙 가정) 대체가 후속 과제(PLANNING R4 정합).

### 세션 5 추가 — DWG 파이프라인 + 평면도 DWG/JPG 탭 (2026-07-15 새벽, 커밋 d8ef5c5)

**소유자 지시:** ① "dwg 파이프라인 진행해" ② "평면도는 DWG, JPG 탭으로 구분" (+온프레미스 모델 추천 질의 2건)

**처리:**
- **파이프라인 구축**: LibreDWG 0.14(win64 dwg2dxf·dwg2SVG) + ezdxf(+recover 폴백) + matplotlib 렌더.
  도구 영속: `tools/cad/dwg_extract.py`(inventory/extract/anchors) · `tools/cad/render_hall_png.py`(1회 로드→다중 밴드 crop).
- **좌표 앵커 확정(제1전시장)**: 구조 그리드 Y 라벨 63m 피치(80.1m 시작)=홀 밴드, 홀 바닥 X원점 293.5m·폭 171m — 렌더 시각 검증 2회로 캘리브레이션. **트렌치 실배치 = 가로 7열(~9m 피치)+중앙 피더** 확인(현행 V5 가정 6m 격자와 상이 → V61 실측 시드는 후속).
- **DWG 탭**: 홀1~5 바닥면 crop PNG(margin 3m, 각 ~210KB) 빌드 내장(`/media/floorplans/dwg/`), 에디터 좌측 "도면" 툴그룹 JPG/DWG 탭(미보유 홀 비활성), 캘리브레이션은 렌더 파라미터 결정적.
- **한계 기록**: 밴드↔홀 번호 방향 미확증(구조 동일해 표시 유효)·A3002 평면도 DWG LibreDWG 크래시·제2전시장 렌더 후속. 상세: `docs/analysis/cad-extraction.md`.

### 세션 5 추가 — K2(홀6~10) DWG 렌더 완성, DWG 탭 전 홀 커버 (2026-07-15, 커밋 832ab7f)

**소유자 지시:** "2전시장도 렌더해서 DWG 탭 완성해"

**처리:** 원본-1층 평면도.dwg(106MB DXF) → 슬림 추출(지하층 xref 등 제외) → 고속 렌더러(`fast_render.py` LineCollection 일괄 + `--rotate` 회전 보정) 신규 작성. K2 홀들은 CAD에서 기울어 배치(H6 -12°·H9 -11°·H10 +11°·H7/H8 축정렬) — 장선 각도 클러스터로 프로그램 측정 + 시각 검증으로 좌표 확정(치수 정확 일치: H6 60×93·H7/H8 90×126(블록 252m)·H9/H10 99×132). hall6~10.png 생성·빌드 내장, DWG_HALL_DIMS 전 홀 확장 → **DWG 탭 10개 홀 전부 활성**.

**검증:** tsc 0·build 0 → 배포(번들 DzrNiyIM)·health UP·hall6/hall10.png 200·스모크 통과. 좌표표: docs/analysis/cad-extraction.md §K2. 한계: 홀 번호는 미니맵+치수 정합 근거(도면 텍스트 라벨 직접 확인 아님).

### 세션 5 추가 — V61 트렌치 실측 시드 (2026-07-15, 소유자 지시 "V61 트렌치 실측 시드 진행해")

CAD 레이어 `5-트랜치`(표기 함정 — 트렌치≠트랜치)에서 K1 홀1~5 트렌치 채널 실측 추출: **홀당 가로 7채널·피치 9.0m·연장 x[20.6..170.2]m** (5개 홀 패턴 완전 일치로 밴드 정렬 교차 검증). V61 = 가정 그리드 삭제 → 채널 따라 6m 간격 실측 포인트 875개(is_assumed=false, 생성기 `tools/cad/extract_trench_seed.py` 결정적 재생성 가능). K2는 트렌치 레이어 부재로 가정 유지(전력간선 도면 분석 후속). 검증: gradle test 통과 → push→자동배포→health·스모크 게이트.

### 세션 5 추가 — 기둥 추출·자동배치 회피 (2026-07-15, 소유자 지시 "기둥 추출해서 자동배치 회피 반영해")

V62: hall_pillar 74개 시드 — K1은 CAD 4-COL-H 추출(공식 주석 54/117m와 일치 검증), K2 H7~H10은 공식 도면 치수 주석(midline 내부 기둥, ø2.3m), H6 미시드(근거 없음). 부수 교정: **V61 트렌치 y축 반전 보정**(도면 상단 y=0 기준 정합 — 캔버스/DWG 언더레이와 상하 일치). 자동배치는 기둥 반경+0.6m를 예약 영역으로 회피, 캔버스 구조 레이어에 기둥 원 표시. 게이트: gradle test·tsc·vite·XML 전부 통과 → push→배포.

### 세션 5 추가 — V63 벽·계단·엘리베이터·문 인식 (2026-07-15, 소유자 지시 "V63 벽·계단 인식 진행해" + "엘리베이터,문,DRYWALL 까지 함께")

hall_obstacle 60개 시드(K1 H1~H5) — 1m 셀 래스터·연결성분·행 스트립 분해로 벽/계단/엘리베이터/문 실측 추출. 자동배치가 문 1.0m·기타 0.3m 버퍼로 회피, 캔버스 구조 레이어 사각 표시. K2는 레이어 구조 상이로 보류(한계 기록). 게이트: gradle test·tsc·vite·XML 전부 통과 → push→배포.

### 세션 5 추가 — V64 K2 장애물 (2026-07-15, 소유자 지시 "K2 장애물도 진행해")

H6~H10 장애물 31개 스트립 시드(홀 프레임 회전 변환) — 에지 문·부속실 벽·midline 분리 셔터 트랙(door 1.0m 버퍼로 가동선 클리어). 전 홀(K1+K2) 장애물 인식 완성(총 91개). 게이트: gradle test 통과 → push→배포.

### 세션 5 추가 — 개발→운영 확인 (2026-07-16, 소유자 지시 "git push -> 개발 -> 운영")

git push 최신(HEAD 7f86104, Everything up-to-date). 운영 도메인 kintex.wise.ai.kr(CNAME→wise.ai.kr→211.37.173.197)가 이미 라이브 — 개발과 동일 산출물 서빙 확인(번들 Bb9GOk5Z·index.html mtime 초 단위 일치 = 프록시 또는 동일 호스트). 운영 도메인 기준 스모크 13/13 통과. V58~V64(관리자 통계·옥션 실시간·CMS 예약게시·홀 치수 정렬·구역 트리·트렌치 875·기둥 74·장애물 91) 전부 운영 반영 상태.

### 세션 5 추가 — V65 비상구 실좌표 + 캔버스 트렌치 실데이터 (2026-07-16)

비상구: H1~H8 실측 34개(DOOR 경계 클러스터, 장애물 door 스트립과 교차 일치 검증), H9/H10 가정 유지(신뢰 부족 명시). 캔버스: 트렌치 실데이터 도트 표시+합성 그리드 폴백. 게이트 전부 통과 → push→배포. 잔여: K2 트렌치(전력간선 도면).

### 세션 5 추가 — V66 K2 트렌치 실측 시드 (2026-07-16)

K2(H6~H10) 트렌치 실측 완료 — 65채널·941포인트(H6 9채널·H7/H8/H9/H10 각 14채널, 피치 9m·6m 샘플링). 소스는 전력간선 평면도(77MB) 분석 결과 그 안의 유틸라인 xref가 크롭본(x≤509.2m)+위상 ~3.5m 오차로 부적합 판정 → **홀 프레임과 동일 원점인 원본-1층 평면도의 블록 내부 TRENCH 레이어**(V61 때 "부재" 오판 교정 — xref 블록 내부라 최상위 순회에 안 잡혔던 것)를 스트리밍 파서+INSERT 체인 변환으로 추출(생성기 `tools/cad/extract_trench_seed_k2.py` 결정적 재생성). 전력간선 도면은 교차검증(각도 0°/±11°/−12° 홀 배치각 일치·9m 피치·쌍선 구조 일치)으로 활용. 오버레이 시각 검증 — 시드 포인트가 CAD 쌍선 채널 정위치. 이로써 **전 홀(H1~H10) 트렌치 실측 완료(PLANNING R4 잔여 해소)**. 게이트: gradle test 통과. 커밋까지(푸시는 상위 세션 게이트).
