# Complete - m-stream-evidence-gate-core/24+20,21_edge_observation_sink

## 완료 일시

2026-07-27

## 요약

Edge FilterObservation zap sink의 closed allowlist와 raw-free 회귀 증거를 3회의 판정 루프(FAIL 2회, 최종 PASS)로 완성했다.

## 루프 이력

| Plan | Review | Verdict | 메모 |
|------|--------|---------|------|
| `plan_local_G07_1.log` | `code_review_cloud_G07_1.log` | FAIL | sink production/test 산출물과 실제 실행 증거가 누락됐다. |
| `plan_cloud_G03_2.log` | `code_review_cloud_G03_2.log` | FAIL | sink는 정상이나 exact key/value, cause order, terminal, context sentinel assertion이 부족했다. |
| `plan_cloud_G03_3.log` | `code_review_cloud_G03_3.log` | PASS | exact allowlist oracle과 raw-context fixture를 보강하고 reviewer fresh 검증을 통과했다. |

## 구현/정리 내용

- `streamgate.ObservationSink`를 구현하는 Edge zap sink와 stable base/optional/cause/evidence field allowlist를 유지했다.
- all-fields/base/terminal fixture에서 exact key set과 모든 mapped value, 4-entry cause 순서, terminal reason을 고정했다.
- raw prompt/output/tool/auth/preparer sentinel을 context에 실제 주입하고 JSON 및 observer field set에 노출되지 않음을 검증했다.
- direct zap write failure 전파와 sequencer failure isolation 회귀 검증을 유지했다.

## 최종 검증

- `command -v go && readlink -f "$(command -v go)" && go version && go env GOROOT` - PASS; `/config/.local/bin/go` → `/config/opt/go/bin/go`, `go1.26.2 linux/arm64`, GOROOT `/config/opt/go`.
- `go test ./apps/edge/internal/openai -list '^TestFilterObservationSink_'` - PASS; 4개 named test 확인.
- `go test -count=1 -v ./apps/edge/internal/openai -run '^TestFilterObservationSink_'` - PASS; 4개 test 모두 실행 및 성공.
- `go test -count=1 ./packages/go/streamgate ./packages/go/observability ./apps/edge/internal/openai` - PASS.
- `go test -race -count=1 ./apps/edge/internal/openai -run '^TestFilterObservationSink_'` - PASS.
- `test -z "$(gofmt -l apps/edge/internal/openai/filter_observation_sink.go apps/edge/internal/openai/filter_observation_sink_test.go)"` - PASS; 출력 없음.
- `git diff --check` - PASS; 출력 없음.
- repo Edge-Node 진단 - 미적용; 이 child는 runtime injection이나 사용자 실행 표면을 변경하지 않는다.
- 보조 E2E smoke - 미적용; isolated sink와 unit oracle 범위다.
- full-cycle 실제 구동 - 미적용; runtime correlation/timeline은 후속 child `25`가 소유한다.

## 잔여 Nit

- 없음

## 후속 작업

- 없음
