# JAMES — 추론 품질 검증 트랙 (Quality Verification Track)

> **위치**: v0.4 안에 끼워지는 형태. 새 트랙이 아니라 흩어진
> D1/D2/D3/D5/LEO/3×3 의 **재조준**.
> **작성**: 2026-05-27, branch `claude/james-project-scope-SCl2u` (조사
> 단계) → 본 문서로 정식화.
> **다음 세션 진입점**: 본 문서 + [[quality_verification_track]] memory.

---

## 0. 왜 이 트랙인가 (진단)

**증상**: "뭘 만드는지 모르겠다 / 덕지덕지 / 좋아지는지 모르겠다."

**진단**: 열린 피드백 루프.
- 비용은 **엄밀히 측정** (V3' protocol).
- 품질은 **가정**.
- 라우팅 기계 (D1 / D5 / LEO evidence-scope) 는 전부 **flag-OFF
  휴면**. 기본 제품은 아직 v0.3.0 gemma4:e4b 단순 경로.
- 즉 품질을 깎는 게 아니라, **켜도 될지 증명 안 된 휴면 복잡도**.

**원칙 3개**:

1. **검증 = 설계**. 검증이 설계 다음이 아니라 곧 설계.
2. **측정된 셀 = 라우터 규칙 하나**. 안 측정 = 규칙 없음 = 안전
   fallback.
3. **불안은 결함이 아니라 열린 루프를 읽은 정확한 경고등**. 해법은
   "그만 짓기" 가 아니라 "루프 닫기".

---

## 1. 기존 로드맵과 정합 (이건 새 일이 아니다)

| 비전 요소 | 기존 트랙 | 상태 |
|---|---|---|
| 하드웨어 자동추천 | `model_catalog` / `model_resolver` + Direction 3 | 부분 |
| 질문유형/capability 모델 | D5 + Ali 3×3 plan | D5 landed / 3×3 미실행 |
| 내부자료 고려 라우팅 | LEO evidence-scope | proposed → L.A/B/C/D land (2026-05-27 세션) |
| 모델 + 레이어 UI 표시 | Sprint 2 #3 + `reason:route` audit | 일부 계획 |
| 고정변수 방법론 | 3×3 §"Held-constant" + V3' protocol | 문서화됨 |
| gemma3 / qwen 등록·검증 | Direction 3 (cross-family) | backlog |

→ 비전은 **발명이 아니라 흩어진 D1/D2/D3/D5/LEO/3×3 의 재조준**.

---

## 2. 단 하나의 공백

비용 축은 cross-validated 까지 됐는데 (Robin 26b), **품질 축은
측정 기구가 없음**.

- `grounded=20/20` · `RAGAS=1.000` 전부 **포화** (회귀 바닥일 뿐
  헤드룸 0).
- `answer_relevancy` 는 노이즈 밴드.
- → "품질이 좋아지나" 는 현재 레포로 **구조적 무응답**.

이 세션 (2026-05-27) L.D 7-cycle 측정 작업이 정확히 이 공백을
부분적으로 메웠다 — Path Recall, scope distribution, classifier
audit, chroma probe, repeat-run audit. 하지만 그건 **per-query
diagnostic**, **시스템-수준 품질 오라클**은 아직 없음.

**부수**:
- 레이어 ablation 은 어떤 계획에도 없음.
- 3×3 은 직교 (모델 × temp at 고정 파이프라인) + 미실행.
- "설계만 하고 안 돌린" 패턴 반복 — 3×3, `swap_eval_report.py`
  부재, `bench_lc_scope_arms` deferred (이번 세션에 closed).

---

## 3. 품질의 정의 (북극성)

**groundedness + 답 정확도 + 기권 정확도**.

단, **순수 품질 최대화는 수축을 안 함** — 레이어 추가는 품질에
+/중립. 칼날은 **한계 기여 (marginal)**:

> "이 레이어 있을 때 vs 없을 때 품질 델타"

→ **0이면 비용 무관 삭제**.

이 정의가 라우팅 정책의 source of truth 가 된다:
- delta > 0 인 cell → 라우팅 규칙으로 박힘.
- delta = 0 인 cell → 레이어/규칙 삭제.

---

## 4. Valid ablation 불변식

**고정**:
- 모델
- 샘플링 결정성 (`temperature=0` + `seed`)
- judge (다른·강한 모델)
- 코퍼스 / 쿼리 / gold / 생성 조건

**기법**:
- paired per-query (쿼리간 분산 상쇄)
- arm 별 반복 (효과가 런 흔들림보다 작으면 0)

**산출물**: 값 매트릭스 (**레이어 × 모델 tier**).
- 0-델타 = 삭제
- 한쪽 tier 만 = tier-gate (라우터가 레이어까지 라우팅)

**이 표 = 라우터 정책표**.

---

## 5. 스코프 경계

- **지식 풀 (gemma)** = 이 트랙 대상.
- **코딩 풀 (qwen / deepseek, Phase 6 기존)** = 별도 축, 별도
  오라클 (테스트 통과율) — **안 섞음**.

**로컬 현실**:
- 등록된 건 small = `gemma4:e4b` (로컬) + large = Claude
  (클라우드) 뿐, medium 비었음.
- → 순수 로컬에선 라우터 거의 no-op (검증할 가설).
- 코딩 32b도 12GB 초과로 gemma fallback.

**B 채택** — `gemma3:12b` 로컬 medium 등록 (12GB 적합,
Direction 3 의 첫 셀, plugin 으로 — core 미오염).

**하드웨어 = 제약 (필터), 품질 = 목적함수**. 박스에 드는 모델로
후보 거른 뒤 그 안에서 품질로 선택.

---

## 6. 타이밍 (β 결정 — "품질 검증" 을 둘로 쪼갬)

| 조각 | 위치 | 근거 |
|---|---|---|
| **품질 오라클** (비포화 지표 + 고정 baseline) | **Sprint 1** (늦어도 Sprint 4 전) | Sprint 4 (임베딩 swap, 기본경로 변경) · Sprint 5 (Layer 4 게이트) 가 몰래 의존 |
| **검증 = PR 게이트** (규칙 2 에 이빨) | **Sprint 3~5 상시** | 별도 트랙 아닌 ambient |
| **레이어 ablation + 수축 + flag-ON 결정** | **v0.4 끝 / v0.5-prep** | 휴면이라 무급 · v0.5 Domain Pilot = 처음 ON 출시 시점 |

---

## 7. 실행 순서

| # | 할 일 | 신규? |
|---|---|---|
| 0 | **비포화 품질 지표 + 고정 baseline 설계** (Sprint 1) → design memo land 2026-05-28: `docs/design/v0.4-qvt-alpha-non-saturating-oracle.md` | ⭐ 신규 |
| 1 | `gemma3:12b` 로컬 medium plugin 등록 | 재조준 (Direction 3 첫 셀) |
| 2 | 코퍼스 / temp / seed 동결, "before" (레이어 OFF) baseline 캡처 | 재사용 |
| 3 | Sprint 3~5: 각 PR 이 **품질 델타 숫자** 첨부 (상시 게이트) | 재조준 (CLAUDE.md rule 2 강화) |
| 4 | v0.4 끝: **레이어 ablation 매트릭스** (model × tier) | 재조준 (3×3 / D5 산출물) |
| 5 | 0-델타 삭제 / tier-gate → **라우터 정책 + UI trace 표시** | 일부 계획 (Sprint 2 #3) |

---

## 8. 미해결 쟁점

- **α (다음 액션, 제일 어려움)**: 비포화 품질 지표를 뭐로?
  - 어려운 쿼리셋 (현 시스템이 못 푸는) — 후보 1
  - gold 대비 graded 정확도 — 후보 2
  - 레포에 비포화 지표 **전무** → 신규 설계 필요
  - **본 트랙의 첫 PR 후보**
- **γ**: Direction 3 / 3×3 은 Ali · Robin 공동 → collaborator
  프로토콜 (사전 notice / first-share) 걸림
  ([[direction_3_cross_family_review]] 참조)
- **δ**: 규칙 2 벤치게이트가 지금 포화 / 비용뿐 — **이 트랙이
  규칙 2 에 이빨을 주는 일** (닭-달걀)

**β 는 해결됨** (위 §6).

---

## 9. CLAUDE.md 정합

| rule | 충돌? | 비고 |
|---|---|---|
| #1 (no domain) | ✅ | 플랫폼 인프라 |
| #2 (bench numbers on core/) | ✅ → **이 트랙이 강화** | 품질 델타 숫자를 추가로 요구 |
| #4 (architecture change) | ⚠️ | 라우터 / 오라클 일부 `architecture` 라벨 |
| #5 (모듈 ≤ 20 KB) | ✅ | 신규 모듈 < 20 KB |

---

## 10. 이번 세션 (2026-05-27) 9-cycle 작업의 위치

이 세션이 한 일은 **본 트랙의 §7 step 3 (PR 게이트)** + **§7 step 4
(ablation 측정 substrate)** 의 first installment 다.

| cycle | PR | 본 트랙 매핑 |
|---|---|---|
| L.D wrapper + router fix | #526 | substrate fix (잘못된 측정 도구 정정) |
| F1 retrieval-mode harness | #527 | §7 step 0 — 측정 가능한 baseline 확보 |
| F4 narrow fixture | #528 | §4 paired per-query — 분포 측정 |
| F5 k=0 floor fix | #529 | §4 산출물 정합 보장 |
| Idea 1 Path Recall GT | #530 | **§3 품질 정의 — Recall = 정답 도달 여부** |
| F2 classifier audit | #531 | **§4 fixed-variable 검증** (가설 → 측정 → reject) |
| F6 q15 repeat audit | #532 | §4 stochasticity check |
| F7 chroma top-k probe | #533 | §3 marginal contribution 진단 |
| BL-9 prep | #534 | §7 step 2 — Sprint 4 임베딩 swap 준비 |
| F3 prep | #535 | §5 large-tier 등록 (B 채택 패턴) |
| BL-9 acceptance + F9 spawn | #536 | **§2 공백 직접 메움 (one cycle deeper)** |

다음 세션이 본 트랙으로 진입하면, §7 step 0 (비포화 품질 지표
설계) 이 첫 작업.

---

## 11. 다음 세션 진입점 (체크리스트)

진입 전 확인:
- [ ] main HEAD 와 본 문서 commit hash 확인
- [ ] 운영자 BL-9 step7 v4 ON arm 결과 (이 세션 펜딩)
- [ ] 운영자 F3 acceptance 실행 여부
- [ ] Sprint 5 PR queue (#522/#523/#524/#525) 머지 상태

§7 step 0 진입:
- α 설계 메모 land 2026-05-28: `docs/design/v0.4-qvt-alpha-non-saturating-oracle.md`
  — 3-axis (path · graded answer · abstention F1) 비포화 오라클 +
  fixture schema v5 + per-PR quality delta card + v0.4 끝 ablation
  매트릭스 shape 박힘. **α 결정 = 둘 다 + abstention F1 추가**.
- α-2 fixture schema 확장 + manual annotation (16 쿼리 gold_signals +
  abstention_truth + expected_path.edges) — design memo §8 다음 PR.
- F9 (query rewriter audit) ✅ closed (#545/#546/#547/#549) — 본 트랙
  step 3 first installment.
- F3a (truncation heuristic) — halt-prone 측정 가능하게 만드는
  instrumentation, §3 marginal contribution 측정에 필요. operator F3
  acceptance run 대기 중.

---

## 12. 한 줄 요약

> 비전은 이미 로드맵 (재조준), 빠진 건 **비포화 품질 오라클** 하나.
> Sprint 1 에 작게 넣고 → 검증을 Sprint 3~5 상시 게이트로 → 큰
> 수축·flag-ON 은 v0.4 끝 (v0.5 출시 직전) 에. **누적이 더 깊어지기
> 전에 루프가 닫혀**.

---

## 관련 문서

- [[direction_5_auto_routing_closure]] — D5 cycle closure (재조준 대상)
- [[direction_1_adaptive_budget_closure]] — D1 closure (재조준 대상)
- [[leo_ld_closure]] — LEO L.D 7-cycle (본 트랙 §7 step 3 first installment)
- [[direction_3_cross_family_review]] — γ 쟁점 (gemma3 / qwen 등록 협업 박자)
- [[feedback_build_dont_broadcast]] — 본업 / 연구 분리 원칙 (본 트랙은 본업)
- `reports/promo-assets/v3prime-leo-evidence-scope-result.md` — 이 세션 9-cycle 결과 doc
- `reports/promo-assets/v3prime-direction5-router-result.md` — D5 closure
- `docs/research/v3prime-protocol-v1.md` — V3' methodology spec (§4 불변식 source)
