<!-- task=m-stream-evidence-gate-core/13+11,12_recovery_plan_contract plan=0 tag=RECOVERY_PLAN_CONTRACT -->

# Plan - RecoveryPlan과 host seam 계약

## 배경

기존 Core에는 세 strategy의 `RecoveryIntent`만 있고 managed continuation, request-total/trajectory budget, dispatcher/controller/rebuilder/preparer seam과 immutable `RecoveryPlan`이 없다. 실행 coordinator보다 먼저 transport-agnostic 타입과 validation matrix를 닫는다.

## Archive Evidence Snapshot

- `agent-task/archive/2026/07/m-stream-evidence-gate-core/09_decision_arbiter/complete.log`: PASS. Arbiter가 하나의 intent만 선택한다.
- `agent-task/archive/2026/07/m-stream-evidence-gate-core/10+09_policy_hook/complete.log`: PASS. policy hook이 hold와 intent를 공통 계약에 연결한다.
- `agent-task/archive/2026/07/m-stream-evidence-gate-core/11+09,10_policy_hook_contract/complete.log`: PASS. consumer recovery contract가 공개됐다.

## 분석 결과

- 읽은 파일: `filter_contract.go`, `event.go`, `terminal.go`, `commit_boundary.go`, `stream_release.go`, `decision_arbiter.go`와 관련 tests, target Milestone/SDD, domain/test rules.
- `managed_continuation` strategy를 closed enum에 추가하고 기존 `RecoveryDirectiveKindContinuation`의 cursor/snapshot directive를 공유하도록 validation을 확장한다.
- 새 `recovery_plan.go`가 policy/usage snapshots, `ManagedTrajectoryBudget`, resume mode, eligibility input, immutable `RecoveryPlan`, plan/idempotency token과 host seams를 소유한다.
- host seams: `AttemptDispatcher`, idempotent `AttemptController`, optional `RecoveryPlanPreparer`, `RequestRebuilder`, `AttemptBinding`/`RebuiltRequest`. raw auth/body accessor와 concrete selection은 넣지 않는다.
- managed allowance=`min(attempt cap, optional remaining caller logical cap, context window - rebuilt prompt tokens - reserve)`다. rebuilt prompt의 assistant prefix를 누적 output으로 다시 빼지 않는다.
- exact/schema는 uncommitted replace; 일반/managed continuation은 side effect/final terminal 전 continue-stream이다.
- 전용 새 tests를 우선하고 기존 exhaustive tables만 최소 수정한다. build/review closure true. build=`grade-boundary`, scores=`2/2/2/1/2`, loop-risk=`temporal_state,boundary_contract,variant_product`, `PLAN-cloud-G09.md`; official review=`CODE_REVIEW-cloud-G09.md`, Codex `gpt-5.6-sol` xhigh.

## 구현 체크리스트

- [ ] CONTRACT-1 managed continuation strategy와 terminal metadata 계약을 추가한다.
- [ ] CONTRACT-2 immutable RecoveryPlan, fault/trajectory budget, eligibility와 host seam을 구현한다.
- [ ] CONTRACT-3 pre/post-commit·side-effect·cap·allowance·immutability contract tests를 추가한다.
- [ ] CONTRACT-4 streamgate 전체 회귀와 race/diff 검증을 수행한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다.

## 구현 항목

### [CONTRACT-1] strategy/directive

- `packages/go/streamgate/filter_contract.go:414-722`: managed strategy와 기존 continuation directive의 match validation/accessor를 추가한다.
- `packages/go/streamgate/event.go`: provider output-cap을 raw-free stable terminal reason으로 전달한다.
- `packages/go/streamgate/commit_boundary.go:504`: strategy eligibility를 resume/commit 상태와 일치시킨다.

### [CONTRACT-2] plan·host seam

- 새 `packages/go/streamgate/recovery_plan.go`: immutable policy/usage/plan과 host interfaces. budget은 preparer가 아니라 outbound dispatch 직전에만 consume되도록 표현한다.
- cause는 기존 최대 4단계 `FailureCauseChain`을 재사용하며 public serialization은 Core 밖이다.

### [CONTRACT-3] fixtures

- 새 `recovery_plan_test.go`: 0/1/3/4, strategy/total 교차 소진, cancel/terminal/tool side effect/re-entry, managed allowance/cap/context exhaustion, defensive copy.

## 의존 관계 및 구현 순서

`12` PASS → CONTRACT-1 → CONTRACT-2 → CONTRACT-3/4. `14`가 직접 의존하고, `17`은 `16`의 snapshot과 함께 이 계약을 소비한다.

## 수정 파일 요약

| 파일 | 항목 |
|---|---|
| `filter_contract.go`, `event.go`, `commit_boundary.go` | CONTRACT-1 |
| 새 `recovery_plan.go`, `recovery_plan_test.go` | CONTRACT-2/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`의 구현 에이전트 소유 섹션을 채운다.

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

구현·테스트·evidence만 작성하고 active pair를 유지한다. 사용자 질문/stop/finalization/roadmap은 official reviewer/runtime 소유다.
