From 0e4dfc691426d8736f371438bb36d2f92927f13b Mon Sep 17 00:00:00 2001 From: toki Date: Mon, 1 Jun 2026 06:05:19 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20iOS/Desktop=20=EC=95=8C=EB=A6=BC=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20Milestone=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?=EB=B0=8F=20=EB=A9=80=ED=8B=B0=EC=95=B1=20=EC=B1=84=EB=84=90=20?= =?UTF-8?q?=EC=84=A0=ED=96=89=20=EC=9E=91=EC=97=85=20=EC=97=85=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - iOS 알림 테스트 Milestone scaffold/stub gap과 smoke 기준으로 추가 - Desktop 알림 테스트 Milestone macOS/Windows/Linux 알림 기준 추가 - 멀티앱 채널 모델의 선행 작업에 iOS/Desktop 알림 테스트 반영 - 활성 Milestone을 멀티앱 채널에서 iOS/Desktop 알림 테스트로 변경 --- agent-roadmap/current.md | 7 +- .../phase/messaging-runtime/PHASE.md | 6 ++ .../milestones/desktop-notification-test.md | 84 +++++++++++++++++++ .../milestones/ios-notification-test.md | 83 ++++++++++++++++++ .../milestones/multi-app-channel.md | 4 +- 5 files changed, 181 insertions(+), 3 deletions(-) create mode 100644 agent-roadmap/phase/messaging-runtime/milestones/desktop-notification-test.md create mode 100644 agent-roadmap/phase/messaging-runtime/milestones/ios-notification-test.md diff --git a/agent-roadmap/current.md b/agent-roadmap/current.md index c905e866..45b75ae0 100644 --- a/agent-roadmap/current.md +++ b/agent-roadmap/current.md @@ -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` ## 선택 규칙 diff --git a/agent-roadmap/phase/messaging-runtime/PHASE.md b/agent-roadmap/phase/messaging-runtime/PHASE.md index a92faa46..bb265b0a 100644 --- a/agent-roadmap/phase/messaging-runtime/PHASE.md +++ b/agent-roadmap/phase/messaging-runtime/PHASE.md @@ -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` - 요약: 추가 앱이 생길 때 사용 채널만 늘려 분기할 수 있는 서비스 모델을 검토한다. diff --git a/agent-roadmap/phase/messaging-runtime/milestones/desktop-notification-test.md b/agent-roadmap/phase/messaging-runtime/milestones/desktop-notification-test.md new file mode 100644 index 00000000..f1bf11ce --- /dev/null +++ b/agent-roadmap/phase/messaging-runtime/milestones/desktop-notification-test.md @@ -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만 확인한다 +- 선행 작업: 알림 파이프라인 고도화 +- 후속 작업: 멀티앱 채널 모델 +- 확인 필요: 없음 diff --git a/agent-roadmap/phase/messaging-runtime/milestones/ios-notification-test.md b/agent-roadmap/phase/messaging-runtime/milestones/ios-notification-test.md new file mode 100644 index 00000000..ba9332e8 --- /dev/null +++ b/agent-roadmap/phase/messaging-runtime/milestones/ios-notification-test.md @@ -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을 분리한다 +- 선행 작업: 알림 파이프라인 고도화 +- 후속 작업: 멀티앱 채널 모델 +- 확인 필요: 없음 diff --git a/agent-roadmap/phase/messaging-runtime/milestones/multi-app-channel.md b/agent-roadmap/phase/messaging-runtime/milestones/multi-app-channel.md index fc011e7b..d7c01720 100644 --- a/agent-roadmap/phase/messaging-runtime/milestones/multi-app-channel.md +++ b/agent-roadmap/phase/messaging-runtime/milestones/multi-app-channel.md @@ -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 분리 기준