품질 강화 — 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:
@@ -61,9 +61,9 @@ impl AbutmentBuilder {
|
||||
.ok_or_else(|| FeatureError::missing("abutment.breast_wall_width"))?.value();
|
||||
let bw_t = self.breast_wall_thickness.unwrap_or(800.0.mm()).value();
|
||||
let foot_l = self.footing_length.unwrap_or(4000.0.mm()).value();
|
||||
let foot_w = self.footing_width.unwrap_or_else(|| Mm(bw_w + 1000.0)).value();
|
||||
let foot_w = self.footing_width.unwrap_or(Mm(bw_w + 1000.0)).value();
|
||||
let foot_t = self.footing_thickness.unwrap_or(1000.0.mm()).value();
|
||||
let wing_l = self.wing_length.unwrap_or_else(|| Mm(bw_h * 0.8)).value();
|
||||
let wing_l = self.wing_length.unwrap_or(Mm(bw_h * 0.8)).value();
|
||||
let wing_h = bw_h * 0.5; // simplified: half the breast wall height
|
||||
let wing_t = bw_t;
|
||||
|
||||
|
||||
@@ -118,7 +118,7 @@ pub fn girder_from_csv(csv: &str) -> Result<Vec<GirderIR>, FeatureError> {
|
||||
|
||||
if span <= 0.0 {
|
||||
return Err(FeatureError::validation(
|
||||
&format!("csv.row[{}].station_end", row_idx),
|
||||
format!("csv.row[{}].station_end", row_idx),
|
||||
format!("must be > station_start, got span={:.1}m", span),
|
||||
));
|
||||
}
|
||||
|
||||
@@ -97,7 +97,7 @@ impl PierBuilder {
|
||||
column_count: col_count,
|
||||
column_spacing: self.column_spacing.unwrap_or(0.0.mm()).value(),
|
||||
column_diameter: col_dia,
|
||||
column_depth: self.column_depth.unwrap_or_else(|| Mm(col_dia)).value(),
|
||||
column_depth: self.column_depth.unwrap_or(Mm(col_dia)).value(),
|
||||
column_height: col_h,
|
||||
cap_beam: CapBeamIR {
|
||||
length: cap_l,
|
||||
|
||||
Reference in New Issue
Block a user