2026-08-17 세션 — poincad2 S1 스키마 v2 그릴링 + 로드맵 페이지 등록
기록: [코디]
논의·대안
S0(설계 확정)이 끝난 상태에서 S1 스키마 v2 착수 전 그릴링을 걸었다. 가구 CAD 데이터모델의 갈림길 9개를 사실로 받쳐 놓고 하나씩 물었다.
먼저 로컬 덤프(reference/catalog-2026-08-17/)에서 사실 확인:
- DIVDIR='A'(25행) = 서브아티클 삽입 — DIVIDER에 존 분할부재가 아니라 아티클명이 들어있다
(BC_1DR_1SD, $DM_SUBARTICLE, Plant_05). 대부분 imos 데모. V/H/I 말고 4번째 분할방향.
- LINDIV2는 5행뿐 → 모델링 대상 아님(원문만 보존).
- 아티클당 존 노드 = 중앙값 8 · 최대 60 → 177종 존트리 전량 스냅샷해도 데이터가 아주 작다.
- anglprim.DIMCALCFX/Y/Z(아티클 치수 자체를 수식 파생) 사용 = X 14 / Y 167 / Z 299종.
- CP distinct 756종 중 Rv 포함 270종 → Rv를 파라미터로 빼면 124종(146종 감소).
일반가구_AS_Rv# 24 · 주방가구_AS_Rv# 21 · 일반가구_칸막이_Rv# 17 · 일반가구_FS_Rv# 16.
대안 축: - 카탈로그 정본 = 존트리 스냅샷(데이터) vs 타입 생성기(코드) vs 하이브리드 - 완성/재단 치수 = 완성 정본·재단 파생 vs 재단 정본 vs 둘 다 독립 - 변수 스코프 = 3단(카탈로그→현장→인스턴스) vs 2단 vs imos VARCAT 동형 - 서랍 N단 = 존트리 자식으로 전개 vs fill 안에 접기(imos DRAWERZONE 방식) - 노브 = 편집지점 포인터 vs 트리 변형 패치 vs 문서만
결정
페페 답(2026-08-17):
1. 카탈로그 정본 = 존트리 스냅샷. 19타입은 UI 노브 그룹 메타데이터일 뿐. 근거 = LINDIV이 이미
비율+고정 혼합이라 W/D/H 변경 시 파라메트릭 전파가 공짜, S7 imos 100% 일치 검증이 가장 쉽다.
2. 엣지는 치수 계산에 반영 안 한다 — 자재 두께로만 계산. 부재는 치수 1세트만 갖고,
엣지는 변 4개 레코드로 따로 붙여 엣지밴딩 길이 산출·도면 표기에만 쓴다.
재단치수는 필드가 아니라 BOM 출력 시 cut(part) 함수 한 군데서 만든다(지금은 항등).
3. 변수 스코프 3단 = 카탈로그 기본 → 현장(오더) 프리셋 → 인스턴스 오버라이드.
해석 순서 = 인스턴스 > 현장 > 카탈로그. 지시⑥(D·H 일괄 / W만 수동)과 정확히 일치.
4. 도어 = 존의 fill 종류 하나 + emit:false. imos도 도어를 존트리 안에 넣는다
(anglelem PARTTYPE='D' 623행) → 변환기가 그대로 옮기면 끝. 뷰 토글 = emit:false 노드 숨기기.
5. 저장 = 카탈로그/씬 2파일, 계산결과는 저장 안 하고 열 때 재계산.
6. 존 노드 = faces(존의 벽면 4장) + split(자식을 가르는 선반/칸막이) 둘로 분리 — imos와 동형
(anglelem vs TOPSHELF/BOTSHELF/DIVIDER 1053/937/1392행). 부재 주소는 존경로에 안 이어붙인다.
7. 서랍 N단은 존트리 자식 존으로 전개한다. imos가 DRAWERZONE으로 뺀 건 anglzone에 못 넣어서지
설계가 아니다. 전개하면 "서랍통 가로 = 그 존의 내경 Wz" 원칙이 공짜로 성립.
8. 배치 좌표 = 벽 + 가로오프셋 + 바닥높이({wall,x,z}). 룸플랜 개념 안 끌고 들어옴.
9. 노브 = 존트리 안 편집지점 포인터 3종(변수값 / LINDIV 문자열 / fill 교체). 구조를 새로 만드는
노브(아일랜드=레이어 추가 등)는 두지 않고 별개 카탈로그 항목으로 남긴다.
코디 라우틴 결정: LINDIV은 원문 문자열로 저장(평가결과는 런타임만) · DIVDIR='A' 서브아티클은
kind:"subarticle" 자리만 두고 1차 미구현.
- CP = (파트 × 자재 × Rv) 3축 조합 (페페 설명 → 코디 재추천 채택). 페페 설명으로 CP의 정체가
바뀌었다 — CP는 ①주방/일반 15T·18T 자재 구분 ②천판·지판·밴드·측판 등 파트별 구분
③이동선반·고정선반은 계산식이 단순한데 imos에서 세부 지정에 시간이 오래 걸려 필요한 수량만큼
일일이 만든 것. 즉 CP 상당수가 imos UI 한계가 만든 중복이다. 실측이 이걸 받쳤다:
덤프 CP 756종 중 Rv 붙은 270종이 Rv를 숫자 파라미터로 빼면 124종으로 접힌다.
→ CP를 마스터로 베끼지 않고 3축으로 풀되
_imos원문은 항상 보존(S7 대조·역변환).
작업 중 발견 — ★ LINDIV이 정본, children은 그 결과. imos anglzone에 편집 후 남은 고아 존
행이 있다: 자식 있는 존 3,185개 중 세그먼트 수와 자식 수 정확히 일치 1,430 / 불일치 198(12.2%),
그리고 불일치는 항상 자식이 더 많다(diff ≥ 0, top/bot/divider 개수와 무상관). 1:1:1 → 1:1로
고쳤을 때 세 번째 존 행이 안 지워진 흔적. → validate()가 불일치를 에러로 잡고, S2 변환기는
세그먼트 수만큼만 가져오고 나머지는 버리고 로그에 남긴다. LINDIV1이 빈 문자열인데 자식이 있는
존 184건은 자식 수만큼 균등분할로 읽는다.
자체검증에서 잡힌 내 오류 3건(코드가 맞고 기댓값이 틀렸다): 찬넬 분할은 지판 15T가 높이를
먼저 먹어 641/64(720−64 아님) · 지판 깊이는 뒤판 앞까지 535 · 선반 깊이는 535−Rv18=517.
그리고 도어 판정을 role로 하면 밑장_SDO_noHandle을 놓친다 → 원문 CP명으로 판정하도록 수정.
산출물·커밋
C:\dev\poincad2\SPEC-SCHEMA.md— 스키마 v2 정의(좌표계·존노드·부재레코드·CP 3축·씬·API·미결).C:\dev\poincad2\schema.js—validate()/expand()/bom()/cut()/parseCP()/drawerBox()+ 자체검증.node schema.js→schema self-check PASS (존 3 · 부재 5매 · BOM 4행)+sample check PASS (인스턴스 3 · 부재 15매 · 밴드높이 64/64/0). 서랍통 치수는SPEC-DRAWER§3.5 완성세트와 편차 0으로 검증.node lindiv.js회귀도 PASS.C:\dev\poincad2\sample\{catalog,scene}.sample.json— 실아티클B_SD골격 + 현장 씬 3인스턴스 (3번째는찬넬높이:0오버라이드로 밴드 존이 0으로 접히는 것까지 검증).C:\dev\devplan\poincad2-roadmap.html— S0~S8 단계별 작업 내용 페이지(페페 지시: "알파벳만 알고 단계별 내용을 모른다"). 4층 구조도 + 단계별 무엇을/끝나면 뭐가 보이나 + 확정규약 9 + 미결 4. check_font FAIL 0 · check_theme FAIL 0 · HTTP 200.devplan/projects.jsonpoincad2 카드 →url=/poincad2-roadmap.html,source·desc 갱신.build_hub.py재빌드(selftest 45카드 전부 해결). 카드 date=2026-08-17(최신).project_state.py set poincad2→ 3/9차 · S2 · stage 3.PLAN.mdS1 완료 마킹 ·rules.md🆕 6줄 추가.
S2 (같은 세션에서 이어서 완료)
convert.mjs→data/catalog.json— imos 165종 전량, 검증에러 0 · 전개 165/165 · 부재 1,710매. 고아 존 197개(전부 빈 존) 잘라냄 · 내용 있는 7건은 균등분할 폴백 · 깊이 비규격 1건 스냅.data/cp.jsonCP 마스터 1,672종 — 부재명·자재·두께·PRODCODE·PART_V·고정축은 2026 실부재에서, 구성원칙 파라미터(CABIN.UEBERST_*·CABBACK.RGRDE*/DISTLR·TRAVERSE)는 CP 테이블에서 합침.vars-default.json424개 — imos 전역 변수 마스터 486행 전량.verify.mjs(S7 대조기 선행) — 실오더102 주방 현산이문SH(부재 211·배치 27) 정답지와 대조. 일치율 16.5% → 35.0%.
페페 지시 2건 반영
- "몸통규격표 RDL을 봐라" →
SPEC-BOM.md. imosBINDATA의001 몸통규격표(229KB)를 base64로 무손실 추출·해독. 발견 = 부재↔아티클 조인IDBGRPS.HIGHARTID· PRODCODE 코드표 (01측판~08서랍재 / 11속대류·12좌대류·13걸레받이문틀재·14경판몸통재도어 / 21도어·33.1EP 제외) · imos↔PFS 다리 =PROADMIN.ARTICLENO= PFSfield.field_no· 지시②의 현장·주방일반·몸통칼라 =PROADMIN.COLOUR2~5· 치수 칸 =FWIDTH*FLENG(PART_V만 뒤집고FLOOR버림). - "치수 추측에서 시간 뺏기지 마라, 가구 KB 참고해라" → imos CP 테이블이 정본임을 확인하고 전량 이식. 가구전문가 에이전트 판정 = KB는 imos CP 필드 수준 값을 갖고 있지 않다(교과서·카톡마이닝 실무값 위주), 내 imos 실측값은 전부 정확, 치수는 imos CP를 1차 소스로 쓰라는 권고. 이 이식만으로 일치율이 배로 뛰었다.
페페 확정 (같은 세션)
- 텐덤 서랍 1차 포함 — 주방 하부장 288배치(10.4%). 측판 없음(금속레일이 측판), 우리가 만드는 건 바닥판 15T + 후판 15T 2매뿐. 레일 기본값 = 오더 실사용 최빈값. ⏳ 산출식 미구현.
- 찬넬(CH) = 깊이 37 × 높이 70 빈 공간을 19mm 도어마감 동일 자재로 메운다. 부재를 뽑되 도어 계열이라 몸통규격표에서 빠져 있었다. 현장별 전역변수 수정 잦음.
- 기둥목 = 일반 더블도어 장 45 기본(현장따라 56·60) / 코너장 68 × 수직 2개(경첩 고정 기둥). 가구 KB 45 vs imos 68 충돌은 장 종류가 달라 둘 다 맞는 것으로 판정.
다음
- S3 3D 엔진 — 레이어 지원 존 렌더러(스키마 v2) · 도어 판 렌더 + 보이기/숨기기 토글 · 서랍통 렌더 · 카탈로그 브라우저 UI · 썸네일 자체 캡처.
- S7 정밀화에서 남은 것: 오더 스코프 변수 주입 · 텐덤 산출식 · 코너 · 밴드 길이 −1 ·
(H,이동/고정선반)199건 축 해석 ·1:1-19.5mm파서 의미.
관계
- 주제 그룹: poincad2
- 관련 문서: poincad2/handoff.md, poincad2/rules.md, session-2026-07-27-imos-survey2-deep