<!-- task=01+01_application_result_contract plan=2 tag=REVIEW_REVIEW_REFACTOR -->

# Application Result Contract Verification Follow-up Plan

## 이 파일을 읽는 구현 에이전트에게

**필수 경고: 구현 마지막 단계에서 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 모두 채워야 한다. 이 파일이 채워지기 전에는 작업이 완료된 것이 아니다.**
구현 체크리스트와 검증 명령을 그대로 수행하고 실제 출력을 review stub에 기록한다.
review 파일의 아카이브 지시와 `코드리뷰 전용 체크리스트`는 리뷰 에이전트 전용이다.

## 배경

plan 1 구현은 코드상 Required 이슈를 해결했지만, review stub의 검증 결과가 실제 stdout/stderr 전체 대신 요약 표기를 포함해 검증 신뢰 기준을 통과하지 못했다.
이번 follow-up은 소스 변경이 아니라 검증 명령 재실행과 정확한 출력 기록을 목표로 한다.

## 분석 결과

### 읽어야 할 파일

- `agent-task/01+01_application_result_contract/code_review_cloud_G07_1.log`
- `agent-task/01+01_application_result_contract/plan_cloud_G07_1.log`
- `lib/cli/commands/command_exe.dart`
- `lib/oto/application.dart`
- `test/oto_application_test.dart`

### 리뷰 발견 이슈

- `CODE_REVIEW-cloud-G07.md`의 검증 결과에 `(2회 반복: ...)`, `(동일한 명령/출력: ...)` 같은 요약 표기가 남아 실제 stdout/stderr 전체 기록 요건을 만족하지 못했다.
- CLI smoke는 exit code 기록이 필요하므로, exit code를 출력하려면 명령 자체에 `echo EXIT_CODE=$code`를 포함해 기록해야 한다.

### 빌드 등급

- build lane: `cloud-G07` — 검증 신뢰 복구가 목적이며 CLI exit-status smoke가 포함된다.
- review lane: `cloud-G07` — recorded stdout/stderr와 실제 rerun 결과를 대조해야 한다.

## 구현 체크리스트

- [ ] [REVIEW_REVIEW_REFACTOR-1] 검증 명령을 재실행하고 실제 stdout/stderr 전체와 exit code 기록 방식을 정확히 `CODE_REVIEW-cloud-G07.md`에 기록한다.
- [ ] 모든 중간 검증과 최종 검증을 실행하고 실제 출력을 `CODE_REVIEW-*-G??.md`에 기록한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

## 의존 관계 및 구현 순서

- plan 1의 소스 변경은 유지한다.
- 검증 명령이 실패하거나 출력이 이전 기대와 달라지면 원인을 확인하고 필요한 최소 소스 수정과 테스트를 함께 기록한다.

### [REVIEW_REVIEW_REFACTOR-1] 검증 출력 전체 기록

#### 문제

검증 결과가 실제 stdout/stderr 전체가 아니라 요약 표기여서 review skill의 verification-trust 기준을 만족하지 못했다.

#### 해결 방법

아래 명령을 순서대로 실행하고, 터미널에 표시된 stdout/stderr를 생략 없이 active `CODE_REVIEW-cloud-G07.md`에 붙여 넣는다.
색상 escape 등 렌더링 노이즈는 사람이 읽을 수 있게 정리해도 되지만, 출력 줄 자체를 요약하거나 반복 표기로 대체하지 않는다.
CLI smoke에서 exit code를 함께 기록하려면 아래처럼 wrapper 명령을 그대로 사용한다.

```bash
dart test test/oto_application_test.dart
dart analyze
dart test
rg --sort path -n "exit\\(" lib/oto/application.dart lib/cli/commands/command_exe.dart lib/cli/commands/command_scheduler.dart lib/cli/commands/scheduler
bash -lc 'dart run bin/main.dart exe -f /tmp/oto_missing_review.yaml; code=$?; echo EXIT_CODE=$code; exit 0'
```

#### 수정 파일 및 체크리스트

- [ ] `CODE_REVIEW-cloud-G07.md`의 구현 항목별 완료 여부와 구현 체크리스트를 체크
- [ ] `계획 대비 변경 사항`과 `주요 설계 결정`을 실제 작업 내용으로 채움
- [ ] `검증 결과`에 위 명령들의 실제 출력 전체를 기록
- [ ] `(동일한 출력)`, `(반복)`, `... 생략 ...` 같은 요약 표기를 사용하지 않음

#### 테스트 작성

- 새 테스트 작성은 필요하지 않다. 기존 `test/oto_application_test.dart`와 전체 `dart test`가 회귀를 검증한다.

#### 중간 검증

```bash
dart test test/oto_application_test.dart
```

예상: 4개 테스트가 모두 통과하며, 출력 전체를 review stub에 기록한다.

## 수정 파일 요약

| 파일 | 항목 |
|------|------|
| `agent-task/01+01_application_result_contract/CODE_REVIEW-cloud-G07.md` | REVIEW_REVIEW_REFACTOR-1 |

## 최종 검증

```bash
dart analyze
```

예상: `No issues found!`

```bash
dart test
```

예상: 모든 테스트 통과.

```bash
rg --sort path -n "exit\\(" lib/oto/application.dart lib/cli/commands/command_exe.dart lib/cli/commands/command_scheduler.dart lib/cli/commands/scheduler
```

예상: `lib/oto/application.dart`에는 결과가 없어야 한다. `command_exe.dart`에 남는 결과는 handler cleanup이어야 한다.

```bash
bash -lc 'dart run bin/main.dart exe -f /tmp/oto_missing_review.yaml; code=$?; echo EXIT_CODE=$code; exit 0'
```

예상: 파일 없음 메시지를 출력하고 `LateInitializationError` 없이 `EXIT_CODE=10`을 출력한다.

모든 코드 변경 완료 후 반드시 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다.
