trait 정렬 fix 가 후속의 base 라는 직관적 의존성은 실제로는 약함: 1D random walker 는 simul-core trait 만 사용하므로 simul-euclidean ForceInteraction 부정합과 독립이다. 반면 trait fix 의 *최종 모양* (Handle 을 simul-core 로 lift 할지, EuclideanInteraction sub-trait 으로 둘지) 은 두 데이터 포인트 (Euclidean MD + Lattice) 가 있어야 근거 있게 결정됨. 따라서 M0+ 단위 순서를 1↔2 swap + 결정 게이트 신규 §2 추가: (구) 1. Trait fix → 2. canary → 3-7. forces/wrappers (신) 1. canary → 2. 추상 재설계 결정 → 3. Trait fix → 4-8. PROGRESS.md §1 M0+ 표 행 재배치, §6 다음 한 단위 갱신. learning/M0+.md 섹션 순서 물리 재배치 + 새 §2 결정 게이트 추가. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
8.5 KiB
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 — 완료 (선행 작업)
- simul-core trait 골격 (StateSpace / Dynamics / Interaction / SystemState)
- VerletDynamics, LangevinDynamics(BAOAB), OverdampedLangevinDynamics
- HarmonicBondInteraction (host serial + Tier-1)
- NonbondedInteraction (NoCutoff, LJ + Coulomb, host serial + Tier-1)
- Simulation builder + iterator
- 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<D> |
⬜ | 1–2일 | ~150 | +1 | P1 | Theobald–Liu quat align |
| 5 | RGForce → RgInteraction<D> |
⬜ | 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단위) 종료 시:
- 해당 마일스톤 표의 ⬜ → ✅ + LOC / Tier-1 수치 갱신
- §0 진척률 막대 갱신
- §2 카운터 갱신
- §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