# SDD User Review

## 상태

요청됨

## 검토 대상

- SDD: [SDD.md](SDD.md)
- Milestone: [request-execution-log-usage-ledger-foundation](../../../phase/operational-observability-provider-management/milestones/request-execution-log-usage-ledger-foundation.md)

## 사용자 결정 항목

### [D01] Ledger 저장 책임

- 결정 필요: 요청별 request ledger의 canonical 저장 책임을 Edge-local store, Control Plane store, 또는 Edge 원본 + Control Plane replica 중 어디에 둘지 결정해야 한다.
- 추천안: Edge를 원본으로 두고 Control Plane은 조회/export용 replica 또는 relay view로 시작한다.
- 대안: Control Plane을 원본으로 두거나, MVP에서는 Edge-local CLI 조회만 제공한다.
- 영향: source of truth, 장애 복구, 다중 Control Plane 전환, export API, 저장소 schema 경계에 영향을 준다.
- 적용 위치:
  - SDD: `Source of Truth`, `Interface Contract`, `Acceptance Scenarios`
  - Milestone: `storage-query`, `구현 잠금`

### [D02] Usage Source 표시 정책

- 결정 필요: provider-reported, estimated, mixed, unavailable usage source를 운영 UI와 export에서 어떤 기본 표현으로 보여줄지 결정해야 한다.
- 추천안: 모든 token 필드에 source를 함께 저장하고, rollup에서는 provider-reported와 estimated를 기본적으로 분리해 표시한다.
- 대안: total token만 source를 표시하거나, estimated 값을 기본 rollup에 포함하지 않는다.
- 영향: provider 효율 비교, 사용자별 사용량 통계, 비용/성능 판단 정확도에 영향을 준다.
- 적용 위치:
  - SDD: `Interface Contract`, `Acceptance Scenarios`
  - Milestone: `token-usage`

### [D03] Think/Reasoning Token 추정

- 결정 필요: provider가 hidden think/reasoning token을 보고하지 않는 경우 표시된 reasoning text 기반 추정치를 별도 필드로 허용할지 결정해야 한다.
- 추천안: provider-reported reasoning token만 canonical `reasoning_tokens`로 두고, 표시 reasoning text 기반 값은 `reasoning_tokens_estimated`처럼 별도 추정 필드로만 둔다.
- 대안: 추정치를 MVP에서 아예 제외하거나, output token에 합산한다.
- 영향: 모델/provider 비교, hidden reasoning 비용 추정, 사용자 로그 신뢰도에 영향을 준다.
- 적용 위치:
  - SDD: `Interface Contract`
  - Milestone: `token-usage`

### [D04] Redaction과 Retention 기본값

- 결정 필요: prompt/response/reasoning 원문, preview, IOP request/route metadata, error detail의 기본 보관 범위와 redaction 정책을 결정해야 한다.
- 추천안: MVP 기본값은 원문 미보관, redacted preview와 IOP request/route metadata summary만 저장하고, raw payload export는 별도 opt-in으로 둔다.
- 대안: Edge-local에 raw payload를 짧게 보관하거나, 운영자 권한이 있으면 Control Plane에서 raw 조회를 허용한다.
- 영향: 보안, 개인 정보, 저장 비용, 디버깅 깊이, 사용자 신뢰에 영향을 준다.
- 적용 위치:
  - SDD: `Interface Contract`, `Acceptance Scenarios`
  - Milestone: `log-redaction`

### [D05] Schema 분리 방식

- 결정 필요: 기존 `RunEvent`/runtime event schema를 확장할지, 별도 request ledger/audit event schema를 둘지 결정해야 한다.
- 추천안: runtime stream의 `RunEvent`는 실행 중 이벤트로 유지하고, 완료/관측용 request ledger record를 별도 schema로 둔다. 필요한 correlation 필드만 runtime event에 보강한다.
- 대안: `RunEvent`를 확장해 ledger까지 흡수하거나, audit event만 확장한다.
- 영향: proto 변경 범위, Edge/Node/Control Plane 책임 경계, 과거 로그 migration, client UI parsing에 영향을 준다.
- 적용 위치:
  - SDD: `Interface Contract`, `State Machine`
  - Milestone: `migration-plan`

### [D06] Tool-call Trace 보관 수준

- 결정 필요: tool-call argument, provider raw chunk, parser error detail을 preview/hash/raw capture 중 어떤 수준으로 보관하고 어떻게 redaction할지 결정해야 한다.
- 추천안: 기본값은 raw 원문 미보관, `run_id` 기준 판정 필드와 길이/hash/redacted preview만 저장하고, bounded raw capture는 명시적으로 켠 진단 모드에서만 허용한다.
- 대안: Edge-local에 짧은 raw chunk ring buffer를 두거나, tool-call arguments는 schema 기반 redaction 후 저장한다.
- 영향: tool-call 장애 분석 깊이, 민감 정보 노출, 저장 비용, 운영자 export 권한에 영향을 준다.
- 적용 위치:
  - SDD: `Interface Contract`, `Acceptance Scenarios`
  - Milestone: `tool-call-trace`, `log-redaction`

## 승인 항목

- [ ] 위 결정 항목을 승인했다.
- [ ] SDD 잠금 해제를 승인했다.

## 답변 기록

- 없음

## 해결 조건

- 모든 사용자 결정 항목의 답변이 SDD에 반영되어 있다.
- [USER_REVIEW.md](USER_REVIEW.md)가 `user_review_N.log`로 이동되어 있다.
- 남은 잠금 항목이 없으면 SDD 상태가 `[승인됨]`이고 `SDD 잠금` 상태가 `해제`다.
