runner 출력 경계 분리의 첫 계약 작업을 완료하고 후속 subtask와 로드맵 상태를 함께 기록한다. workspace 포트와 local smoke 기준도 독립 Control Plane 방향에 맞춰 정리한다.
1.7 KiB
1.7 KiB
Milestone: runner 출력 경계 분리
상태
[진행중]
목표
pipeline/core 실행 로직이 CLI 출력 구현에 직접 의존하지 않도록 output/progress port를 도입하고, CLI는 해당 port의 adapter로만 연결한다.
범위
- pipeline 실행 코드에서
CLI.println과Application.instance.printBuildStep직접 호출을 분리한다. - core data composition 경로가 CLI color/printer 구현에 묶이지 않도록 출력 계약을 정리한다.
- 기존 CLI 사용자 출력은 adapter를 통해 동일한 의미로 유지한다.
범위 제외
- 로그 포맷 전면 개편
- OTO Server remote log streaming 재설계
- YAML pipeline 문법 변경
구현 잠금
- 상태: 해제
- 결정 필요: 없음
작업 컨텍스트
apps/runner/lib/oto/pipeline/pipeline_exe.dart와pipeline_foreach.dart는 CLI 출력 계층을 직접 import한다.apps/runner/lib/oto/core/data_composer.dart는 CLI color/printer 형태를 core 동작으로 노출한다.- 표준선: domain 실행 로직은 출력 port를 호출하고, CLI/UI/server는 port adapter를 제공한다.
기능
Epic: [output] output port boundary
- [port] runner 실행 progress와 일반 출력에 필요한 최소 output port 계약을 정의한다.
- [pipeline] pipeline domain이 CLI 구현체 대신 output port를 사용하도록 분리한다. 검증: runner analyze와 pipeline 관련 테스트가 통과한다.
- [core] data composition 경로의 printer/color 의존을 output port 또는 domain-neutral 계약으로 정리한다.
- [cli-adapter] 기존 CLI 출력 의미를 유지하는 adapter를 연결한다. 검증: CLI smoke 출력이 회귀하지 않는다.