# CHANGELOG — PETGlucoFlux

## [2026-05-30]

### 수행 내용
- rodent micro-PET ¹⁸F-FDG 정량 도구 MVP "PETGlucoFlux" (DM 도메인 / 동물실험
  이미지 정량) 빌드.
- 정량 엔진 `petgluco_core.py` (표준 라이브러리만): ¹⁸F decay 보정(t½=109.77 min),
  SUV(BW/lean/glucose-corrected), Patlak graphical analysis(t* 자동 탐지)→Kᵢ,
  LC 보정 MRGlu, 종단 within-animal paired 변화, cohort paired t-test(stdlib
  incomplete-beta 로 t-분포 p값 계산), mechanism 분류, 모델 참고범위/누락 경고.
- 오프라인 CLI `main.py` (`--demo`, `--help`, `--model`, CSV 경로 옵션) — 외부
  패키지 0 으로 전체 파이프라인 stdout 출력.
- Streamlit 앱 `app.py` — 5개 탭(Ingest+Decay+QC / SUV / Patlak+MRGlu / 종단+참고범위
  / Cohort+리포트), 업로드 + "샘플 데이터 로드" 버튼, matplotlib 시각화.
- 합성 샘플 데이터 3종 생성: TAC 960행, input_function 192행, meta 12행
  (6마리 × 2시점 × 5조직 × 16프레임; 알려진 Kᵢ·Vb 파라미터 기반).
- `requirements.txt`(가상환경 전용), `README.md`, `QA.md` 작성.

### 주요 결정 사항
- **계산 로직을 `petgluco_core.py` 로 분리**해 main.py(CLI)와 app.py(Streamlit)가
  동일 엔진을 공유 → 검수 시 CLI 만으로 정량 정확성 보장, 외부 패키지 불요.
- **scipy 대신 stdlib 로 paired t-test 구현**(incomplete-beta 기반 Student-t p값):
  명세의 "scipy 없으면 대체" 요구 + "main.py 는 표준 라이브러리만" 제약 동시 충족.
- **합성 TAC 를 Patlak closed-form(C=Kᵢ·∫Cp+Vb·Cp)으로 생성** → slope=Kᵢ, intercept=Vb
  가 이론적으로 보장되어 산식 검산이 명확.
- 데이터 생성기에 행수 `assert` 내장 → 행수 오류 시 생성 실패하도록 강제.

### 변경된 파일
- `projects/2026-05-30-1-petglucoflux/petgluco_core.py` - 정량 엔진(신규)
- `projects/2026-05-30-1-petglucoflux/main.py` - 오프라인 CLI(신규)
- `projects/2026-05-30-1-petglucoflux/app.py` - Streamlit 앱(신규)
- `projects/2026-05-30-1-petglucoflux/data/sample_*.csv` - 합성 샘플 3종(신규)
- `projects/2026-05-30-1-petglucoflux/requirements.txt` / `README.md` / `QA.md` (신규)

### 재현 방법
```bash
cd "projects/2026-05-30-1-petglucoflux"
python3 main.py --help
python3 main.py --demo                       # 의존성 0, 전체 산출물 출력
python3 -c "import ast;[ast.parse(open(f).read()) for f in ['app.py','main.py','petgluco_core.py']];print('OK')"
# 앱:
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt && streamlit run app.py
```

### 비고
- 빌드 세션에서 도구 결과(stdout/Read) 렌더링이 blank 으로 표시되는 환경
  글리치 발생(파일 쓰기·명령 실행 자체는 정상). 검수는 캡처 파일
  (`QA_demo_output.txt`) + 생성기 assert + 손계산으로 갈음. 상세는 QA.md.
