# Complete - 01+01_application_result_contract

## 완료 일시

2026-05-19

## 요약

`Application.build()` 결과 계약 도입 및 CLI exit-code 전달 정리를 4회 루프로 완료했다. 최종 판정: PASS.

## 루프 이력

| Plan | Review | Verdict | 메모 |
|------|--------|---------|------|
| `plan_cloud_G07_0.log` | `code_review_cloud_G07_0.log` | FAIL | missing-file CLI 경로, per-build 상태 초기화, 검증 출력 신뢰 이슈 발견 |
| `plan_cloud_G07_1.log` | `code_review_cloud_G07_1.log` | FAIL | 소스 이슈는 해결됐으나 검증 출력 일부가 요약 표기로 남음 |
| `plan_cloud_G07_2.log` | `code_review_cloud_G07_2.log` | FAIL | active review가 구현 소유 섹션 미작성 스텁 상태 |
| `plan_cloud_G07_3.log` | `code_review_cloud_G07_3.log` | PASS | 검증 출력과 구현 소유 섹션이 채워지고 재실행 검증 통과 |

## 구현/정리 내용

- `BuildResult`를 추가하고 `Application.build()`가 process를 직접 종료하지 않고 성공/실패 결과를 반환하도록 변경했다.
- `CommandExe`가 isolate complete payload의 exit code를 process `exitCode`에 반영하도록 변경했다.
- `exe -f` 파일 없음 경로가 `_handler` 미초기화 상태를 참조하지 않고 exit code 10으로 종료되도록 정리했다.
- `Application.build()` 호출마다 per-build `dataCommandMap`/`commandStates`를 초기화해 같은 process 내 연속 build가 가능하게 했다.
- 관련 regression 테스트와 검증 출력 기록을 보강했다.

## 최종 검증

- `dart test test/oto_application_test.dart` - PASS; 4개 application/CLI regression 테스트 통과
- `dart analyze` - PASS; `No issues found!`
- `dart test` - PASS; 전체 7개 테스트 통과
- `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` - PASS; `application.dart`에는 process exit 호출 없음, `command_exe.dart` 결과는 handler cleanup, scheduler 쪽 기존 예외만 남음
- `bash -lc 'dart run bin/main.dart exe -f /tmp/oto_missing_review.yaml; code=$?; echo EXIT_CODE=$code; exit 0'` - PASS; missing-file 메시지 출력 후 `EXIT_CODE=10`

## 잔여 Nit

- 없음

## 후속 작업

- 없음
