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

3 KiB

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 없을 때 로그인/설정 화면으로 안전하게 유도

기능

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 탐색과 다운로드
  • 후속 작업: 설치 세션 이력과 오류 리포트
  • 확인 필요: Teams payload 형식, Jenkins 알림 템플릿 변경 가능 여부