<!-- task=m-client-integration-standardization/04+03_clone_handoff_docs plan=1 tag=REVIEW_CIS-DOC -->

# Plan - REVIEW_CIS-DOC

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

이 계획은 `code_review_local_G04_0.log`의 FAIL Required 항목만 보정한다. 구현 후 `CODE_REVIEW-local-G04.md`의 구현 에이전트 소유 섹션을 실제 수정 내용과 검증 출력으로 채운 뒤 active 파일을 그대로 두고 리뷰 준비를 보고한다. 판정, log rename, `complete.log`, archive 이동은 code-review-skill 전용이다.

## 배경

초기 clone handoff 문서는 큰 구조와 검색 검증은 채웠지만, Mattermost host/plugin boundary 일부를 실제 코드와 다르게 direct plugin singleton 호출로 안내했고, sibling repo dependency path 예시와 README handoff 상태 문장이 정확하지 않았다. 또한 review 파일의 최종 검증 stdout 일부가 재실행 결과와 일치하지 않았다.

## 분석 결과

### 읽어야 하는 파일

- `agent-task/m-client-integration-standardization/04+03_clone_handoff_docs/code_review_local_G04_0.log`
- `apps/client/README.md`
- `apps/client/push-notification-todo.md`
- `apps/client/pubspec.yaml`
- `packages/contracts/notes/flutter-core-api-candidates.md`
- `apps/client/lib/src/integrations/mattermost/mattermost_push_client.dart`
- `apps/client/lib/src/integrations/mattermost/mattermost_push_plugin_client.dart`
- `apps/client/lib/src/integrations/mattermost/mattermost_push_host_integration.dart`

### 범위 결정

- 코드 변경은 하지 않는다.
- `../iop`와 `../alt`는 수정하지 않는다.
- `agent-ops/roadmap/**`은 수정하지 않는다.
- `packages/contracts/notes/flutter-core-api-candidates.md`는 문서 정합성 확인만 하고, 기존 후보 내용이 맞으면 수정하지 않는다.

### 빌드 등급

- build lane: `local-G04`, review lane: `local-G04`
- 이유: 문서 보정과 deterministic search/test 재검증만 필요하다. 실패 원인이 terminal, browser, external CLI, integration runtime 재현에 의존하지 않는다.

## 구현 체크리스트

- [ ] [REVIEW_CIS-DOC-1] `apps/client/push-notification-todo.md`의 Mattermost handoff를 `MattermostPushClient`/adapter boundary 기준으로 수정한다.
- [ ] [REVIEW_CIS-DOC-2] clone dependency path 예시를 현재 sibling workspace 구조와 `apps/client/pubspec.yaml` 기준에 맞게 수정한다.
- [ ] [REVIEW_CIS-DOC-3] `apps/client/README.md`의 stale future handoff 문장을 현재 handoff 문서 위치 설명으로 바꾼다.
- [ ] [REVIEW_CIS-DOC-4] 문서 수정 후 지정 검증 명령을 재실행하고 실제 stdout/stderr를 새 review 파일에 기록한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [REVIEW_CIS-DOC-1] Mattermost boundary 문서 보정

#### 문제

`apps/client/push-notification-todo.md:21-28`이 host app에서 `MattermostPushPlugin.instance`를 직접 호출하라고 안내한다. 실제 구현은 `MattermostPushClient`와 `MattermostPushHostIntegration`에 의존하고, plugin singleton 직접 접근은 `MattermostPushPluginClient`에 격리되어 있다.

#### 해결 방법

- Host responsibility를 `MattermostPushClient` boundary를 통해 auth token, signing key, device token sync, navigation callbacks를 넘기는 형태로 설명한다.
- `MattermostPushPlugin.instance` 직접 호출 예시는 plugin adapter 책임으로 옮기거나 제거한다.
- README와 contracts note의 boundary 설명과 충돌하지 않게 용어를 맞춘다.

#### 수정 파일 및 체크리스트

- [ ] `apps/client/push-notification-todo.md`

#### 테스트 작성

새 테스트는 작성하지 않는다. 문서/코드 boundary는 search로 확인한다.

#### 중간 검증

```bash
rg --sort path -n "MattermostPushClient|MattermostPushHostIntegration|MattermostPushPluginClient|MattermostPushPlugin.instance" apps/client/push-notification-todo.md apps/client/README.md packages/contracts/notes/flutter-core-api-candidates.md apps/client/lib/src/integrations/mattermost
```

예상: 문서의 host 책임은 `MattermostPushClient`/host integration을 가리키고, `MattermostPushPlugin.instance`는 adapter 구현 또는 adapter 책임 설명에만 남는다.

### [REVIEW_CIS-DOC-2] clone dependency path 보정

#### 문제

`apps/client/push-notification-todo.md:74-79`가 sibling repo clone 예시로 `../../packages/mattermost_push_plugin` 및 `../../packages/proto_socket`를 제시한다. 현재 기준 구현은 `apps/client/pubspec.yaml`에서 workspace sibling repo 경로인 `../../../mattermost-push-plugin` 및 `../../../proto-socket/dart`를 사용한다.

#### 해결 방법

- sibling repo에서 그대로 복제할 dependency path 예시를 현재 workspace layout과 맞춘다.
- repo별 vendoring/monorepo 내부 packages로 옮기는 경우는 별도 선택지로 표현하고, 기본 예시와 혼동하지 않게 쓴다.

#### 수정 파일 및 체크리스트

- [ ] `apps/client/push-notification-todo.md`

#### 테스트 작성

새 테스트는 작성하지 않는다. Search check로 path 예시와 실제 pubspec 기준을 비교한다.

#### 중간 검증

```bash
rg --sort path -n "mattermost_push_plugin:|proto_socket:|../../../mattermost-push-plugin|../../../proto-socket/dart|../iop|../alt" apps/client/push-notification-todo.md apps/client/pubspec.yaml
```

예상: handoff 예시와 기준 구현 pubspec이 같은 sibling repo dependency shape를 설명한다.

### [REVIEW_CIS-DOC-3] README stale handoff 문장 보정

#### 문제

`apps/client/README.md:44`가 "Detailed handoff docs are scheduled for the `04+03_clone_handoff_docs` task."라고 남아 있어, 이미 작성된 handoff 문서를 미래 작업처럼 설명한다.

#### 해결 방법

- 해당 문장을 현재 handoff 문서 위치(`Cloning & Handoff Checklist`, `apps/client/push-notification-todo.md`)를 안내하는 문장으로 바꾼다.
- "scheduled"처럼 미완료 상태를 암시하는 표현을 제거한다.

#### 수정 파일 및 체크리스트

- [ ] `apps/client/README.md`

#### 테스트 작성

새 테스트는 작성하지 않는다. Negative search로 stale 문장이 사라졌는지 확인한다.

#### 중간 검증

```bash
rg --sort path -n "Cloning & Handoff Checklist|Client Integration Handoff" apps/client/README.md apps/client/push-notification-todo.md
rg --sort path -n "Detailed handoff docs are scheduled" apps/client/README.md
```

예상: 첫 명령은 handoff 문서 위치를 출력한다. 두 번째 명령은 match가 없어 exit 1이 정상이다.

### [REVIEW_CIS-DOC-4] 검증 출력 재기록

#### 문제

기존 review log의 최종 검증 출력에 `path: ../2/packages/...`가 기록되어 있었고, 재실행 결과/실제 파일과 맞지 않았다. Review file의 검증 결과는 실제 stdout/stderr와 일치해야 한다.

#### 해결 방법

- 문서 수정 후 최종 검증 명령을 재실행한다.
- 새 `CODE_REVIEW-local-G04.md`의 `검증 결과`에 실제 stdout/stderr를 붙여 넣는다.
- 대체 명령을 쓰면 `계획 대비 변경 사항`에 이유를 기록한다.

#### 수정 파일 및 체크리스트

- [ ] `CODE_REVIEW-local-G04.md`

#### 테스트 작성

새 테스트는 작성하지 않는다. 최종 검증 명령을 재실행한다.

#### 중간 검증

```bash
git diff --check
```

예상: 출력 없음.

## 수정 파일 요약

| 파일 | 항목 |
|------|------|
| `apps/client/push-notification-todo.md` | REVIEW_CIS-DOC-1, REVIEW_CIS-DOC-2 |
| `apps/client/README.md` | REVIEW_CIS-DOC-3 |
| `CODE_REVIEW-local-G04.md` | REVIEW_CIS-DOC-4 |

## 최종 검증

```bash
rg --sort path -n "MattermostPushClient|MattermostPushHostIntegration|MattermostPushPluginClient|MattermostPushPlugin.instance" apps/client/push-notification-todo.md apps/client/README.md packages/contracts/notes/flutter-core-api-candidates.md apps/client/lib/src/integrations/mattermost
rg --sort path -n "mattermost_push_plugin:|proto_socket:|../../../mattermost-push-plugin|../../../proto-socket/dart|../iop|../alt" apps/client/push-notification-todo.md apps/client/pubspec.yaml
rg --sort path -n "Cloning & Handoff Checklist|Client Integration Handoff" apps/client/README.md apps/client/push-notification-todo.md
rg --sort path -n "Detailed handoff docs are scheduled" apps/client/README.md
git diff --check
cd apps/client && flutter test
```

두 번째 `rg "Detailed handoff docs are scheduled"` 명령은 match 없음과 exit 1이 정상 결과다. Flutter test cache 출력은 허용하지 않는다.
