nexo/agent-ops/rules/project/domain/client-app/rules.md

53 lines
2.6 KiB
Markdown

---
domain: client-app
last_rule_review_commit: 8a7115d9c82e15b9f35bcfa019acb4b34962e81f
last_rule_updated_at: 2026-06-01
---
# client-app
## 목적 / 책임
`apps/flutter-test`는 nexo 메시징 플러그인을 검증하는 테스트용 Flutter 앱을 담당한다. 이 저장소의 제품 앱이 아니며, plugin integration이 깨지지 않는지 확인하는 기준점이다.
## 포함 경로
- `apps/flutter-test/lib/` — Flutter test app source
- `apps/flutter-test/test/` — widget/unit tests
- `apps/flutter-test/integration_test/` — plugin integration tests
- `apps/flutter-test/android/`, `apps/flutter-test/ios/`, `apps/flutter-test/macos/` — host app platform configuration
- `apps/flutter-test/pubspec.yaml` — test host dependency and Flutter metadata
## 제외 경로
- `packages/messaging_flutter/` — push plugin 내부 구현 책임
- `apps/mattermost/` — 원래 Mattermost 앱 repository clone 책임
- `services/core/` — messaging server runtime 책임
- `services/push-proxy/` — Mattermost push-proxy repository clone 책임
- `docs/`, `bin/` — workspace 공통 문서와 command 책임
## 주요 구성 요소
- `MyApp` — plugin event stream과 navigation callback을 표시하는 test host shell
- plugin singleton — app이 소비하는 plugin public API
- `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` 흐름을 따른다.
- 제품 앱 UI, app-specific business logic, 배포 앱 성격의 기능은 이 도메인에 추가하지 않는다.
## 다른 도메인과의 경계
- **messaging-flutter**: test app은 plugin API 소비자이고, push 처리의 source of truth는 plugin이다.
- **core-service**: server runtime이 필요한 테스트는 명시적으로 compose 또는 별도 환경을 켠 뒤 수행한다.
- **workspace-ops**: workspace command가 test host 검증을 호출하지만 host 구조와 integration behavior는 이 도메인이 소유한다.
## 금지 사항
- 플러그인 버그를 우회하기 위해 app에 duplicate push 처리 경로를 만들지 않는다.
- generated Flutter platform 파일을 불필요하게 재생성하거나 대량 변경하지 않는다.
- 이 저장소 안의 nexo 제품 앱으로 확장하지 않는다.