nexo/agent-task/m-flutter-web-notification/04+02,03_display/CODE_REVIEW-local-G08.md
toki ea77708c4f feat(messaging): Web 알림 전경 계약을 추가한다
Flutter Web foreground 알림 흐름을 이어가기 위해 permission API와 payload mapper를 패키지 내부 계약으로 고정한다.
2026-06-07 15:08:40 +09:00

6.3 KiB

Code Review Reference - WEBDISPLAY

[IMPLEMENTING AGENT — READ FIRST] Filling in this file is the mandatory final step of implementation. The task is NOT complete until every implementation-owned section below is filled in. Do not start until predecessor 03+02_event_map has complete.log. Complete the 구현 체크리스트; the final checklist item is mandatory before saving. Fill implementation-owned sections, then stop with active files in place and report ready for review. If implementation is blocked by a user-only decision, user-owned external environment prerequisite, or scope conflict, fill 사용자 리뷰 요청 with evidence and stop with active files in place; code-review decides whether to write USER_REVIEW.md. Do not ask the user directly, present choices in chat, or call request_user_input during implementation. Finalization is review-agent-only.

개요

date=2026-06-07 task=m-flutter-web-notification/04+02,03_display, plan=0, tag=WEBDISPLAY

Roadmap Targets

  • Milestone: agent-roadmap/phase/messaging-runtime/milestones/flutter-web-notification.md
  • Task ids:
    • display: foreground payload를 browser notification으로 표시하고 click 이벤트를 NotificationOpenedEvent와 host navigation callback으로 변환한다.
  • Completion mode: check-on-pass

이 파일을 읽는 리뷰 에이전트에게

[REVIEW AGENT ONLY] 아래 종결 절차는 코드리뷰 에이전트 전용이다. 구현 에이전트는 이 섹션을 실행하지 않는다.

각 항목의 구현을 실제 소스 파일과 대조하고, 검증 결과 섹션의 출력이 코드와 일치하는지 확인하세요.

구현 항목별 완료 여부

항목 완료 여부
[WEBDISPLAY-1] Browser Foreground Display And Click Routing [ ]

구현 체크리스트

  • 구현 시작 전 predecessor 03+02_event_map complete.log가 active 또는 archive 경로에 있는지 확인한다.
  • browser Notification 표시를 담당하는 web-only interop method를 추가하되 공용 Dart/API가 package:web를 직접 import하지 않게 유지한다.
  • NexoMessagingPlugin에 foreground web notification display public method를 추가하고 permission이 granted가 아니거나 unsupported면 표시하지 않는 결과를 반환한다.
  • display click event가 normalized payload를 PushNotificationType.opened/userInteraction=true map으로 변환해 기존 handleNativeEvent() routing을 재사용하게 한다.
  • fake interop/client 기반 unit test로 unsupported/permission denied/granted display/click routing을 검증한다.
  • cd packages/messaging_flutter && flutter pub get, cd packages/messaging_flutter && flutter test, cd packages/messaging_flutter && flutter analyze --no-fatal-infos를 실행한다.
  • CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

코드리뷰 전용 체크리스트

[REVIEW AGENT ONLY] 이 체크리스트는 코드리뷰 에이전트만 사용한다.

  • 코드리뷰 결과PASS, WARN, FAIL 중 하나의 판정을 append한다.
  • predecessor 03+02_event_map complete.log가 실제로 있었는지 확인한다.
  • active CODE_REVIEW-*-G??.mdcode_review_local_G08_N.log로 아카이브한다.
  • active PLAN-*-G??.mdplan_local_G08_M.log로 아카이브한다.
  • .gitignore의 Agent-Ops 관리 block이 agent-task/**/*.mdagent-task/**/*.log를 unignore하고 agent-roadmap/current.md를 ignore하는지 확인한다.
  • PASS이면 complete.log를 작성하고 active .md 파일을 남기지 않는다.
  • PASS이면 active task 디렉터리를 agent-task/archive/YYYY/MM/m-flutter-web-notification/04+02,03_display/로 이동한다.
  • PASS이고 task group이 m-flutter-web-notification이면 런타임 완료 이벤트 메타데이터를 보고한다.

계획 대비 변경 사항

구현 에이전트가 계획과 다르게 구현한 부분을 이유와 함께 기록한다.

주요 설계 결정

구현 에이전트가 주요 설계 결정 사항을 기록한다.

사용자 리뷰 요청

기본값은 없음이다. 구현 중 사용자 결정, 사용자 소유 외부 환경/secret/서비스 준비, 또는 계획 범위 변경 없이는 안전하게 진행할 수 없으면 아래 항목을 실제 내용으로 교체하고, 구현을 중단한 뒤 active 파일을 그대로 둔 채 리뷰를 요청한다. 구현 에이전트는 사용자에게 직접 질문하거나 선택지를 제시하거나 request_user_input을 호출하지 않는다. 후속 에이전트가 명령 재실행이나 산출물 수집으로 해소할 수 있는 검증 증거 공백만으로는 사용자 리뷰 요청을 작성하지 않는다.

  • 상태: 없음
  • 사유 유형: 없음
  • 결정 필요: 없음
  • 차단 근거: 없음
  • 실행한 검증/명령: 없음
  • 자동 후속 불가 이유: 없음
  • 재개 조건: 없음

리뷰어를 위한 체크포인트

  • 03+02_event_map predecessor 완료가 확인됐는지 확인한다.
  • public display API가 unsupported/permission denied/granted 결과를 구분하는지 확인한다.
  • click callback이 기존 handleNativeEvent() routing을 재사용하는지 확인한다.
  • 실제 browser prompt/OS tray evidence를 이 task의 필수 검증으로 요구하지 않았는지 확인한다.

검증 결과

구현 에이전트가 각 중간 검증 및 최종 검증 명령 실행 후 출력을 여기에 붙여 넣는다.

WEBDISPLAY-1 중간 검증

$ cd packages/messaging_flutter && flutter test
(output)

$ cd packages/messaging_flutter && flutter analyze --no-fatal-infos
(output)

최종 검증

$ cd packages/messaging_flutter && flutter pub get
(output)

$ cd packages/messaging_flutter && flutter test
(output)

$ cd packages/messaging_flutter && flutter analyze --no-fatal-infos
(output)

[IMPLEMENTING AGENT — BEFORE SAVING] Have you filled in every implementation-owned section: completion table, implementation checklist, changes from plan, design decisions, and verification output?