# Milestone: Provider Adapter Foundation

## 위치

- Roadmap: `agent-roadmap/ROADMAP.md`
- Phase: `agent-roadmap/phase/provider-change-request-integration/PHASE.md`

## 목표

GitHub, GitLab, Forgejo, Plane, Jira 같은 외부 시스템을 provider adapter로 붙일 수 있는 공통 foundation을 만든다. Git 자체 조작은 platformless Git engine에 남기고, provider adapter는 플랫폼 API와 webhook 세부만 소유한다.

## 상태

[완료]

## 승격 조건

- 없음

## 구현 잠금

- 상태: 해제
- SDD: 불필요 - Provider adapter foundation의 bounded interface/wiring slice이며 완료 근거는 기능 Task와 local core 검증으로 확인한다.
- 결정 필요: 없음

## 범위

- provider registry와 capability model
- provider config와 credential ref
- webhook intake REST endpoint
- provider read/write client interface
- provider event normalization boundary

## 기능

### Epic: [registry] Provider registry

provider별 capability와 config를 등록한다.

- [x] [provider-model] provider id, endpoint, credential ref, capabilities를 model로 정의한다.
- [x] [provider-store] provider config를 저장하고 조회하는 store boundary를 만든다.
- [x] [capability] ChangeRequest, webhook, checks, comment 같은 capability flag를 정의한다.

### Epic: [webhook] Webhook intake

provider webhook을 normalized event 입력으로 받는다.

- [x] [callback] provider callback REST endpoint 경계를 만든다. 검증: fake webhook이 `provider.webhook.received` event를 남긴다.
- [x] [verify] webhook signature 검증 hook을 adapter별로 꽂을 수 있게 한다.
- [x] [normalize] provider payload를 provider-neutral event 후보로 변환한다.

## 완료 리뷰

- 상태: 통과
- 요청일: 2026-06-20
- 완료 근거:
  - `agent-task/archive/2026/06/m-provider-adapter-foundation/02+01_webhook_adapter_wiring/complete.log`의 `Roadmap Completion`에서 `verify`, `normalize` PASS를 확인했다.
  - `cd services/core && go test -count=1 ./...` 통과로 provider adapter foundation 관련 core package를 fresh run으로 재확인했다.
  - 모든 기능 Task가 `[x]`이고 구현 잠금이 해제되어 완료 상태로 전환했다.
- 리뷰 필요:
  - [x] 사용자가 완료 결과를 확인했다
  - [x] archive 이동을 승인했다
- 리뷰 코멘트: 코드 레벨 완료 검토와 사용자 요청 기반 archive 승인을 반영했다.

## 범위 제외

- provider별 PR/MR 실제 생성
- provider별 CI/checks 상세 구현
- Git operation 실행
- UI 설정 화면

## 작업 컨텍스트

- 관련 경로: `services/core/internal/provider/`, `services/core/internal/controlplane/`, `services/core/internal/events/`, `packages/contracts/notes/gito-control-plane.md`
- 표준선(선택): provider adapter는 platform API만 소유하고 Git object 상태는 Git engine으로 확인한다.
- 결정 반영(2026-06-19): 현재 사용 중인 Forgejo webhook/revision path를 기존 baseline으로 인정하고, Provider Adapter Foundation에서 새 provider 우선순위는 GitHub로 둔다.
- 결정 반영(2026-06-19): `credential_ref`는 SOPS로 관리되는 secret material을 가리키는 ref를 기준으로 한다. 런타임은 decrypt된 ignored env/local secret을 resolver로 읽고, tracked docs와 event/log에는 raw secret을 남기지 않는다.
- 작업현황 동기화(2026-06-19): `agent-task/archive/2026/06/m-provider-adapter-foundation/02+01_postgres_provider_store/complete.log`의 `Roadmap Completion` 근거로 `provider-store` 완료를 반영했다.
- 작업현황 동기화(2026-06-19): generic provider callback route와 `provider.webhook.received` event 기록을 추가하고 `cd services/core && go test ./...` 통과 근거로 `callback` 완료를 반영했다.
- 작업현황 동기화(2026-06-20): `agent-task/archive/2026/06/m-provider-adapter-foundation/02+01_webhook_adapter_wiring/complete.log`의 `Roadmap Completion` 근거로 `verify`, `normalize` 완료를 반영하고 Milestone을 `[검토중]`으로 전환했다.
- 선행 작업: Command Policy and Cancellation
- 후속 작업: Change Request Abstraction
- 확인 필요: 없음
