<!-- task=m-stream-evidence-gate-core/19+14,17_filter_observation_core plan=0 tag=FILTER_OBSERVATION_CORE -->

# Plan - Core FilterObservation 계약과 hooks

## 배경

Filter/coordinator decisions를 하나의 raw-free request timeline으로 emit할 Core envelope와 hook이 없다. 저장 adapter와 분리해 immutable contract, sequence와 lifecycle coverage를 먼저 닫는다.

## 분석 결과

- 읽은 파일: parallel evaluation, evaluation contract, arbiter, commit boundary, terminal, recovery/runtime seams와 SDD S08/S16.
- `FilterObservation`은 request/run/provider/model correlation, generation, attempt/epoch, consumer/filter/rule, hold/event/runes, decision policy, commit/terminal, plan/preparer, 최대 4 cause codes와 sanitized evidence만 허용한다.
- raw prompt/output/tool/auth/preparer payload를 받을 field 자체를 만들지 않고 stable token/closed enum/기존 fingerprint-count-offset value를 재사용한다.
- request-local monotonic sequence를 부여하며 sink failure는 runtime correctness를 바꾸지 않는 best-effort observation error로 격리한다.
- evaluation start/outcome과 staging/arbitration/release/terminal/recovery lifecycle decision만 emit하며 미평가 delta는 emit하지 않는다.
- `test_env=local`, platform-common profile. build/review closure true; build=`local-fit`, scores=`2/2/1/1/2`, loop-risk=`temporal_state,concurrent_consistency,boundary_contract`, `PLAN-local-G08.md`; official review=`CODE_REVIEW-cloud-G08.md`, Codex `gpt-5.6-sol` xhigh.

## 구현 체크리스트

- [ ] OBS-CORE-1 immutable FilterObservation/sequence/sink contract와 raw-free validation을 구현한다.
- [ ] OBS-CORE-2 GateCoordinator evaluation 및 runtime release/terminal lifecycle hooks를 연결한다.
- [ ] OBS-CORE-3 RecoveryCoordinator plan/abort/prepare/rebuild/dispatch hooks를 연결한다.
- [ ] OBS-CORE-4 complete timeline, bounded cause/evidence, sink-failure/race fixtures를 추가한다.
- [ ] OBS-CORE-5 streamgate unit/race/diff 검증을 수행한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다.

## 구현 항목

### [OBS-CORE-1] envelope/sink

- 새 `packages/go/streamgate/filter_observation.go`: closed lifecycle kind, immutable snapshots/validator/accessors, sink/no-op sink와 request sequence owner.

### [OBS-CORE-2] evaluation/runtime hooks

- `parallel_evaluation.go`는 실제 evaluated epoch의 stable filter start/outcome만 emit한다.
- `runtime.go`는 response staged, arbitration, release, terminal을 action당 한 번 emit한다.

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

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

### [OBS-CORE-4] tests

- 새 `filter_observation_test.go`: parallel completion correlation, full lifecycle order, max4 causes, sanitized evidence only, delta suppression, sink failure isolation과 race를 검증한다.

## 의존 관계 및 구현 순서

`14`, `17` PASS → OBS-CORE-1 → OBS-CORE-2/3 → OBS-CORE-4/5. `20`이 Edge sink/correlation mapping을 붙인다.

## 수정 파일 요약

| 파일 | 항목 |
|---|---|
| 새 `filter_observation.go`, test | OBS-CORE-1/4 |
| `parallel_evaluation.go`, `runtime.go`, `recovery_coordinator.go` | OBS-CORE-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`의 구현 에이전트 소유 섹션을 채운다.

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

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