qcast-front/.claude/memory/project_phantom_ridge_cull.md

25 lines
1.9 KiB
Markdown

---
name: phantom ridge (RG-N) 다운스트림 cull
description: createInnerLinesFromSkeleton 종료 직전 zero-length + dead-end ridge 2단계 cull 로 SK builder drift phantom 제거
type: project
---
증상: 정확한 수치 입력 폴리곤(예: 12-vertex 계단형)에서 SK builder 가 0.0001 좌표 drift 로 phantom skeleton edge 를 emit. 화면에 length=0 또는 한쪽 끝이 매달린 ridge (사용자 표현 RG-8) 로 표시.
원인:
1. SK builder 가 zero-length ridge 를 face 처리 중 emit (예: `ridge (61,-526)→(61,-526)`).
2. 이 zero-length 라인이 동일 endpoint 에 degree +2 를 부여 → 진짜 dead-end ridge 의 degree 를 1→3 으로 부풀려 위장.
3. dedup(line 1583) 으로는 단일 entry 라 못 잡음.
4. logDeadEndLines (line 2919) 는 로그만 출력, 삭제 안 함.
수정 (B안):
- `createInnerLinesFromSkeleton` 의 두 return 직전(현 line 2780~) 에 IIFE cull 블록 추가.
- 1단계: `lineName === 'ridge'` 이고 dx<0.5 && dy<0.5 zero-length 라인 toRemove 등록.
- 2단계: toRemove 제외한 라인들로 degree 재계산. ridge 한쪽 endpoint degree=1 && roof corner 1mm 이상 떨어진 경우 toRemove.
- canvas.remove + innerLines.splice 동기.
- hip / eaves / roofLine 절대 cull (lineName 가드).
**Why:** 사용자 보고 "정확한 수치로 그리면 SK 무너지는 케이스 재발". cd5eebd0 이전 SK builder 내부 수정이 케이스에는 통했고, builder 추가 수정 위험 높아 다운스트림 cull 흡수.
**How to apply:** RG-N 가짜 ridge 다시 나오면 콘솔의 `[B안 cull] dead-end ridge 제거 N개` 로그로 cull 작동 확인. 잡히면 1) 해당 라인 lineName 'ridge' 아닌지, 2) 인접 phantom degree 부풀려 우회하는지 진단. cull 블록은 createInnerLinesFromSkeleton (`if (findPoints.length > 0)` 직전).