2026-08-18(화) 세션 — imos 아티클 생성 구조 완전복사 1~3단계
지시 =
projects/pncad/design-imos-article-full-copy.md(작업 순서서). 그 문서의 1·2·3단계를 실행했다. 4단계(가공 보링 엔진 · CP 마스터 서버 테이블화)는 착수 전 그릴링 대상이라 손 안 댔다. 커밋 = pncad8f23abb· pfsf7c6ac2(실행사본, master 로컬 커밋 — 미푸시).
결과 한 줄
전량 대조(verify2) 56.8% → 58.3%(일치 18,110 → 18,416 / 2,726 인스턴스). node schema.js PASS. E2E 49/49.
1단계 — convert.mjs 신규 컬럼 소비
1-1. 소스 교체 (기계적, 무위험)
convert.mjs 가 reference/catalog-2026-08-17/{zones,elems,prims}.json(슬림) 대신
reference/imos-full/zone_full.json(전컬럼)을 읽는다. 교체 전후 data/catalog.json 바이트 동일을 먼저 확인했고,
두 덤프의 공유 컬럼도 전량 대조했다 — 키없음 0 / 값차이 0(zones 10,604 · elems 5,371 · prims 1,040).
1-2. 트림코드 = 부재쌍 결합의 정본 ✅ (본작업, +1.5%p)
- 평면 윤곽 순환 = F→L→B→R. 결합쌍 =
(F.END,L.START) (L.END,B.START) (B.END,R.START) (R.END,F.START). 근거 =일반가구_2단서랍_날개의 좌/우 대칭쌍(0.0.1L 은STARTOFFS=-2,0.2.3R 은ENDOFFS=-2— 둘 다 앞면 접점). - 값 =
L관통 ·S끼움 ·PCP 파라미터(뒤판 RGRDE) ·D관통변형 ·M중앙. - 🔑 깎는 조건 = 「내가 S」가 아니라 「내가 S 이고 이웃이 L」. 도어
SSSS↔ 측판SLLL/LSLL은 양쪽 다 S 라 관통재가 없다 → 안 깎는다. 이 가드가 풀오버레이 도어를 지킨다(가드 없이 F 에 일괄 적용하면 57.9%→57.7%로 떨어진다). - 오프셋(
STARTOFFS/ENDOFFS/TOPOFFS/BOTOFFS)은 항상 더한다. 수식 컬럼은 안 파싱(2,257/2,270 이 숫자 캐시 일치). - 적용처 3곳 — ①측판 깊이(
walkL/R) ②구조재 앞판 폭(struct인 F) ③비-CABBACK 뒤판 좌우여유(상수−1제거). - 검증 =
일반가구_2단서랍_날개23.2% → 31.4% · 전체 56.8% → 58.3%. - 자체검사 =
node schema.js에 3건 추가(S+오프셋 / L 이면 두께 안 깎음 / 오프셋 없으면 두께만).
1-3. 나머지 4개 컬럼 — 데이터는 보존, 규칙 적용은 기각 ❌
| 컬럼 | 시도 | 결과 | 처리 |
|---|---|---|---|
DIVTYPE |
'S'(부자재) = 선형 판정 |
58.3% → 54.5% | 카탈로그에 divtype 보존. 선형은 PRODCODE 12·13 유지 |
SIZREF 5슬롯 |
첫(OUT1)·끝(OUT2)을 양 끝 앵커로 분리 | 58.3% → 58.1% | 카탈로그에 sizref 원문 보존. 동작은 불리언 outer |
FUNCT='V' INSET |
내경에 반영(부호 양방향 시험) | 58.3% → 58.2% | 카탈로그에 vinset 보존, 미소비 |
LEFTHINGE/RIGHTHINGE |
도어 힌지 방향 | 컬럼 자체가 못 쓴다(아래) | 폐기 |
SIZREF회귀는 전부 우수 코너장(BC_R_001−47 ·BSC_DD_R−5 ·BC_R_001_아일랜드−3 ·BC_DD_R_001−2). 좌수(_L)는 하나도 안 내려갔다 → 슬롯 방향이 좌우 대칭에서 뒤집힌다는 뜻. 방향 규칙 실측이 선행이다.DIVTYPE은 편집기 표시용으로는 정확하다(A=이동선반 630 ·F=고정선반 441 ·P=칸막이 239 ·S=부자재 65).
1-4. 🔴 지시문 전제 2건이 실측에서 뒤집혔다
- 힌지 컬럼은 쓰레기값이다.
RIGHTHINGE에906126224·1138882744같은 초기화 안 된 정수가 들어 있고, 둘 중 하나라도 켜진 존이 10,604 중 8,796 인데 도어 면을 가진 존은 614뿐이라 상관관계가 없다.anglzone.DOORHISIDE는 도어존 614개가 전부 0. → 도어 방향의 정본은 CP 이름(하부도어_SDO_R·_DDO·_FDO). 지시문의 「힌지 10,344건」은 이 쓰레기값을 센 숫자다. 재현 =tools/_probe_hinge.mjs. BASECP받침 87.7% 는 부재가 아니다. 카탈로그 165종 전부BA_filler_1000_H080mm인데BAHEIGHT/BAINSET/BAINSERT/BATOEKICK이 전부 0 = 받침 꺼짐. 기본 CP 이름이 박혀 있을 뿐이다.
1-5. 🔴 대조율 상한선 — 이동선반은 규칙으로 못 맞춘다
남은 최대 잉여 「이동선반 1,085매」의 정체 = 오더에서 사람이 정하는 수량.
신발장_DD 124인스턴스에서 $Q_AS01/$Q_AS02 가 전부 5{1}(→8매)인데 imos 실부재는 0·3·4·5·6·7·8·10,
같은 H=1970 에서도 3·4·7·8 이 공존한다. 아티클 정의에 답이 없다.
→ 앞으로 verify2 를 볼 때 이 몫(≈4%p)은 구조적 상한으로 빼고 읽어라. 재현 = tools/_probe_shelf_qty.mjs.
1-6. 편집기 데이터 손실 버그 (트림 소비의 부작용, 같이 고침)
editor.js bindZone 의 부재정의 입력이 parseCP 로 CP 를 통째로 새로 만들어 trim·offs 를 날렸다.
면 CP 를 재조립하는 코드는 ref·inset·trim·offs 를 전부 물려줘야 한다.
2단계 — 남은 데이터 풀 (전부 실행 완료)
공용 헬퍼 tools/imosdb.py 신설(q() 조회 · dump() 전컬럼 저장). pull_*.py 마다 dbquery 배선을 복사하지 않는다.
| 스크립트 | 산출물 | 내용 |
|---|---|---|
pull_cp_full.py |
reference/imos-full/cp_rest_full.json |
DOOR 232×68 · KMS 490×57 |
pull_drawer_full.py |
drawer_full.json |
DR_MAIN 926 · DRAWERZONE 626 · DRAWERSING 806 · DRAWERSIZE 16,480 |
pull_pd.py |
pd_full.json |
kmsprof 2,062 · mppcpnts 484 · mppextru 144 · mppspnts 210 · mppsubpa 240 (mppsubcp 0행 제외) |
pull_hardware_rules.py |
hardware_rules.json |
CONNSELATTR 26,251 |
mkvars2.py |
data/vars-meta.json |
배리어블 분류 421건(FAMILY 72종 · CATEGORY · TYP) |
mkpresets.py |
data/presets.json |
몸통 프리셋 KORP_VOR 포인 3종 |
3단계 — 편집기 기능 갭 P1 (4건 전부 완료)
- 몸통 프리셋(KORP_VOR) — 편집기 헤더에 셀렉트. 신규 제작 기본값이 코드 하드코딩(주방 15T)에서
Poin_kitchen프리셋으로 바뀌었고,Poin_furniture·Poin_오픈장선택 시 6면 부재정의 + 계열을 통째로 교체한다 (안쪽 분할은 유지, 적용 전 확인창). - 파트 속성에 트림(결합) 표시 —
시작 S · 끝 L · 상 L · 하 L+ 오프셋, 코드 뜻 풀이 한 줄. 읽기전용(imos 정본). - 배리어블 화면에 분류 —
분류열 + 분류 필터 셀렉트, 분류 → 이름 순 정렬. 툴팁에 CATEGORY·TYP. - 부재목록에 디스크립터 탭 — 54종 조건분할표(조건 → 분할식, 쓰는 아티클 역참조). 탭 전환 시 CP 전용 필터는 숨긴다.
E2E 신설 = tools/_e2e_editor3.py(11건). 기존 _e2e_editor2 19 · _e2e_mouse 10 · _e2e_vars 9 도 전부 PASS.
🔴 미결 — 다음 세션이 먼저 볼 것
- PFS 화면에 1단계 성과가 아직 안 뜬다.
_seed_if_empty()는pncad_article이 비었을 때만 돌아서 PFS DB 에는 트림코드 없는 옛 165종이 그대로다(단독 8799 는 파일을 읽어 이미 새 값). 재시딩 경로가 없다 — 있는 건 백업/복원뿐이고replace_all은 사용자 제작 아티클까지 지운다. → 필요한 것 =origin='imos'행만 갱신하는 머지 시딩. 파괴 범위·트리거 주체가 결정 사항이라 그릴링 후 착수. - pfs
master미푸시(테스트 서버 자동배포가 push 로 걸린다). 운영은 페페 채팅 지시로만. - 서랍이 남은 최대 덩어리 — 텐덤/언더레일 서랍재 누락·잉여 약 2,700매. 2단계에서 받아둔
drawer_full.json(DRAWERSIZE 16,480 포함)이 그 재료다. 여기가 다음 대조율 상승의 본진. - 힌지 기능 재설계 — 컬럼이 아니라 CP 이름(
_SDO_R·_DDO·_FDO) 파싱으로. - SIZREF 슬롯 방향 — 우수 코너장에서 뒤집히는 규칙을 imos 화면 캡처로 확정해야 5슬롯을 쓸 수 있다.