appsok/agent-roadmap/phase/workflow-integration/milestones/teams-deep-link.md

79 lines
3.1 KiB
Markdown

# Milestone: Teams deep link 설치 진입
## 위치
- Roadmap: `agent-roadmap/ROADMAP.md`
- Phase: `agent-roadmap/phase/workflow-integration/PHASE.md`
## 목표
Teams/Jenkins 알림에 포함된 `appsok://` 링크를 클릭하면 AppSok이 특정 job/build/artifact를 열고 설치 준비 화면으로 진입한다. QR을 폰으로 스캔하는 대신 Mac에서 바로 설치 흐름을 시작하게 한다.
## 상태
[진행중]
## 승격 조건
- 없음
## 구현 잠금
- 상태: 잠금
- 결정 필요: 아래 체크리스트
- [ ] Teams 메시지에 추가할 deep link payload 형식을 확정한다.
- [ ] Jenkins 알림 템플릿 또는 Teams webhook 메시지를 수정할 수 있는 주체를 확인한다.
- [ ] deep link에 job/build/artifact 식별자만 넣을지, Jenkins URL 전체를 넣을지 결정한다.
## 범위
- `appsok://install?...` URL scheme payload 정의
- app link 수신과 route 처리
- job/build/artifact preselect
- credential 없을 때 로그인/설정 화면으로 안전하게 유도
## 기능
### Epic: [payload] deep link 규격
Teams/Jenkins가 만들고 AppSok이 해석할 URL 형식을 정한다.
- [ ] [schema] `appsok://install` payload parameter를 문서화한다.
- [ ] [validation] job/build/artifact 값이 누락되거나 조작된 경우 안전하게 거부한다.
- [ ] [no-secret] deep link에 Jenkins token, session cookie, private credential을 넣지 않는다.
- [ ] [examples] Teams 메시지에 넣을 예시 링크를 README 또는 roadmap context에 남긴다.
### Epic: [routing] 앱 진입 처리
앱 실행 중/미실행 상태 모두에서 deep link를 설치 흐름으로 연결한다.
- [ ] [receive] macOS `appsok://` callback을 Flutter 앱에서 수신한다.
- [ ] [preselect] payload가 가리키는 build/artifact를 조회해 빌드 화면에서 선택 상태로 표시한다.
- [ ] [auth-gate] credential이 없거나 권한이 없으면 설치 대신 로그인/설정으로 유도한다.
- [ ] [fallback] deep link 처리가 실패하면 사용자가 수동으로 job/build를 찾을 수 있다.
## 완료 리뷰
- 상태: 없음
- 요청일: 없음
- 완료 근거: 모든 기능 Task와 Task 안에 명시된 검증 충족 후 기록한다.
- 리뷰 필요:
- [ ] 사용자가 완료 결과를 확인했다
- [ ] archive 이동을 승인했다
- 리뷰 코멘트: 없음
## 범위 제외
- Jenkins/Teams 알림 시스템 자체의 운영 권한 변경
- 중앙 인증 broker 구현
- deep link로 token 또는 세션을 전달하는 방식
## 작업 컨텍스트
- 관련 경로: `macos/Runner/Info.plist`, `lib/src/app.dart`, `lib/src/features/builds/`, `lib/src/services/jenkins_client.dart`
- 표준선(선택): deep link는 식별자만 전달하고 실제 권한 확인은 Jenkins credential로 다시 수행한다.
- 선행 작업: Artifact 탐색과 다운로드
- 후속 작업: 설치 세션 이력과 오류 리포트
- 작업 현황:
- 2026-06-14: `ADB 콘솔과 logcat` 완료 후 다음 활성 Milestone으로 지정했다.
- 확인 필요: Teams payload 형식, Jenkins 알림 템플릿 변경 가능 여부