2.8 KiB
2.8 KiB
| domain | last_rule_review_commit | last_rule_updated_at |
|---|---|---|
| client | unborn-head | 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 패키지를 정식 의존성으로 추가하지 않는다.