--- name: SHOULDER_ABSORBED 임계는 모든 가드에서 동일하게 < 10 description: skeleton-utils.js 의 흡수 판정 임계는 OVER_EPS=0.5 → planeSize=5 대응 위해 < 10. 가드 추가 시 동일 값. type: project --- **규칙**: `wallBaseLine.attributes.planeSize` 로 흡수 판정하는 모든 가드는 임계 **`< 10`** 사용. **관련 가드 (2026-04-27 기준)**: - `skeleton-utils.js:1608` SHOULDER_ABSORBED skip — `< 10` - `skeleton-utils.js:1475-1481` SHOULDER-ADJACENT processInBoth HIP_SKIP — `< 10` (이전 `< 1` 이었으나 통일) - `skeleton-utils.js:1797` SHOULDER-ADJACENT `left_out` OUT_SKIP — `< 10` - `skeleton-utils.js:1923` SHOULDER-ADJACENT `right_out` OUT_SKIP — `< 10` - `skeleton-utils.js:2084` SHOULDER-ADJACENT `top_out` OUT_SKIP — `< 10` - `skeleton-utils.js:2207` SHOULDER-ADJACENT `bottom_out` OUT_SKIP — `< 10` - `skeleton-utils.js:1517-1546` (processInBoth) SK-VERTEX-PROXIMITY HIP_SKIP_VERTEX_MISS — target 이 `skPolygonPoints` (createInnerLinesFromSkeleton 6번째 인자, drawSkeletonRidgeRoof 에서 `changRoofLinePoints`, drawSkeletonRidgeRoofFromBaseLines 에서 `rawPoints` 전달) 의 vertex 5px 이내 아니면 skip. **2-hop 흡수** (인접 pair 가 stretched 되어 prev/next planeSize 가드를 통과하는 케이스) 도 차단. ※ closure 가 아닌 인자로 전달 — processInBoth 는 createInnerLinesFromSkeleton 안, changRoofLinePoints 는 skeletonBuilder 스코프라 직접 참조 시 ReferenceError. **Why**: - `useMovementSetting.js` 의 `OVER_EPS=0.5` 캔버스 단위 → `calcLinePlaneSize` 가 `× 10` 곱하므로 잔여 길이=0.5 시 planeSize=5. - 가드 임계가 `< 1` 이면 planeSize=5 흡수가 가드 통과 → phantom HIP/extensionLine. - 정상 baseLine 은 통상 50+ → `< 10` 이어도 false positive 없음. - 임계가 두 곳에서 다르면 한쪽만 흡수 인식하고 다른 쪽은 정상 처리 → 직사각형으로 합쳐진 폴리곤에 공중에 뜬 HIP 빗변(예: H-6) 출현. **How to apply**: - 흡수 판정 가드를 새로 추가할 때 임계는 항상 `< 10` (또는 SHOULDER_ABSORBED skip 라인의 임계와 명시적으로 동기화). - `OVER_EPS` 가 변경되면 임계도 재계산: 임계 ≥ `OVER_EPS × 10 + 안전마진(5)`. - 가드들의 임계는 코드 가까이에 비교용 주석으로 cross-reference 유지. **증상 사례**: - (1) ㅗ 폴리곤에서 B-2 (bottom-left horizontal) 를 위로 이동해 B-4 (bottom-right horizontal) 와 평행/연속시킴. - 직사각형으로 흡수돼야 하는데 (700,548)→(750,598) 위치에 H-6 (HIP extensionLine) 가 phantom 으로 그려짐. - 원인: pair#3 vertical step 흡수(planeSize=5) → pair#4 인접 가드 `< 1` 통과 → processInBoth HIP 생성. - 수정: processInBoth HIP_SKIP 가드 임계 `< 10` 으로 통일. - (2) bump (돌출부) 폴리곤에서 left wall 을 바깥으로 이동해 인접 pair 흡수 → roofline 밖에 H-12 출현 + `updateAndAddLine NOT FOUND`. - 원인 1: pair#6 흡수 후 pair#7 의 `_out` 분기가 dissolved 된 옛 roof.points 코너 참조. - 원인 2 (1차 수정 후 잔류): pair#0 (top_in, processInBoth) 의 END 가 흡수된 pair#6 의 옛 roof 코너 (587,-108) 를 참조 → target=(587,-31) 이 새 SK 외부에 phantom HIP 생성. - 수정 1: `_out` 4 경로에 인접 흡수 가드 추가. - 수정 2: processInBoth 의 createHipLine 호출 전 SK-VERTEX-PROXIMITY 검사 추가. target 이 `changRoofLinePoints` vertex 5px 이내 아니면 skip.