# Milestone: 알림 액션 흐름 검증 ## 위치 - Roadmap: `agent-ops/roadmap/ROADMAP.md` - Phase: `agent-ops/roadmap/phase/android-runtime-confidence/PHASE.md` ## 목표 Mattermost notification display, tap, dismiss, inline reply 흐름을 테스트 가능한 단위로 나눈다. 실제 system notification과 사용자의 상호작용이 필요한 부분은 manual smoke와 emulator integration으로 분리한다. ## 상태 [계획] ## 구현 잠금 - 상태: 해제 - 결정 필요: 없음 ## 범위 - notification builder 입력과 output contract 검증 - notification tap event가 Dart opened stream으로 전달되는 경로 검증 - dismiss receiver와 inline reply receiver 경로 검증 - manual smoke checklist와 자동 테스트 경계 정리 ## 필수 기능 ### Epic: [display] Notification 표시 NotificationHelper가 Mattermost payload를 기대한 알림 형태로 구성하는지 확인한다. - [ ] [title-message] title과 message 표시 계약을 테스트한다 - [ ] [threading] CRT/thread 관련 grouping 기준을 테스트한다 - [ ] [avatar] avatar 또는 fallback icon 처리를 테스트한다 ### Epic: [interaction] 사용자 상호작용 Tap, dismiss, inline reply를 event 또는 native action으로 연결한다. - [ ] [tap-opened] notification tap이 opened event로 이어지는 경로를 검증한다 - [ ] [dismiss] dismiss receiver가 native record 정리 경로를 호출하는지 검증한다 - [ ] [inline-reply] inline reply text가 reply delivery 경로로 전달되는지 검증한다 ### Epic: [manual] 수동 검증 경계 자동화가 어려운 system UI 상호작용을 명확한 수동 절차로 남긴다. - [ ] [checklist] README manual smoke checklist를 실제 runtime 경로와 맞춘다 - [ ] [logs] 수동 검증 중 확인할 log 또는 observable signal을 정리한다 ## 완료 기준 - [ ] notification 생성 로직이 payload fixture로 검증된다 - [ ] tap opened event 경로가 example 또는 native test에서 확인된다 - [ ] inline reply와 dismiss 경로가 최소 하나 이상의 자동 테스트 또는 명확한 manual smoke로 보호된다 - [ ] 자동화 불가능한 항목이 문서에 분리되어 있다 ## 완료 리뷰 - 상태: 없음 - 요청일: 없음 - 완료 근거: 없음 - 리뷰 필요: - [ ] 사용자가 완료 결과를 확인했다 - [ ] archive 이동을 승인했다 - 리뷰 코멘트: 없음 ## 범위 제외 - 실제 Mattermost 서버 reply 성공 보장 - 앱별 navigation UI 검증 - iOS/macOS notification 구현 ## 작업 컨텍스트 - 관련 경로: `android/src/main/kotlin/**`, `android/src/main/java/**`, `example/integration_test/**`, `README.md` - 표준선(선택): system UI 의존 테스트는 flaky하면 manual smoke 또는 선택형 emulator job으로 둔다 - 선행 작업: Native 단위 테스트 확장 - 후속 작업: ACK와 네트워크 회복성 검증 - 확인 필요: 없음