<!-- task=m-external-integration/01_provider_intake_registry plan=3 tag=REVIEW_REVIEW_REVIEW_REFACTOR -->

# Provider Intake Registry Follow-up Plan 3

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

`CODE_REVIEW-local-G05.md`의 구현 에이전트 소유 섹션을 채우는 것이 구현의 마지막 단계다. 코드 변경, 검증 실행, 실제 stdout/stderr 기록을 끝낸 뒤 active 파일을 그대로 두고 리뷰 준비를 보고한다. 종결 판정, log rename, `complete.log`, task archive 이동은 code-review 스킬만 수행한다. 구현 중 사용자만 결정할 수 있는 범위 변경, 사용자 소유 외부 환경, secret, 서비스 준비 없이는 진행할 수 없으면 review stub의 `사용자 리뷰 요청` 섹션에 정확한 근거를 남기고 멈춘다. 후속 에이전트가 명령 재실행이나 증거 수집으로 닫을 수 있는 검증 공백은 사용자 리뷰 요청이 아니다.

## 배경

세 번째 리뷰(`code_review_local_G05_2.log`)에서 테스트는 통과했지만 두 Required 이슈가 남았다. active milestone 문서의 task target 밖 완료 체크가 여전히 남아 있고, legacy Plane route가 `planeWorkItemTasks` 전용 경로로 되돌아가 원래 plan의 "compatibility alias uses generic handler" 요구를 충족하지 못했다. 이번 follow-up은 두 Required 이슈를 닫고, helper/test drift를 함께 정리한다.

## Roadmap Targets

- Milestone: `agent-roadmap/phase/external-integration/milestones/external-integration.md`
- Task ids:
  - `provider-intake-registry`: Plane 전용 task intake handler를 provider-neutral registry/generic route 또는 동등한 조립 구조로 정리
- Completion mode: check-on-pass

## 분석 결과

### 기준 로그

- Archived plans:
  - `agent-task/m-external-integration/01_provider_intake_registry/plan_local_G06_0.log`
  - `agent-task/m-external-integration/01_provider_intake_registry/plan_local_G06_1.log`
  - `agent-task/m-external-integration/01_provider_intake_registry/plan_local_G06_2.log`
- Archived reviews:
  - `agent-task/m-external-integration/01_provider_intake_registry/code_review_local_G05_0.log`
  - `agent-task/m-external-integration/01_provider_intake_registry/code_review_local_G05_1.log`
  - `agent-task/m-external-integration/01_provider_intake_registry/code_review_local_G05_2.log`
- Latest verdict: FAIL

### Required 이슈

- Roadmap scope restoration이 미완료다. `plane-adapter-expand`, `jira-adapter`, `mattermost-adapter` 완료 체크와 해당 완료 근거 bullet이 남아 있다.
- Legacy Plane route가 `planeWorkItemTasks` 전용 경로로 되돌아가 generic `createWorkItemTask`/provider registry path를 재사용하지 않는다.

### Suggested 이슈

- `registerWorkItemProvider` helper와 `TestRegisterWorkItemProviderSkipsNilOrEmpty`가 실제 registration 동작을 검증하지 않는 drift를 남겼다.

### 범위 결정 근거

- 이번 follow-up은 기존 generic endpoint, README 설명, invalid body tests, `NewHandler` assembly tests를 유지한다.
- `provider-intake-registry` roadmap Task 자체는 직접 완료 체크하지 않는다. PASS 후 런타임 이벤트 대상이다.

## 구현 체크리스트

- [ ] `agent-roadmap/phase/external-integration/milestones/external-integration.md`의 이번 task target 밖 완료 체크와 근거 추가분을 원복한다.
- [ ] legacy `/api/integrations/plane/tasks`가 기존 503 미구성 응답을 유지하면서도 generic `createWorkItemTask`/provider registry path를 재사용하도록 구조를 조정한다.
- [ ] `CreatePlaneTaskCompatibilityRouteUsesRegistry` 또는 동등 테스트가 legacy Plane route가 registry/generic path를 사용하는 사실을 검증하도록 고친다.
- [ ] `registerWorkItemProvider` helper를 실제 registration에 사용하고 테스트를 의미 있게 고치거나, helper와 misleading test를 제거한다.
- [ ] `cd services/core && go test -count=1 ./internal/http ./internal/workitempipeline ./internal/workitem`를 통과시킨다.
- [ ] `cd services/core && go test ./...`를 통과시킨다.
- [ ] `git diff --check`를 통과시킨다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [REVIEW_REVIEW_REVIEW_REFACTOR-1] Roadmap Scope Restoration

문제: active milestone 문서에서 이번 task target이 아닌 `plane-adapter-expand`, `jira-adapter`, `mattermost-adapter`가 완료 처리되고 별도 완료 근거가 추가되었다.

해결 방법:

- `agent-roadmap/phase/external-integration/milestones/external-integration.md`에서 위 세 Task의 `[x]`를 원래 `[ ]`로 되돌린다.
- 이번 implementation에서 추가한 해당 완료 근거 bullet과 검증 명령 bullet을 제거한다.
- `provider-intake-registry`는 직접 완료 체크하지 않는다.

중간 검증:

```bash
git diff -- agent-roadmap/phase/external-integration/milestones/external-integration.md
```

### [REVIEW_REVIEW_REVIEW_REFACTOR-2] Plane Alias Uses Generic Registry Path

문제: legacy Plane endpoint의 503 호환성은 복원됐지만, `CreatePlaneTask`가 다시 `planeWorkItemTasks` 전용 field를 호출하게 되어 원래 plan의 generic handler 재사용 요구와 어긋났다.

해결 방법:

- Plane compatibility body를 `createWorkItemTaskRequest`로 변환한 뒤 generic `createWorkItemTask` 경로로 위임한다.
- provider가 `plane`이고 registry entry가 없을 때만 legacy 호환 응답인 503 `"plane client is not configured"`를 반환하도록 generic path에 작은 option/helper를 둔다.
- `planeWorkItemTasks` field를 다시 제거하거나, 최소한 `CreatePlaneTask`가 해당 field를 직접 호출하지 않게 한다.
- `TestCreatePlaneTaskCompatibilityRouteUsesRegistry`가 registry entry를 통해 호출되는지 검증하고, 미구성 503 테스트도 유지한다.

중간 검증:

```bash
cd services/core && go test -count=1 ./internal/http
```

### [REVIEW_REVIEW_REVIEW_REFACTOR-3] Registration Helper Drift

문제: `registerWorkItemProvider`가 production registration에서 사용되지 않거나, `TestRegisterWorkItemProviderSkipsNilOrEmpty`가 helper를 호출하지 않아 테스트 이름과 검증 내용이 어긋난다.

해결 방법:

- `NewHandler`에서 `registerWorkItemProvider`를 사용해 Plane/Jira를 등록하고, helper 테스트가 실제 skip 동작을 호출해 검증하게 한다.
- 또는 helper가 필요 없다면 helper와 misleading test를 제거하고 `NewHandler` assembly tests만 남긴다.

중간 검증:

```bash
cd services/core && go test -count=1 ./internal/http
```

## 최종 검증

```bash
cd services/core && go test -count=1 ./internal/http ./internal/workitempipeline ./internal/workitem
cd services/core && go test ./...
git diff --check
```
