feat: iOS/Desktop 알림 테스트 Milestone 추가 및 멀티앱 채널 선행 작업 업데이트

- iOS 알림 테스트 Milestone scaffold/stub gap과 smoke 기준으로 추가
- Desktop 알림 테스트 Milestone macOS/Windows/Linux 알림 기준 추가
- 멀티앱 채널 모델의 선행 작업에 iOS/Desktop 알림 테스트 반영
- 활성 Milestone을 멀티앱 채널에서 iOS/Desktop 알림 테스트로 변경
This commit is contained in:
toki 2026-06-01 06:05:19 +09:00
parent 7cec7c0bc1
commit 0e4dfc6914
5 changed files with 181 additions and 3 deletions

View file

@ -7,9 +7,12 @@
## 활성 Milestone
- [스케치] 멀티앱 채널 모델
- [계획] iOS 알림 테스트
- Phase: `agent-roadmap/phase/messaging-runtime/PHASE.md`
- 경로: `agent-roadmap/phase/messaging-runtime/milestones/multi-app-channel.md`
- 경로: `agent-roadmap/phase/messaging-runtime/milestones/ios-notification-test.md`
- [계획] Desktop 알림 테스트
- Phase: `agent-roadmap/phase/messaging-runtime/PHASE.md`
- 경로: `agent-roadmap/phase/messaging-runtime/milestones/desktop-notification-test.md`
## 선택 규칙

View file

@ -22,6 +22,12 @@ Mattermost server/webapp/push-proxy는 upstream-followable runtime으로 두고,
- [완료] 알림 파이프라인 고도화
- 경로: `agent-roadmap/archive/phase/messaging-runtime/milestones/notification-pipeline.md`
- 요약: FCM, ACK, inline reply, dismiss, open routing을 안정된 플러그인 책임으로 만든다.
- [계획] iOS 알림 테스트
- 경로: `agent-roadmap/phase/messaging-runtime/milestones/ios-notification-test.md`
- 요약: iOS/APNs 권한, token, open routing, ACK/dismiss 계약을 scaffold/stub gap과 smoke 기준으로 분리한다.
- [계획] Desktop 알림 테스트
- 경로: `agent-roadmap/phase/messaging-runtime/milestones/desktop-notification-test.md`
- 요약: macOS scaffold/stub 상태의 알림 기준과 Windows/Linux platform gap을 별도로 확인한다.
- [스케치] 멀티앱 채널 모델
- 경로: `agent-roadmap/phase/messaging-runtime/milestones/multi-app-channel.md`
- 요약: 추가 앱이 생길 때 사용 채널만 늘려 분기할 수 있는 서비스 모델을 검토한다.

View file

@ -0,0 +1,84 @@
# Milestone: Desktop 알림 테스트
## 위치
- Roadmap: `agent-roadmap/ROADMAP.md`
- Phase: `agent-roadmap/phase/messaging-runtime/PHASE.md`
## 목표
Desktop 환경에서 nexo 알림 계약을 어떤 플랫폼부터 검증할 수 있는지 분리해서 확인한다.
현재 macOS plugin은 scaffold/stub 상태이므로 notification permission, display, open routing의 smoke 기준과 구현 gap을 분리해 다룬다.
Windows/Linux는 현재 platform 등록 여부와 구현 gap을 확인해 별도 후속 작업으로 나눌 수 있게 정리한다.
## 상태
[계획]
## 승격 조건
- 없음
## 구현 잠금
- 상태: 해제
- 결정 필요: 없음
## 범위
- macOS plugin scaffold/stub과 `apps/flutter-test/macos` host 설정의 현재 지원 상태 확인
- macOS notification permission, display, click/open routing, app lifecycle 조건 정리
- Windows/Linux desktop plugin platform 미등록/미구현 상태와 필요한 native notification 구현 후보 확인
- desktop에서 ACK, dismiss, inline reply를 Android와 같은 계약으로 다룰 수 있는지 gap 정리
- OS notification UI가 필요한 수동 검증과 headless 자동화 가능 항목의 경계 정리
## 기능
### Epic: [baseline] Desktop 기준선
Desktop 플랫폼별 지원 상태를 분리해 현재 Milestone의 검증 범위를 고정한다.
- [ ] [platform-matrix] macOS, Windows, Linux의 plugin platform 등록, host scaffold, notification 구현 상태를 표로 정리한다.
- [ ] [macos-host] `packages/messaging_flutter/macos``apps/flutter-test/macos`의 app delegate, entitlement, permission/display 준비 조건을 확인한다.
- [ ] [win-linux-gap] Windows/Linux Flutter plugin platform 추가 여부와 필요한 native notification API 후보를 정리한다.
### Epic: [contract] Desktop 알림 계약
Desktop 알림 event가 Dart API와 host routing callback으로 연결되기 위한 계약을 구체화한다.
- [ ] [display-open] macOS notification display와 click/open routing을 `NotificationOpenedEvent`와 channel/thread callback에 연결하기 위한 event shape를 정리한다.
- [ ] [lifecycle] foreground, background, minimized, terminated 상태에서 desktop notification 처리 기준과 제한을 정리한다.
- [ ] [ack-dismiss] Desktop에서 ACK, dismiss, inline reply를 처리할 수 있는 platform hook과 후속 구현 gap을 분리한다.
### Epic: [smoke] Desktop Smoke
macOS 중심의 검증 기준과 Windows/Linux 후속 판단 기준을 나누어 만든다.
- [ ] [macos-smoke] macOS permission, display, click/open routing smoke checklist와 evidence 경로를 작성한다.
- [ ] [automation-boundary] OS notification UI 때문에 수동 확인이 필요한 항목과 Flutter integration test로 대체 가능한 항목을 분리한다.
- [ ] [follow-up] macOS 구현 보강과 Windows/Linux 신규 platform support 중 후속 Milestone 후보를 정리한다.
## 완료 리뷰
- 상태: 없음
- 요청일: 없음
- 완료 근거: 없음
- 리뷰 필요:
- [ ] 사용자가 완료 결과를 확인했다
- [ ] archive 이동을 승인했다
- 리뷰 코멘트: 없음
## 범위 제외
- iOS/APNs 알림 검증은 iOS 알림 테스트 Milestone에서 다룬다.
- Android FCM 구현 변경은 이 Milestone에서 다루지 않는다.
- Windows/Linux 신규 native implementation은 지원 gap 확인 후 별도 구현 Milestone으로 분리한다.
- 멀티앱 channel/tenant/server 분기 모델과 push credential 분리 정책은 멀티앱 채널 모델에서 결정한다.
## 작업 컨텍스트
- 관련 경로: `packages/messaging_flutter/macos/`, `packages/messaging_flutter/pubspec.yaml`, `packages/messaging_flutter/README.md`, `apps/flutter-test/macos/`, `apps/flutter-test/README.md`
- 표준선(선택): macOS scaffold/stub 상태를 먼저 검증하고, Windows/Linux는 지원 후보와 gap만 확인한다
- 선행 작업: 알림 파이프라인 고도화
- 후속 작업: 멀티앱 채널 모델
- 확인 필요: 없음

View file

@ -0,0 +1,83 @@
# Milestone: iOS 알림 테스트
## 위치
- Roadmap: `agent-roadmap/ROADMAP.md`
- Phase: `agent-roadmap/phase/messaging-runtime/PHASE.md`
## 목표
Android 중심으로 정리된 nexo 알림 계약을 iOS/APNs 환경에서 어느 수준까지 동일하게 검증할 수 있는지 확인한다.
현재 iOS native plugin은 scaffold/stub 상태이므로 production-ready로 단정하지 않고, 권한 요청, APNs/FCM token, notification open routing, ACK/dismiss 계약을 구현 gap과 smoke 기준으로 나누어 정리한다.
## 상태
[계획]
## 승격 조건
- 없음
## 구현 잠금
- 상태: 해제
- 결정 필요: 없음
## 범위
- iOS plugin scaffold와 `apps/flutter-test/ios` host 설정의 현재 지원 상태 확인
- APNs entitlement, Firebase iOS 설정, notification permission, APNs/FCM token 획득과 host handoff 조건 정리
- iOS foreground/background/terminated notification open routing의 Dart event 계약 확인
- iOS에서 ACK, dismiss, inline reply가 가능한 native hook과 아직 없는 구현 gap 분리
- 실제 기기, simulator, headless test runner별 검증 가능/불가 경계와 evidence 위치 정리
## 기능
### Epic: [baseline] iOS 기준선
iOS 알림이 Android와 같은 계약으로 검증되기 전에 필요한 platform baseline을 확인한다.
- [ ] [platform-state] `packages/messaging_flutter/ios``apps/flutter-test/ios`의 scaffold, 등록 지점, no-op gap을 정리한다.
- [ ] [permission-token] APNs entitlement, Firebase config, notification permission, APNs/FCM token 획득과 host handoff 조건을 정리한다.
- [ ] [device-limits] simulator, physical device, CI/headless 환경에서 가능한 검증과 불가능한 검증을 구분한다.
### Epic: [contract] iOS 알림 계약
iOS native event가 Dart API와 host routing callback으로 연결되기 위한 계약을 구체화한다.
- [ ] [native-bridge] permission, token refresh, notification opened event를 Flutter method/event channel로 넘기는 iOS bridge gap을 정리한다.
- [ ] [payload-map] APNs payload에서 `server_url`, `server_id`, `channel_id`, `root_id`, `ack_id``NotificationOpenedEvent`와 routing callback에 매핑하는 기준을 정리한다.
- [ ] [ack-dismiss] iOS에서 ACK, dismiss, inline reply를 처리할 수 있는 native hook과 후속 구현이 필요한 gap을 분리한다.
### Epic: [smoke] iOS Smoke
구현 gap을 숨기지 않고 iOS에서 반복 가능한 수동/자동 smoke 기준을 만든다.
- [ ] [manual-smoke] 실제 기기 기준 permission, token handoff, foreground/background/open routing smoke checklist와 evidence 경로를 작성한다.
- [ ] [automation-boundary] widget/integration test로 자동화할 항목과 실제 APNs delivery가 필요한 수동 항목을 분리한다.
- [ ] [follow-up] smoke 결과에 따라 iOS native bridge 구현, host 설정 보강, 문서 보강 중 후속 Milestone 후보를 정리한다.
## 완료 리뷰
- 상태: 없음
- 요청일: 없음
- 완료 근거: 없음
- 리뷰 필요:
- [ ] 사용자가 완료 결과를 확인했다
- [ ] archive 이동을 승인했다
- 리뷰 코멘트: 없음
## 범위 제외
- Android FCM 구현 변경은 이 Milestone에서 다루지 않는다.
- macOS, Windows, Linux desktop 알림 검증은 Desktop 알림 테스트 Milestone에서 다룬다.
- 멀티앱 channel/tenant/server 분기 모델과 push credential 분리 정책은 멀티앱 채널 모델에서 결정한다.
- iOS native bridge 전체 구현은 gap 확인 후 별도 구현 Milestone으로 분리할 수 있다.
## 작업 컨텍스트
- 관련 경로: `packages/messaging_flutter/ios/`, `packages/messaging_flutter/lib/`, `packages/messaging_flutter/README.md`, `apps/flutter-test/ios/`, `apps/flutter-test/README.md`
- 표준선(선택): iOS scaffold/stub 상태를 먼저 명확히 하고, 가능한 smoke 기준과 후속 구현 gap을 분리한다
- 선행 작업: 알림 파이프라인 고도화
- 후속 작업: 멀티앱 채널 모델
- 확인 필요: 없음

View file

@ -18,6 +18,8 @@ server/webapp/push-proxy는 upstream-followable runtime으로 두고, 앱별 내
## 승격 조건
- [ ] 첫 번째 외부 소비 앱 또는 내부 테스트 앱 후보를 정한다.
- [ ] iOS 알림 테스트 Milestone에서 iOS/APNs 알림 smoke 기준과 구현 gap을 확인한다.
- [ ] Desktop 알림 테스트 Milestone에서 macOS/Windows/Linux desktop 알림 smoke 기준과 구현 gap을 확인한다.
- [ ] 앱별 channel namespace, team/server 분리, tenant 분리 중 어떤 모델을 쓸지 결정한다.
- [ ] 앱별 push credential과 routing callback 분리 기준을 정한다.
- [ ] 구현 가능한 후속 Milestone을 API, server config, client integration 중 하나 이상으로 나눈다.
@ -74,6 +76,6 @@ server/webapp/push-proxy는 upstream-followable runtime으로 두고, 앱별 내
- 관련 경로: `services/core/`, `packages/messaging_flutter/`, `apps/flutter-test/`
- 표준선(선택): 먼저 channel 기반 최소 모델을 검토하고, 운영 비용이 커질 때 tenant/server 분리를 검토한다
- 선행 작업: 메시징 계약 표준화, 알림 파이프라인 고도화
- 선행 작업: 메시징 계약 표준화, 알림 파이프라인 고도화, iOS 알림 테스트, Desktop 알림 테스트
- 후속 작업: 업스트림 런타임 운영화 Phase의 CI/CD와 운영 업데이트 루프
- 확인 필요: 앱별 분기 단위와 credential 분리 기준