# Complete - m-stream-evidence-gate-core/08+02,05,06_filter_registry

## 완료 일시

2026-07-25

## 요약

Filter Registry의 immutable request snapshot, candidate/attempt-local re-resolution과 coordinator 동일 `EvidenceBatch` 전달 증거를 5개 리뷰 루프에서 완결했고 최종 판정은 PASS다.

## 루프 이력

| Plan | Review | Verdict | 메모 |
|------|--------|---------|------|
| `plan_local_G05_0.log` | `code_review_local_G06_0.log` | FAIL | validated hold 계약, filter별 policy snapshot, candidate-local resolution과 identity fence 보완 필요 |
| `plan_local_G06_1.log` | `code_review_local_G07_1.log` | FAIL | candidate별 capability admission, identity 경계와 실제 regression assertion 보완 필요 |
| `plan_local_G06_2.log` | `code_review_local_G06_2.log` | FAIL | caller slice/provider별 applies/full context assertion과 실제 transport evidence 복구 필요 |
| `plan_local_G05_3.log` | `code_review_local_G05_3.log` | FAIL | filter가 받은 batch를 입력 batch와 같은 필드 집합으로 비교하는 assertion 필요 |
| `plan_local_G04_4.log` | `code_review_local_G04_4.log` | PASS | filter와 Arbiter 양쪽의 동일 batch assertion 및 fresh 검증 evidence 완료 |

## 구현/정리 내용

- request 시작 시 generation과 filter policy/registration을 immutable snapshot으로 고정하고 candidate/attempt target별 enablement, `Applies`, capability와 hold requirement를 다시 resolve한다.
- disabled filter의 contract/capability 영향을 제거하고 duplicate stable id 및 snapshot/Begin/Resolve/Bind identity mutation을 거부한다.
- `resolvedFilterAdapter`가 full `FilterContext`와 입력 `EvidenceBatch`를 filter에 전달하고 `GateCoordinator`가 같은 batch를 Arbiter에 전달한다는 regression을 보강했다.
- 공통 `assertBatchMatches` helper로 filter와 Arbiter 수신 batch의 `CapturedAt`, terminal/commit state, event kind/channel/timestamp/text를 입력 batch와 비교한다.

## 최종 검증

- `go test -race -count=1 -v ./packages/go/streamgate -run '^TestResolvedFilterAdapterPassesFullContextThroughCoordinator$'` - PASS; 동일 batch seam regression 통과.
- `go test -race -count=1 -v ./packages/go/streamgate -run '^Test(FilterRegistry(PolicyIsFilterScopedAndSnapshotImmutable|ReresolvesProviderSpecificApplies|UsesValidatedHoldRequirement)|ResolvedFilterAdapterPassesFullContextThroughCoordinator)$'` - PASS; S11/coordinator regression 통과.
- `go test -race -count=1 -v ./packages/go/streamgate -run '^TestFilterRegistry(CandidateScopedActiveResolution|DisabledFilterSkipsContractCalls|RejectsIdentityMutationAtBoundaries)$'` - PASS; candidate/disabled/identity regression 통과.
- `go test -count=1 ./packages/go/streamgate -run '^Test(FilterContext|FilterRegistry|FilterBase|ResolvedFilter)'` - PASS.
- `go test -race -count=1 ./packages/go/streamgate` - PASS; race 없음.
- `go vet ./packages/go/streamgate` - PASS.
- `gofmt -d packages/go/streamgate/filter_registry.go packages/go/streamgate/filter_registry_test.go` - PASS; 출력 없음.
- `make proto`와 `git status --short -- proto/gen/iop` - PASS; 생성물 추가 diff 없음.
- `go test -count=1 ./apps/edge/internal/transport ./apps/node/internal/transport` - BLOCKED(setup); host `/config/opt/go/src/crypto/internal/fips140cache` 누락이 구현 기록과 동일하게 재현됐다.

## Roadmap Completion

- Milestone: `agent-roadmap/phase/knowledge-tool-optimization-extension/milestones/stream-evidence-gate-core.md`
- Milestone link: [Milestone 문서](agent-roadmap/phase/knowledge-tool-optimization-extension/milestones/stream-evidence-gate-core.md)
- Completed task ids:
  - `filter-registry`: PASS; evidence=`agent-task/archive/2026/07/m-stream-evidence-gate-core/08+02,05,06_filter_registry/plan_local_G04_4.log`, `agent-task/archive/2026/07/m-stream-evidence-gate-core/08+02,05,06_filter_registry/code_review_local_G04_4.log`; verification=`go test -race -count=1 ./packages/go/streamgate`와 S11/coordinator focused race 명령
- Not completed task ids: 없음

## 잔여 Nit

- 없음

## 후속 작업

- host Go 설치를 복구한 뒤 Edge/Node transport profile을 재실행한다. 이는 이번 test-only S11 동작 판정과 별개의 로컬 환경 유지보수 항목이다.
