<!-- task=m-external-integration/03_mattermost_adapter plan=1 tag=REVIEW_MM -->

# Mattermost Adapter Follow-up Plan - REVIEW_MM

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

이 follow-up은 코드 수정이 아니라 review에서 누락된 Mattermost server-generated signed push smoke evidence를 수집하는 작업이다. Mattermost secret, FCM token, signing key, push payload signature는 tracked 파일이나 리뷰 출력에 기록하지 않는다.

## 배경

`plan_cloud_G08_0.log`의 core 구현과 Go 검증은 통과했다. 현재 follow-up은 remote runner에서 smoke profile을 실행하고 redacted evidence checklist를 남기는 것이다.

## Roadmap Targets

- Milestone: `agent-roadmap/phase/external-integration/milestones/external-integration.md`
- Task ids:
  - `mattermost-adapter`: Mattermost 메시지 발송 adapter 구현과 Nexo host notification boundary 정합성 유지
- Completion mode: check-on-pass

## 범위 결정 근거

- 포함: Mattermost server-generated signed push smoke 실행, redacted evidence checklist 기록, core baseline 재검증.
- 제외: Mattermost adapter 코드 재설계, Flutter 앱 기능 변경, Nexo package 변경.
- 근거: 이번 follow-up의 완료 여부는 Mattermost server-generated signed push smoke evidence로 판단한다.

## 구현 체크리스트

- [ ] [REVIEW_MM-1] Mattermost server-generated signed push smoke를 실행하고 redacted evidence checklist를 기록한다.
- [ ] `cd services/core && go test ./...`를 실행한다.
- [ ] `cd services/core && go vet ./...`를 실행한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

## [REVIEW_MM-1] Signed push smoke evidence

문제: 첫 구현은 `cd services/core && go test ./...`와 `go vet ./...`는 통과했지만, `mattermost-adapter` Roadmap Task의 통합 검증인 server-generated signed push smoke evidence가 없다.

해결 방법:

- `agent-test/local/mattermost-server-generated-push-smoke.md` 절차를 따른다.
- private input은 `agent-test/local/testing-secrets.md`에서 필요한 값만 로드하고 원문 값을 tracked 파일에 쓰지 않는다.
- Positive path는 Mattermost REST가 생성한 DM 또는 mention이어야 하며 hand-built placeholder signature를 쓰지 않는다.
- Evidence checklist의 FCM receipt, valid signature 처리, notification display, ACK, opened event, channel navigation, inline reply, dismiss/clear, device token prefix 결과를 `PASS`, `PARTIAL`, `BLOCKED`, `N/A`로 기록한다.
- 실행이 막히면 active `CODE_REVIEW-cloud-G08.md`의 `사용자 리뷰 요청`에 user-owned secret/runner/service blocker와 실제 명령 출력을 남긴다.

중간 검증:

```bash
ssh -o BatchMode=yes -o ConnectTimeout=10 toki@toki-labs.com 'zsh -lc "cd $HOME/agent-work/nomadcode && git rev-parse --abbrev-ref HEAD && git rev-parse HEAD && flutter devices"'
```

기대: remote runner checkout이 git worktree이고 Android emulator가 보인다. HEAD 일치 여부만으로 차단하지 않는다.

## 최종 검증

```bash
cd services/core && go test ./...
cd services/core && go vet ./...
```

기대: Go commands exit 0. Mattermost smoke는 redacted evidence checklist와 함께 PASS/PARTIAL/BLOCKED/N/A 판정을 남긴다.
