8.0 KB · 수정 2026-08-18 22:06
목차

2026-08-18(화) 세션 — imos 아티클 생성 구조 완전복사 1~3단계

지시 = projects/pncad/design-imos-article-full-copy.md(작업 순서서). 그 문서의 1·2·3단계를 실행했다. 4단계(가공 보링 엔진 · CP 마스터 서버 테이블화)는 착수 전 그릴링 대상이라 손 안 댔다. 커밋 = pncad 8f23abb · pfs f7c6ac2(실행사본, 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.mjsreference/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)

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 도어 힌지 방향 컬럼 자체가 못 쓴다(아래) 폐기

1-4. 🔴 지시문 전제 2건이 실측에서 뒤집혔다

  1. 힌지 컬럼은 쓰레기값이다. RIGHTHINGE906126224·1138882744 같은 초기화 안 된 정수가 들어 있고, 둘 중 하나라도 켜진 존이 10,604 중 8,796 인데 도어 면을 가진 존은 614뿐이라 상관관계가 없다. anglzone.DOORHISIDE 는 도어존 614개가 전부 0. → 도어 방향의 정본은 CP 이름(하부도어_SDO_R·_DDO·_FDO). 지시문의 「힌지 10,344건」은 이 쓰레기값을 센 숫자다. 재현 = tools/_probe_hinge.mjs.
  2. 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건 전부 완료)

  1. 몸통 프리셋(KORP_VOR) — 편집기 헤더에 셀렉트. 신규 제작 기본값이 코드 하드코딩(주방 15T)에서 Poin_kitchen 프리셋으로 바뀌었고, Poin_furniture·Poin_오픈장 선택 시 6면 부재정의 + 계열을 통째로 교체한다 (안쪽 분할은 유지, 적용 전 확인창).
  2. 파트 속성에 트림(결합) 표시시작 S · 끝 L · 상 L · 하 L + 오프셋, 코드 뜻 풀이 한 줄. 읽기전용(imos 정본).
  3. 배리어블 화면에 분류분류 열 + 분류 필터 셀렉트, 분류 → 이름 순 정렬. 툴팁에 CATEGORY·TYP.
  4. 부재목록에 디스크립터 탭 — 54종 조건분할표(조건 → 분할식, 쓰는 아티클 역참조). 탭 전환 시 CP 전용 필터는 숨긴다.

E2E 신설 = tools/_e2e_editor3.py(11건). 기존 _e2e_editor2 19 · _e2e_mouse 10 · _e2e_vars 9 도 전부 PASS.


🔴 미결 — 다음 세션이 먼저 볼 것

  1. PFS 화면에 1단계 성과가 아직 안 뜬다. _seed_if_empty()pncad_article 이 비었을 때만 돌아서 PFS DB 에는 트림코드 없는 옛 165종이 그대로다(단독 8799 는 파일을 읽어 이미 새 값). 재시딩 경로가 없다 — 있는 건 백업/복원뿐이고 replace_all 은 사용자 제작 아티클까지 지운다. → 필요한 것 = origin='imos' 행만 갱신하는 머지 시딩. 파괴 범위·트리거 주체가 결정 사항이라 그릴링 후 착수.
  2. pfs master 미푸시(테스트 서버 자동배포가 push 로 걸린다). 운영은 페페 채팅 지시로만.
  3. 서랍이 남은 최대 덩어리 — 텐덤/언더레일 서랍재 누락·잉여 약 2,700매. 2단계에서 받아둔 drawer_full.json(DRAWERSIZE 16,480 포함)이 그 재료다. 여기가 다음 대조율 상승의 본진.
  4. 힌지 기능 재설계 — 컬럼이 아니라 CP 이름(_SDO_R·_DDO·_FDO) 파싱으로.
  5. SIZREF 슬롯 방향 — 우수 코너장에서 뒤집히는 규칙을 imos 화면 캡처로 확정해야 5슬롯을 쓸 수 있다.