3 roles covered
emitter, dispatcher, processor chat entry와 room surface.
배출자, 배차담당자, 처리자가 같은 chat room surface를 사용합니다.
운전자는 current Figma/Web 계약상 chat viewer가 아니라 배차 확인, 오늘 일정, 배차표, 알림 대상 역할입니다.
현재는 mock room/list/detail/read-state/attachment 중심이며, @kesha-antonov/react-native-chat wrapper,
pagination, date-format search, contact sheet, emergency contact, provider-pending contact UX까지 검증됐습니다.
3 roles covered
emitter, dispatcher, processor chat entry와 room surface.
Mocked
read-state, pagination, local draft, attachment draft/remove/send.
Mocked
Expo UI BottomSheet, dialer provider-pending, emergency fallback.
Pending
realtime transport, backend read receipt, actual upload provider.
배출자, 배차담당자, 처리자의 홈 CTA 또는 bottom chat tab에서 {role}.chat.screen으로 진입합니다.
room open, header back, Android Back, pagination load-more, date-format search를 검증합니다.
mock attachment draft/remove/send와 composer keyboard-back boundary를 통과합니다.
profile tap으로 contact sheet를 열고, 실제 dialer 대신 provider-pending CTA와 emergency fallback을 표시합니다.

배출자 CS/채팅 진입점의 font-large clean evidence.

공통 room feed와 FlashList 기반 surface.

처리자 역할의 같은 공통 surface.

공통 채팅 surface의 font scale 1.3 clean evidence.

Expo UI BottomSheet 기반 연락처.

첨부 draft/remove/send proof.

real dialer/upload 없이 상태를 설명.
| 분류 | 증거 | 검수 포인트 |
|---|---|---|
| Maestro | emitter-chat, common-chat-flashlist, lifecycle-chat-notification-proof | 배출자/배차담당자/처리자 entry, room open, attachment, contact sheet, lifecycle room projection. |
| Static contract | @zerro/mocks/domains/chat/app, mobile chat domain tests | mock room/detail/read-state fixture를 backend 전 계약으로 고정. |
| Driver contract | driver-chat-not-app-surface | 운전자는 current app chat viewer가 아니며, 배차/운행/알림 경로로 처리합니다. |
| 남은 범위 | realtime / upload / read-state persistence | Spring backend transport와 DB read receipt shape 결정 후 붙일 수 있음. |