<!-- task=m-stream-evidence-gate-core/23+22_filter_observation_recovery plan=0 tag=FILTER_OBSERVATION_RECOVERY -->

# Plan - Recovery lifecycle observation과 Core timeline closure

## 배경

완성된 envelope와 evaluation/runtime hooks에 recovery plan, abort, prepare, rebuild와 dispatch lifecycle을 연결하고 하나의 request timeline으로 Core observation 범위를 닫는다.

## 분석 결과

- 읽은 파일(원본 분석): parallel evaluation/evaluation contract, arbiter, commit boundary, terminal, recovery/runtime seam과 SDD S08/S16.
- `test_env=local`; platform-common domain/test profile을 유지한다.
- 원본 PLAN의 OBS-CORE-3 범위와 OBS-CORE-4 중 recovery/full-timeline/race fixture를 유지한다.
- `recovery_coordinator.go`는 selected/rejected plan, abort, prepare outcome/deadline, rebuild와 dispatch result를 snapshot payload 없이 emit한다.
- `21`의 raw-free envelope와 `22`의 evaluation/runtime sequence를 소비해 complete timeline order를 검증한다.
- sink failure는 runtime correctness를 바꾸지 않고 raw prompt/output/tool/auth/preparer payload는 관측 경계에 들어오지 않는다.
- 기존 routing을 유지한다. build=`local-fit`, `PLAN-local-G08.md`; official review=`CODE_REVIEW-cloud-G08.md`.

## 구현 체크리스트

- [x] OBS-CORE-3 RecoveryCoordinator plan/abort/prepare/rebuild/dispatch hooks를 연결한다.
- [x] OBS-CORE-4 recovery lifecycle, complete timeline order와 race fixtures를 추가한다.
- [x] OBS-CORE-5 streamgate unit/race/diff 검증을 수행한다.
- [x] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다.

## 구현 항목

### [OBS-CORE-3] recovery hooks

- `packages/go/streamgate/recovery_coordinator.go`: plan selected/rejected, abort, prepare outcome/deadline, rebuild와 dispatch result를 snapshot payload 없이 emit한다.

### [OBS-CORE-4] closure tests

- `filter_observation_test.go`: recovery lifecycle과 evaluation부터 dispatch/release/terminal까지의 complete timeline order 및 race를 검증한다.

## 의존 관계 및 구현 순서

`22` PASS → OBS-CORE-3 → OBS-CORE-4/5. `25`가 Edge correlation integration으로 `filter-observation` Roadmap Task를 닫는다.

## 수정 파일 요약

| 파일 | 항목 |
|---|---|
| `packages/go/streamgate/recovery_coordinator.go` | OBS-CORE-3 |
| `packages/go/streamgate/filter_observation_test.go` | OBS-CORE-4 |

## 최종 검증

- `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 소유다.
