## [2026-06-02]

### 수행 내용
- MetaCalorimetria-Kor MVP 신규 구현 (도메인 Obesity, in-clinic 간접열량측정 분석기).
- 모듈 분리 구현: `calorimetry.py`(Weir REE·RQ·Frayn 기질산화·DIT·QC),
  `steady_state.py`(슬라이딩 윈도우 CV 안정상태 검출), `predictive.py`(Mifflin·
  Harris-Benedict·Henry·Cunningham + 대사적응), `importers.py`(다기종 컬럼 매핑·
  단위 자동인식), `demo_data.py`(합성 안정/불안정/DIT 곡선).
- `app.py` Streamlit 4탭 UI(안정상태/REE, 기질산화·예측식, DIT, QC·Export).
- `reference.yaml`(기종 프리셋·식 출처·정상 참고치), 합성 데모 CSV 3종, `requirements.txt`,
  `README.md`, `QA.md` 작성.
- 검수: AST 구문(6/6), 손계산 일치(RQ·Weir·Frayn·단백보정), 데모 로드·단위 자동인식,
  안정/불안정 검출, DIT AUC, 예측식, QC 플래그 전부 PASS. headless streamlit 부팅 HTTP 200.

### 주요 결정 사항
- 단위는 내부 계산 전부 L/min 으로 통일하고 mL→L 변환은 importer 단계에서 1회만 수행
  (Weir/Frayn 식 단위 혼선 방지). 데모 CSV 는 COSMED 관례대로 mL/min 저장하여 자동인식 검증.
- 안정상태 기준은 VO₂·VCO₂·RQ 세 지표 CV 동시 임계(기본 10%) + warm-up 제외로 채택
  (ACSM 관례). 자동검출 실패 시 수동 슬라이더 override 제공.
- 불안정 데모가 짧은 5점 윈도우에서 우연히 CV 임계 아래로 떨어져 검출되던 문제 →
  진폭·드리프트·노이즈를 키워 재생성, 10%/15% 임계 모두 미검출 확인(검수 재시도 1회).
- 외부 네트워크/전역 설치 0. 검수는 로컬 python3 패키지로 수행(전역 미설치).

### 변경된 파일
- `app.py`, `calorimetry.py`, `steady_state.py`, `predictive.py`, `importers.py`,
  `demo_data.py` - 신규 구현
- `reference.yaml` - 기종 프리셋·계수·참고치 내장
- `data/demo_cosmed_steady.csv`, `data/demo_unstable.csv`,
  `data/demo_dit_postprandial.csv` - 합성 데모(demo_data.py 로 생성)
- `requirements.txt`, `README.md`, `QA.md`, `CHANGELOG.md` - 신규

### 재현 방법
1. `cd projects/2026-06-02-2-metacalorimetria-kor`
2. (권장) `python3 -m venv .venv && source .venv/bin/activate`
3. `pip install -r requirements.txt`
4. `python3 demo_data.py` (data/ 에 합성 CSV 3종 생성; 이미 있으면 생략)
5. 검수: 위 QA.md 의 테스트 스크립트 실행
6. `streamlit run app.py` 로 앱 기동
