update roadmap and rules
This commit is contained in:
parent
42414b358f
commit
05fd582b2b
13 changed files with 61 additions and 56 deletions
12
README.md
12
README.md
|
|
@ -3,9 +3,9 @@
|
|||
`nexo` is a messaging and notification service workspace that keeps the server
|
||||
core, Flutter client, and Flutter push-notification package together.
|
||||
|
||||
The current goal is to preserve the proven Mattermost-based messaging and push
|
||||
runtime while moving toward an independent product shape with Nexo-owned service
|
||||
boundaries.
|
||||
The current goal is to provide a Nexo-owned messaging service surface while
|
||||
keeping the current server, client, and push runtime verifiable during the
|
||||
transition.
|
||||
|
||||
## Name
|
||||
|
||||
|
|
@ -14,10 +14,10 @@ notifications, and service infrastructure meet.
|
|||
|
||||
## Current Status
|
||||
|
||||
- `services/core/` is a Mattermost `v11.4.2` based server core and compose runtime.
|
||||
- `services/core/` is the messaging server core and compose runtime.
|
||||
- `packages/messaging_flutter/` is an Android-first Flutter push-notification plugin.
|
||||
- `apps/client/` is the Flutter client and integration test host for the plugin.
|
||||
- The plugin public package name remains `mattermost_push_plugin` for compatibility.
|
||||
- Public package, import, and native identifiers are being moved to Nexo-owned names.
|
||||
- iOS and macOS plugin scaffolds exist, but Android is the current implementation target.
|
||||
|
||||
## Quick Start
|
||||
|
|
@ -65,7 +65,7 @@ any skipped checks in work reports.
|
|||
|
||||
| Path | Role |
|
||||
| --- | --- |
|
||||
| `services/core/` | Mattermost `v11.4.2` based messaging server core, webapp, and API docs |
|
||||
| `services/core/` | Messaging server core, webapp, and API docs |
|
||||
| `services/core/compose/` | Compose setup for core, Postgres, and push-proxy |
|
||||
| `packages/messaging_flutter/` | Flutter push notification and messaging plugin |
|
||||
| `apps/client/` | Flutter client and integration test host |
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
## 전체 목표
|
||||
|
||||
`nexo`는 Mattermost 기반 메시징 코어에서 검증된 서버/푸시 런타임을 계승하되,
|
||||
제품 표면과 개발 경계는 독립적인 메시징/알림 서비스로 정리한다.
|
||||
`nexo`는 메시지 전체와 알림을 포괄하는 독립 메시징/알림 서비스로 정리한다.
|
||||
현재 서버/푸시 런타임은 검증 가능한 단위로 유지하되, 제품 표면과 개발 경계는 nexo가 소유한다.
|
||||
최종 형태는 서버 코어, Flutter 클라이언트, Flutter 플러그인이 한 세트로 움직이며,
|
||||
여러 앱이 표준화된 메시징 채널과 알림 파이프라인을 사용할 수 있는 서비스다.
|
||||
|
||||
|
|
@ -22,7 +22,7 @@
|
|||
- 요약: 플러그인과 서버가 공유할 메시징/알림 계약, 테스트, 앱별 사용 채널 모델을 정리한다.
|
||||
- [스케치] 독립 서비스화
|
||||
- 경로: `agent-ops/roadmap/phase/independent-service/PHASE.md`
|
||||
- 요약: Mattermost 호환 코어를 유지하되 제품 표면, 운영 방식, 불필요 기능을 nexo 목적에 맞게 분리한다.
|
||||
- 요약: 서버 코어의 제품 표면, 운영 방식, 불필요 기능을 nexo 목적에 맞게 분리한다.
|
||||
|
||||
## 로딩 정책
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
## 목표
|
||||
|
||||
nexo가 Mattermost 기반 코어를 사용한다는 구현 사실과, 사용자에게 제공하는 독립 메시징/알림 서비스라는 제품 표면을 분리한다.
|
||||
nexo가 사용자에게 제공하는 독립 메시징/알림 서비스라는 제품 표면을 서버 구현 세부와 분리한다.
|
||||
장기적으로는 필요한 메시징 코어만 유지하고 불필요한 UI, 운영 기능, 이름, 문서 표면을 nexo 목적에 맞게 줄인다.
|
||||
|
||||
## Milestone 흐름
|
||||
|
|
@ -17,7 +17,7 @@ nexo가 Mattermost 기반 코어를 사용한다는 구현 사실과, 사용자
|
|||
|
||||
- [스케치] 서버 코어 독립화 경계
|
||||
- 경로: `agent-ops/roadmap/phase/independent-service/milestones/core-independence.md`
|
||||
- 요약: Mattermost core에서 계승할 기능과 제거/숨김/대체할 기능의 경계를 정한다.
|
||||
- 요약: 서버 core에서 유지할 기능과 제거/숨김/대체할 기능의 경계를 정한다.
|
||||
- [스케치] 제품화와 운영 모델
|
||||
- 경로: `agent-ops/roadmap/phase/independent-service/milestones/product-operations.md`
|
||||
- 요약: nexo를 별도 서비스로 배포, 운영, 확장하기 위한 제품/운영 단위를 검토한다.
|
||||
|
|
@ -25,5 +25,5 @@ nexo가 Mattermost 기반 코어를 사용한다는 구현 사실과, 사용자
|
|||
## Phase 경계
|
||||
|
||||
- 이 Phase는 아직 구현 계획이 아니라 장기 방향성 정리 단계다.
|
||||
- Mattermost upstream과의 비교 가능성을 잃는 대규모 변경은 경계 결정 전 진행하지 않는다.
|
||||
- upstream과의 비교 가능성을 잃는 대규모 변경은 경계 결정 전 진행하지 않는다.
|
||||
- 사용자가 보는 제품 표면을 우선 분리하고, 내부 compatibility layer는 필요한 만큼 유지한다.
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
## 목표
|
||||
|
||||
Mattermost core에서 nexo가 계승할 메시징 기능과 제거, 숨김, 대체할 기능의 경계를 정한다.
|
||||
nexo 서버 core에서 유지할 메시징 기능과 제거, 숨김, 대체할 기능의 경계를 정한다.
|
||||
이 결정은 서버 fork 비용과 upstream 추적 가능성에 직접 영향을 주므로 먼저 스케치로 유지한다.
|
||||
|
||||
## 상태
|
||||
|
|
@ -17,7 +17,7 @@ Mattermost core에서 nexo가 계승할 메시징 기능과 제거, 숨김, 대
|
|||
## 승격 조건
|
||||
|
||||
- [ ] nexo가 반드시 유지해야 할 core 기능 목록을 정한다.
|
||||
- [ ] 제거하거나 숨길 Mattermost 기능 목록을 정한다.
|
||||
- [ ] 제거하거나 숨길 서버 기능 목록을 정한다.
|
||||
- [ ] upstream merge 가능성을 유지할지, 독립 fork로 갈지 기준을 정한다.
|
||||
- [ ] 서버 이미지 빌드 방식을 official image 사용, source build, custom image 중 하나로 결정한다.
|
||||
|
||||
|
|
@ -25,7 +25,7 @@ Mattermost core에서 nexo가 계승할 메시징 기능과 제거, 숨김, 대
|
|||
|
||||
- 상태: 잠금
|
||||
- 결정 필요:
|
||||
- [ ] Mattermost upstream 추적 가능성을 어느 정도까지 유지할지 결정한다.
|
||||
- [ ] upstream 추적 가능성을 어느 정도까지 유지할지 결정한다.
|
||||
- [ ] 웹앱을 유지할지, admin/debug 표면으로만 둘지, 제거할지 결정한다.
|
||||
- [ ] nexo 서버 이미지를 언제 자체 빌드로 전환할지 결정한다.
|
||||
|
||||
|
|
@ -40,7 +40,7 @@ Mattermost core에서 nexo가 계승할 메시징 기능과 제거, 숨김, 대
|
|||
|
||||
### Epic: [inheritance] 계승 경계
|
||||
|
||||
nexo가 Mattermost core에서 계속 가져갈 기능을 정의한다.
|
||||
nexo가 서버 core에서 계속 가져갈 기능을 정의한다.
|
||||
|
||||
- [ ] [keep-list] 메시징, channel, user/session, push 관련 유지 기능 목록을 정리한다.
|
||||
- [ ] [remove-list] nexo 목적과 맞지 않는 기능의 제거/숨김/보류 후보를 정리한다.
|
||||
|
|
@ -72,7 +72,7 @@ official image에서 custom image로 넘어갈 조건을 정리한다.
|
|||
## 작업 컨텍스트
|
||||
|
||||
- 관련 경로: `services/core/`, `services/core/UPSTREAM.md`, `services/core/compose/`
|
||||
- 표준선(선택): 검증된 Mattermost core를 유지하면서 nexo 제품 표면부터 분리한다
|
||||
- 표준선(선택): 검증된 서버 core를 유지하면서 nexo 제품 표면부터 분리한다
|
||||
- 선행 작업: 메시징 런타임 표준화
|
||||
- 후속 작업: 제품화와 운영 모델
|
||||
- 확인 필요: upstream 추적 정책, webapp 처리, server image 전환 시점
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
## 목표
|
||||
|
||||
서버 core와 Flutter 플러그인이 주고받는 메시지, 알림, device token, ACK, navigation event 계약을 정리한다.
|
||||
초기에는 기존 Mattermost-compatible 계약을 유지하되, nexo가 소유할 API와 compatibility layer를 구분한다.
|
||||
초기에는 기존 서버/플러그인 계약을 유지하되, nexo가 소유할 API와 compatibility layer를 구분한다.
|
||||
|
||||
## 상태
|
||||
|
||||
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
- 상태: 잠금
|
||||
- 결정 필요:
|
||||
- [ ] nexo public API를 Mattermost-compatible 형태로 유지할지, nexo wrapper API를 먼저 만들지 결정한다.
|
||||
- [ ] nexo public API를 기존 호환 형태로 유지할지, nexo wrapper API를 먼저 만들지 결정한다.
|
||||
- [ ] 메시징 전체 기능 중 Flutter 앱에 우선 노출할 범위를 결정한다.
|
||||
|
||||
## 범위
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
## 목표
|
||||
|
||||
nexo를 기존 기술명에 종속된 클론이 아니라 독립적인 메시징/알림 서비스로 정의한다.
|
||||
nexo를 메시지 전체와 알림을 포괄하는 독립적인 메시징/알림 서비스로 정의한다.
|
||||
모노레포 구조, core compose, client 검증 흐름, agent-ops 진입 규칙을 정리해 이후 기능 작업이 같은 기준선 위에서 진행되도록 만든다.
|
||||
|
||||
## Milestone 흐름
|
||||
|
|
@ -17,7 +17,7 @@ nexo를 기존 기술명에 종속된 클론이 아니라 독립적인 메시징
|
|||
|
||||
- [진행중] 정체성 기준선
|
||||
- 경로: `agent-ops/roadmap/phase/product-foundation/milestones/identity-baseline.md`
|
||||
- 요약: 제품 이름, 모노레포 경계, 기존 Mattermost/Flutter 의존 표면을 어떤 방식으로 다룰지 문서화한다.
|
||||
- 요약: 제품 이름, 메시징/알림 서비스 범위, project-owned naming의 nexo 전환 기준을 문서화한다.
|
||||
- [계획] 운영 기준선
|
||||
- 경로: `agent-ops/roadmap/phase/product-foundation/milestones/runtime-baseline.md`
|
||||
- 요약: core compose, 원격 Docker 세팅, 환경 변수, 최소 health check를 안정된 기준선으로 만든다.
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ client 앱을 플러그인 통합 검증에 필요한 만큼만 유지한다.
|
|||
|
||||
자동화하기 어려운 FCM과 서버 ACK 검증을 수동 체크로 분리한다.
|
||||
|
||||
- [ ] [fcm-manual] 실제 Firebase FCM delivery와 Mattermost-compatible ACK 검증 절차를 문서화한다.
|
||||
- [ ] [fcm-manual] 실제 Firebase FCM delivery와 서버 ACK 검증 절차를 문서화한다.
|
||||
- [ ] [remote-guide] 로컬 Android SDK가 없을 때 원격 테스트 환경 문서가 client README와 연결되도록 유지한다.
|
||||
|
||||
## 완료 리뷰
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@
|
|||
|
||||
## 목표
|
||||
|
||||
이 Milestone은 nexo의 제품 정체성을 "Mattermost 클론"이 아니라 독립 메시징/알림 서비스로 고정한다.
|
||||
기술적으로는 Mattermost 코어와 Flutter 플러그인을 활용하되, 문서와 작업 경계는 nexo 고유 서비스 기준으로 정리한다.
|
||||
이 Milestone은 nexo의 제품 정체성을 독립 메시징/알림 서비스로 고정한다.
|
||||
알림은 메시징 서비스의 하위 경험으로 다루고, 문서, 설정, 코드의 public/project-owned naming은 nexo 기준으로 맞춘다.
|
||||
|
||||
## 상태
|
||||
|
||||
|
|
@ -16,16 +16,20 @@
|
|||
|
||||
## 구현 잠금
|
||||
|
||||
- 상태: 잠금
|
||||
- 상태: 해제
|
||||
- 결정 필요:
|
||||
- [ ] `mattermost_push_plugin` public package name을 언제 nexo 계열 이름으로 바꿀지 결정한다.
|
||||
- [ ] 외부 앱이 처음 붙을 때 nexo가 제공할 최소 제품 표면을 "알림 중심"으로 둘지 "메시징 전체"까지 열지 결정한다.
|
||||
- [ ] 사용자에게 노출되는 Mattermost 관련 이름과 내부 호환 이름의 분리 기준을 결정한다.
|
||||
- 없음
|
||||
- 결정 완료:
|
||||
- [x] 2026-05-26: public package name과 사용자/프로젝트 소유 네이밍은 지금 nexo 계열 이름으로 전환한다.
|
||||
- [x] 2026-05-26: 제품 표면은 알림 중심이 아니라 메시지 전체를 포함하는 메시징/알림 서비스로 둔다.
|
||||
- [x] 2026-05-26: 기존 upstream/vendor 명칭은 최종 프로젝트 표면에 남기지 않는 것을 목표로 하며, 가능한 범위에서 코드 내 project-owned naming까지 교체 대상으로 본다.
|
||||
|
||||
## 범위
|
||||
|
||||
- 제품명 `nexo`와 모노레포 정체성 정리
|
||||
- 기존 기술 의존 표면과 장기 독립화 방향 기록
|
||||
- 메시지 전체와 알림을 포괄하는 서비스 범위 정리
|
||||
- 기존 기술 의존 표면과 nexo naming 전환 방향 기록
|
||||
- public 문서, 설정, package/import/native package 등 project-owned code naming의 전환 범위 정리
|
||||
- `agent-ops` 진입 규칙, README, roadmap 사이의 역할 분리
|
||||
- 현재 구조에서 유지할 모듈 경계 정리
|
||||
|
||||
|
|
@ -33,10 +37,11 @@
|
|||
|
||||
### Epic: [identity] 제품 정체성
|
||||
|
||||
nexo가 제공하려는 서비스의 방향과 기존 기술을 대하는 방식을 문서 기준선으로 만든다.
|
||||
nexo가 제공하려는 서비스의 방향과 기존 기술을 대하는 방식을 문서와 네이밍 기준선으로 만든다.
|
||||
|
||||
- [ ] [product-story] nexo를 독립 메시징/알림 서비스로 설명하는 문서 표현을 README, roadmap, domain rule에서 일관되게 유지한다. 검증: 관련 문서에서 제품 목표와 모듈 경계가 충돌하지 않는다.
|
||||
- [ ] [tech-boundary] Mattermost와 Flutter 관련 용어를 public product identity와 implementation detail로 구분하는 기준을 정리한다.
|
||||
- [ ] [product-story] nexo를 메시지 전체와 알림을 포괄하는 독립 메시징/알림 서비스로 설명하는 문서 표현을 README, roadmap, domain rule에서 일관되게 유지한다. 검증: 관련 문서에서 제품 목표와 모듈 경계가 충돌하지 않는다.
|
||||
- [ ] [tech-boundary] 기존 upstream/vendor 명칭을 public product identity에서 제거하고, project-owned 문서/설정/코드 naming의 nexo 전환 기준을 정리한다.
|
||||
- [ ] [nexo-rename] package/import/native package 등 project-owned code identifier를 nexo 계열 이름으로 전환할 범위와 실행 순서를 정리한다. 검증: repo scan에서 기존 upstream/vendor 명칭이 허용된 compatibility context에만 남는다.
|
||||
- [ ] [module-shape] 최상위 구조를 `apps/client`, `packages/messaging_flutter`, `services/core` 중심으로 유지하고 과한 scaffold를 만들지 않는 원칙을 문서화한다.
|
||||
|
||||
### Epic: [agent-entry] 작업 진입점
|
||||
|
|
@ -58,14 +63,14 @@ AI 에이전트와 사람이 같은 규칙으로 프로젝트에 들어오도록
|
|||
|
||||
## 범위 제외
|
||||
|
||||
- 실제 package rename, import rename, native package rename은 이 Milestone에서 수행하지 않는다.
|
||||
- 서버 코드에서 Mattermost 표면을 제거하는 작업은 독립 서비스화 Phase에서 다룬다.
|
||||
- 프로토콜, 데이터 모델, 인증, 서버 기능 삭제처럼 동작을 바꾸는 독립 서비스화 작업은 이 Milestone에서 수행하지 않는다.
|
||||
- 외부 호환을 위해 즉시 제거할 수 없는 upstream/vendor 문자열은 허용 근거와 후속 제거 위치를 남긴다.
|
||||
- 별도 contract 패키지나 infra 모듈은 만들지 않는다.
|
||||
|
||||
## 작업 컨텍스트
|
||||
|
||||
- 관련 경로: `README.md`, `AGENTS.md`, `agent-ops/rules/project/rules.md`, `agent-ops/roadmap/`
|
||||
- 표준선(선택): 제품명은 `nexo`, public plugin package name은 결정 전까지 `mattermost_push_plugin` 유지
|
||||
- 관련 경로: `README.md`, `AGENTS.md`, `agent-ops/rules/project/rules.md`, `agent-ops/rules/project/domain/`, `agent-ops/roadmap/`, `packages/messaging_flutter/`, `apps/client/`, `services/core/`
|
||||
- 표준선(선택): 제품명은 `nexo`, 제품 표면은 메시지 전체를 포함하는 메시징/알림 서비스, public/project-owned naming은 nexo 계열로 전환
|
||||
- 선행 작업: 기존 monorepo migration과 README 보완
|
||||
- 후속 작업: 운영 기준선, 메시징 계약 표준화
|
||||
- 확인 필요: public package rename 시점과 사용자 노출 이름 분리 기준
|
||||
- 확인 필요: 없음
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
## 목표
|
||||
|
||||
core compose와 원격 Docker 세팅을 nexo의 반복 가능한 테스트 런타임으로 고정한다.
|
||||
기존 Mattermost 기반 서버를 유지하되 nexo용 포트, 환경 변수, 데이터 경로, push-proxy 설정을 명확히 분리한다.
|
||||
nexo용 포트, 환경 변수, 데이터 경로, push-proxy 설정을 명확히 분리한다.
|
||||
|
||||
## 상태
|
||||
|
||||
|
|
@ -62,7 +62,7 @@ local과 원격 Docker에서 같은 shape로 서버 런타임을 올릴 수 있
|
|||
## 범위 제외
|
||||
|
||||
- nginx/domain 연결, TLS, production hardening은 이 Milestone의 필수 범위가 아니다.
|
||||
- Mattermost 서버 이미지를 nexo 자체 빌드 이미지로 바꾸는 작업은 별도 결정 후 진행한다.
|
||||
- 서버 이미지를 nexo 자체 빌드 이미지로 바꾸는 작업은 별도 결정 후 진행한다.
|
||||
- 기존 운영 중인 다른 compose 서비스와의 병합은 이 Milestone에서 자동으로 하지 않는다.
|
||||
|
||||
## 작업 컨텍스트
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ last_rule_updated_at: 2026-05-26
|
|||
|
||||
## 목적 / 책임
|
||||
|
||||
Flutter 클라이언트와 `mattermost_push_plugin`의 독립 소비 앱, 통합 테스트 호스트를 담당한다. 실제 제품 앱으로 확장되기 전에도 plugin integration이 깨지지 않는지 확인하는 기준점이다.
|
||||
Flutter 클라이언트와 nexo 메시징 플러그인의 독립 소비 앱, 통합 테스트 호스트를 담당한다. 실제 제품 앱으로 확장되기 전에도 plugin integration이 깨지지 않는지 확인하는 기준점이다.
|
||||
|
||||
## 포함 경로
|
||||
|
||||
|
|
@ -27,7 +27,7 @@ Flutter 클라이언트와 `mattermost_push_plugin`의 독립 소비 앱, 통합
|
|||
## 주요 구성 요소
|
||||
|
||||
- `MyApp` — plugin event stream과 navigation callback을 표시하는 host app shell
|
||||
- `MattermostPushPlugin.instance` — app이 소비하는 plugin singleton
|
||||
- plugin singleton — app이 소비하는 plugin public API
|
||||
- `plugin_integration_test.dart` — plugin integration behavior 검증 진입점
|
||||
|
||||
## 유지할 패턴
|
||||
|
|
|
|||
|
|
@ -8,12 +8,12 @@ last_rule_updated_at: 2026-05-26
|
|||
|
||||
## 목적 / 책임
|
||||
|
||||
Mattermost 기반 메시징 서버 코어와 관련 웹앱, API 문서, 로컬 compose 실행 환경을 담당한다. upstream baseline과 비교 가능한 상태를 유지하는 것이 중요하다.
|
||||
nexo 메시징 서버 코어와 관련 웹앱, API 문서, 로컬 compose 실행 환경을 담당한다. upstream baseline과 비교 가능한 상태를 유지하는 것이 중요하다.
|
||||
|
||||
## 포함 경로
|
||||
|
||||
- `services/core/server/` — Go 기반 Mattermost server module
|
||||
- `services/core/webapp/` — Mattermost webapp, platform packages, frontend tooling
|
||||
- `services/core/server/` — Go 기반 messaging server module
|
||||
- `services/core/webapp/` — webapp, platform packages, frontend tooling
|
||||
- `services/core/api/` — API reference tooling
|
||||
- `services/core/compose/` — local core runtime Docker Compose
|
||||
- `services/core/e2e-tests/`, `services/core/tools/` — core 검증 및 보조 도구
|
||||
|
|
@ -27,14 +27,14 @@ Mattermost 기반 메시징 서버 코어와 관련 웹앱, API 문서, 로컬 c
|
|||
|
||||
## 주요 구성 요소
|
||||
|
||||
- `services/core/server/go.mod` — Mattermost server Go module 기준
|
||||
- `services/core/server/go.mod` — server Go module 기준
|
||||
- `services/core/webapp/package.json` — webapp npm workspace 기준
|
||||
- `services/core/api/package.json` — API reference tooling 기준
|
||||
- `services/core/compose/docker-compose.yml` — local core 서비스 구성
|
||||
|
||||
## 유지할 패턴
|
||||
|
||||
- Mattermost upstream에서 온 구조와 명명은 필요한 경우에만 변경한다.
|
||||
- upstream에서 온 구조와 명명은 필요한 경우에만 변경한다.
|
||||
- 제품 특화 변경은 좁은 파일 범위로 유지하고, upstream 재동기화를 방해하지 않게 설명 가능한 단위로 남긴다.
|
||||
- Go 검증은 기본 `bin/test`에서 skip되며, 필요할 때 `NEXO_CORE_GO_TEST=1` 등 명시적 플래그로 실행한다.
|
||||
- webapp 변경은 기존 npm workspace와 package script를 따른다.
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ last_rule_updated_at: 2026-05-26
|
|||
|
||||
## 목적 / 책임
|
||||
|
||||
Mattermost 호환 푸시 알림 Flutter 플러그인을 담당한다. FCM 수신, 알림 표시, tap/open 이벤트, inline reply, dismiss 처리, ACK 전달, token/key 저장을 앱별 구현으로 흩어지지 않게 모은다.
|
||||
nexo 메시징/알림 Flutter 플러그인을 담당한다. FCM 수신, 알림 표시, tap/open 이벤트, inline reply, dismiss 처리, ACK 전달, token/key 저장을 앱별 구현으로 흩어지지 않게 모은다.
|
||||
|
||||
## 포함 경로
|
||||
|
||||
|
|
@ -27,15 +27,15 @@ Mattermost 호환 푸시 알림 Flutter 플러그인을 담당한다. FCM 수신
|
|||
|
||||
## 주요 구성 요소
|
||||
|
||||
- `MattermostPushPlugin` — singleton public API, event stream, token/key action channel
|
||||
- plugin public API — singleton access, event stream, token/key action channel
|
||||
- `NotificationOpenedEvent` — notification open payload parsing
|
||||
- `MattermostFirebaseMessagingService` — Android FCM 수신 진입점
|
||||
- Android FCM service — Android FCM 수신 진입점
|
||||
- `NotificationReplyBroadcastReceiver`, `NotificationDismissService` — Android action handling
|
||||
- `ReceiptDelivery` — ACK delivery 책임
|
||||
|
||||
## 유지할 패턴
|
||||
|
||||
- public import는 `package:mattermost_push_plugin/mattermost_push_plugin.dart` 경로를 유지한다.
|
||||
- public package/import/native identifier는 nexo 계열 이름으로 전환하되, host app과 native 등록 지점을 같은 계획 안에서 함께 갱신한다.
|
||||
- Android가 production target이며 iOS/macOS는 stub 상태임을 명확히 보고한다.
|
||||
- host app이 해야 할 Firebase 초기화, token 등록, navigation 연결은 README의 Host App Responsibilities와 맞춘다.
|
||||
- native event type은 Dart API의 `PushNotificationType`과 호환되게 유지한다.
|
||||
|
|
@ -48,6 +48,6 @@ Mattermost 호환 푸시 알림 Flutter 플러그인을 담당한다. FCM 수신
|
|||
|
||||
## 금지 사항
|
||||
|
||||
- package rename이나 public API breaking change를 사용자 결정 없이 수행하지 않는다.
|
||||
- package rename이나 public API breaking change는 현재 마일스톤의 nexo 전환 결정과 계획에 맞춰 수행한다.
|
||||
- host app 전용 navigation, 화면 구성, 제품 UI 상태를 plugin 내부에 넣지 않는다.
|
||||
- iOS/macOS stub을 production-ready로 단정하지 않는다.
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@
|
|||
|
||||
주요 경계는 다음과 같다.
|
||||
|
||||
- `services/core/` — Mattermost `v11.4.2` 기반 메시징 서버 코어, 웹앱, API 문서, compose 환경
|
||||
- `packages/messaging_flutter/` — Mattermost 호환 푸시 알림 Flutter 플러그인
|
||||
- `services/core/` — nexo 메시징 서버 코어, 웹앱, API 문서, compose 환경
|
||||
- `packages/messaging_flutter/` — nexo 메시징/알림 Flutter 플러그인
|
||||
- `apps/client/` — 플러그인을 검증하는 Flutter 클라이언트와 통합 테스트 호스트
|
||||
- `docs/`, `bin/` — 워크스페이스 공통 문서와 helper entrypoint
|
||||
|
||||
|
|
@ -21,15 +21,15 @@
|
|||
- Flutter / Dart `sdk: ^3.11.3`
|
||||
- Android native plugin: Kotlin, Java, Gradle
|
||||
- iOS / macOS plugin scaffold: Swift
|
||||
- Server core: Go `1.24.13`, Mattermost server module
|
||||
- Server core: Go `1.24.13`, messaging server module
|
||||
- Webapp / API tooling: Node.js, npm workspaces, TypeScript, Redocly
|
||||
- Local runtime: Docker Compose under `services/core/compose/`
|
||||
|
||||
## 작업 원칙
|
||||
|
||||
- `services/core/`는 Mattermost upstream fork 성격이 강하므로 제품 특화 변경은 작고 비교 가능하게 유지한다.
|
||||
- `services/core/`는 upstream 계승 구조가 크므로 제품 특화 변경은 작고 비교 가능하게 유지한다.
|
||||
- `services/core/UPSTREAM.md`의 baseline 정보를 임의로 바꾸지 않는다.
|
||||
- Flutter 플러그인의 public package name은 현재 `mattermost_push_plugin`이며, 소비 앱과 호환성이 걸려 있으므로 rename은 별도 결정 없이 하지 않는다.
|
||||
- Flutter 플러그인의 public package/import/native identifier는 nexo 계열 이름으로 전환한다. 전환은 소비 앱과 native 등록 지점을 함께 다루는 계획 작업으로 진행한다.
|
||||
- 푸시 알림 처리 책임은 `packages/messaging_flutter/`에 두고, `apps/client/`에는 검증과 host integration만 둔다.
|
||||
- `apps/client/`는 독립 소비 앱 역할을 하므로 플러그인 내부 동작을 복제하지 않는다.
|
||||
- `build/`, `.dart_tool/`, Android/iOS/macOS 생성물, upstream bulk 파일은 요청 범위 밖이면 건드리지 않는다.
|
||||
|
|
|
|||
Loading…
Reference in a new issue