 # Milestone: 브리지 선행 경계 안정화

## 위치

- Roadmap: `agent-roadmap/ROADMAP.md`
- Phase: `agent-roadmap/phase/automation-runtime-bridge/PHASE.md`

## 목표

원격 터미널 브리지 POC를 시작하기 전에 전역 설계 부채 리팩토링에서 남은 호환성/소유권 리스크를 실행 가능한 계약으로 고정한다.
새 terminal/native API가 legacy 실행 handle, provider-specific terminal core, 임시 설정 경로, 느슨한 client lifecycle에 기대지 않도록 선행 경계를 정리한다.

## 상태

[완료]

## 구현 잠금

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

## 범위

- Client HTTP repository의 기본 client 소유권과 dispose 경계 정리
- Edge service run 제출 결과에서 legacy `RunHandle` 의존을 줄이고 신규 표면의 `RunDispatch`/`RunStream` 소비 기준 고정
- Node terminal session core를 provider-specific CLI 구현에서 재사용 가능한 terminal transport 경계로 분리할 수 있는 최소 구조 확정
- `AdapterConfig.settings`를 legacy fallback으로만 유지하고 신규 adapter/terminal config는 typed proto 계약으로 표현한다는 guard 보강

## 기능

### Epic: [preflight-boundary] Bridge Preflight Boundary

원격 터미널 브리지 구현이 기존 호환 표면을 확장 경로로 착각하지 않도록 선행 계약을 고정한다.

- [x] [client-http-lifecycle] `HttpControlPlaneStatusRepository`가 기본 `http.Client`를 요청마다 새로 만들지 않고 소유/해제 경계를 명확히 하며, 주입된 client는 caller-owned로 유지한다. 검증: `cd apps/client && flutter test test/control_plane_status_controller_test.dart test/widget_test.dart`
- [x] [edge-run-surface] Edge 신규 native/terminal 표면은 legacy combined `RunHandle` 대신 `RunDispatch`와 `RunStream` 또는 동등한 surface-neutral 계약을 소비하도록 service interface와 테스트를 정리한다. 검증: `go test -count=1 ./apps/edge/internal/service ./apps/edge/internal/openai ./apps/edge/internal/input/a2a`
- [x] [terminal-core-boundary] persistent PTY 기반 `terminalSessionCore`를 CLI provider 내부 세부가 아니라 remote terminal transport가 재사용할 수 있는 Node terminal boundary로 분리하거나 명시 interface로 고정한다. 검증: `go test -count=1 ./apps/node/internal/adapters/cli ./apps/node/internal/...`
- [x] [adapter-config-typed] `AdapterConfig.settings`는 구버전 Edge payload fallback으로만 허용하고, Edge mapper와 신규 config는 typed oneof/proto 메시지를 사용한다는 guard를 테스트로 고정한다. 검증: `make proto && go test -count=1 ./apps/edge/internal/node ./apps/edge/internal/transport ./apps/node/internal/adapters ./proto/gen/...`

## 완료 리뷰

- 상태: 승인됨
- 요청일: 2026-06-08
- 승인일: 2026-06-09
- 완료 근거:
  - `[client-http-lifecycle]`은 기존 완료 근거로 `cd apps/client && flutter test test/control_plane_status_controller_test.dart test/widget_test.dart` 통과가 기록되어 있다.
  - `[edge-run-surface]`, `[terminal-core-boundary]`, `[adapter-config-typed]`는 각각 `agent-task/archive/2026/06/m-bridge-boundary-hardening/01_edge_run_surface/complete.log`, `02_terminal_core_boundary/complete.log`, `03_adapter_config_typed/complete.log`의 `Roadmap Completion`에서 PASS로 선언됐다.
  - 각 Task에 명시된 검증 명령은 해당 `complete.log`의 최종 검증 또는 재실행 증거로 기록되어 있다.
- 리뷰 필요:
  - [x] 사용자가 완료 결과를 확인했다
  - [x] archive 이동을 승인했다
- 리뷰 코멘트: 코드 관점 전체 검토와 검증 통과 후 사용자 승인에 따라 `[완료]`로 전환하고 archive한다.

## 범위 제외

- 원격 터미널 브리지 open/input/output/resize/signal/close 기능 구현
- SSH/WinRM/serial 같은 신규 terminal transport 구현
- OpenAI-compatible/A2A 표면에 terminal 제어 기능 추가
- legacy `AdapterConfig.settings` fallback 즉시 제거
- Control Plane/Client terminal 운영 UI 구현

## 작업 컨텍스트

- 관련 경로: `apps/client/lib/control_plane_status_repository.dart`, `apps/edge/internal/service`, `apps/edge/internal/openai`, `apps/edge/internal/input/a2a`, `apps/node/internal/adapters/cli`, `proto/iop/runtime.proto`, `apps/edge/internal/node`, `apps/node/internal/adapters`
- 표준선(선택): 호환성 경로는 유지하되 신규 bridge/native 구현은 surface-neutral DTO, reusable terminal boundary, typed proto config를 기준으로 삼는다.
- 선행 작업: 전역 설계 부채 리팩토링 기반
- 후속 작업: 원격 터미널 브리지 POC
- 확인 필요: 없음
- 완료 근거: 모든 기능 Task가 완료되어 완료 리뷰를 요청했다.
