Sprint 23/24 — Tauri v2 앱 래핑 + salsa 0.16 증분 쿼리 백엔드
All checks were successful
Publish ParaWiki / build-and-deploy (push) Successful in 34s
All checks were successful
Publish ParaWiki / build-and-deploy (push) Successful in 34s
Sprint 23: cimery-app을 Tauri v2 앱으로 전환. - tauri.conf.json, capabilities/default.json, frontend/index.html 추가 - src/commands.rs: 7개 IPC 커맨드 (launch_viewer, 프로젝트 관리, USD/CSV 익스포트) - 뷰어 사이드카: std::process::Command 방식 (PATH + exe-dir 탐색) - release.yml: 3단계 멀티플랫폼 릴리스 워크플로로 교체 Sprint 24: cimery-incremental에 salsa 0.16 백엔드 추가. - salsa_db.rs: BridgeQueryGroup + SalsaIncrementalDb<K> - --features salsa-backend 로 활성화 (기본값: 수동 tracking, WASM 안전) - IR 전 구조체 + Mesh + KernelError에 PartialEq/Eq 추가 - 테스트 20개 전부 통과 (수동 12 + salsa 8) - cargo check --workspace 0 errors/warnings 기타: viewer/dsl 컴파일 경고 제거, wiki 실행 가이드 추가 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -36,7 +36,7 @@ impl std::fmt::Display for FeatureId {
|
||||
///
|
||||
/// All values are raw primitives — no unit types here (kernel doesn't need them).
|
||||
/// Convention: linear = metres, structural = millimetres.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||
pub struct GirderIR {
|
||||
pub id: FeatureId,
|
||||
/// Station along alignment [m].
|
||||
@@ -64,7 +64,7 @@ impl GirderIR {
|
||||
// ─── Section params ───────────────────────────────────────────────────────────
|
||||
|
||||
/// Cross-section geometry. Tag is the section type name.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||
#[serde(tag = "kind")]
|
||||
pub enum SectionParams {
|
||||
PscI(PscISectionParams),
|
||||
@@ -82,7 +82,7 @@ pub enum SectionParams {
|
||||
/// #[param(unit="mm", range=120..=300, default=180)] bottom_flange_thickness
|
||||
/// #[param(unit="mm", range=150..=350, default=200)] web_thickness
|
||||
/// #[param(unit="mm", range=0..=100, default=50)] haunch
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||
pub struct PscISectionParams {
|
||||
pub total_height: f64,
|
||||
pub top_flange_width: f64,
|
||||
@@ -109,7 +109,7 @@ impl PscISectionParams {
|
||||
}
|
||||
|
||||
/// PSC U-girder section [all mm].
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||
pub struct PscUSectionParams {
|
||||
pub total_height: f64,
|
||||
pub top_width: f64,
|
||||
@@ -119,7 +119,7 @@ pub struct PscUSectionParams {
|
||||
}
|
||||
|
||||
/// Steel box girder section [all mm].
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||
pub struct SteelBoxParams {
|
||||
pub total_height: f64,
|
||||
pub top_width: f64,
|
||||
@@ -130,7 +130,7 @@ pub struct SteelBoxParams {
|
||||
}
|
||||
|
||||
/// Steel plate I-girder section [all mm].
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||
pub struct SteelPlateIParams {
|
||||
pub total_height: f64,
|
||||
pub flange_width: f64,
|
||||
@@ -141,7 +141,7 @@ pub struct SteelPlateIParams {
|
||||
// ─── Alignment IR ────────────────────────────────────────────────────────────
|
||||
|
||||
/// Single station point along an alignment.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||
pub struct AlignmentStation {
|
||||
/// Station distance along alignment [m].
|
||||
pub station: f64,
|
||||
@@ -154,7 +154,7 @@ pub struct AlignmentStation {
|
||||
}
|
||||
|
||||
/// Road/bridge alignment specs.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
|
||||
pub struct AlignmentSpecs {
|
||||
#[serde(default)]
|
||||
pub r#type: String,
|
||||
@@ -167,7 +167,7 @@ pub struct AlignmentSpecs {
|
||||
}
|
||||
|
||||
/// Alignment IR — parsed from cimery's own JSON format (ADR-002 R).
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||
pub struct AlignmentIR {
|
||||
pub name: String,
|
||||
#[serde(default)]
|
||||
@@ -219,7 +219,7 @@ impl AlignmentIR {
|
||||
|
||||
/// Fully-resolved Deck Slab (바닥판) specification.
|
||||
/// Structural dimensions in mm, alignment in m.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||
pub struct DeckSlabIR {
|
||||
pub id: FeatureId,
|
||||
pub station_start: f64, // m
|
||||
@@ -246,7 +246,7 @@ impl DeckSlabIR {
|
||||
// ─── Bearing IR ───────────────────────────────────────────────────────────────
|
||||
|
||||
/// Fully-resolved Bearing (받침) specification.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||
pub struct BearingIR {
|
||||
pub id: FeatureId,
|
||||
pub station: f64, // m — position along alignment
|
||||
@@ -262,7 +262,7 @@ pub struct BearingIR {
|
||||
// ─── Cap Beam IR ──────────────────────────────────────────────────────────────
|
||||
|
||||
/// Pier cap beam (교각 코핑).
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||
pub struct CapBeamIR {
|
||||
pub length: f64, // mm — total along transverse
|
||||
pub width: f64, // mm — along span
|
||||
@@ -274,7 +274,7 @@ pub struct CapBeamIR {
|
||||
// ─── Pier IR ──────────────────────────────────────────────────────────────────
|
||||
|
||||
/// Fully-resolved Pier (교각) specification.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||
pub struct PierIR {
|
||||
pub id: FeatureId,
|
||||
pub station: f64, // m
|
||||
@@ -294,7 +294,7 @@ pub struct PierIR {
|
||||
|
||||
// ─── Wing Wall IR ─────────────────────────────────────────────────────────────
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||
pub struct WingWallIR {
|
||||
pub length: f64, // mm — along wing wall axis
|
||||
pub height: f64, // mm — at connection with breast wall
|
||||
@@ -304,7 +304,7 @@ pub struct WingWallIR {
|
||||
// ─── Abutment IR ──────────────────────────────────────────────────────────────
|
||||
|
||||
/// Fully-resolved Abutment (교대) specification.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||
pub struct AbutmentIR {
|
||||
pub id: FeatureId,
|
||||
pub station: f64, // m
|
||||
@@ -327,7 +327,7 @@ pub struct AbutmentIR {
|
||||
///
|
||||
/// Cross beams provide lateral bracing between girders at regular intervals.
|
||||
/// All dimensions in mm; station in m.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||
pub struct CrossBeamIR {
|
||||
pub id: FeatureId,
|
||||
/// Station along alignment [m] — position of this cross beam set.
|
||||
@@ -361,7 +361,7 @@ impl CrossBeamIR {
|
||||
///
|
||||
/// Placed at the ends of a span or at pier locations to allow relative movement.
|
||||
/// All dimensions in mm; station in m.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||
pub struct ExpansionJointIR {
|
||||
pub id: FeatureId,
|
||||
/// Station along alignment [m].
|
||||
@@ -377,6 +377,29 @@ pub struct ExpansionJointIR {
|
||||
pub movement_range:f64,
|
||||
}
|
||||
|
||||
// ─── Eq impls ─────────────────────────────────────────────────────────────────
|
||||
//
|
||||
// IR values are validated by builders to never contain NaN or ±Inf.
|
||||
// Implementing Eq on top of PartialEq is therefore safe: PartialEq IS a
|
||||
// total equivalence relation for the valid IR domain.
|
||||
|
||||
impl Eq for GirderIR {}
|
||||
impl Eq for SectionParams {}
|
||||
impl Eq for PscISectionParams {}
|
||||
impl Eq for PscUSectionParams {}
|
||||
impl Eq for SteelBoxParams {}
|
||||
impl Eq for SteelPlateIParams {}
|
||||
impl Eq for AlignmentStation {}
|
||||
impl Eq for AlignmentIR {}
|
||||
impl Eq for DeckSlabIR {}
|
||||
impl Eq for BearingIR {}
|
||||
impl Eq for CapBeamIR {}
|
||||
impl Eq for PierIR {}
|
||||
impl Eq for WingWallIR {}
|
||||
impl Eq for AbutmentIR {}
|
||||
impl Eq for CrossBeamIR {}
|
||||
impl Eq for ExpansionJointIR {}
|
||||
|
||||
// ─── Tests ────────────────────────────────────────────────────────────────────
|
||||
|
||||
#[cfg(test)]
|
||||
|
||||
Reference in New Issue
Block a user