8개 크레이트 구현, cargo test 32개 전부 통과: - core: Mm/M 단위 newtype, UnitExt 리터럴, FeatureError - ir: GirderIR + 전 단면 파라미터(PSC-I/U/SteelBox/PlateI) serde JSON - dsl: Girder builder + 검증 (경간 범위·count·spacing) - kernel: GeomKernel trait + StubKernel (box mesh, AABB) - incremental: dirty-tracking IncrementalDb (salsa 업그레이드 경로 주석) - evaluator: 상태 없는 IR→kernel 브리지 - usd: USDA 1.0 텍스트 익스포트 (CimeryBridgeAPI·GirderAPI schema) - viewer: wgpu 22 + winit 0.30 컬러 삼각형 (Sprint 1 proof-of-concept) Sprint 2 다음 단계: - opencascade-rs로 StubKernel 교체 (실제 PSC-I sweep) - viewer에서 Girder Mesh 렌더 + 카메라 orbit Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
54 lines
2.2 KiB
Markdown
54 lines
2.2 KiB
Markdown
# 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<Mm> 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)
|