<!-- task=m-stream-evidence-gate-core/16+15_ingress_snapshot_allocation plan=0 tag=INGRESS_SNAPSHOT_ALLOCATION -->

# Plan - Ingress snapshot rebuild allocation lifecycle

## 배경

완성된 snapshot ledger 위에서 temporary rebuild output의 pre/post peak를 fail-closed로 검사하고 cancel/overflow/normal completion의 ownership release를 일관되게 끝내야 한다.

## 분석 결과

- 읽은 파일(원본 분석): `filter_contract.go`, `terminal.go`, `stream_release.go`, 승인된 SDD S11/S12/S18, OpenAI API contract와 config plan 경계.
- `test_env=local`; platform-common domain/test profile을 유지한다.
- 원본 PLAN의 two-phase rebuild allocation guard와 idempotent release/overflow lifecycle 범위를 유지한다.
- expected temporary bytes reserve와 실제 output commit 전후에 current peak를 검사하고 실패하면 dispatch 가능한 object를 반환하지 않는다.
- overflow/cancel/close는 canonical/typed/temp reference를 정해진 순서로 release하며 use-after-release는 stable error다.
- `15`의 builder-issued backing ledger를 소비한다. HTTP limit+1과 endpoint rebuilder는 재인덱싱된 `17`이 소유한다.
- 기존 routing을 유지한다. build=`local-fit`, `PLAN-local-G08.md`; official review=`CODE_REVIEW-cloud-G08.md`.

## 구현 체크리스트

- [x] SNAPSHOT-2 rebuild temporary의 pre/post peak guard와 idempotent release/overflow lifecycle을 구현한다.
- [x] SNAPSHOT-3 pre/post rebuild overflow, release reference drop/idempotent state, concurrent close/cancel fixtures를 추가한다.
- [x] SNAPSHOT-4 streamgate unit/race/diff 검증을 수행한다.
- [x] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다.

## 구현 항목

### [SNAPSHOT-2] rebuild allocation guard

- `packages/go/streamgate/ingress_snapshot.go`: expected temporary bytes를 reserve한 뒤 실제 output을 commit하는 two-phase guard를 제공한다. 실패 시 temporary/canonical/typed ownership을 정의된 순서로 release하고 provider dispatch 가능한 object를 반환하지 않는다.
- release는 cancel/overflow/normal completion에서 exactly once이며 use-after-release accessor는 stable error다.

### [SNAPSHOT-3] lifecycle tests

- `ingress_snapshot_test.go`: pre/post rebuild overflow, release reference drop/idempotent state와 concurrent close/cancel race를 검증한다.

## 의존 관계 및 구현 순서

`15` PASS → SNAPSHOT-2 → SNAPSHOT-3/4. 재인덱싱된 `17`이 완성된 snapshot primitive를 HTTP ingress와 endpoint rebuilder에 연결한다.

## 수정 파일 요약

| 파일 | 항목 |
|---|---|
| `packages/go/streamgate/ingress_snapshot.go` | SNAPSHOT-2 |
| `packages/go/streamgate/ingress_snapshot_test.go` | SNAPSHOT-3 |

## 최종 검증

- `command -v go && readlink -f "$(command -v go)" && go version && go env GOROOT`
- `go test -count=1 ./packages/go/streamgate`
- `go test -race -count=1 ./packages/go/streamgate`
- `git diff --check`

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

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

구현/test/evidence만 소유하고 active pair를 유지한다. user-review/finalization/roadmap은 official reviewer/runtime 소유다.
