# Milestone: oto_console 계약 경계 정리

## 상태

[완료]

## 목표

Flutter `oto_console` 패키지에서 contract와 shell 구현의 순환형 의존을 풀고, 외부 소비자가 의존할 수 있는 UI 계약 모델을 분리한다.

## 범위

- `OtoConsoleContract`가 shell 구현 파일을 import하지 않도록 contract model을 분리한다.
- navigation section, shell tab, contract option처럼 외부 API가 되는 타입의 소유 위치를 명확히 한다.
- 기존 package public export와 client 동작은 유지한다.

## 범위 제외

- console UI 디자인 개편
- Flutter client routing 전면 재구성
- Server API 계약 변경

## 구현 잠금

- 상태: 해제
- 결정 필요: 없음

## 작업 컨텍스트

- 기존에는 `packages/flutter/oto_console/lib/src/oto_console_contract.dart`가 `oto_console_shell.dart`의 `OtoConsoleSection`에 의존하고, shell 파일은 contract를 다시 import했다.
- `packages/flutter/oto_console/lib/src/oto_console_models.dart`가 공용 section model을 소유하고, contract는 이를 import/export하며 shell은 contract/model을 소비한다.
- 표준선: 공용 contract/model 타입은 shell 구현보다 안쪽의 neutral model 파일이 소유하고, shell은 이를 소비한다.

## 기능

### Epic: [contract] console contract boundary

- [x] [model-owner] `OtoConsoleSection` 등 공용 UI 계약 타입의 소유 파일을 contract/model 계층으로 이동한다.
- [x] [shell-dep] shell 구현이 contract/model을 소비하도록 dependency 방향을 단방향으로 정리한다.
- [x] [exports] 기존 public export와 client import 경로가 깨지지 않도록 package export를 조정한다.
- [x] [verify] Flutter package/client analyzer와 widget 또는 unit test가 통과한다.

## 완료 리뷰

- 상태: 승인됨
- 요청일: 2026-06-08
- 승인일: 2026-06-08
- 완료 근거:
  - `OtoConsoleSection`을 `packages/flutter/oto_console/lib/src/oto_console_models.dart`로 분리하고, contract가 model을 import/export하도록 바꿔 shell 구현 직접 의존을 제거했다.
  - `packages/flutter/oto_console/test/oto_console_test.dart`에 package public export와 contract source boundary 검증을 추가했다.
  - `cd packages/flutter/oto_console && flutter analyze`, `cd packages/flutter/oto_console && flutter test`, `cd apps/client && flutter analyze`, `cd apps/client && flutter test`가 통과했다.
- 사용자 최종 확인:
  - 완료 승인에 따라 `[완료]`로 전환하고 archive로 이동했다.
- 리뷰 코멘트: 변경 범위가 `oto_console` contract/model 경계와 기존 client import 검증에 한정되어 계획 파일 없이 직접 처리했다.
