# Milestone: Client Integration Clone Adoption

## 위치

- Roadmap: `agent-roadmap/ROADMAP.md`
- Phase: `agent-roadmap/phase/control-plane-portal-ops/PHASE.md`

## 목표

NomadCode의 `Client Integration Standardization` 결과를 IOP Flutter client에 복제 가능한 형태로 반영한다. `client` 모듈명, Web + Android 우선 Dart bootstrap, proto-socket, Mattermost push host integration, iOS 후속 확장 경계를 IOP 운영면에 맞게 정리한다.

## 상태

[폐기]

## 구현 잠금

- 상태: 잠금
- 결정 필요: 아래 체크리스트
  - [ ] NomadCode client 표준화 산출물을 받은 뒤 IOP client에 복제할 파일/구조/설정 범위를 확정한다.
  - [x] 이전 Flutter 앱 경로는 `apps/client`로 전환하고 호환 경로는 두지 않는다.
  - [x] Nexo 알림/메시지 Smoke 정합성 Milestone에서 valid signature 또는 scope decision과 IOP consumer 설정 차이가 정리됐는지 확인한다.
  - [x] IOP client의 Mattermost push routing은 내부 화면, 외부 링크, 운영 이벤트를 모두 지원한다. 세부 구현은 notification type/context별 primary route, fallback route, audit/ops event 기록 정책으로 정리한다.

## 범위

- Flutter host 모듈을 `client` 기준으로 정리
- Web + Android 우선 bootstrap과 platform guard 반영
- proto-socket Dart client 설정, endpoint 주입, connection lifecycle 정리
- Mattermost push plugin host integration 반영
- Firebase host 설정과 token/auth/signing key 전달 경계 정리
- iOS는 동일 Dart API 위의 후속 native 확장 대상으로 문서화
- NomadCode에서 복제할 skeleton과 IOP에서 치환할 product-specific 항목 문서화

## 기능

### Epic: [client-clone] Client standard clone

NomadCode client 표준을 IOP client에 맞게 복제한다.

- [x] [module-name] IOP Flutter host 경로와 모듈명은 `client` 기준 모듈/문서 표준을 따른다.
- [ ] [bootstrap] Web + Android 우선 bootstrap과 platform-specific initialization guard를 반영한다.
- [ ] [folder-layout] `src/app`, `src/integrations`, `src/features` 기준의 client skeleton을 정리한다.

### Epic: [integration-clone] Integration clone boundary

공통 integration 경계를 IOP 운영면에 맞춰 연결한다.

- [ ] [proto-socket] proto-socket connection lifecycle과 endpoint configuration 책임 경계가 host/plugin/control-plane 사이에서 충돌하지 않도록 client integration으로 정리한다.
- [ ] [mattermost-push] Mattermost push는 plugin runtime을 사용하고 host는 Firebase config, auth/token/signing key, routing callback만 소유한다.
- [ ] [platform-targets] Web과 Android를 1차 target으로 두고 iOS는 동일 Dart API 위의 후속 확장 대상으로 문서화한다. 검증: Web build와 Android integration이 같은 Dart bootstrap 기준에서 설명되고 확인되는지 점검한다.

### Epic: [handoff] Clone handoff

NomadCode 표준과 IOP 차이를 추적 가능하게 남긴다.

- [ ] [clone-checklist] NomadCode에서 가져올 항목과 IOP에서 치환할 항목을 checklist로 남긴다.
- [x] [naming] IOP 제품 표면에서는 client/product surface 기준으로 정리한다.
- [ ] [related-locks] 기존 Control Plane client milestone과 충돌하는 범위는 이 milestone의 표준 적용 범위가 확정되기 전까지 잠금 또는 후속 작업으로 정리한다.

## 완료 리뷰

- 상태: 폐기
- 요청일: 2026-05-30
- 완료 근거: 사용자가 NomadCode Flutter client 복제 작업은 별도 프로젝트에서 진행 예정이므로 IOP roadmap의 해당 Milestone을 제거하라고 지시했다.
- 리뷰 필요:
  - [x] 사용자가 폐기 방향을 지시했다
  - [x] archive 이동을 승인했다
- 리뷰 코멘트: IOP active roadmap에서는 이 Milestone을 더 이상 구현 후보로 두지 않는다.

## 범위 제외

- NomadCode 제품 feature 전체 복제
- IOP Edge/Node runtime 내부 정책 변경
- iOS native push full implementation
- Mattermost push plugin runtime 대규모 재작성
- Control Plane-Edge wire protocol 세부 확정

## 작업 컨텍스트

- 관련 경로: `apps/client/`, `apps/control-plane/`, `docs/`, `scripts/dev/web.sh`, `../nomadcode/apps/client`, `../nexo/packages/messaging_flutter/`, `../nexo/apps/flutter-test/`, `../nexo/HANDOFF.md`
- 표준선(선택): IOP 제품 표면은 client로 부르고, 이전 UI 명칭은 roadmap/archive history나 외부 tool API 고정명에만 제한한다.
- 표준선(선택): NomadCode에서 가져올 것은 client skeleton, integration boundary, bootstrap convention, handoff 문서이며 제품 feature는 복제하지 않는다.
- 표준선(선택): Mattermost push routing은 내부 화면, 외부 링크, 운영 이벤트를 모두 지원하고, 배타 선택이 아니라 notification type/context별 routing policy로 구현한다.
- 선행 작업: Nexo 알림/메시지 Smoke 정합성, NomadCode `Client Integration Standardization`
- 후속 작업: Control Plane과 Client, Multi-Edge 운영
- 확인 필요: 구현 잠금의 결정 필요 항목 참고.
