# simul PROGRESS — 학습자 대시보드 > *지금 어디인가, 다음 한 단위는 무엇인가, 전체 학습 자산은 얼마나 쌓였는가.* > > ROADMAP.md = WHY / WHERE-TO. 본 문서 = WHERE-AM-I / WHAT-NEXT. > 매 작업 후 직접 갱신한다. 자동화는 의도적으로 도입하지 않음 — 갱신 자체가 학습자의 *진척 실감* 의 일부. --- ## 0. 한눈에 (전체 진척률) | 컷라인 | 목표 단위 | 누적 LOC 목표 | Tier-1 목표 | 현재 LOC | 현재 Tier-1 | 진척 | |---|---|---:|---:|---:|---:|---| | **6개월 MLP** | M0 → M2 | ~3K | 22 | ~3.0K | 2 | ▓▓░░░░░░░░ 12% | | **1년 MVP** | + M3,M4 | ~6K | 26 | ~3.0K | 2 | ▓░░░░░░░░░ 6% | | **2년 Stretch** | + M5,M7,M8 | ~9K | 44 | ~3.0K | 2 | ▓░░░░░░░░░ 3% | > LOC 측정 기준: `tokei -e target -e .git -e .team-output simul-* simul`. Tier-1 카운트: `simul-*/tests/*_openmm.rs` 파일 중 `_template_openmm.rs` 제외. --- ## 1. 마일스톤 진척 범례: ✅ 완료 · 🔄 진행중 · ⬜ 미착수 · 🚫 차단 · ⏭ 스킵 ### M0 — 완료 (선행 작업) - [x] simul-core trait 골격 (StateSpace / Dynamics / Interaction / SystemState) - [x] VerletDynamics, LangevinDynamics(BAOAB), OverdampedLangevinDynamics - [x] HarmonicBondInteraction (host serial + Tier-1) - [x] NonbondedInteraction (NoCutoff, LJ + Coulomb, host serial + Tier-1) - [x] Simulation builder + iterator - [x] simul-io (PDB / XYZ) ### M0+ — 즉시 (2–3주, ~1.7K LOC, +12 Tier-1) > 디테일: `learning/M0+.md` | # | 단위 | 상태 | 시간 | LOC | Tier-1 | 패턴 | 비고 | |---|---|---|---:|---:|---:|---|---| | 1 | `simul-lattice/` canary (1D random walker) | ⬜ | 1주 | ~200 | (+1 canary) | P2 | 4중 방어선 §11.6-(a). **추상 결정의 데이터 포인트 #2**. | | 2 | 추상 재설계 결정 (Handle을 simul-core로 lift할지) | ⬜ | 한나절 | — | — | P1 | canary 결과 기반. ROADMAP §6 P1 갱신. | | 3 | Trait 정렬 (`Interaction` ↔ `EuclideanInteraction`) | ⬜ | 한나절~1일 | ~50 | — | P1 | (2)에서 결정한 모양으로. | | 4 | `RMSDForce` → `RmsdInteraction` | ⬜ | 1–2일 | ~150 | +1 | P1 | Theobald–Liu quat align | | 5 | `RGForce` → `RgInteraction` | ⬜ | 1일 | ~80 | +1 | P1 | 단순 — Σ\|r−r_cm\|²/N | | 6 | `OrientationRestraintForce` | ⬜ | 2일 | ~150 | +1 | P1 | rotation matrix | | 7 | `AndersenThermostat` → `Thermostat` trait | ⬜ | 1일 | ~120 | +1 | P12 | VelocityModifier 패턴 정착 | | 8 | Tier-1 wrapper 14건 (Verlet/Langevin/Brownian 단발 + System/Spline/SplineFitter/MultipleForces 등) | ⬜ | 며칠 | ~600 | +14 (현재 2 → 16) | — | T5 addendum §3 게이팅 표 | **M0+ DoD**: - `cargo test --workspace` 통과 - `cargo test -p simul-lattice` 통과 (canary) - 기존 두 Tier-1 테스트가 trait fix 후에도 통과 - `learning/canary-check.md` 의 마일스톤 게이트 ✅ ### M1 — Bonded 분자 (4–6주, +0.7K LOC, +4 Tier-1) | # | 단위 | 상태 | 패턴 | |---|---|---|---| | 1 | `HarmonicAngleForce` | ⬜ | P1 (HarmonicBond 패턴 그대로) | | 2 | `PeriodicTorsionForce` | ⬜ | P1 | | 3 | `RBTorsionForce` (Ryckaert–Bellemans) | ⬜ | P1 | | 4 | `CMAPTorsionForce` (CHARMM CMAP) | ⬜ | P1 + bicubic spline | > M1 컨텍스트는 M0+ 종료 후 `learning/todo-generator.md` 로 자동 생성. 결과를 `learning/M1.md` 로 저장. ### M2 — PBC + Neighbor list (2–3개월, +0.8K LOC, +4 Tier-1) ⬜ 핵심 단위: PBC infra · Cell list · CMMotionRemover · NB(CutoffPeriodic) · GBSAOBC · LCPO · GayBerne ### M3 — Constraint + Minimizer (2–3개월, +1.8K LOC, +2 Tier-1) ⬜ 핵심 단위: SETTLE → SHAKE · LBFGS minimizer · VariableVerlet · CompoundIntegrator **+2주**: `VerletDynamics` trait 의 constraint solver type parameter 리팩터. ### M4 — Barostat NPT (1–2개월, +1K LOC, +2 Tier-1) ⬜ 핵심 단위: `BoxModifier` trait · MonteCarloBarostat (+ Anisotropic) · bincode + TOML serialization **검토 게이트**: CUDA 백엔드 옵션 도입 (CubeCL Phase 2 진입). ### M5 — PME / Ewald (3–6개월, +1.5K LOC, +4 Tier-1) ⬜ ⚠️ 위험 구간 핵심 단위: NB(PME) · Ewald · DispersionPME > **devil-advocate 경고**: 단독 3–6개월. 반년 묶일 위험 가장 큼. ### M6 — Lepton (옵션, +6–12개월, +12 Tier-1) ⏭ > M5 종료 후 별도 결정. 채택 시 2년 → 2.5–3년. ### M7 — NoseHoover + 통계 (1–2개월, +1 Tier-1 + Tier-2 H̄) ⬜ ### M8 — VirtualSite (1–2개월, +1 Tier-1) ⬜ --- ## 2. 학습 자산 카운터 | 자산 | 현재 | 목표 (2년) | 비고 | |---|---:|---:|---| | Rust LOC (구현) | ~3.0K | ~9K | tokei 기준 | | Tier-1 테스트 (`*_openmm.rs`) | 2 | 32–44 | Lepton 채택 여부 | | Tier-2 fixture (`*_openmm_stats.rs`) | 0 | 12+5 | 통계 비교 | | OpenMM-Python reference 스크립트 (`tests/reference/*.py`) | 2 | ~30 | truth source | | 정책 결정 완료 | 1 / 8 | 8 / 8 | §3 | | 4중 방어선 (M0+) | 0 / 4 | 4 / 4 | §4 | --- ## 3. 정책 결정 status (ROADMAP §9) | # | 정책 | 결정 | 시점 | |---|---|---|---| | 1 | Lepton DSL | 1차 미도입, M5 종료 후 재평가 | M0+ ✅ | | 2 | Serialization (input) | 미정 (TOML 권장) | M2 | | 3 | Serialization (checkpoint) | 미정 (bincode 권장) | M4 | | 4 | 다중 백엔드 (M0–M3) | 미정 (ndarray+rayon 권장) | M0+ | | 5 | PBC | 미정 (orthorhombic M2, triclinic M5) | M2 | | 6 | Constraint (1차) | 미정 (SETTLE 권장) | M3 | | 7 | NeighborList | 미정 (cell list host 권장) | M2 | | 8 | PME 구현 깊이 | 미정 (Ewald → SPME host) | M5 | > 정책 결정은 단순히 *결심* 이 아니라 *DESIGN.md / ROADMAP.md 갱신* 으로 락된다. PROGRESS.md 는 미러. --- ## 4. 4중 방어선 status (ROADMAP §11.6) | 방어선 | 정의 | 상태 | 점검 방법 | |---|---|---|---| | (a) Lattice canary | `simul-lattice/` + 1D random walker | 🔴 미설치 | `cargo test -p simul-lattice` | | (b) 책임 경계 강제 | MD-specific 타입은 simul-euclidean 에 | ⬜ 정책만 | `learning/canary-check.md` | | (c) 확장 trait 패턴 | `MdSystemExt` 패턴, 핵심 struct 최소 | ⬜ 정책만 | code review | | (d) 마일스톤 게이트 점검 | 매 마일스톤 종료 시 (a)~(c) 통과 확인 | ⬜ M0+ 게이트 미실행 | `learning/canary-check.md` | > (a) 가 핵심. 작동하는 lattice 코드가 한 줄이라도 있으면 trait drift 를 즉시 잡는다. --- ## 5. Tier-3 인용 카탈로그 status (`tests/UPSTREAM_TESTS.md`) | 카테고리 | 인용된 OpenMM 파일 | status | |---|---:|---| | 플랫폼 래퍼 | ~250 | ✅ 인용 (사유 §3.1) | | Custom* + CustomIntegrator | 13 | ✅ 인용 (사유 §3.2) | | Plugin (amoeba/drude/rpmd/cpupme) | 22 | ✅ 인용 (사유 §3.3) | | Serialization (core+plugin) | 48 | ✅ 인용 (사유 §3.4) | | Vectorize | 4 | ✅ 인용 (사유 §3.5) | | GPU runtime util | ~8 | ✅ 인용 (사유 §3.6) | | Python E2E | 37 | ✅ 인용 (사유 §3.7) | | ATMForce / Parser | 2 | ✅ 인용 (사유 §3.8) | | **인용 합계** | **~384** | OpenMM 총합 ~376 (백엔드 중복 포함) | --- ## 6. 다음 한 단위 (지금 무엇) > ⏭ **simul-lattice canary (1D random walker)** (M0+ #1, 1주) > > 이유: trait 추상 재설계의 데이터 포인트 #2 확보 — Handle을 simul-core로 lift할지를 *예측*이 아니라 *발견*으로 결정하기 위함. 4중 방어선 §11.6-(a) 살아있는 가드레일도 동시 설치. 1D random walker는 simul-core trait만 사용 — `ForceInteraction` 부정합과 독립이므로 trait fix 선행 불필요. > > 디테일: `learning/M0+.md` §1. 다음 단위 변경 시 본 §6 만 갱신. --- ## 7. 사용 사이클 (`learning/README.md` 요약) ``` PROGRESS.md (지금 어디) ↓ learning/M{N}.md 또는 todo-generator.md (다음 무엇) ↓ 직접 코드 작성 (사람) ↓ learning/review-rubric.md (self-review) ↓ learning/canary-check.md (마일스톤 게이트) ↓ PROGRESS.md 갱신 — 다음 사이클 ``` --- ## 8. 갱신 룰 매 작업 (1단위) 종료 시: 1. 해당 마일스톤 표의 ⬜ → ✅ + LOC / Tier-1 수치 갱신 2. §0 진척률 막대 갱신 3. §2 카운터 갱신 4. §6 다음 한 단위 변경 매 마일스톤 종료 시: 5. §1 마일스톤 헤더에 완료 날짜 기재 6. §4 4중 방어선 게이트 통과 표시 7. ROADMAP.md §8 마일스톤 표의 누적 LOC / Tier-1 의 *실측치* 가 추정과 ±20% 이상 차이나면 ROADMAP 시간 추정 재조정 (devil-advocate verdict 의 약속) 매 정책 결정 시: 8. §3 표 갱신 + DESIGN.md / ROADMAP.md 동기화 PR