# SDD User Review

## 상태

요청됨

## 검토 대상

- SDD: [SDD.md](SDD.md)
- Milestone: [Milestone 문서](../../../phase/knowledge-tool-optimization-extension/milestones/openai-compatible-output-validation-filters.md)

## 사용자 결정 항목

### [D01] Assistant history anchor 보정 단계

- 결정 필요: incoming assistant history에만 반복된 plain-text anchor를 찾았을 때 IOP가 어느 단계까지 자동 변경할지 결정한다.
- 추천안: 단계형 guard를 사용한다. generic request-history preflight에서 반복된 plain reasoning fragment만 sanitize하고, current non-final reasoning의 동일 fragment는 bounded dedupe한다. assistant final `content`, tool call, signed/encrypted/unknown reasoning field는 변경하지 않는다. completed history가 no-progress이고 current tool call release 전인 경우에만 sanitized history로 continuation repair를 최대 1회 수행하며, dev/dev-corp는 observe-only evidence를 먼저 통과한 model/provider policy부터 mutation을 켠다.
- 대안: 전 구간 observe-only로 시작하거나, request history는 변경하지 않고 downstream reasoning dedupe만 수행한다. observe-only는 자동 보정이 없고 downstream-only는 오염된 이전 history가 provider에 계속 전달될 수 있다.
- 영향: raw tunnel request/response mutation 범위, false positive, visible reasoning, continuation repair와 side-effect 안전 경계를 결정한다.
- 적용 위치:
  - SDD: `State Machine`, `Interface Contract`, `S10`, `S11`
  - Milestone: `repeat-guard`, `구현 잠금`

### [D02] Endpoint 적용 범위

- 결정 필요: 이번 Milestone에서 caller-neutral guard를 `/v1/chat/completions`에 한정할지 `/v1/responses`까지 함께 구현할지 결정한다.
- 추천안: 이번 Milestone은 `/v1/chat/completions`에 한정하고 `/v1/responses`는 item/reasoning/tool 계약에 맞는 후속 Milestone으로 분리한다. caller-neutral은 caller 제품명 비의존을 뜻하며 서로 다른 endpoint schema를 같은 parser로 처리한다는 의미가 아니다.
- 대안: 이번 Milestone에서 `/v1/responses`까지 확장한다. 이 경우 Responses item stream, encrypted reasoning, function-call item과 repair 계약을 별도 Acceptance Scenario와 Task 검증에 추가해야 한다.
- 영향: Milestone 범위, parser/state machine 규모, 계약 문서와 검증 matrix를 결정한다.
- 적용 위치:
  - SDD: `문제 / 비목표`, `Interface Contract`, `S01`
  - Milestone: `범위`, `contract-doc`, `구현 잠금`

### [D03] Assembled output 로그 보존

- 결정 필요: 현재 Edge info 로그의 assembled content/reasoning 원문을 계속 기본 보존할지, 기본 redaction으로 전환할지 결정한다.
- 추천안: 기본 운영 로그는 content/reasoning 길이, fingerprint hash, redacted preview, role/channel, decision만 남긴다. raw assembled output은 명시적인 짧은 TTL trace를 켠 dev에서만 허용하고 dev-corp/production 기본값은 비활성화한다.
- 대안: 기존 raw assembled output info 로그를 유지한다. incident 분석은 쉽지만 prompt/output 민감정보와 장기 보존 위험이 커지고 SDD의 sanitized evidence 정책과 예외 경계를 별도로 문서화해야 한다.
- 영향: 운영 관측성, 개인정보/민감정보 보존, 기존 observability/log-safety 테스트와 로그 호환성에 영향을 준다.
- 적용 위치:
  - SDD: `Interface Contract`, `S07`
  - Milestone: `ops-evidence`, `구현 잠금`

## 승인 항목

- [ ] D01 보정 단계를 승인했다.
- [ ] D02 endpoint 범위를 승인했다.
- [ ] D03 로그 보존 정책을 승인했다.
- [ ] SDD 잠금 해제를 승인했다.

## 답변 기록

- 없음

## 해결 조건

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