mattermost-push-plugin/agent-ops/rules/project/rules.md

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를 추가한다.