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

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 패키지를 정식 의존성으로 추가하지 않는다.