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

2.3 KiB

name description type
v2.0 핵심 불변식 — 누적 보존, 리셋 금지 sk-v2.0 에서 라인이동/offset변경/보조선추가 가 서로 리셋시키면 안 됨. 최종 그림 = wall.baseLines 현재 좌표 + Phase 2 offset 확장. project

불변식 (사용자 명시, 2026-04-28):

"최종 그림 = wall.baseLines 좌표점 + offset 만큼 확장된 그림" 어떤 작업이 일어나도 다른 작업의 결과를 리셋시키면 안 됨.

구체적으로:

  • 사용자가 라인 이동wall.baseLines 좌표만 갱신, offset/보조선 보존
  • 사용자가 offset 변경wall.baseLines[i].attributes.offset 만 갱신, 라인이동/보조선 보존
  • 사용자가 보조선 추가 → 별도 컬렉션에 추가, 라인이동/offset 보존

v1 의 문제 (사용자 표현): "v1은 리셋이 되는 문제가 있다." 한 작업이 다른 작업의 결과를 덮어쓰는 케이스가 있었음. v2.0 에서는 발생 금지.

v2.0 설계상 자동 보장되는 부분:

  • SK 입력은 wall.baseLines 현재 좌표 매번 읽음 (skeleton-utils.js:715) — 누적 이동 자동 반영
  • Phase 2 확장은 bl.attributes?.offset 매번 dynamic 읽음 — 누적 offset 자동 반영
  • SK 재빌드는 SK-derived 라인만 다시 만듦

주의 지점 (리셋 위험):

  • roof.innerLines 통째 교체 (skeleton-utils.js:882-883):
    roof.innerLines = createInnerLinesFromSkeleton(...)
    
    사용자가 별도로 그린 보조선이 roof.innerLines 에 섞여있으면 SK 재빌드 시 사라짐. 보조선은 별도 name/컬렉션으로 보관해야 함.
  • canvas.skeleton = cleanSkeleton 교체 (skeleton-utils.js:915-917) — lastPoints 만 명시적으로 보존하고 있음. 다른 누적 상태 (e.g. 사용자 보조선) 도 동일하게 보존 필요할 수 있음.

How to apply:

  • v2.0 에서 새 기능 작업 시 항상 이 불변식 만족하는지 확인.
  • "한 작업이 다른 결과를 지우는가?" 자체질문 필수.
  • 리셋 위험 지점 (위 주의 지점) 수정 시 누적 보존 코드 추가.
  • offset/이동/보조선 셋 모두 동시에 발생하는 시나리오로 회귀 테스트.

관련:

  • project_v2_design_direction.md — v2.0 phase 분할
  • feedback_no_touch_working_code.md — 정상 코드 건들지 않기