Files
ParaWiki/PROGRESS.md
minsung 0e4701de79 Sprint 36~39 — IFC Alignment/Camber + proc-macro 스캐폴딩 + 변단면 거더
## Sprint 36: IfcAlignment (IFC Phase 3b)
- write_straight_alignment(): 직선 horizontal(.LINE.) + 평지
  vertical(.CONSTANTGRADIENT.) 세그먼트 + IfcRelNests 계층.
- IfcAlignmentSegment × IfcAlignmentHorizontalSegment × IfcAlignmentVerticalSegment.
- Site aggregate 에 Bridge 와 Alignment 동시 포함.

## Sprint 37: IFC 거더 Camber 반영
- BridgeExportParams.camber_mid_mm 추가.
- camber > 0 일 때: 거더 1 개를 CAMBER_SEGMENTS(10) 세그먼트로 분할, 각 세그먼트
  Y 에 포물선 값 적용 → 곡선 거더 근사. Pset 는 첫 세그먼트에 한 번만 부착.
- viewer scene_params_to_ifc() 에서 camber_mid_mm 매핑.

## Sprint 38: cimery-macros 크레이트 (proc-macro 스캐폴딩)
- 신규 크레이트, proc-macro = true, deps: syn/quote/proc-macro2.
- #[derive(ParamSummary)] 구현:
  · 구조체 named field 의 PARAM_COUNT (usize) + PARAM_NAMES (&[&str]) 생성.
  · 선언 순서 보존, 빈 구조체 지원, tuple/enum 은 컴파일 에러.
- 테스트 3개 (tests/derive_test.rs).
- ADR-002 D 로드맵: #[param(unit, range, default)] 전면 attribute 는 후속.

## Sprint 39: 변단면 거더 (Variable Depth)
- SceneParams.variable_depth_mm (0~800mm) 추가.
- apply_variable_depth(mesh, z0, z1, max, girder_h):
  · lift(u) = 4·max·u·(span-u)/span²  (중앙에서 최대)
  · y_new = y + lift(u)·(1 - y/h)
  · 상면 y=h 는 고정, 소핏 y=0 을 최대 lift 만큼 올림. 연속교 중앙부
    web 축소 관례와 정합. camber 와 독립 조합 가능.
- build_bridge_scene / build_selectable_scene 거더 생성 루프에 각각 적용
  (거더 local 좌표계에서 먼저 → translate → camber 순).
- UI "변단면 (mm)" 슬라이더 (선형·기하 섹션).
- ProjectFile variable_depth_mm 필드 (default 0).

모든 테스트 통과: kernel 18 + ifc 20 + macros 3.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 19:48:07 +09:00

110 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PROGRESS.md — 완료 내역
시간 역순(최신이 위). 에이전트 시작 시 필독. 작업 완료 시 한 줄 추가.
## 작성 규칙
- 형식: `- YYYY-MM-DD [유형] 한 줄 설명`
- 유형: `adr` · `wiki` · `guide` · `meta`(구조·규칙) · `raw`(원본 수집) · `code`(cimery 코드) · `infra`
- 스냅샷 섹션은 의미 있는 변화가 생기면 갱신.
---
## 타임라인
### 2026-04-15 (계속)
- 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 에 매핑.
- Sprint 38 (proc-macro 스캐폴딩): `cimery-macros` 크레이트 신설 (proc-macro=true, syn/quote/proc-macro2). `#[derive(ParamSummary)]` 구현 — struct named field 개수·이름 compile-time 상수 생성. 테스트 3개 (count/names/empty). ADR-002 D `#[param(unit,range,default)]` 전면 구현은 후속 스프린트.
- Sprint 39 (변단면 거더): `SceneParams.variable_depth_mm`(0~800mm) 추가. `apply_variable_depth()` — 경간 [z0,z1]에서 포물선 soffit lift 를 정점 Y 에 선형 보간 적용(`y_new = y + lift(u)·(1 - y/h)`). 거더 상면은 고정, 소핏이 중앙부에서 올라가 web 축소 → 연속교 관례 형상. camber 와 독립 조합 가능.
- code — Sprint 35: IFC 뷰어 통합 + Pset_BeamCommon.
- `cimery-viewer``cimery-ifc` 의존성 추가. `project_file::scene_params_to_ifc()` 변환 함수 (SceneParams → BridgeExportParams 전 필드 매핑).
- 프로젝트 섹션에 "📤 IFC4X3 익스포트" 버튼. `projects/bridge.ifc` 로 저장, 현재 파라미터(경간 수·교각 형식·skew·헌치·단면 등) 그대로 반영.
- `write_pset_beam_common()` 추가: Reference(이름) + Span(mm) + LoadBearing + IsExternal 4 속성, `IFCRELDEFINESBYPROPERTIES` 로 거더 각 beam 에 연결.
- `IfcSectionKind` public re-export. 테스트 17개 통과.
- code — Sprint 34: IFC4X3 Add2 익스포터 Phase 2. 정확도·커버리지 확장.
- PSC-I 실제 14점 단면 `IFCARBITRARYCLOSEDPROFILEDEF` + `IFCPOLYLINE` 구현 (도심 중심화 Y 평행이동). `IfcSectionKind` enum 으로 단면 종류 분기.
- Skew 회전 `write_local_placement_skewed()`: `IFCAXIS2PLACEMENT3D` RefDirection 을 Y축 회전 X축으로 설정. 교대·피어·받침·신축이음에 적용. 거더·데크는 직선 유지.
- 헌치 `haunch_depth` 반영: 데크 Y 위치 = `bearing_h + girder_h + haunch_depth + slab/2`.
- 방호벽 `IFCRAILING` (좌/우) 추가.
- `BridgeExportParams` 확장: section_kind, skew_deg, haunch_depth, show_parapets, show_joints.
- 테스트 6개 추가(16개 전체 통과): PSC-I 사용 확인, 방호벽 on/off, Rectangle fallback, skew 회전 검증, haunch 반영.
- code — Sprint 33: IFC4X3 Add2 익스포터 Phase 1. `cimery-ifc` 크레이트 신설. STEP Part21 writer(`IfcWriter`, header+data+finish) + IfcGloballyUniqueId 생성(UUIDv4 → base64 22자) + `export_bridge()` API. 엔티티: IfcProject→IfcSite→IfcBridge 계층(IfcRelAggregates 관계) + 거더(IFCBEAM, span_count×girder_count 개) + 데크(IFCSLAB) + 피어(IFCCOLUMN, 내부 지점) + 교대(IFCFOOTING) + 받침(IFCBEARING — IFC4X3 신규 엔티티). 형상: IfcExtrudedAreaSolid + IfcRectangleProfileDef 단순화(Phase 2 에서 실제 단면). 단위: mm. 배치: IfcLocalPlacement 월드 원점 기준. 테스트 10개 통과. `cimery-app``export_ifc_default` IPC 커맨드 추가.
- code — Sprint 31~32: 헌치 + UI 재정리.
- Sprint 31: 데크 헌치 (Haunch). `SceneParams.haunch_depth` (0~300mm) 추가. 거더 상부와 데크 soffit 사이 600mm 폭 × haunch_d 높이 블록을 거더마다 배치. 데크 위치는 `girder_h + haunch_depth + slab_thickness` 로 이동 (기존 6개 참조 일괄 수정). camber + skew 동시 적용.
- Sprint 32: 속성 패널 카테고리 재정리 (누적 11개 슬라이더 섞여 혼잡). 5개 CollapsingHeader 로 분리: 상부구조·바닥판·선형/기하·하부구조·추가부재·표시. `ps!($ui, ...)` 매크로 hygiene 수정(ui 명시적 매개변수화).
- ProjectFile: haunch_depth 필드.
- code — Sprint 29~30: 거더교 MVP 추가 확장.
- Sprint 29: 지점부 격벽 (Diaphragm). `SceneParams.show_diaphragms` 토글(default true). 모든 지점(교대·교각) 에서 인접 거더 사이 RC 벽 자동 배치. 두께 300mm(span 방향), 높이 = girder_h, 폭 = spacing - 250mm(web clearance). skew 회전 동시 적용. `build_bridge_scene` + `build_selectable_scene` 양쪽.
- Sprint 30: 솟음 (Camber). `SceneParams.camber_mid_mm`(0~200mm) 추가. `apply_camber_mesh()` 헬퍼 — 경간 [z0, z1] 내 포물선 Y 오프셋 `4·mid·u·(span-u)/span²`. 거더·데크에 경간마다 독립 적용. 지점에서는 0. UI "솟음(mm)" 슬라이더.
- ProjectFile: `show_diaphragms`·`camber_mid_mm` 필드 (default 값).
- code — Sprint 25~28: 거더교 MVP 완성도 보강.
- Sprint 25: `build_selectable_scene``SectionType::PscI` 하드코딩 제거 → `p.section_type` 분기(PscI/SteelBox).
- Sprint 26: 다경간 + 교각 배치. `SceneParams.span_count`(1~5) + `pier_type`(T형 SingleColumn / π형 MultiColumn) 추가. `span_m` 의미 변경: 경간당 길이. 씬 빌더가 경간마다 거더 세트 복제, 내부 지점에 피어 배치, 모든 지점에 받침·신축이음, 양 끝에 교대. `pier_ir_for_params()` 헬퍼(wiki Phase 1 MVP — CSB 2m·TB 2.5m 기본값).
- Sprint 27: Skew 지원. `SceneParams.skew_deg`(-30~30°) 추가. `rotate_y_around_z()` 헬퍼로 교대·교각·받침·신축이음 Y축 회전. 거더·데크는 직선 유지(precast 관례).
- Sprint 28: 방호벽 (Parapet) 기본 형상. 데크 양 엣지에 1200mm×500mm RC 박스 전 구간 연속, Y=데크 상면 기준.
- ProjectFile v2: `span_count`·`pier_type`·`skew_deg` 필드 (v1 호환 default).
- UI 리본: "경간 수" 슬라이더, "교각 형식" T/π 선택, "경사각(°)" 슬라이더.
- 뷰어 타이틀에 build timestamp 주입(`build.rs`), stale 바이너리 판별 지원.
- Ortho 카메라 추가 (키 `O` / egui 버튼): perspective ↔ 평행 투영 토글.
- raw — raw/engineer-knowledge/cet-hmeg-pier-2021/ 신설. 한맥기술(2021) PierZainer 분석 리포트 v3 + Excel 수식 분석 + 9개 도면 + 발표/에러 리포트 인입(약 18 파일).
- wiki — 교각 6개 페이지 컴파일: [[교각 형식 분류]] · [[교각 4 레이어 구조]] · [[교각 파라미터 카탈로그]] · [[교각 자동계산 수식]] · [[교각 3점 기준좌표계]] · [[기둥 단면 형상 카탈로그]]. index.md "도메인: 교량" 카테고리 신규 6항목 추가, log.md 7건 기록.
- code — Sprint 24: salsa 0.16 증분 쿼리 백엔드. `--features salsa-backend`로 활성화. `SalsaIncrementalDb<K>` — salsa `#[query_group]` + IR Eq 지원. 기존 `IncrementalDb` (수동) 완전 보존. 동일 공개 API. 테스트 20개 전부 통과 (수동 12 + salsa 8). `cimery-ir` 전 IR 구조체에 `PartialEq` 추가 + 수동 `Eq` impl (빌더 검증 도메인). `Mesh + KernelError`도 동일. `cargo check --workspace` 0 warnings. WASM: 수동 backend 유지, salsa는 WASM 안정화 후 기본값 승격 예정.
- code — Sprint 23: Tauri v2 앱 래핑. `cimery-app`에 tauri v2 + tauri-plugin-dialog 적용. `tauri.conf.json`(창 설정·번들 설정) + `capabilities/default.json` + `frontend/index.html`(런처 UI: 홈·프로젝트·USD익스포트·CSV템플릿) + `src/commands.rs`(IPC: launch_viewer·new_project·open_project_dialog·save_project_dialog·export_usd_default·export_csv_template) + `build.rs`(tauri_build). `cargo check --workspace` 0 errors. 뷰어는 same-dir 바이너리 탐색 + PATH fallback으로 사이드카 실행. `.github/workflows/release.yml` Tauri bundle 3단계(viewer→tauri-bundle→release) 워크플로로 교체. Tauri v2 앱 래핑. `cimery-app`에 tauri v2 + tauri-plugin-dialog 적용. `tauri.conf.json`(창 설정·번들 설정) + `capabilities/default.json` + `frontend/index.html`(런처 UI: 홈·프로젝트·USD익스포트·CSV템플릿) + `src/commands.rs`(IPC: launch_viewer·new_project·open_project_dialog·save_project_dialog·export_usd_default·export_csv_template) + `build.rs`(tauri_build). `cargo check --workspace` 0 errors. 뷰어는 same-dir 바이너리 탐색 + PATH fallback으로 사이드카 실행. `.github/workflows/release.yml` Tauri bundle 3단계(viewer→tauri-bundle→release) 워크플로로 교체.
### 2026-04-14
- wiki — [[cimery 실행 가이드]] 작성. 빌드·테스트·뷰어·USD·WASM·CI/CD·크레이트 구조 전체 실행 명령 문서화.
- code — Sprint 20: 테스트 4층 완성. Layer1 IR 스냅샷(insta, 7종), Layer2 기하 불변량(19개), Layer3 두-커널 크로스체크(7개), Layer4 proptest(7개). 총 61개 테스트 전부 통과.
- code — Sprint 22: WASM/PWA 빌드 지원. viewer feature `wasm`, `wasm-bindgen`/`web-sys`/`console_error_panic_hook` 의존성, `.github/workflows/wasm.yml` Cloudflare Pages 배포 워크플로.
- code — Sprint 21: USD 전체 메시 익스포트. `cimery-usd` PureRustKernel 실제 기하 변환, `BridgeExporter` 증분 캐시, 전체 씬 익스포트 파이프라인.
- code — Sprint 19: CrossBeam + ExpansionJoint. IR/DSL/kernel/scene 전 계층. `CrossBeamIR`, `ExpansionJointIR`, DSL 빌더 검증, `sweep_profile_flat_x()`, 씬 파라미터 확장.
- code — Sprint 18: OcctKernel 교각·교대 B-rep. 16각형 기둥 + 코핑 + 날개벽 Workplane::xz().sketch().extrude() 구현.
- code — Sprint 17: 선형 기반 좌표 변환. `AlignmentTransform` + `AlignmentScene`, 국소 프레임 → 세계 좌표 변환.
- code — Sprint 16: CI/CD. Gitea `.gitea/workflows/ci.yml`, GitHub `.github/workflows/ci.yml` + `release.yml` 멀티플랫폼 빌드·릴리스.
- code — Sprint 15: IncrementalDb 전 Feature 타입 확장. girder 전용 → 5종(girder·deck·bearing·pier·abutment·cross_beam·expansion_joint), 20개 단위 테스트.
- code — Sprint 14: egui 리본 UI. TopBottomPanel 리본, 260px SidePanel CollapsingHeader 섹션(상부구조·추가부재·표시·선형·프로젝트·단축키).
- code — Sprint 8: IncrementalDb 스캐폴드 (안정 ID, girder 캐시).
- code — Sprint 7: CSV 라운드트립 — girder_to_csv_template() + girder_from_csv(), 테스트 3개.
- code — Sprint 6: AlignmentIR JSON 로더 + test alignment BR-001.
- code — Sprint 5: egui 속성 패널 + Apply 버튼. 한글 폰트(Malgun Gothic). 파라메트릭 씬 재생성.
- code — Sprint 4: Full bridge scene (Girder×5 + DeckSlab + Bearing×10 + Abutment×2). Pan+ZoomExtents+표준뷰.
- code — OcctKernel viewer 연결 완료. PSC-I B-rep I형 단면 렌더 확인 (스크린샷).
- code — OcctKernel 구현 완료 (`--features occt`). PSC-I B-rep sweep + BRepMesh 테셀레이션. 빌드 확인.
- code — cimery Sprint 1 구현 완료. 8 crates (core/ir/dsl/kernel/incremental/evaluator/usd/viewer), `cargo test --workspace` 32개 전부 통과. DSL→IR→salsa-style-db→evaluator→StubKernel→USD 파이프라인 검증.
- meta — Revit API 가이드 Output/guides/revit-api-guide.md 추가됨.
- meta — PLAN.md · PROGRESS.md 도입. 에이전트 간 작업 조정 프로토콜 확립.
- meta — CLAUDE.md 린화. 상세 지침을 `Output/guides/cimery-dev-guide.md` · `obsidian-cli.md`로 분리. 프롬프트 토큰 절감.
- adr — ADR-003 작성. 12개 후속 아키텍처 결정 (UI·IFC·CI/CD·USD·Alignment·Plugin·Feature 카탈로그·FEM·LOD·리본·선택/필터·설정). 병렬 조사 에이전트 기반.
- adr — ADR-002 작성. Feature DSL 아키텍처 20개 기본 결정 (Internal Rust DSL·IR·salsa·Lazy/Reactive·evaluator·테스트 4층·Revit UX 호환).
- adr — ADR-001 작성. 기술 스택 확정 (Rust + Tauri v2 + PWA 듀얼, OpenCascade.js/opencascade-rs, wgpu→WebGPU, `GeomKernel` trait).
- meta — Cloudflare Pages 자동 배포 워크플로 (`.gitea/workflows/publish.yml`, Quartz 4 빌드 → parawiki.pages.dev).
- meta — Pages 프로젝트 자동 생성 단계 추가.
- infra — Gitea Actions Runner 동작 확인용 ping 워크플로 추가.
- wiki — 위키 페이지 8건 컴파일: [[Revit 파라메트릭 아키텍처]] · [[GCS 기하학적 구속조건 솔버]] · [[PCE 파라메트릭 변경 엔진]] · [[파라메트릭 취약성 Davis 5가지]] · [[Revit 조립 단위 분류]] · [[특징 형상 기반 모델링 FBM]] · [[증분형 갱신 알고리즘 LPG]] · [[선형 GIS 기반 좌표계]].
- meta — 위키 구조 초기화 (`raw/` · `wiki/` · `Output/`, Karpathy LLM Wiki 패턴).
---
## 현재 스냅샷 (Snapshot — 2026-04-15)
### 지식 저장소 (ParaWiki)
- 위키 페이지 **8건** (`wiki/index.md` 관리).
- ADR **3건** (`Output/reports/`).
- 개발 가이드 **2건** (`Output/guides/`).
- `wiki/log.md` 운영 중.
- `raw/` 수집 미개시 (PLAN.md 백로그 참조).
### cimery 코드
- **Sprint 1~23 완료.** `cargo check --workspace` 0 errors. `cargo test -p cimery-kernel` 61개 전부 통과.
- 전체 파이프라인: DSL → IR → PureRustKernel → 전체 교량 씬 렌더 (egui+wgpu) → USD 익스포트 → 선형 좌표 변환.
- OcctKernel(`--features occt`): 교각 B-rep + 교대 B-rep 구현 완료.
- **Tauri v2 앱 (Sprint 23):** `cimery-app`이 Tauri v2 앱으로 전환. 런처 WebView UI + 7개 IPC 커맨드(뷰어 실행·프로젝트 관리·USD/CSV 익스포트). `cargo tauri build`로 Win MSI/NSIS·macOS DMG·Linux Deb/AppImage 생성 가능.
- **salsa 0.16 백엔드 (Sprint 24):** `SalsaIncrementalDb``--features salsa-backend` 활성화, 수동 tracking과 동일 API. 모든 IR + Mesh에 `PartialEq + Eq` 추가. `cargo check --workspace` 0 warnings.
- CI/CD: Gitea Actions + GitHub Actions 3단계 릴리스(viewer sidecar→Tauri bundle→GitHub Release) 완료. WASM PWA 포함.
- 테스트 4층: IR 스냅샷 · 기하 불변량 · 두-커널 크로스체크 · proptest 전부 완료.
### 아키텍처 결정 완성도
- 기본 구조 결정(DSL·기술 스택·후속 12개) **완료**.
- 구현 고려사항(함정·체크리스트) 정리 완료.
- **미결·재검토:** FEM B9(자체 솔루션 보유 반영), IFC 5+USD 실제 표준화 진전 모니터링.