# Milestone: Mattermost Nexo Messaging Alignment ## 위치 - Roadmap: `agent-roadmap/ROADMAP.md` - Phase: `agent-roadmap/phase/external-integration/PHASE.md` ## 목표 현재 workflow/core 작업을 계속 확장하기 전에 Mattermost 메시지/알림 경계를 `../nexo/packages/messaging_flutter` 기준으로 먼저 고정한다. NomadCode core는 Mattermost REST 메시지 발송과 task notification 발행을 담당하고, nexo messaging package는 client-side FCM 수신, signature 검증, ACK, notification display, opened-routing, inline reply, dismiss를 담당한다는 선을 구현과 검증 문서에 맞춘다. ## 상태 [진행중] ## 구현 잠금 - 상태: 해제 - 결정 필요: 없음 ## 범위 - NomadCode host의 `MattermostPushClient` 경계를 현재 `nexo_messaging` public API와 맞춘다. - ignored Mattermost credential asset에서 optional server identifier를 전달할 수 있게 한다. - server-generated signed push smoke 절차와 External Integration 검증 기준 nexo 구조에 맞춰 유지한다. - Android native push 처리 로직이 `apps/client/android`로 되돌아오지 않도록 책임 경계를 문서화한다. ## 기능 ### Epic: [nexo-boundary] Mattermost host and nexo package alignment 현재 작업보다 먼저 Mattermost messaging/notification 경계를 nexo-owned package 기준으로 정렬한다. - [x] [host-identifier] NomadCode host가 optional Mattermost server identifier를 `MattermostPushClient`와 `nexo_messaging`의 `setAuthToken(..., identifier:)` 경계로 전달한다. 검증: `cd apps/client && flutter test`. - [x] [docs-boundary] `agent-test/local/mattermost-server-generated-push-smoke.md`, `apps/client/push-notification-todo.md`, contracts note, External Integration context가 nexo package의 Android-first/stub-platform 상태와 server-generated signed push smoke 기준을 일관되게 설명한다. 검증: 문서에서 raw token/password/signing key/FCM token 값을 기록하지 않는다. - [ ] [signed-smoke-refresh] 실제 Android runner에서 server-generated signed push smoke를 재실행해 FCM receipt, valid signature, ACK, notification display, opened event, inline reply, dismiss evidence를 redaction 상태로 남긴다. 검증: `agent-test/local/mattermost-server-generated-push-smoke.md`의 Evidence Checklist가 PASS/PARTIAL/BLOCKED로 기록된다. ## 완료 리뷰 - 상태: 없음 - 요청일: 없음 - 완료 근거: [진행중] FCM 수신, signature 검증, ACK 전송, system notification display는 PASS이나, opened event, channel navigation, inline reply, dismiss/clear, device token prefix는 실제 동작 및 접두사 증적 수집 대기 중으로 부분 완료(PARTIAL) 상태입니다. - 리뷰 필요: - [ ] 사용자가 완료 결과를 확인했다 - [ ] archive 이동을 승인했다 - 리뷰 코멘트: 없음 ## 범위 제외 - Plane/Jira adapter 확장 - Agent Integrator 또는 A2A 도입 결정 - core Mattermost REST 메시지 발송 adapter의 전체 구현 - iOS/macOS native push runtime 구현 - Mattermost 제품 UX 또는 채널 화면 구현 ## 작업 컨텍스트 - 관련 경로: `apps/client/lib/src/integrations/mattermost/`, `apps/client/push-notification-todo.md`, `agent-test/local/mattermost-server-generated-push-smoke.md`, `packages/contracts/notes/flutter-core-api-candidates.md`, `../nexo/packages/messaging_flutter` - 표준선(선택): `../nexo/packages/messaging_flutter`는 Android-first client-side messaging/notification SDK이고, NomadCode host는 Firebase 설정, credential handoff, signing key, optional server identifier, navigation callback만 전달한다. - 선행 작업: Mattermost Messaging Android Smoke - 후속 작업: Workflow Core 재개, External Integration의 `[mattermost-adapter]` 구현 - 확인 필요: signed push smoke 재실행 시 private input은 `agent-test/local/rules.md`와 `agent-test/local/mattermost-server-generated-push-smoke.md`가 라우팅하는 ignored secret 파일에서만 읽는다.