<!-- task=m-agent-readable-repository-refactor/08_e2e_scripts plan=0 tag=REFACTOR_E2E -->

# E2E shell orchestration 단계 분해 계획

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

shell syntax와 실제 smoke 출력까지 review stub에 채우고 active 파일을 유지한다. Milestone 결정 차단 외 직접 질문, `request_user_input`, user-review/finalization 파일 작성은 금지한다.

## 배경

`scripts/e2e-smoke.sh`의 `check_node_messages_relayed_to_edge`는 159줄이고 long-context smoke의 `run_preflight`는 107줄이다. fixture/process/await/assert/cleanup 단계를 명명하되 사용법과 판정 기준을 유지한다.

## 분석 결과

- 대상: `scripts/e2e-smoke.sh`, `scripts/e2e-long-context-admission-smoke.sh`와 호출 Make target.
- 테스트 환경: local testing-smoke와 `e2e-smoke` skill. 기준선 `bash -n` 통과.
- SDD: 불필요. 테스트 orchestration refactor다.
- 분할 판단: 두 script는 동일 Edge–Node 임시 process/port/cleanup 패턴을 공유하나 shell 공용 library 신설은 현재 범위에서 제외한다.
- 제외: test scenario 축소, timeout/expected output 완화, mock을 full-cycle로 재분류, tracked config 변경.
- 빌드 등급: `local-G06`.

## 구현 체크리스트

- [ ] relay 검증을 process setup, run capture, payload/order assertion, cleanup 단계 함수로 분리한다.
- [ ] long-context preflight를 tool/config/port/runtime assumption 단계로 분리한다.
- [ ] trap, exit code, timeout, stdout/stderr evidence와 scenario 수를 보존한다.
- [ ] syntax, 개별 smoke, `make test-e2e`, readability ratchet을 통과시킨다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [REFACTOR_E2E-1] Edge–Node relay orchestration 분리

문제: `check_node_messages_relayed_to_edge`가 setup부터 parsing/order assertion까지 한 함수에 둔다.

해결 방법: 함수 인자는 명시적 temp path/pid/port로 유지하고 global mutable state 추가 없이 단계 helper로 추출한다.

- [ ] message payload 동일성, complete ordering, message 2회 기준을 유지한다.
- 테스트 작성: skip. script 자체가 executable test다.
- 중간 검증: `bash -n scripts/e2e-smoke.sh && scripts/e2e-smoke.sh`

### [REFACTOR_E2E-2] Long-context preflight 분리

문제: `run_preflight`가 binary/tool/config/port/capacity 검사를 함께 소유한다.

해결 방법: 가용성, config 생성 전제, port/process 전제를 단계 함수로 나누고 실패 메시지를 보존한다.

- [ ] preflight failure가 본 실행으로 넘어가지 않게 한다.
- 테스트 작성: skip. 정상 smoke와 의도적 missing-tool 검증을 실제 명령으로 기록한다.
- 중간 검증: `bash -n scripts/e2e-long-context-admission-smoke.sh`

### [REFACTOR_E2E-3] Make target와 cleanup 회귀

문제: helper 추출이 trap/pid cleanup이나 Make target exit propagation을 깨뜨릴 수 있다.

해결 방법: 개별 script와 Make target을 실행하고 종료 후 임시 process/port 잔존을 확인한다.

- [ ] 실패 path도 cleanup 되는지 검증한다.
- 테스트 작성: skip.
- 중간 검증: `make test-e2e`

## 최종 검증

```bash
bash -n scripts/e2e-smoke.sh scripts/e2e-long-context-admission-smoke.sh
scripts/e2e-smoke.sh
make test-e2e
GOCACHE=/tmp/iop-go-cache go test -count=1 ./...
make readability-audit
git diff --check
```

모두 종료 코드 0이고 scenario/판정 완화가 없어야 한다.

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