<!-- task=m-client-integration-standardization/03+02_integration_boundaries plan=1 tag=REVIEW_CIS-INT -->

# Plan - REVIEW_CIS-INT

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

`CODE_REVIEW-local-G04.md`의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채우는 것이 필수다. 구현 후 검증 명령을 실행하고 실제 stdout/stderr를 붙여 넣은 뒤 active 파일을 그대로 두고 리뷰 준비를 보고한다. 판정, log rename, `complete.log`, archive 이동은 code-review-skill 전용이다.

## 배경

첫 리뷰에서 코드와 테스트는 통과했지만, `apps/client/README.md`의 Mattermost host 책임 설명이 새 adapter 경계와 충돌했다. production code는 `MattermostPushClient`/`MattermostPushPluginClient` 경계로 정리되었으므로 README도 host가 plugin singleton을 직접 호출한다고 안내하지 않아야 한다.

## 분석 결과

### 읽은 파일

- `agent-task/m-client-integration-standardization/03+02_integration_boundaries/code_review_cloud_G07_0.log`
- `agent-task/m-client-integration-standardization/03+02_integration_boundaries/plan_cloud_G07_0.log`
- `agent-ops/rules/project/domain/mobile/rules.md`
- `agent-ops/rules/project/domain/contracts/rules.md`
- `apps/client/README.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`
- `apps/client/lib/src/integrations/mattermost/mattermost_auth_service.dart`

### 테스트 커버리지 공백

- README wording-only follow-up이다. 런타임 동작 변화가 없으므로 새 Flutter test는 작성하지 않는다.
- 경계 문구는 deterministic `rg --sort path`로 검증한다.

### 심볼 참조

- `MattermostPushPlugin.instance`: production code reference는 `apps/client/lib/src/integrations/mattermost/mattermost_push_plugin_client.dart` 한 곳뿐이다.
- README의 host responsibility bullet이 이 singleton을 host 직접 호출처럼 설명해 문서 경계가 stale해졌다.

### 분할 판단

split decision policy를 평가했다. 단일 README bullet 수정만 필요하고 코드/API/test 소유 경계가 추가로 갈라지지 않으므로 기존 split subtask 안에서 단일 follow-up plan으로 처리한다.

### 범위 결정 근거

- `apps/client/README.md`의 Mattermost host responsibility wording만 수정한다.
- Dart source, contracts note, pubspec, tests는 첫 리뷰에서 통과했으므로 건드리지 않는다.
- full clone handoff 문서는 후속 `04+03_clone_handoff_docs` 범위에 남긴다.

### 빌드 등급

- build lane: `local-G04`, review lane: `local-G04`. 이유: 문서 wording만 다루는 좁은 follow-up이고 검증은 deterministic search로 충분하다.

## 구현 체크리스트

- [ ] [REVIEW_CIS-INT-1] README의 Mattermost host 책임 설명을 adapter/interface 경계와 일치시킨다.
- [ ] 중간 검증과 최종 검증 명령을 실행하고 실제 출력을 기록한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [REVIEW_CIS-INT-1] README Mattermost host responsibility wording

#### 문제

`apps/client/README.md:24`는 host application이 `MattermostPushPlugin.instance.setAuthToken()`과 `MattermostPushPlugin.instance.setSigningKey()`를 직접 호출한다고 설명한다. 실제 구현은 `MattermostAuthService`가 `MattermostPushClient` 인터페이스에 의존하고, singleton 접근은 `MattermostPushPluginClient` adapter 하나로 격리한다.

Before:

```markdown
- **Mattermost Authentication**: Handles login and session lifecycles, and securely registers the user authentication token and server signing key to the plugin by calling `MattermostPushPlugin.instance.setAuthToken()` and `MattermostPushPlugin.instance.setSigningKey()`.
```

#### 해결 방법

README bullet을 host가 `MattermostPushClient` 경계로 token/signing key를 전달하고 production adapter가 plugin singleton 호출을 소유한다고 표현한다.

After:

```markdown
- **Mattermost Authentication**: Handles login and session lifecycles, and passes the user authentication token and server signing key through the `MattermostPushClient` boundary. The production `MattermostPushPluginClient` adapter owns the plugin singleton calls.
```

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

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

#### 테스트 작성

새 테스트는 작성하지 않는다. 문서-only 수정이며 런타임 동작을 바꾸지 않는다.

#### 중간 검증

```bash
rg --sort path -n "Mattermost Authentication|MattermostPushPlugin.instance|MattermostPushClient|MattermostPushPluginClient" apps/client/README.md apps/client/lib/src/integrations/mattermost
```

예상: README는 host 직접 singleton 호출을 안내하지 않고, `MattermostPushPlugin.instance`는 adapter 격리 설명 또는 adapter source에서만 확인된다.

## 수정 파일 요약

| 파일 | 항목 |
|------|------|
| `apps/client/README.md` | REVIEW_CIS-INT-1 |

## 최종 검증

```bash
rg --sort path -n "Mattermost Authentication|MattermostPushPlugin.instance|MattermostPushClient|MattermostPushPluginClient" apps/client/README.md apps/client/lib/src/integrations/mattermost
! rg --sort path -n 'by calling `MattermostPushPlugin.instance' apps/client/README.md
```

첫 번째 명령은 adapter/interface 경계 문구를 보여야 한다. 두 번째 명령은 출력 없이 exit 0이어야 한다.

모든 코드 변경 완료 후 반드시 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다.
