--- domain: client-app last_rule_review_commit: 60eb73c2813f47e7157464bcd24b4db314c2ffce last_rule_updated_at: 2026-05-26 --- # client-app ## 목적 / 책임 Flutter 클라이언트와 `mattermost_push_plugin`의 독립 소비 앱, 통합 테스트 호스트를 담당한다. 실제 제품 앱으로 확장되기 전에도 plugin integration이 깨지지 않는지 확인하는 기준점이다. ## 포함 경로 - `apps/client/lib/` — Flutter app source - `apps/client/test/` — widget/unit tests - `apps/client/integration_test/` — plugin integration tests - `apps/client/android/`, `apps/client/ios/`, `apps/client/macos/` — host app platform configuration - `apps/client/pubspec.yaml` — app dependency and Flutter metadata ## 제외 경로 - `packages/messaging_flutter/` — push plugin 내부 구현 책임 - `services/core/` — messaging server runtime 책임 - `docs/`, `bin/` — workspace 공통 문서와 command 책임 ## 주요 구성 요소 - `MyApp` — plugin event stream과 navigation callback을 표시하는 host app shell - `MattermostPushPlugin.instance` — app이 소비하는 plugin singleton - `plugin_integration_test.dart` — plugin integration behavior 검증 진입점 ## 유지할 패턴 - plugin dependency는 workspace path dependency `../../packages/messaging_flutter`를 사용한다. - 앱에서는 token, notification, opened event, navigation callback 등 host integration만 검증한다. - plugin 내부 native push 처리나 storage 로직을 앱으로 복제하지 않는다. - Flutter check는 `bin/test`, `bin/lint`, 필요 시 `flutter test integration_test` 흐름을 따른다. ## 다른 도메인과의 경계 - **messaging-flutter**: app은 plugin API 소비자이고, push 처리의 source of truth는 plugin이다. - **core-service**: server runtime이 필요한 테스트는 명시적으로 compose 또는 별도 환경을 켠 뒤 수행한다. - **workspace-ops**: workspace command가 client 검증을 호출하지만 app 구조와 host behavior는 이 도메인이 소유한다. ## 금지 사항 - 플러그인 버그를 우회하기 위해 app에 duplicate push 처리 경로를 만들지 않는다. - generated Flutter platform 파일을 불필요하게 재생성하거나 대량 변경하지 않는다. - 앱 검증 목적을 넘는 제품 기능을 사용자 요청 없이 크게 확장하지 않는다.