<!-- task=m-stream-evidence-gate-core/12+11_config_policy plan=0 tag=CONFIG_POLICY -->

# Plan - Stream Gate request policy와 상한 설정

## 배경

Recovery Coordinator와 ingress snapshot의 request-local 기본값·절대 상한·reload 격리를 구현보다 먼저 고정한다. 의미 filter와 복구 실행은 범위 밖이다.

## Archive Evidence Snapshot

- `agent-task/archive/2026/07/m-stream-evidence-gate-core/11+09,10_policy_hook_contract/complete.log`: PASS. 기존 RecoveryIntent consumer contract가 완료됐고 production runtime은 변경되지 않았다.

## 분석 결과

- 읽은 파일: `packages/go/config/{edge_types,load,validate,normalize}.go`, `configs/edge.yaml`, `agent-contract/inner/edge-config-runtime-refresh.md`, target Milestone/SDD, 관련 domain/test rules.
- SDD S11/S12/S17/S18의 fault recovery total 기본/절대 상한 3회와 ingress snapshot 기본/절대 상한 16 MiB를 source of truth로 만든다.
- 현재 OpenAI server가 `EdgeOpenAIConf` value snapshot으로 구성되므로 `openai.stream_evidence_gate`에 plain value config를 둔다. request-total omitted는 3이고 explicit 0은 모든 fault recovery를 disable한다. strategy omitted는 effective total을 상속하며 explicit 값은 그 total을 넘을 수 없다. request-total은 `0..3`, strategy cap은 `0..effective request-total`, ingress는 `1..16 MiB`다.
- 큰 기존 config test 대신 전용 test file을 추가한다. refresh 계약은 새 generation이 새 request에만 적용되고 in-flight request 값은 고정됨을 명시한다.
- `test_env=local`; platform-common/edge profiles를 적용한다. proto 변경은 없다.
- 설정은 타입/실행과 독립 review 경계라 분리했다. build/review closure true. build=`local-fit`, scores=`2/1/2/1/1`, loop-risk=`boundary_contract`, `PLAN-local-G07.md`; official review=`CODE_REVIEW-cloud-G07.md`, Codex `gpt-5.6-sol` xhigh.

## 구현 체크리스트

- [ ] CONFIG-1 기본값·절대 상한·유효 범위를 가진 Stream Gate 설정 타입과 load validation을 구현한다.
- [ ] CONFIG-2 샘플 설정과 refresh 계약을 갱신하고 default/boundary/rejection fixture를 추가한다.
- [ ] CONFIG-3 config 회귀, proto 무변경, diff 검증을 수행한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다.

## 구현 항목

### [CONFIG-1] 설정 타입과 검증

- `packages/go/config/edge_types.go:113`: `EdgeOpenAIConf`에 `StreamEvidenceGateConf` value를 추가한다. fault cap은 nil(omitted)과 explicit 0을 구분하는 presence-aware field로, ingress snapshot bytes는 zero-value default가 가능한 field로 둔다.
- `packages/go/config/load.go:45,160`: omitted 기본값을 3/16 MiB로 설정하고 `LoadEdge`에서 4회 이상, 16 MiB 초과·비양수 ingress를 거부한다.
- 새 `packages/go/config/stream_evidence_gate_config_test.go`: direct `EdgeOpenAIConf{}` zero-value default, YAML omitted total 3, explicit total 0/1/3/4 rejection, strategy>total rejection과 ingress limit-1/limit/limit+1 table fixture.

### [CONFIG-2] sample·refresh 계약

- `configs/edge.yaml`: canonical 예시와 단위를 추가한다.
- `agent-contract/inner/edge-config-runtime-refresh.md`: request-start snapshot과 generation isolation을 추가한다.

### [CONFIG-3] 회귀

- 기존 OpenAI/provider-pool config decode와 tracked proto가 변하지 않는지 검증한다.

## 의존 관계 및 구현 순서

CONFIG-1 → CONFIG-2 → CONFIG-3. 후속 `13`, `15`가 이 value config를 소비한다.

## 수정 파일 요약

| 파일 | 항목 |
|---|---|
| `packages/go/config/edge_types.go`, `load.go`, 새 config test | CONFIG-1/3 |
| `configs/edge.yaml`, `agent-contract/inner/edge-config-runtime-refresh.md` | CONFIG-2 |

## 최종 검증

- `command -v go && readlink -f "$(command -v go)" && go version && go env GOROOT`
- `make proto && git diff --exit-code -- proto/gen`
- `go test -count=1 ./packages/go/config`
- `git diff --check`

모든 코드 변경 완료 후 반드시 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 채운다.

## 이 파일을 읽는 구현 에이전트에게

구현·테스트·review evidence만 작성하고 active pair를 유지한다. 사용자 질문, stop file, archive/complete, roadmap 체크는 official reviewer/runtime 소유다.
