<!-- task=m-stream-evidence-gate-core/25+23,24_edge_observation_correlation plan=0 tag=EDGE_FILTER_OBSERVATION_CORRELATION -->

# Plan - Edge request/attempt observation correlation closure

## 배경

완성된 Edge sink adapter를 OpenAI runtime 생성과 recovery rebinding lifecycle에 연결하고 Core evaluation부터 recovery/release/terminal까지 하나의 correlated raw-free timeline으로 검증한다.

## Roadmap Targets

- Milestone: `agent-roadmap/phase/knowledge-tool-optimization-extension/milestones/stream-evidence-gate-core.md`
- Task ids: `filter-observation`
- Completion mode: check-on-pass

## 분석 결과

- 읽은 파일(원본 분석): Edge OpenAI server/dispatch/provider logging, usage observation, `packages/go/observability/observability.go`, Core observation/runtime contract와 SDD S08/S16.
- `test_env=local`; platform-common+edge domain/test profile을 유지한다.
- 원본 PLAN의 OBS-EDGE-2 범위와 OBS-EDGE-3/4 중 full integration closure를 유지한다.
- `server.go`는 injected/default sink를 runtime factory에 전달하고 request ingress correlation과 각 `AttemptBinding`의 run/provider/model/path를 observer context에 갱신한다.
- Core가 유지하는 request sequence를 바꾸지 않으며 `streamgate_filter_observation` entries만 분리해 parallel filter부터 recovery/release/terminal까지 검증한다.
- raw prompt/output/tool/auth/preparer sentinel은 observation entries에 없어야 하고 sink failure는 response path를 실패시키지 않는다.
- 기존 routing을 유지한다. build=`local-fit`, `PLAN-local-G07.md`; official review=`CODE_REVIEW-cloud-G07.md`.

## 구현 체크리스트

- [ ] OBS-EDGE-2 request/attempt correlation을 OpenAI runtime 생성·rebinding lifecycle에 연결한다.
- [ ] OBS-EDGE-3 full observation timeline과 raw prompt/output/tool/auth/preparer sentinel 부재 fixtures를 추가한다.
- [ ] OBS-EDGE-4 observability/OpenAI unit·race·log-safety/diff 검증을 수행한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다.

## 구현 항목

### [OBS-EDGE-2] correlation

- `server.go`는 injected/default sink를 runtime factory에 전달한다. `stream_gate_runtime.go`와 dispatch/rebinding callsites는 request/model과 actual run/provider/model/path snapshot을 observation context에 연결한다.

### [OBS-EDGE-3] integration tests

- `filter_observation_sink_test.go`: full request timeline의 stable IDs/sequence/cause/evidence와 raw prompt/output/tool/auth/preparer sentinel 부재를 확인한다.
- existing log-safety fixture에는 observation message/field allowlist와 sink failure isolation을 추가한다. unrelated legacy log message policy는 변경하지 않는다.

## 의존 관계 및 구현 순서

`23`, `24` PASS → OBS-EDGE-2 → OBS-EDGE-3/4. PASS가 `filter-observation` Task를 완료한다.

## 수정 파일 요약

| 파일 | 항목 |
|---|---|
| `server.go`, Edge runtime/dispatch callsites | OBS-EDGE-2 |
| `filter_observation_sink_test.go`, existing log-safety test | OBS-EDGE-3 |

## 최종 검증

- `command -v go && readlink -f "$(command -v go)" && go version && go env GOROOT`
- `go test -count=1 ./packages/go/streamgate ./packages/go/observability ./apps/edge/internal/openai`
- `go test -race -count=1 ./apps/edge/internal/openai`
- `go test -count=1 ./apps/edge/internal/openai -run 'FilterObservation|LogSafety'`
- `git diff --check`

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

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

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