# Milestone: 설치 오류 표시와 복사 리포트

## 위치

- Roadmap: `agent-roadmap/ROADMAP.md`
- Phase: `agent-roadmap/phase/workflow-integration/PHASE.md`

## 목표

1차 MVP에서는 설치 이력을 저장하지 않고, 현재 설치 시도의 성공/실패와 핵심 오류만 바로 확인할 수 있게 한다. 사용자가 명시적으로 복사할 때만 build, device 표시 정보, install result, masking된 오류 메시지를 텍스트 리포트로 만든다.

## 상태

[완료]

## 승격 조건

- 없음

## 구현 잠금

- 상태: 해제
- SDD: 불필요 - 1차 MVP의 현재 화면 오류 표시와 복사 리포트 범위이며, cross-repo 계약이나 외부 provider 쓰기가 없다.
- 결정 필요: 없음
  - [x] 1차 MVP에서는 설치 이력을 로컬이나 중앙 감사 로그에 저장하지 않는다.
  - [x] device 식별자는 저장하거나 관리하지 않고, 현재 화면과 복사 리포트에는 model 중심 표시와 필요 시 masked serial만 사용한다.
  - [x] logcat/error output은 영구 저장하지 않고, 현재 실행 화면 표시와 사용자가 요청한 masking된 복사 리포트에만 사용한다.

## 범위

- 현재 설치 시도의 success/failure 표시
- 현재 선택된 Jenkins job/build/artifact와 device 표시 정보
- 설치 실패 원인 요약과 오류 메시지 복사/공유
- token, private URL, device serial 원문 masking

## 기능

### Epic: [history] 현재 설치 결과

설치 이력을 누적 저장하지 않고 현재 실행의 설치 결과만 앱 안에서 확인할 수 있게 한다.

- [x] [session-model] 현재 설치 시도 결과를 화면 상태로 표현할 최소 모델을 정의한다.
- [x] [local-store] 1차 MVP에서 설치 결과를 로컬 저장소에 영구 저장하지 않도록 한다.
- [x] [recent-list] 최근 설치 목록 대신 현재 설치 결과와 실패 요약을 표시한다.
- [x] [rerun] 저장된 최근 세션 재실행은 제공하지 않고 사용자가 현재 선택한 build/device로 다시 실행한다.

### Epic: [report] 오류 리포트

실패 원인을 사용자와 개발자가 빠르게 공유할 수 있게 한다.

- [x] [error-summary] install stderr/stdout의 주요 실패 원인을 요약 표시한다.
- [x] [copy-report] 현재 build/device/install result를 포함한 masking된 텍스트 리포트를 복사할 수 있다.
- [x] [masking] token, private URL, device serial masking 규칙을 적용한다.
- [x] [retention] 보관 기간과 삭제 버튼 없이 현재 화면 상태만 초기화할 수 있게 한다.

## 완료 리뷰

- 상태: 승인됨
- 요청일: 2026-06-16
- 완료 근거:
  - 현재 설치 결과 모델과 단일 결과 배너로 history Epic을 충족했다.
  - masking된 설치 리포트 복사, 실패 요약 표시, 현재 결과 초기화로 report Epic을 충족했다.
  - local 및 remote Mac runner에서 `flutter analyze`, `flutter test`가 통과했다.
- 리뷰 필요:
  - [x] 사용자가 완료 결과를 확인했다
  - [x] archive 이동을 승인했다
- 리뷰 코멘트: 코드 레벨 분석과 local/remote 검증 통과 후 완료 승인으로 archive 이동한다.

## 범위 제외

- 중앙 서버 기반 감사 로그
- 로컬 설치 이력 저장과 최근 세션 목록
- 저장된 최근 세션 기반 재실행
- 지정 device allowlist 또는 device 관리 기능
- logcat 원문 장기 저장
- 조직 개인정보/보안 정책을 우회하는 식별자 저장

## 작업 컨텍스트

- 관련 경로: `lib/src/features/builds/`, `lib/src/features/devices/`, `lib/src/features/console/`, `lib/src/services/adb_service.dart`
- 표준선(선택): 1차 MVP는 설치 이력, device 식별자, logcat/error output을 영구 저장하지 않는다.
- 선행 작업: USB 설치와 device 선택, ADB 콘솔과 logcat
- 후속 작업: macOS 배포와 sandbox 검증
- 확인 필요: 없음 - 1차 MVP 저장 없음으로 결정됨
