품질 강화 — ADR-004 + IFC snapshot 테스트 + helper 유닛 + clippy 경고 정리

## ADR-004 (Output/reports/ADR-004-sprint-25-39-decisions.md)
Sprint 25~39 기간의 **15개 아키텍처 결정** 정리:
- D1~D9: 거더교 MVP 확장 (단면 분기·다경간·Skew 관례·방호벽·격벽·Camber·헌치·UI)
- D10~D13: IFC4X3 Add2 익스포터 4 결정 (크레이트 분리·형상 전략 3단계·GUID·Camber 근사)
- D14: proc-macro 스캐폴딩 (전면 #[param] 는 Feature 10+ 안정 후)
- D15: 변단면 거더 알고리즘 (소핏 lift + Y 선형보간)
- 미결 6항목 (Pset 확장·LinearPlacement·ElementAssembly·IfcPile·#[param] 전면·변단면 IFC)
- 테스트 커버리지 101개 현황표

## IFC 스냅샷 테스트 (crates/ifc/tests/snapshot_tests.rs)
insta 기반 회귀 방지, 8개 baseline:
- mask_guids(): 22자 IFC GUID 를 'GUID' 로 정규화 (결정적 비교 가능)
- 시나리오: 기본 단경간 PSC-I / 2경간 π형 / skew 15° / camber 50mm /
  Rectangle 단면 / parapets off
- mask_guids 자체 유닛 테스트 2개

## Mesh helper 유닛 테스트 (crates/viewer/src/bridge_scene.rs helper_tests)
순수 함수 9개 검증:
- apply_camber_mesh: zero 항등·midspan 도달값·경간 밖 미영향
- rotate_y_around_z: 0 회전 항등·90° 피봇 회전·정점 개수 보존
- apply_variable_depth: zero 항등·소핏 lift · 지점 0 lift

## clippy lib 경고 15+ → 0
- map_identity (kernel/expansion_joint.rs)
- unnecessary_lazy_evaluations ×4 (dsl/abutment·pier·csv_template — auto-fix)
- too_many_arguments (usd save_scene — allow with justification)
- clamp-like 패턴 ×7 (viewer bridge_scene/incremental_scene 의 .max(1).min(N) → .clamp(1, N))
- redundant_closure ×2 (project_file 의 `|e| Error::other(e)` → `Error::other`)
- redundant_guard ×1 (viewer KeyboardInput match guard → 패턴 내 직접 매치)

cargo clippy --workspace --lib: 0 경고.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
minsung
2026-04-16 08:37:11 +09:00
parent 0e4701de79
commit e32c09df2d
18 changed files with 3131 additions and 19 deletions

View File

@@ -12,6 +12,11 @@
## 타임라인
### 2026-04-15 (계속)
- adr — ADR-004 작성. Sprint 25~39 15개 아키텍처 결정 정리 (단면 분기·다경간·피어 MVP·Skew·방호벽·격벽·Camber·헌치·UI·IFC 형상 전략·GUID·proc-macro 스캐폴딩·변단면 알고리즘). 미결 항목 6개(Pset 확장·LinearPlacement·ElementAssembly·IfcPile·`#[param]` 전면·변단면 IFC). 테스트 101개 현황 정리.
- code — 테스트·경고 정리 (엔지니어링 로직 외 품질 작업).
- `cimery-ifc` insta 스냅샷 테스트 8개 신설 (`tests/snapshot_tests.rs`): GUID 마스킹 `mask_guids()` 로 결정적 비교. 시나리오 6종(기본·다경간·skew·camber·Rectangle·parapets off) + 마스킹 유닛 2개.
- `cimery-viewer` mesh helper 단위 테스트 9개 신설 (`bridge_scene::helper_tests`): `apply_camber_mesh` 3 / `rotate_y_around_z` 3 / `apply_variable_depth` 3. 각 순수 함수의 경계 조건·항등 변환 검증.
- clippy lib 경고 15+ → 0: `map_identity`, `unnecessary_lazy_evaluations`, `too_many_arguments`(allow), `clamp-like` 패턴 7곳, `redundant_closure`, `redundant_guard` 일괄 정리.
- code — Sprint 36~39: IFC Alignment + Camber + proc-macro 스캐폴딩 + 변단면 거더.
- Sprint 36 (IFC Phase 3b): IfcAlignment + 직선 horizontal/constantgradient vertical segment + IfcRelNests 계층. `write_straight_alignment()` helper. Site 가 Bridge·Alignment 동시 aggregate.
- Sprint 37 (IFC Camber): `BridgeExportParams.camber_mid_mm` 추가. camber > 0 일 때 거더를 `CAMBER_SEGMENTS`(=10)개 세그먼트로 분할, 각 세그먼트 Y 오프셋에 포물선 값 적용. Pset 는 첫 세그먼트에만 부착(전체 거더 대표). viewer scene_params_to_ifc 에 매핑.