# cimery/CLAUDE.md cimery 코드베이스 개발 지침. 최상위 CLAUDE.md + Output/guides/cimery-dev-guide.md의 상세판. ## 크레이트 구조 ``` crates/ ├── core/ 단위 타입(Mm·M), 에러, 도메인 열거형 ← 모두 의존 ├── ir/ IR 구조체 + serde JSON 직렬화 ← dsl·kernel·usd 의존 ├── dsl/ Girder 등 Feature 빌더 + 검증 ← ir 의존 ├── kernel/ GeomKernel trait + StubKernel ← ir 의존 ├── incremental/ 증분 계산 DB (dirty tracking → salsa) ← kernel·ir 의존 ├── evaluator/ IR → kernel 연결 레이어 ← incremental·kernel 의존 ├── viewer/ wgpu 뷰어 (독립, 선택적 kernel 의존) ← kernel 의존 └── usd/ USD 텍스트 익스포트 ← ir 의존 ``` 의존 방향: core → ir → { dsl, kernel, usd } → incremental → evaluator ## 개발 규칙 - **단위 강제:** 구조물 `Mm(f64)`, 선형 `M(f64)`. `UnitExt` trait로 리터럴 지원. - **암묵 변환 금지:** `From for M` 존재하나 반드시 명시적으로 호출. - **결정론:** 같은 IR JSON → 같은 기하. 연산 순서 고정. - **테스트 4층:** IR 스냅샷 (insta) · 기하 불변량 · 두 커널 cross-check · proptest. - **StubKernel:** 실제 OCCT 전 기하 검증용. 박스 형태 반환. Sprint 1 전용. - **cargo check 우선:** 먼저 컴파일되게 만들고, 최적화는 나중에. ## 빌드 ```bash # 전체 체크 cargo check --workspace # 전체 테스트 cargo test --workspace # 특정 크레이트 cargo test -p cimery-core ``` ## 다음 스프린트 업그레이드 경로 - `incremental`: manual dirty tracking → salsa (크레이트가 안정화되면) - `kernel`: StubKernel → opencascade-rs (데스크톱) / OpenCascade.js (웹) - `viewer`: 삼각형 렌더 → Girder Mesh 렌더 → 전체 씬 - `dsl`: 순수 builder → `macro_rules!` 설탕 → proc-macro `#[param]` ## 참조 ADR - ADR-001: 기술 스택 (Rust + Tauri/PWA, OCCT, wgpu) - ADR-002: Feature DSL 아키텍처 (builder, IR, salsa, evaluator, 테스트 4층) - ADR-003: 후속 결정 (Feature 카탈로그, LOD, UX)