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

2.9 KiB

name description type
skeleton-utils 이동 로직 회귀 테스트 체크리스트 skeleton-utils.js 의 SK 이동/HIP/eaveHelpLine 가드 변경 후 반드시 검증해야 할 시나리오. 사용자가 회귀 두려워 함 → 변경 후 이 목록 확인 권장. 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 미가능, 인자 전달 필수.