# 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가 완료되어 완료 리뷰를 요청했다.