--- name: skeleton-utils 이동 로직 회귀 테스트 체크리스트 description: skeleton-utils.js 의 SK 이동/HIP/eaveHelpLine 가드 변경 후 반드시 검증해야 할 시나리오. 사용자가 회귀 두려워 함 → 변경 후 이 목록 확인 권장. type: project --- **규칙**: `skeleton-utils.js` 의 movement/HIP/_out/processInBoth 영역 변경 시 아래 시나리오 모두 통과해야 함. 하나라도 깨지면 즉시 사용자에게 보고 후 진행 정지. **검증 시나리오 (2026-04-27 기준 통과 상태)**: 1. **ㅁ 단순 사각형** — 어떤 이동이든 phantom HIP 없이 정상 처마/지붕 라인만 그려져야 함. (sanity check) 2. **ㅗ 폴리곤 단독 이동 (4 방향)** — top/bottom/left/right 각각 단독 in/out 이동. 모든 corner 의 HIP extensionLine 이 새 SK vertex 와 일치해야 함. 3. **ㅗ B-2 위로 이동 → B-4 평행 (H-6 phantom 시나리오)** - 직사각형으로 흡수돼야 하는 합쳐진 폴리곤에 (700,548)→(750,598) 같은 phantom HIP 가 **없어야** 함. - 가드: `skeleton-utils.js:1475-1481` HIP_SKIP `< 10`. 4. **bump 폴리곤 top-in + left-out 클램프 (H-12 phantom 시나리오)** - left wall 을 평행 직전까지 이동(OVER 클램프, planeSize=5). - roofline **밖에** H-12 가 **없어야** 함. `updateAndAddLine NOT FOUND` 도 안 떠야 함. - 콘솔에서 `HIP_SKIP_VERTEX_MISS end target=(587.4,1.2)` 같은 skip 로그가 찍혀야 정상. - 가드: `_out` 4 경로 OUT_SKIP + processInBoth SK-VERTEX-PROXIMITY. 5. **bump 폴리곤 top-in + left-out + right-out (양쪽 흡수 → 사각형)** - 결과: 단순 사각형 SK. phantom HIP 0개. - pair#0 양쪽 모두 `HIP_SKIP_VERTEX_MISS`, pair#1 right_out OUT_SKIP, pair#7 left_out OUT_SKIP, pair#2/pair#6 SHOULDER_ABSORBED skip 모두 찍혀야 함. **Why**: - 도형 가드는 한 케이스 고치면 다른 케이스 깨지기 쉬움 (false positive/negative). 사용자가 회귀에 매우 민감. - 위 5 케이스가 흡수/평행/단독이동 패턴 전반을 커버 → 하나라도 깨지면 가드 임계나 적용 범위가 잘못된 것. **How to apply**: - skeleton-utils.js 1475/1797/1923/2084/2207/1517 부근 또는 `processInBoth` 본체 변경 시: 사용자에게 "위 5 케이스 다시 테스트 부탁" 이라고 명시적으로 요청. - 새 가드 추가 시 임계는 항상 `< 10` (project_shoulder_absorbed_thresholds.md 참고). - 가드의 위치 정보는 검증 시 grep 으로 위치 변동 확인 후 메모리 업데이트. **관련 가드 위치** (변경 시 함께 검증): - `skeleton-utils.js:1610` SHOULDER_ABSORBED skip - `skeleton-utils.js:1475-1481` processInBoth HIP_SKIP (인접 흡수) - `skeleton-utils.js:1517-1546` processInBoth SK-VERTEX-PROXIMITY (2-hop 흡수) - `skeleton-utils.js:1797/1923/2084/2207` `_out` 4 경로 OUT_SKIP - `createInnerLinesFromSkeleton` 6번째 인자 `skPolygonPoints` — closure 미가능, 인자 전달 필수.