2.3 KiB
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— 정상 코드 건들지 않기