--- domain: app-shell last_rule_review_commit: no-commit last_rule_updated_at: 2026-06-08 --- # app-shell ## 목적 / 책임 AppSok의 전역 앱 구성, 기본 navigation shell, theme, 화면 간 진입 구조를 담당한다. ## 포함 경로 - `lib/main.dart` — Flutter 앱 실행 진입점 - `lib/src/app.dart` — `MaterialApp`과 전역 theme 연결 - `lib/src/features/app_shell.dart` — 빌드/디바이스/콘솔/설정 navigation shell - `lib/src/theme/` — 앱 전역 색상, typography, component theme ## 제외 경로 - `lib/src/features/builds/` — Jenkins artifact 조회/설치 흐름은 `artifact-flow` 책임 - `lib/src/features/devices/`, `lib/src/features/console/` — ADB device/logcat 흐름은 `device-console` 책임 - `macos/` — bundle, entitlement, URL scheme은 `macos-platform` 책임 ## 주요 구성 요소 - `AppSokApp` — 앱 루트 widget - `AppSokShell` — 좌측 navigation과 상단 상태 영역 - `AppTheme` — AppSok Material 3 light theme ## 유지할 패턴 - 첫 화면은 실제 업무 화면이어야 하며 landing/marketing 화면으로 만들지 않는다. - 사용자 표시명은 `AppSok`으로 통일한다. Dart package, URL scheme, bundle id처럼 소문자 식별자가 필요한 곳만 `appsok`을 유지한다. - navigation item 추가 시 domain 경계를 먼저 정하고, shell에는 route/entry wiring만 둔다. - 버튼과 상태 표시는 icon을 우선 사용하고, 긴 설명성 문구는 화면 안에 넣지 않는다. - 카드 반경은 8px 이하를 유지한다. ## 다른 도메인과의 경계 - **artifact-flow**: Jenkins 인증/빌드 목록 상태는 artifact-flow가 소유하고, shell은 연결 상태 요약만 표시한다. - **device-console**: ADB 연결 상태 원천은 device-console이 소유하고, shell은 요약만 표시한다. - **macos-platform**: 앱 이름, URL scheme, entitlement 변경은 platform 설정에서 처리한다. ## 금지 사항 - shell에서 Jenkins API, Keychain, ADB Process를 직접 호출하지 않는다. - 전역 theme에 특정 feature만을 위한 색상/spacing을 과도하게 추가하지 않는다.