3.4 KiB
3.4 KiB
mattermost_push_plugin 프로젝트 규칙
응답 언어
- 기본 응답은 한국어로 한다.
- 코드 식별자, 파일 경로, API 이름, 플랫폼 용어는 원문 표기를 유지한다.
프로젝트 개요
- Mattermost push notification을 처리하는 Android-first Flutter plugin이다.
- Dart 공개 API는 host app과 native Android runtime 사이의 channel/stream 계약을 제공한다.
- Android runtime은 FCM 수신, 서명 검증, 알림 표시, inline reply, dismiss, ACK 전송, Room 기반 로컬 저장을 담당한다.
- iOS와 macOS는 현재 no-op scaffold이며, Android 기능 parity를 임의로 가정하지 않는다.
기술 스택
- Flutter / Dart package,
firebase_messaging - Android Gradle Plugin, Kotlin, Java, AndroidX, Room, OkHttp, JJWT, Firebase Messaging
- iOS UIKit Swift plugin scaffold
- macOS FlutterMacOS Swift plugin scaffold
- 테스트:
flutter test, Android unit test, example integration test scaffold
프로젝트 특화 컨벤션
- Dart channel 이름은 native Android의
MattermostPushPlugin.CHANNEL_EVENTS,CHANNEL_ACTIONS와 항상 맞춘다. - FCM token은 Dart API에서
android_rn-v2:prefix를 붙인 값으로 저장하고 host callback에 전달한다. - native payload key는 Mattermost/React Native 호환 snake_case key를 유지한다. 예:
server_url,channel_id,root_id,is_crt_enabled,ack_id. - Android push 처리에서
server_url이 payload에 없으면 저장된 server identifier와 단일 서버 fallback 순서로 해석한다. - 서명 검증 실패는 알림 표시 전에 중단한다. backward compatibility 예외는 기존 helper의 조건을 유지한다.
firebase_messaging기본 Android service/receiver/provider 제거 manifest 설정은 중복 FCM 처리 방지를 위한 핵심 계약이다.- iOS/macOS 변경은 현재 scaffold 상태를 명시하고, Android 전용 기능을 public Dart API에서 무조건 성공으로 보이게 만들지 않는다.
- build output, IDE 설정, generated Flutter/Gradle 산출물은 수정 범위에 포함하지 않는다.
검증 기준
- Dart API나 event parsing 변경 시
flutter test를 우선 실행한다. - Android native runtime 변경 시 가능하면
cd android && ./gradlew testDebugUnitTest또는 관련 unit test를 실행한다. - FCM 수신, system notification, inline reply, ACK delivery, tap navigation은 headless 자동화가 어려우므로 README의 manual smoke checklist와 연결해 변경 위험을 기록한다.
- channel 이름, payload key, token format 변경은 Dart test와 native 코드 양쪽을 함께 확인한다.
도메인 매핑
| 경로 패턴 | 도메인 | rules.md |
|---|---|---|
lib/**, test/** |
dart-api | agent-ops/rules/project/domain/dart-api/rules.md |
android/src/main/**, android/src/test/**, android/build.gradle.kts, android/settings.gradle* |
android-push-runtime | agent-ops/rules/project/domain/android-push-runtime/rules.md |
ios/**, macos/** |
apple-stubs | agent-ops/rules/project/domain/apple-stubs/rules.md |
example/**, pubspec.yaml, analysis_options.yaml, README.md, CHANGELOG.md |
project-support | agent-ops/rules/project/domain/project-support/rules.md |
스킬 라우팅
현재 프로젝트 전용 skill은 없다. 반복 작업이 안정화되면 agent-ops/skills/project/<skill-name>/SKILL.md를 추가한다.