# QA / Verification Log — SurrogacyMetaReg-Kor

- 날짜: 2026-06-04
- 환경: macOS (Darwin), Python 3.9.6, numpy 감지됨(계산은 stdlib 경로 사용)
- 작업 디렉토리:
  `/Users/sangjoonpark/claude daily project/2026 metabolic daily idea/projects/2026-06-04-3-surrogacy-meta-reg-kor`
- 모든 명령은 위 디렉토리에서 실행.

> 참고용·연구용 (research/reference only). 규제/임상 결정에 사용 금지.

---

## Check 1 — AST parse (`PASS`)

명령:
```
python3 -c "import ast; ast.parse(open('main.py').read()); print('AST PARSE OK')"
```
출력:
```
AST PARSE OK
```
결과: **PASS** — main.py 문법 오류 없음.

---

## Check 2 — `--help` (`PASS`)

명령:
```
python3 main.py --help
```
출력(요약):
```
usage: main.py [-h] [--pair ID] [--demo] [--registry] [--list] [--data PATH]

서로게이트회귀워치코어 / SurrogacyMetaReg-Kor — MASLD/MASH 대리지표 x 임상결과 ...
  -h, --help   show this help message and exit
  --pair ID    한 쌍의 현재 meta-regression + 알림로그 + LOO 민감도 출력
  --demo       합성 trial-level 시퀀스를 스트리밍하며 reliability 전이 알림 출력
  --registry   surrogate x hard-outcome 레지스트리(매트릭스) 요약
  --list       사용 가능한 쌍 id 목록만 출력
  --data PATH  pairs.json 경로 (기본: .../data/pairs.json)
예시: ...
```
결과: **PASS** — usage 및 모든 플래그(`--pair`, `--demo`, `--registry`, `--list`,
`--data`) 출력.

---

## Check 3 — 데모/단일쌍: 전이 알림 + sparsity/LOO 경고 (`PASS`)

### 3a. 데모 + 단일쌍 `--pair "PDFF/cirrhosis"` — reliability 전이 알림 발생

`PDFF/cirrhosis` 스트리밍 로그(핵심 발췌):
```
  + PDFF-T1 (phase2a)    n=1  R^2=  n/a  slope=  n/a [SPARSE-LOWCONF]  (baseline)
  * [ALERT] PDFF-T2 ... R^2 >= 0.7 로 STRENGTHEN(신뢰강화) (R^2 1.000)
  * [ALERT] PDFF-T3 ... R^2 < 0.7 로 WEAKEN(신뢰약화) (R^2 0.270)
  + PDFF-T4 (phase3)     n=4  R^2=0.619  slope=-0.769  (no transition)
  * [ALERT] PDFF-T5 ... R^2 >= 0.7 로 STRENGTHEN (R^2 0.780)
                        + slope 95% CI 가 0 을 제외(EXCLUDES 0 -> 유의)
  * [ALERT] PDFF-T6 ... STE 가 임상달성범위에 진입(ENTERS achievable) (STE 0.569)
  + PDFF-T7 (phase3)     n=7  R^2=0.912  (no transition)
  + PDFF-T8 (phase3)     n=8  R^2=0.939  (no transition)
```
최종 상태(상세):
```
slope=-0.639  CI=[-0.801,-0.476]  R^2=0.939  STE=0.447 (achievable [0.2,0.8])
R^2 임계 통과: YES | slope CI 0 제외: YES | STE 임상범위 내: YES
LOO 최대 |dR^2|=0.036 → 단일 trial 제거에 강건(robust)
```
→ **R² 가 임계(0.7)를 넘어 강화되고 유지되는 reliability 전이 알림 발생 확인.**

### 3b. sparse 쌍 `--pair "FAST/HCC"` — sparsity / LOO 경고 표시

```
trials (n): 3 | R^2=0.652 | slope=-1.112 | slope 95% CI=[-11.439, 9.216]
>>> [TOO SPARSE] n=3 < 4: 신뢰 판정 불가 — LOW CONFIDENCE.
>>> [SPARSITY WARNING] n=3 <= 5: funnel 평가 불가, 단일 trial 영향 큼. 과신 금지.
LOO: 최대 |dR^2|=0.348
>>> [FRAGILE] 다음 trial 제거 시 R^2 임계 통과 여부가 뒤집힘:
    FAST-1, FAST-2, FAST-3
```
→ **sparsity 경고 + TOO SPARSE + FRAGILE(LOO 임계 뒤집힘) + 매우 넓은 slope CI 로
과신 방지(over-confidence guard) 동작 확인.**

결과: **PASS** — 전이 알림과 sparsity/LOO 경고 모두 동작.

---

## Check 4 — 데이터 파일 로드 (`PASS`)

명령:
```
python3 -c "import json,glob
for f in sorted(glob.glob('data/*.json')):
    d=json.load(open(f,encoding='utf-8'))
    print(f,'OK pairs=',len(d['pairs']),'trials=',sum(len(p['trials']) for p in d['pairs']))"
```
출력:
```
data/pairs.json OK pairs= 4 trials= 22
```
결과: **PASS** — 4쌍 / 총 22 trial 점 파싱 성공.

---

## 종합

| Check | 내용 | 결과 |
|---|---|---|
| 1 | `ast.parse(main.py)` | PASS |
| 2 | `--help` usage 출력 | PASS |
| 3 | 전이 알림(PDFF 강화) + sparsity/LOO 경고(FAST) | PASS |
| 4 | `data/*.json` 파싱 | PASS |

재시도 횟수: 0 (실패 없음).

### 설계 메모
- 초기 데모 데이터에서 `PDFF/cirrhosis` 가 weak 로 끝나 spec("R² 임계를 넘어
  강화·유지")과 불일치했음. 초기 3개 점을 산포(early phase-2 scatter), 이후 5개 점을
  깨끗한 선형 benefit 관계로 재설계하여 n=5 에서 R²가 임계를 넘고 n=8 까지 유지(R²=0.939,
  LOO robust)되도록 수정. 의도된 전이 시나리오 충족.
- `FAST/HCC` 는 trial 3개로 의도적으로 TOO SPARSE 유지, slope CI 가 [-11.4, 9.2] 로
  극도로 넓어 과신 위험을 명시적으로 드러냄.
