# cimery/CLAUDE.md cimery 코드베이스 개발 지침. 최상위 CLAUDE.md + Output/guides/cimery-dev-guide.md의 상세판. ## 크레이트 구조 (Sprint 39 현황) ``` crates/ ├── core/ 단위 타입(Mm·M), 에러, 도메인 열거형 ← 모두 의존 ├── ir/ IR 구조체 + serde JSON 직렬화 ← dsl·kernel·usd·ifc 의존 ├── dsl/ Girder 등 Feature 빌더 + 검증 ← ir 의존 ├── kernel/ GeomKernel trait + StubKernel/PureRust/Occt ← ir 의존 ├── incremental/ 증분 계산 DB (수동 + salsa 백엔드) ← kernel·ir 의존 ├── evaluator/ IR → kernel 연결 레이어 ← incremental·kernel 의존 ├── viewer/ egui+wgpu 뷰어, IFC 익스포트 통합 ← kernel·ifc 의존 ├── usd/ USD 텍스트 익스포트 ← ir 의존 ├── ifc/ IFC4X3 Add2 STEP Part21 익스포터 ← ir·core 의존 (Sprint 33~36) ├── macros/ proc-macro: #[derive(ParamSummary)] ← 독립 (Sprint 38) └── app/ Tauri v2 데스크톱 런처 ← 전 크레이트 의존 ``` 의존 방향: core → ir → { dsl, kernel, usd, ifc } → incremental → evaluator → viewer → app ## 개발 규칙 - **단위 강제:** 구조물 `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` | 수동 + salsa-backend 양쪽 (Sprint 24) | WASM salsa 승격 | | `kernel` | PureRust + OcctKernel(데스크톱) | opencascade.js(웹) | | `viewer` | egui+wgpu 전체 씬 + Ortho 토글 | LOD · 성능 최적화 | | `dsl` | builder + `#[derive(ParamSummary)]` 스캐폴딩 | `#[param(unit,range,default)]` 전면 | | `ifc` | IFC4X3 Add2 Phase 1~3b + Pset_BeamCommon | LinearPlacement · ElementAssembly | ## 참조 ADR - ADR-001: 기술 스택 (Rust + Tauri/PWA, OCCT, wgpu) - ADR-002: Feature DSL 아키텍처 (builder, IR, salsa, evaluator, 테스트 4층) - ADR-003: 후속 결정 (Feature 카탈로그, LOD, UX) - ADR-004: Sprint 25~39 결정 (거더교 MVP 확장·IFC4X3 Add2·proc-macro 스캐폴딩)