## [2026-06-02]

### 수행 내용
- GlucoDynamics-Kor MVP 신규 구현 (DM 도메인, in-clinic 동적·유발 대사검사 분석기, 완전 오프라인 Streamlit).
- 검사 모드: 75g OGTT / 확장 OGTT(0-180) / MMTT / euglycemic clamp 템플릿 + 임의 시점.
- 단위 자동 변환: 혈당 mg/dL↔mmol/L, 인슐린 µU/mL↔pmol/L, C-peptide ng/mL↔nmol/L.
- 감수성 지표: HOMA-IR, HOMA2-IR(근사), QUICKI, Matsuda/ISI(시간가중 meanG/meanI), Gutt, Stumvoll, clamp M-value·M/I.
- 분비 지표: HOMA-β, insulinogenic index, CIR30, ISR(C-peptide van Cauter 1992 디컨볼루션), oral disposition index.
- AUC 엔진: trapezoidal(불균등 간격), total/incremental/positive-incremental, 0-120/0-180 분리, 영점교차 보간.
- QC 플래그 + 코호트 비교 표/막대그래프 + 산출 공식 footnote 자동 기록.
- 합성 데모 CSV 4종(정상/IGT/T2DM OGTT, clamp) 사전 생성.
- 검수 스크립트 verify.py(손계산 대조 포함) 작성, 28/28 통과.

### 주요 결정 사항
- 계산 로직을 metrics/auc/deconvolution 모듈로 분리하고 app.py에 비-UI 분석 함수
  (analyze_participant 등)를 둠 → streamlit 없이도 단위테스트 가능하게.
- ISR 디컨볼루션 NNLS의 행렬 ill-conditioning으로 인한 overflow 경고를, 열 L2-norm
  스케일링 + Tikhonov 정규화 + errstate 억제 + 비유한 시 정상상태 fallback으로 해결
  (scipy 미설치 환경 대비 graceful fallback 유지).
- HOMA2/Stumvoll/van Cauter long half-life는 공개 근사식 사용임을 README/QA에 명시.

### 변경된 파일 (전부 신규)
- `app.py` - Streamlit UI + 비-UI 분석 로직
- `metrics.py` - 감수성/분비 지표 + 단위 변환
- `auc.py` - AUC 엔진
- `deconvolution.py` - van Cauter ISR 디컨볼루션
- `demo_data.py` - 합성 데이터 생성
- `reference.yaml` - 프로토콜·단위계수·참고치
- `verify.py` - 검수 스크립트
- `data/demo_*.csv` - 합성 데모 4종
- `requirements.txt`, `README.md`, `QA.md`

### 재현 방법
1. `mkdir -p projects/2026-06-02-1-glucodynamics-kor/data`
2. `python3 -m pip install --user -r requirements.txt` (선택; 검수엔 numpy/pandas/scipy면 충분)
3. `python3 demo_data.py data` 로 데모 CSV 생성
4. `python3 verify.py` 로 검수(종료코드 0 확인)
5. `streamlit run app.py` 로 앱 실행
