ariadne/agent-ops/rules/project/domain/client/rules.md
2026-07-24 05:45:04 +09:00

52 lines
2.8 KiB
Markdown

---
domain: client
last_rule_review_commit: unborn-head
last_rule_updated_at: 2026-07-23
---
# client
## 목적 / 책임
Ariadne의 조직 범위 오류, 프로젝트, 수정 작업, 검토 상태를 한국어 Flutter 웹 화면으로 제공하며 서버·IOP 권한 판정과 분리된 사용자 경험을 유지한다.
## 포함 경로
- `apps/client/lib/` — 애플리케이션, 기능 화면, 공유 테마의 Dart 코드다.
- `apps/client/test/` — Flutter 위젯과 사용자 화면 동작 검증이다.
- `apps/client/web/` — Flutter 웹 엔트리와 정적 자산이다.
- `apps/client/pubspec.yaml` — Dart SDK와 Flutter 의존성 기준이다.
- `.fvmrc` — 프로젝트 Flutter SDK 버전 기준이다.
## 제외 경로
- `internal/domain/` — 조직·오류·수정 작업의 권한과 상태 판정은 domain-model 책임이다.
- `internal/platform/httpserver/` — API 라우팅과 서버 수명주기는 platform 책임이다.
- `internal/integration/iop/` — IOP 실행과 이벤트 스트림은 integrations 책임이다.
## 주요 구성 요소
- `AriadneApp` — 한국어 locale과 Material 3 테마를 적용하는 앱 루트다.
- `OverviewPage` — 화면 너비에 따라 rail과 drawer를 전환하는 반응형 개요 화면이다.
- `AppTheme` — Ariadne의 색상, 타이포그래피, 카드 스타일을 모은 공유 테마다.
## 유지할 패턴
- 기능 화면은 `lib/features/`, 공통 시각 요소는 `lib/shared/` 경계를 유지한다.
- 가능한 위젯과 값은 `const`로 선언하고 `flutter_lints` 기준을 따른다.
- Material 3와 한국어 locale을 유지하며 좁은 화면에서도 조직·탐색 의미가 보존되게 한다.
- 아직 연결되지 않은 기능은 활성 동작처럼 보이게 하지 말고 tooltip·semantics로 준비 중 상태를 명확히 한다.
- 화면 추가 시 widget test와 `flutter analyze` 검증을 함께 갱신한다.
## 다른 도메인과의 경계
- **domain-model**: 서버가 제공한 조직 범위 상태를 표현하되 클라이언트에서 권한이나 수정 가능성을 최종 판정하지 않는다.
- **integrations**: IOP 연결 상태를 표시할 수 있지만 IOP endpoint나 자격 증명을 직접 다루지 않는다.
- **platform**: Ariadne API를 통해 통신하며 데이터베이스나 서버 내부 타입에 직접 의존하지 않는다.
## 금지 사항
- 클라이언트가 요청 본문의 조직 식별자만으로 접근 범위를 결정하도록 만들지 않는다.
- IOP, PostgreSQL, 운영 환경에 직접 연결하거나 비밀값을 Flutter 자산에 포함하지 않는다.
- 미구현 탐색 항목과 조직 선택 UI에 실제 동작이 있는 것처럼 오해시키는 상호작용을 추가하지 않는다.
- 로컬 형제 저장소의 Dart 패키지를 정식 의존성으로 추가하지 않는다.