--- ui_doc_type: view view_id: app-shell status: 구현됨 frame: null source_evidence: - type: code path: lib/src/features/app_shell.dart notes: "AppSokShell, _BrandHeader, _TopBar, _StatusPill, _pages" - type: docs path: README.md notes: "Current Scaffold feature 목록" - type: user path: null notes: "agent-ui 생성 요청" regions: - app-shell.nav - app-shell.top-bar - app-shell.content --- # App Shell View ID: `app-shell` Frame: - 없음 Status: `구현됨` ## Source Evidence | Type | Path | Notes | |------|------|-------| | code | `lib/src/features/app_shell.dart` | `AppSokShell`, `_BrandHeader`, `_TopBar`, `_StatusPill`, `_pages` | | docs | `README.md` | Current Scaffold feature 목록 | | user | 없음 | agent-ui 생성 요청 | ## Purpose AppSok의 primary navigation과 현재 feature page를 호스팅한다. shell은 pending install handoff, console target device, install result 같은 cross-page 상태를 소유한다. ## Primary Users - Android artifact를 Mac에서 설치하고 확인하는 개발자 또는 QA 담당자 ## Primary Tasks - 빌드, 디바이스, 콘솔, 설정 화면으로 전환한다. - Jenkins/ADB 상태를 top bar에서 확인한다. - 빌드 화면에서 준비한 APK를 디바이스 화면으로 넘긴다. ## Information Priority 1. 현재 선택된 feature page의 제목과 업무 영역 2. NavigationRail의 AppSok brand 및 주요 화면 목록 3. Jenkins/ADB 상태 pill ## Regions | Region ID | Purpose | Component | Priority | Notes | |-----------|---------|-----------|----------|-------| | `app-shell.nav` | AppSok brand와 네 개의 primary destination 제공 | `shell-navigation` | high | `빌드`, `디바이스`, `콘솔`, `설정` | | `app-shell.top-bar` | 현재 page title과 Jenkins/ADB status 표시 | `status-pill` | medium | 현재 구현은 대기 상태 pill 두 개를 고정 표시 | | `app-shell.content` | 선택된 feature page 렌더링 | 없음 | high | `_pages[_selectedIndex].child` | ## Actions | Action ID | Trigger | Result | Guard | |-----------|---------|--------|-------| | `app-shell.select-page` | NavigationRail destination 선택 | 선택 page를 content region에 표시 | 없음 | | `app-shell.handoff-install` | build artifact 설치 요청 | pending install 상태를 만들고 `devices`로 이동 | staged APK가 있음 | | `app-shell.open-console` | device tile의 logcat action | console target device를 설정하고 `console`로 이동 | device가 ready | ## States - loading: child page가 자체 loading state를 표시한다. - empty: child page가 자체 empty state를 표시한다. - error: child page가 자체 error state를 표시한다. - permission-denied: Jenkins credential 문제는 `builds`와 `settings`에서 표시한다. ## Open Questions - 없음 ## Decision History - 2026-06-25: `AppSokShell` 구현을 shell view 기준으로 기록했다.